<?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>8934</bug_id>
          
          <creation_ts>2006-05-15 22:03:09 -0700</creation_ts>
          <short_desc>Split css_valueimpl.* and css_ruleimpl.* into separate files</short_desc>
          <delta_ts>2006-05-16 00:46:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42438</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 22:03:09 -0700</bug_when>
    <thetext>Reign terror upon all that which is CSS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42439</commentid>
    <comment_count>1</comment_count>
      <attachid>8341</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 22:05:47 -0700</bug_when>
    <thetext>Created attachment 8341
do the splits! (ignoring whitespace changes, excluding deleted files)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42440</commentid>
    <comment_count>2</comment_count>
      <attachid>8341</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-15 22:07:35 -0700</bug_when>
    <thetext>Comment on attachment 8341
do the splits! (ignoring whitespace changes, excluding deleted files)

r=me. run the layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42441</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-15 22:07:49 -0700</bug_when>
    <thetext>This might be easier to go over in person using filemerge.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8341</attachid>
            <date>2006-05-15 22:05:47 -0700</date>
            <delta_ts>2006-05-15 22:07:35 -0700</delta_ts>
            <desc>do the splits! (ignoring whitespace changes, excluding deleted files)</desc>
            <filename>split.patch</filename>
            <type>text/plain</type>
            <size>950160</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL0RlcHJlY2F0ZWRWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9EZXByZWNhdGVkVmFsdWVMaXN0LmgJKHJldmlzaW9uIDE0NDA2KQorKysgcGxhdGZvcm0v
RGVwcmVjYXRlZFZhbHVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDQgQEAK
ICAgICByZXR1cm4gYS5pbXBsLmlzRXF1YWwoYi5pbXBsLCBEZXByZWNhdGVkVmFsdWVMaXN0PFQ+
Ojpub2Rlc0VxdWFsKTsKIH0KIAotI2RlZmluZSBRM1ZhbHVlTGlzdCBEZXByZWNhdGVkVmFsdWVM
aXN0Ci0jZGVmaW5lIFEzVmFsdWVMaXN0SXRlcmF0b3IgRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJh
dG9yCi0jZGVmaW5lIFEzVmFsdWVMaXN0Q29uc3RJdGVyYXRvciBEZXByZWNhdGVkVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcgotCiAjZW5kaWYKSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCShyZXZpc2lvbiAxNDQwNikKKysrIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsMjAgKzE0Niw3IEBACiAgICMgV2hlbiB3ZSdyZSBm
aW5pc2hlZCB3aXRoIHRoZSBvbmUtZmlsZS1wZXItY2xhc3MgCiAgICMgcmVvcmdhbml6YXRpb24s
IHdlIGRvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KICAgCi0gIGlmICgkdHlwZSBlcSAi
Q1NTUnVsZUxpc3QiIG9yCi0gICAgICAgICAgICR0eXBlIGVxICJDU1NSdWxlIikgewotICAgICRp
bXBsSW5jbHVkZXN7ImNzc19ydWxlaW1wbC5oIn0gPSAxOwotICB9IGVsc2lmICgkdHlwZSBlcSAi
Q1NTUHJpbWl0aXZlVmFsdWUiIG9yIAotICAgICAgICAgICAkdHlwZSBlcSAiQ1NTVmFsdWUiIG9y
Ci0gICAgICAgICAgICR0eXBlIGVxICJDb3VudGVyIiBvciAKLSAgICAgICAgICAgJHR5cGUgZXEg
IlJlY3QiIG9yIAotICAgICAgICAgICAkdHlwZSBlcSAiUkdCQ29sb3IiKSB7Ci0gICAgJGltcGxJ
bmNsdWRlc3siY3NzX3ZhbHVlaW1wbC5oIn0gPSAxOwotICB9IGVsc2lmICgkdHlwZSBlcSAiQ1NT
U3R5bGVEZWNsYXJhdGlvbiIpIHsKLSAgICAkaW1wbEluY2x1ZGVzeyJjc3NfdmFsdWVpbXBsLmgi
fSA9IDE7Ci0gIH0gZWxzaWYgKCR0eXBlIGVxICJIVE1MRG9jdW1lbnQiKSB7Ci0gICAgJGltcGxJ
bmNsdWRlc3siSFRNTERvY3VtZW50LmgifSA9IDE7Ci0gIH0gZWxzaWYgKCR0eXBlIGVxICJNdXRh
dGlvbkV2ZW50IiBvcgorICBpZiAoJHR5cGUgZXEgIk11dGF0aW9uRXZlbnQiIG9yCiAgICAgICAg
ICAgICR0eXBlIGVxICJLZXlib2FyZEV2ZW50IiBvcgogICAgICAgICAgICAkdHlwZSBlcSAiTW91
c2VFdmVudCIgb3IKICAgICAgICAgICAgJHR5cGUgZXEgIkV2ZW50IiBvcgpAQCAtMTc5LDcgKzE2
Niw3IEBACiAgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzR3JhZGllbnQuaCJ9ID0gMTsKICAgICAk
aW1wbEluY2x1ZGVzeyJQbGF0Zm9ybVN0cmluZy5oIn0gPSAxOwogICB9IGVsc2lmICgkY29kZUdl
bmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvcgotICAgICAgICAgICAkdHlwZSBlcSAi
RE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IikgeworICAgICAgICAgICAkdHlwZSBl
cSAiRE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAiUkdCQ29s
b3IiIG9yICR0eXBlIGVxICJSZWN0IikgewogICB9IGVsc2UgewogICAgICMgZGVmYXVsdCwgaW5j
bHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCiAgICAgJGltcGxJbmNsdWRlc3siJHt0eXBlfS5oIn0g
PSAxOwpAQCAtOTgyLDcgKzk2OSw2IEBACiAgIH0gZWxzaWYgKCR0eXBlIGVxICJDU1NTdHlsZVNo
ZWV0IiBvciAkdHlwZSBlcSAiU3R5bGVTaGVldCIgb3IgJHR5cGUgZXEgIk1lZGlhTGlzdCIpIHsK
ICAgICAkaW1wbEluY2x1ZGVzeyJDU1NTdHlsZVNoZWV0LmgifSA9IDE7CiAgICAgJGltcGxJbmNs
dWRlc3siTWVkaWFMaXN0LmgifSA9IDE7Ci0gICAgJGltcGxJbmNsdWRlc3siY3NzX3J1bGVpbXBs
LmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3sia2pzX2Nzcy5oIn0gPSAxOwogICAgIHJldHVy
biAidG9KUyhleGVjLCAkdmFsdWUpIjsKICAgfSBlbHNpZiAoJHR5cGUgZXEgIlN0eWxlU2hlZXRM
aXN0IikgewpAQCAtOTkwLDEwICs5NzYsMTEgQEAKICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2Nz
cy5oIn0gPSAxOwogICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVlLCBpbXBsKSI7CiAgIH0g
ZWxzaWYgKCR0eXBlIGVxICJDU1NSdWxlTGlzdCIpIHsKLSAgICAkaW1wbEluY2x1ZGVzeyJjc3Nf
cnVsZWltcGwuaCJ9ID0gMTsKKyAgICAgJGltcGxJbmNsdWRlc3siQ1NTUnVsZUxpc3QuaCJ9ID0g
MTsKICAgICByZXR1cm4gInRvSlMoZXhlYywgJHZhbHVlKSI7ICAKICAgfSBlbHNpZiAoJHR5cGUg
ZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iIG9yICR0eXBlIGVxICJSZWN0IikgewotICAgICRpbXBs
SW5jbHVkZXN7ImNzc192YWx1ZWltcGwuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDU1NT
dHlsZURlY2xhcmF0aW9uLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siUmVjdEltcGwuaCJ9
ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyJranNfY3NzLmgifSA9IDE7CiAgICAgcmV0dXJuICJ0
b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2lmICgkdHlwZSBlcSAiUkdCQ29sb3IiKSB7CkBA
IC0xMDAzLDE0ICs5OTAsNiBAQAogICAgICRpbXBsSW5jbHVkZXN7Imtqc19kb20uaCJ9ID0gMTsK
ICAgICAkaW1wbEluY2x1ZGVzeyJIVE1MQ2FudmFzRWxlbWVudC5oIn0gPSAxOwogICAgIHJldHVy
biAidG9KUyhleGVjLCAkdmFsdWUpIjsKLSAgfSBlbHNpZiAoJHR5cGUgZXEgIkNhbnZhc0dyYWRp
ZW50IiBvciAKLSAgICAgICAgICAgJHR5cGUgZXEgIkNvdW50ZXIiIG9yIAotICAgICAgICAgICAk
dHlwZSBlcSAiUmFuZ2UiIG9yCi0gICAgICAgICAgICR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24i
IG9yCi0gICAgICAgICAgICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiIG9yCi0gICAgICAgICAg
ICR0eXBlIGVxICJYUGF0aFJlc3VsdCIpIHsKLSAgICAkaW1wbEluY2x1ZGVzeyJKUyR0eXBlLmgi
fSA9IDE7Ci0gICAgcmV0dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICB9IGVsc2lmICgkdHlw
ZSBlcSAiTm9kZUl0ZXJhdG9yIiBvcgogCSAgICR0eXBlIGVxICJUcmVlV2Fsa2VyIikgewogICAg
ICRpbXBsSW5jbHVkZXN7Imtqc190cmF2ZXJzYWwuaCJ9ID0gMTsKQEAgLTEwMjEsMTAgKzEwMDAs
OSBAQAogICB9IGVsc2lmICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewogICAgICRpbXBsSW5jbHVk
ZXN7IkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIn0gPSAxOwogICAgIHJldHVybiAi
dG9KUyhleGVjLCAkdmFsdWUpIjsKKyAgfSBlbHNlIHsKICAgICAkaW1wbEluY2x1ZGVzeyJKUyR0
eXBlLmgifSA9IDE7CiAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwotICB9IGVsc2Ug
ewotICAgIGRpZSAiRG9uJ3Qga25vdyBob3cgdG8gY29udmVydCBhIHZhbHVlIG9mIHR5cGUgJHR5
cGUgdG8gYSBKUyBWYWx1ZSI7CiAgIH0KICAgCiAgIGRpZSAoIiR2YWx1ZSAiIC4gJHNpZ25hdHVy
ZS0+dHlwZSk7CkluZGV4OiBiaW5kaW5ncy9qcy9ranNfY3NzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmlu
ZGluZ3MvanMva2pzX2Nzcy5oCShyZXZpc2lvbiAxNDQwNikKKysrIGJpbmRpbmdzL2pzL2tqc19j
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJranNfYmluZGluZy5oIgorI2luY2x1ZGUgIlJlY3RJbXBsLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDb3VudGVyOwpAQCAtMzcsNyArMzgsNiBAQAog
ICAgIGNsYXNzIENTU1ZhbHVlTGlzdDsKICAgICBjbGFzcyBKU0NTU1N0eWxlRGVjbGFyYXRpb247
CiAgICAgY2xhc3MgTWVkaWFMaXN0OwotICAgIGNsYXNzIFJlY3RJbXBsOwogICAgIGNsYXNzIFN0
eWxlU2hlZXQ7CiAgICAgY2xhc3MgU3R5bGVTaGVldExpc3Q7CiB9CkluZGV4OiBiaW5kaW5ncy9q
cy9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9ranNfZG9tLmNwcAkocmV2
aXNpb24gMTQ0MDYpCisrKyBiaW5kaW5ncy9qcy9ranNfZG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNyArNTUsNiBAQAogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ2FudmFzLmgiCi0jaW5jbHVkZSAiY3Nz
X3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAia2pz
X2Nzcy5oIgogI2luY2x1ZGUgImtqc19ldmVudHMuaCIKSW5kZXg6IGJpbmRpbmdzL2pzL2tqc19j
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwCShyZXZpc2lvbiAx
NDQwNikKKysrIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2
ICsyMywxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImtqc19jc3MuaCIKIAor
I2luY2x1ZGUgIkNTU0NoYXJzZXRSdWxlLmgiCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgi
CisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5oIgor
I2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUg
IkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCkBAIC0zMiw4ICs0MSw2IEBACiAjaW5j
bHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRl
ICJjc3NfYmFzZS5oIgotI2luY2x1ZGUgImNzc19ydWxlaW1wbC5oIgotI2luY2x1ZGUgImNzc192
YWx1ZWltcGwuaCIKICNpbmNsdWRlICJranNfZG9tLmgiCiAKICNpbmNsdWRlICJranNfY3NzLmx1
dC5oIgpJbmRleDogYmluZGluZ3MvanMva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRp
bmdzL2pzL2tqc19odG1sLmNwcAkocmV2aXNpb24gMTQ0MDYpCisrKyBiaW5kaW5ncy9qcy9ranNf
aHRtbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAKICNpbmNsdWRlICJOYW1l
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlRleHQuaCIK
LSNpbmNsdWRlICJjc3NfcnVsZWltcGwuaCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIK
ICNpbmNsdWRlICJranNfY3NzLmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgpJbmRleDogYmlu
ZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMva2pzX3dp
bmRvdy5jcHAJKHJldmlzaW9uIDE0NDA2KQorKysgYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJDYW52YXMu
aCIKICNpbmNsdWRlICJTY3JlZW4uaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiY3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgi
CiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJranNfY3NzLmgiCkluZGV4OiBi
aW5kaW5ncy9vYmpjL0RPTUNTUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTUNT
Uy5tbQkocmV2aXNpb24gMTQ0MDYpCisrKyBiaW5kaW5ncy9vYmpjL0RPTUNTUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNyArMjYsMTcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
RE9NQ1NTLmgiCiAKKyNpbXBvcnQgIkNTU0NoYXJzZXRSdWxlLmgiCisjaW1wb3J0ICJDU1NGb250
RmFjZVJ1bGUuaCIKKyNpbXBvcnQgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbXBvcnQgIkNTU01lZGlh
UnVsZS5oIgorI2ltcG9ydCAiQ1NTUGFnZVJ1bGUuaCIKKyNpbXBvcnQgIkNTU1J1bGUuaCIKKyNp
bXBvcnQgIkNTU1J1bGVMaXN0LmgiCisjaW1wb3J0ICJDU1NTdHlsZVJ1bGUuaCIKICNpbXBvcnQg
IkNTU1N0eWxlU2hlZXQuaCIKKyNpbXBvcnQgIkNTU1ZhbHVlTGlzdC5oIgorI2ltcG9ydCAiQ291
bnRlci5oIgogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVdpbmRvdy5oIgog
I2ltcG9ydCAiRG9jdW1lbnQuaCIKQEAgLTM1LDkgKzQ1LDEwIEBACiAjaW1wb3J0ICJIVE1MU3R5
bGVFbGVtZW50LmgiCiAjaW1wb3J0ICJNZWRpYUxpc3QuaCIKICNpbXBvcnQgIlByb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oIgorI2ltcG9ydCAiUmVjdEltcGwuaCIKICNpbXBvcnQgIlN0eWxlU2hlZXQu
aCIKICNpbXBvcnQgIlN0eWxlU2hlZXRMaXN0LmgiCi0jaW1wb3J0ICJjc3NfcnVsZWltcGwuaCIK
KwogI2ltcG9ydCA8b2JqYy9vYmpjLWNsYXNzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpJbmRleDogaHRtbC9IVE1MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVG9r
ZW5pemVyLmgJKHJldmlzaW9uIDE0NDA2KQorKysgaHRtbC9IVE1MVG9rZW5pemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgInhtbF90b2tlbml6ZXIuaCIKKyNpbmNsdWRl
ICJDYWNoZWRPYmplY3RDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBo
dG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMTQ0MDYpCisrKyBodG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJjc3NfcnVsZWltcGwu
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3
b3Jkcy5oIgogI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgpJbmRleDogaHRtbC9IVE1MQm9k
eUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAkocmV2
aXNpb24gMTQ0MDYpCisrKyBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MQm9k
eUVsZW1lbnQuaCIKIAotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIgLy8gZm9yIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKSW5kZXg6IGh0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHJldmlz
aW9uIDE0NDA2KQorKysgaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIEhUTUxTY3JpcHRFbGVtZW50X0gKIAogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAJKHJldmlzaW9uIDE0NDA2
KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
LDcgKzIxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Rmll
bGQuaCIKIAotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpJbmRleDogZG9t
L0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAx
NDQwNikKKysrIGRvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDYg
QEAKICNpbmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCiAj
aW5jbHVkZSAiY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgpJbmRleDogZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURl
Y2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0
aW9uLmgJKHJldmlzaW9uIDE0NDA2KQorKysgZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgQ1NTTWFwcGVk
QXR0cmlidXRlRGVjbGFyYXRpb25faAogI2RlZmluZSBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJh
dGlvbl9oCiAKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGVFbnRyeS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSw4ICszNSw5IEBACiBjbGFzcyBDU1NNYXBwZWRB
dHRyaWJ1dGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiB7
CiBwdWJsaWM6CiAgICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24oQ1NTUnVsZSAqcGFy
ZW50UnVsZSkKLSAgICA6IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKHBhcmVudFJ1bGUpLCBt
X2VudHJ5VHlwZShlTm9uZSksIG1fYXR0ck5hbWUoYW55UU5hbWUoKSkKLSAgICB7fQorICAgICAg
ICA6IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKHBhcmVudFJ1bGUpCisgICAgICAgICwgbV9l
bnRyeVR5cGUoZU5vbmUpCisgICAgICAgICwgbV9hdHRyTmFtZShhbnlRTmFtZSgpKSB7IH0KICAg
ICAKICAgICB2aXJ0dWFsIH5DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigpOwogCkluZGV4
OiBXZWJDb3JlK1NWRy9SR0JDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZStTVkcvUkdC
Q29sb3IuY3BwCShyZXZpc2lvbiAxNDQwNikKKysrIFdlYkNvcmUrU1ZHL1JHQkNvbG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsMTUgKzIzLDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJSR0JDb2xvci5oIgotI2luY2x1ZGUgImNzc192YWx1
ZWltcGwuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotUkdCQ29sb3I6OlJHQkNvbG9yKGNv
bnN0IFJHQkEzMiAmY29sb3IpIDogU2hhcmVkPFJHQkNvbG9yPigpLCBtX2NvbG9yKGNvbG9yKQor
UkdCQ29sb3I6OlJHQkNvbG9yKGNvbnN0IFJHQkEzMiAmY29sb3IpCisgICAgOiBTaGFyZWQ8UkdC
Q29sb3I+KCkKKyAgICAsIG1fY29sb3IoY29sb3IpCiB7CiB9CiAKLVJHQkNvbG9yOjpSR0JDb2xv
cihjb25zdCBDb2xvciAmY29sb3IpIDogU2hhcmVkPFJHQkNvbG9yPigpLCBtX2NvbG9yKGNvbG9y
KQorUkdCQ29sb3I6OlJHQkNvbG9yKGNvbnN0IENvbG9yICZjb2xvcikKKyAgICA6IFNoYXJlZDxS
R0JDb2xvcj4oKQorICAgICwgbV9jb2xvcihjb2xvcikKIHsKIH0KIApAQCAtNTQsNiArNTgsOCBA
QAogICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoZmxvYXQobV9jb2xvci5hbHBoYSgp
ID8gbV9jb2xvci5ibHVlKCkgOiAwKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT04p
OwogfQogCit9CisKIC8vIHZpbTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCklu
ZGV4OiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDQwNikKKysrIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTcyLDYgKzU3
Miw1MiBAQAogCQlBN0I5N0I4NTA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmls
dGVyLmNpa2VybmVsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0I5N0I3NDA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLmNp
a2VybmVsICovOyB9OwogCQlBN0I5N0I4NjA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5z
ZmVyRmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0I5N0I3NTA5NzlDM0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLmggKi87
IH07CiAJCUE3Qjk3Qjg3MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIu
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Qjk3Qjc2
MDk3OUMzQTEwMDBFOEVCMSAvKiBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIubSAqLzsgfTsKKwkJQTgw
RTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTVmFsdWVMaXN0LmNwcCAqLzsgfTsKKwkJQTgwRTZDRTUwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdl
VmFsdWUuY3BwICovOyB9OworCQlBODBFNkNFNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0
aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oICovOyB9Owor
CQlBODBFNkNFNzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZhY2VSdWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JEMEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NGb250RmFjZVJ1bGUuY3BwICovOyB9OworCQlBODBFNkNFODBBMTk4OUNB
MDA3RkI4QzUgLyogU2hhZG93VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5o
ICovOyB9OworCQlBODBFNkNFOTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNCRjBBMTk4
OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmggKi87IH07CisJCUE4MEU2Q0VBMEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNDMDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
UXVpcmtQcmltaXRpdmVWYWx1ZS5oICovOyB9OworCQlBODBFNkNFQjBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTSW1wb3J0UnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODBFNkNDMTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTSW1wb3J0UnVsZS5jcHAg
Ki87IH07CisJCUE4MEU2Q0VDMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250RmFtaWx5VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQzIw
QTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRGYW1pbHlWYWx1ZS5jcHAgKi87IH07CisJCUE4MEU2Q0VE
MEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0MzMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFs
dWUuaCAqLzsgfTsKKwkJQTgwRTZDRUUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1ZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNDNDBBMTk4
OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWUuaCAqLzsgfTsKKwkJQTgwRTZDRUYwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU1N0eWxlUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODBFNkNDNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmNw
cCAqLzsgfTsKKwkJQTgwRTZDRjAwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0luaGVyaXRlZFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2
Q0M2MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbmhlcml0ZWRWYWx1ZS5jcHAgKi87IH07CisJCUE4
MEU2Q0YxMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQzcwQTE5ODlDQTAwN0ZCOEM1IC8q
IEZvbnRWYWx1ZS5jcHAgKi87IH07CisJCUE4MEU2Q0YyMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NS
dWxlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgwRTZDQzgwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGVMaXN0LmggKi87IH07CisJCUE4MEU2
Q0YzMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250RmFtaWx5VmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0M5MEExOTg5Q0EwMDdGQjhDNSAv
KiBGb250RmFtaWx5VmFsdWUuaCAqLzsgfTsKKwkJQTgwRTZDRjQwQTE5ODlDQTAwN0ZCOEM1IC8q
IFNoYWRvd1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4MEU2Q0NBMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5jcHAgKi87IH07
CisJCUE4MEU2Q0Y1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNDQjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUGFnZVJ1bGUuY3BwICovOyB9OworCQlBODBFNkNGNjBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTSW1wb3J0UnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgwRTZDQ0MwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ltcG9ydFJ1bGUuaCAq
LzsgfTsKKwkJQTgwRTZDRjcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0NEMEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NQcm9wZXJ0eS5jcHAgKi87IH07CisJCUE4MEU2Q0Y4MEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NVbmtub3duUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQ0UwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Vua25vd25S
dWxlLmggKi87IH07CisJCUE4MEU2Q0Y5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NDaGFyc2V0UnVs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZD
Q0YwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0NoYXJzZXRSdWxlLmggKi87IH07CisJCUE4MEU2Q0ZB
MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNEMDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
SW1hZ2VWYWx1ZS5oICovOyB9OworCQlBODBFNkNGQjBBMTk4OUNBMDA3RkI4QzUgLyogUGFpci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDRDEw
QTE5ODlDQTAwN0ZCOEM1IC8qIFBhaXIuaCAqLzsgfTsKKwkJQTgwRTZDRkMwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU01lZGlhUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODBFNkNEMjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTTWVkaWFSdWxlLmNw
cCAqLzsgfTsKKwkJQTgwRTZDRkQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDRDMw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVsZS5oICovOyB9OworCQlBODBFNkNGRTBB
MTk4OUNBMDA3RkI4QzUgLyogQ1NTSW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNENDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
SW1hZ2VWYWx1ZS5jcHAgKi87IH07CisJCUE4MEU2Q0ZGMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQ
cm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgwRTZDRDUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmggKi87IH07CisJCUE4MEU2
RDAwMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDRDYwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1BhZ2VSdWxlLmggKi87IH07CisJCUE4MEU2RDAxMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbmhl
cml0ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgwRTZDRDcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0luaGVyaXRlZFZhbHVlLmggKi87IH07
CisJCUE4MEU2RDAyMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbml0aWFsVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDRDgwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0luaXRpYWxWYWx1ZS5jcHAgKi87IH07CisJCUE4MEU2RDAzMEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NNZWRpYVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0Q5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NNZWRpYVJ1
bGUuaCAqLzsgfTsKKwkJQTgwRTZEMDQwQTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0RBMEExOTg5
Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggKi87IH07CisJCUE4MEU2RDA1MEExOTg5Q0EwMDdGQjhD
NSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNEQjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJpbWl0aXZl
VmFsdWUuY3BwICovOyB9OworCQlBODBFNkQwNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNE
QzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZS5jcHAgKi87IH07CisJCUE4MEU2RDA3MEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNERDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
Qm9yZGVySW1hZ2VWYWx1ZS5oICovOyB9OworCQlBODBFNkQwODBBMTk4OUNBMDA3RkI4QzUgLyog
Q1NTSW5pdGlhbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODBFNkNERTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTSW5pdGlhbFZhbHVlLmggKi87
IH07CisJCUE4MEU2RDA5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlTGlzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNERjBBMTk4OUNB
MDA3RkI4QzUgLyogQ1NTUnVsZUxpc3QuY3BwICovOyB9OworCQlBODBFNkQwQTBBMTk4OUNBMDA3
RkI4QzUgLyogUmVjdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4MEU2Q0UwMEExOTg5Q0EwMDdGQjhDNSAvKiBSZWN0SW1wbC5oICovOyB9Owor
CQlBODBFNkQwQjBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNFMTBBMTk4OUNBMDA3
RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggKi87IH07CisJCUE4MEU2RDBDMEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NTdHlsZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4MEU2Q0UyMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuaCAq
LzsgfTsKKwkJQTgwRTZEMEQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0UzMEExOTg5Q0EwMDdG
QjhDNSAvKiBDU1NSdWxlLmggKi87IH07CisJCUE4MEU2REZCMEExOTkwNjcwMDdGQjhDNSAvKiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkRGOTBBMTk5MDY3MDA3RkI4QzUgLyogQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwICovOyB9OworCQlBODBFNkRGQzBBMTk5MDY3MDA3RkI4QzUg
LyogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2REZBMEExOTkwNjcwMDdGQjhDNSAvKiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5oICovOyB9OworCQlBODBFNkUwRjBBMTk5MTFDMDA3RkI4QzUg
LyogQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgwRTZFMEQwQTE5OTExQzAwN0ZCOEM1IC8qIENTU1N0eWxlRGVjbGFy
YXRpb24uaCAqLzsgfTsKKwkJQTgwRTZFMTAwQTE5OTExQzAwN0ZCOEM1IC8qIENTU1N0eWxlRGVj
bGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgwRTZFMEUwQTE5OTExQzAwN0ZCOEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uY3BwICov
OyB9OwogCQlBODEzNjlDQTA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTElzSW5kZXhFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlBRTA5
NzM3NEY1MDBENzQ0NjMgLyogSFRNTElzSW5kZXhFbGVtZW50LmggKi87IH07CiAJCUE4MTM2OUNC
MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MSXNJbmRleEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxMzY5QUYwOTczNzRGNTAwRDc0NDYz
IC8qIEhUTUxJc0luZGV4RWxlbWVudC5jcHAgKi87IH07CiAJCUE4MTM2OUNDMDk3Mzc0RjYwMEQ3
NDQ2MyAvKiBIVE1MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlCMDA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTElucHV0RWxl
bWVudC5oICovOyB9OwpAQCAtMTI2MiwxMCArMTMwOCw2IEBACiAJCUJDRUE0NzhFMDk3Q0FBQzgw
MDk0QzlFNCAvKiBjc3NfYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNFQTQ3N0IwOTdDQUFDODAwOTRDOUU0IC8qIGNzc19iYXNlLmggKi87IH07
CiAJCUJDRUE0NzhGMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
QTQ3N0MwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAg
Ki87IH07CiAJCUJDRUE0NzkwMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRUE0NzdEMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aCAqLzsgfTsKLQkJQkNFQTQ3OTIwOTdDQUFDODAwOTRDOUU0IC8qIGNzc19ydWxlaW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDc3RjA5
N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmNwcCAqLzsgfTsKLQkJQkNFQTQ3OTMwOTdD
QUFDODAwOTRDOUU0IC8qIGNzc19ydWxlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ3ODAwOTdDQUFDODAwOTRDOUU0IC8qIGNzc19ydWxl
aW1wbC5oICovOyB9OwotCQlCQ0VBNDc5NjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3ZhbHVlaW1w
bC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VB
NDc4MzA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3ZhbHVlaW1wbC5jcHAgKi87IH07Ci0JCUJDRUE0
Nzk3MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NfdmFsdWVpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDc4NDA5N0NBQUM4MDA5NEM5RTQgLyog
Y3NzX3ZhbHVlaW1wbC5oICovOyB9OwogCQlCQ0VBNDc5ODA5N0NBQUM4MDA5NEM5RTQgLyogY3Nz
aGVscGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRUE0Nzg1MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NoZWxwZXIuY3BwICovOyB9OwogCQlCQ0VB
NDc5QTA5N0NBQUM4MDA5NEM5RTQgLyogY3NzcGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0Nzg3MDk3Q0FBQzgwMDk0QzlFNCAvKiBj
c3NwYXJzZXIuY3BwICovOyB9OwogCQlCQ0VBNDc5QjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzcGFy
c2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VB
NDc4ODA5N0NBQUM4MDA5NEM5RTQgLyogY3NzcGFyc2VyLmggKi87IH07CkBAIC0xOTI2LDYgKzE5
NjgsNTIgQEAKIAkJQTdCOTdCNzQwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2ZlckZp
bHRlci5jaWtlcm5lbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV0tUYWJsZVRyYW5zZmVyRmls
dGVyLmNpa2VybmVsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I5N0I3NTA5NzlD
M0ExMDAwRThFQjEgLyogV0tUYWJsZVRyYW5zZmVyRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS1RhYmxlVHJhbnNmZXJGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdCOTdCNzYwOTc5QzNBMTAwMEU4RUIxIC8qIFdLVGFibGVUcmFuc2Zl
ckZpbHRlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV0tUYWJsZVRy
YW5zZmVyRmlsdGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0JBMEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU1ZhbHVlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE4MEU2Q0JCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZDQkMwQTE5ODlDQTAw
N0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDU1NQcmltaXRpdmVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBODBFNkNCRDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZhY2VSdWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250RmFjZVJ1bGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODBFNkNCRTBBMTk4OUNBMDA3RkI4QzUgLyogU2hh
ZG93VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0JGMEExOTg5Q0EwMDdGQjhD
NSAvKiBDU1NWYWx1ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U1ZhbHVlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODBFNkNDMDBBMTk4
OUNBMDA3RkI4QzUgLyogQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBODBFNkNDMTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTSW1wb3J0UnVs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTSW1wb3J0UnVs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0MyMEExOTg5Q0EwMDdG
QjhDNSAvKiBGb250RmFtaWx5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvbnRGYW1pbHlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE4MEU2Q0MzMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBODBFNkNDNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4MEU2Q0M1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NTdHlsZVJ1bGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1N0eWxlUnVsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0M2MEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NJbmhlcml0ZWRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ1NTSW5oZXJpdGVkVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
ODBFNkNDNzBBMTk4OUNBMDA3RkI4QzUgLyogRm9udFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBODBFNkNDODBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1J1bGVMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0M5MEExOTg5Q0EwMDdGQjhDNSAvKiBGb250RmFtaWx5
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYW1pbHlWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4
QzUgLyogU2hhZG93VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNoYWRvd1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZD
Q0IwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQYWdlUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4MEU2Q0NDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbXBvcnRSdWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NJbXBvcnRSdWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0NEMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcm9w
ZXJ0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVy
dHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODBFNkNDRTBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTVW5rbm93blJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU1Vua25vd25SdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2
Q0NGMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NDaGFyc2V0UnVsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2hhcnNldFJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTgwRTZDRDAwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ltYWdlVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ltYWdlVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZDRDEwQTE5ODlDQTAwN0ZCOEM1IC8qIFBhaXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTgwRTZDRDIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU01lZGlhUnVsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTTWVkaWFSdWxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZDRDMwQTE5ODlDQTAwN0ZCOEM1
IC8qIENTU0ZvbnRGYWNlUnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTRm9udEZhY2VSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0Q0
MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NJbWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTgwRTZDRDUwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBODBFNkNENjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUGFnZVJ1
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1BhZ2VSdWxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0Q3MEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NJbmhlcml0ZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
SW5oZXJpdGVkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZDRDgw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0luaXRpYWxWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTSW5pdGlhbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTgwRTZDRDkwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU01lZGlhUnVsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTTWVkaWFSdWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0RBMEExOTg5Q0EwMDdGQjhDNSAvKiBDb3Vu
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3VudGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0RCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQ
cmltaXRpdmVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODBF
NkNEQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ1NTUnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE4MEU2Q0REMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVZhbHVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0RFMEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NJbml0aWFsVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0lu
aXRpYWxWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODBFNkNERjBBMTk4
OUNBMDA3RkI4QzUgLyogQ1NTUnVsZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENTU1J1bGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTgwRTZDRTAwQTE5ODlDQTAwN0ZCOEM1IC8qIFJlY3RJbXBsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWN0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBODBFNkNFMTBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXNoYm9hcmRSZWdpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZDRTIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1N0eWxl
UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU3R5bGVSdWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2Q0UzMEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NSdWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2REY5MEExOTkwNjcwMDdGQjhDNSAv
KiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBODBFNkRGQTBBMTk5MDY3MDA3RkI4QzUgLyogQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE4MEU2RTBEMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4MEU2RTBFMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NT
dHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTgxMEUzOTMwOEE0MTYwRjAwMzMzRDk4IC8qIEtDYW52YXNUcmVlRGVidWcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHJlZURlYnVn
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlBODEwRTM5NDA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52
YXNUcmVlRGVidWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJQTgxMjJDN0UwOEQ1NjRCMDAwODQ0RkEzIC8qIEdldFNWR0RvY3Vt
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdldFNWR0Rv
Y3VtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CkBAIC0yNzU4LDEwICsyODQ2LDYgQEAKIAkJQkNFQTQ3N0MwOTdDQUFDODAwOTRD
OUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0QwOTdDQUFDODAwOTRDOUU0IC8qIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRUE0NzdFMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NHcmFtbWFyLnkgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS55YWNjOyBwYXRoID0gQ1NTR3JhbW1hci55OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCQ0VBNDc3RjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjc3NfcnVsZWltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0VBNDc4MDA5N0NBQUM4MDA5NEM5
RTQgLyogY3NzX3J1bGVpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBj
c3NfcnVsZWltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFQTQ3ODMwOTdD
QUFDODAwOTRDOUU0IC8qIGNzc192YWx1ZWltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IGNzc192YWx1ZWltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCQ0VBNDc4NDA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3ZhbHVlaW1wbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY3NzX3ZhbHVlaW1wbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0VBNDc4NTA5N0NBQUM4MDA5NEM5RTQgLyogY3NzaGVscGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBjc3NoZWxwZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VBNDc4NjA5N0NBQUM4MDA5NEM5RTQg
LyogY3NzaGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjc3NoZWxw
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3ODcwOTdDQUFDODAwOTRD
OUU0IC8qIGNzc3BhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gY3NzcGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1MDUsMzAg
KzQ1ODksNjggQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTgwRTZDREEwQTE5ODlDQTAw
N0ZCOEM1IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyog
Q291bnRlci5pZGwgKi8sCiAJCQkJQkNFQTQ3N0EwOTdDQUFDODAwOTRDOUU0IC8qIGNzc19iYXNl
LmNwcCAqLywKIAkJCQlCQ0VBNDc3QjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX2Jhc2UuaCAqLywK
LQkJCQlCQ0VBNDc3RjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmNwcCAqLywKLQkJ
CQlCQ0VBNDc4MDA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmggKi8sCi0JCQkJQkNF
QTQ3ODMwOTdDQUFDODAwOTRDOUU0IC8qIGNzc192YWx1ZWltcGwuY3BwICovLAotCQkJCUJDRUE0
Nzg0MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NfdmFsdWVpbXBsLmggKi8sCisJCQkJQTgwRTZDQkIw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovLAorCQkJCUE4MEU2
Q0REMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmggKi8sCisJCQkJQTgw
RTZDQ0YwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0NoYXJzZXRSdWxlLmggKi8sCiAJCQkJQkNFQTQ3
N0MwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8s
CiAJCQkJQkNFQTQ3N0QwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5oICovLAorCQkJCUE4MEU2Q0JEMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NGb250RmFjZVJ1
bGUuY3BwICovLAorCQkJCUE4MEU2Q0QzMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NGb250RmFjZVJ1
bGUuaCAqLywKIAkJCQlCQ0VBNDc3RTA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTR3JhbW1hci55ICov
LAogCQkJCUJDRUE0Nzg1MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NoZWxwZXIuY3BwICovLAogCQkJ
CUJDRUE0Nzg2MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NoZWxwZXIuaCAqLywKKwkJCQlBODBFNkNE
NDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTSW1hZ2VWYWx1ZS5jcHAgKi8sCisJCQkJQTgwRTZDRDAw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ltYWdlVmFsdWUuaCAqLywKKwkJCQlBODBFNkNDMTBBMTk4
OUNBMDA3RkI4QzUgLyogQ1NTSW1wb3J0UnVsZS5jcHAgKi8sCisJCQkJQTgwRTZDQ0MwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU0ltcG9ydFJ1bGUuaCAqLywKKwkJCQlBODBFNkNDNjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTSW5oZXJpdGVkVmFsdWUuY3BwICovLAorCQkJCUE4MEU2Q0Q3MEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NJbmhlcml0ZWRWYWx1ZS5oICovLAorCQkJCUE4MEU2Q0Q4MEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NJbml0aWFsVmFsdWUuY3BwICovLAorCQkJCUE4MEU2Q0RFMEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NJbml0aWFsVmFsdWUuaCAqLywKKwkJCQlBODBFNkNEMjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTTWVkaWFSdWxlLmNwcCAqLywKKwkJCQlBODBFNkNEOTBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTTWVkaWFSdWxlLmggKi8sCisJCQkJQTgwRTZERjkwQTE5OTA2NzAwN0ZCOEM1IC8q
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcCAqLywKKwkJCQlBODBFNkRGQTBBMTk5MDY3
MDA3RkI4QzUgLyogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCAqLywKKwkJCQlBODBFNkND
QjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUGFnZVJ1bGUuY3BwICovLAorCQkJCUE4MEU2Q0Q2MEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVsZS5oICovLAogCQkJCUJDRUE0Nzg3MDk3Q0FBQzgw
MDk0QzlFNCAvKiBjc3NwYXJzZXIuY3BwICovLAogCQkJCUJDRUE0Nzg4MDk3Q0FBQzgwMDk0QzlF
NCAvKiBjc3NwYXJzZXIuaCAqLywKKwkJCQlBODBFNkNEQjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwICovLAorCQkJCUE4MEU2Q0JDMEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NQcmltaXRpdmVWYWx1ZS5oICovLAogCQkJCTkzMDcwNTkwMDlFMEM3NTgwMEIxN0ZFNCAvKiBD
U1NQcmltaXRpdmVWYWx1ZS5pZGwgKi8sCisJCQkJQTgwRTZDQ0QwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU1Byb3BlcnR5LmNwcCAqLywKKwkJCQlBODBFNkNENTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
UHJvcGVydHkuaCAqLywKIAkJCQlCQ0VBNDc4OTA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTUHJvcGVy
dHlOYW1lcy5pbiAqLywKKwkJCQlBODBFNkNDMDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUXVpcmtQ
cmltaXRpdmVWYWx1ZS5oICovLAorCQkJCUE4MEU2Q0RDMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NS
dWxlLmNwcCAqLywKKwkJCQlBODBFNkNFMzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZS5oICov
LAogCQkJCTE0Q0Y3QTcwMDlGNUNGOUEwMEVCMzY2NSAvKiBDU1NSdWxlLmlkbCAqLywKKwkJCQlB
ODBFNkNERjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZUxpc3QuY3BwICovLAorCQkJCUE4MEU2
Q0M4MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NSdWxlTGlzdC5oICovLAorCQkJCUE4MEU2RTBFMEEx
OTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLywKKwkJCQlBODBFNkUw
RDBBMTk5MTFDMDA3RkI4QzUgLyogQ1NTU3R5bGVEZWNsYXJhdGlvbi5oICovLAogCQkJCTE0MjAx
MUFFMEEwMDMxMTcwMDgzMDNGOSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmlkbCAqLywKKwkJCQlB
ODBFNkNDNTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmNwcCAqLywKKwkJCQlBODBF
NkNFMjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmggKi8sCiAJCQkJQkNFQTQ3OEEw
OTdDQUFDODAwOTRDOUU0IC8qIGNzc3N0eWxlc2VsZWN0b3IuY3BwICovLAogCQkJCUJDRUE0NzhC
MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NzdHlsZXNlbGVjdG9yLmggKi8sCiAJCQkJQThFQTgwMDAw
QTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQuY3BwICovLAogCQkJCUE4RUE3RkZGMEEx
OTUxNkUwMEE4RUY1RiAvKiBDU1NTdHlsZVNoZWV0LmggKi8sCisJCQkJQTgwRTZDQ0UwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1Vua25vd25SdWxlLmggKi8sCisJCQkJQTgwRTZDQzQwQTE5ODlDQTAw
N0ZCOEM1IC8qIENTU1ZhbHVlLmggKi8sCiAJCQkJMTRDRjc4NzEwOUY1ODdDQTAwRUIzNjY1IC8q
IENTU1ZhbHVlLmlkbCAqLywKIAkJCQlCQ0VBNDc4QzA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTVmFs
dWVLZXl3b3Jkcy5pbiAqLywKKwkJCQlBODBFNkNCQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFs
dWVMaXN0LmNwcCAqLywKKwkJCQlBODBFNkNCRjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVM
aXN0LmggKi8sCisJCQkJQTgwRTZDRTEwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2FyZFJlZ2lv
bi5oICovLAorCQkJCUE4MEU2Q0MyMEExOTg5Q0EwMDdGQjhDNSAvKiBGb250RmFtaWx5VmFsdWUu
Y3BwICovLAorCQkJCUE4MEU2Q0M5MEExOTg5Q0EwMDdGQjhDNSAvKiBGb250RmFtaWx5VmFsdWUu
aCAqLywKKwkJCQlBODBFNkNDNzBBMTk4OUNBMDA3RkI4QzUgLyogRm9udFZhbHVlLmNwcCAqLywK
KwkJCQlBODBFNkNDMzBBMTk4OUNBMDA3RkI4QzUgLyogRm9udFZhbHVlLmggKi8sCiAJCQkJOTND
QTRDOTkwOURGOTNGQTAwREY4Njc3IC8qIGh0bWw0LmNzcyAqLywKIAkJCQk5M0NBNEM5QTA5REY5
M0ZBMDBERjg2NzcgLyogbWFrZS1jc3MtZmlsZS1hcnJheXMucGwgKi8sCiAJCQkJOTNDQTRDOUIw
OURGOTNGQTAwREY4Njc3IC8qIG1ha2Vwcm9wICovLApAQCAtNDUzNiw3ICs0NjU4LDExIEBACiAJ
CQkJOTNDQTRDOUQwOURGOTNGQTAwREY4Njc3IC8qIG1ha2V2YWx1ZXMgKi8sCiAJCQkJQThFQTgw
MDEwQTE5NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5jcHAgKi8sCiAJCQkJQThFQTgwMDYwQTE5
NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5oICovLAorCQkJCUE4MEU2Q0QxMEExOTg5Q0EwMDdG
QjhDNSAvKiBQYWlyLmggKi8sCiAJCQkJOTNDQTRDOUYwOURGOTNGQTAwREY4Njc3IC8qIHF1aXJr
cy5jc3MgKi8sCisJCQkJQTgwRTZDRTAwQTE5ODlDQTAwN0ZCOEM1IC8qIFJlY3RJbXBsLmggKi8s
CisJCQkJQTgwRTZDQ0EwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmNwcCAqLywKKwkJ
CQlBODBFNkNCRTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUuaCAqLywKIAkJCQlBOEVB
ODAwNTBBMTk1MTZFMDBBOEVGNUYgLyogU3R5bGVTaGVldC5jcHAgKi8sCiAJCQkJQThFQTgwMDQw
QTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXQuaCAqLywKIAkJCQlBOEVBODAwMzBBMTk1MTZF
MDBBOEVGNUYgLyogU3R5bGVTaGVldExpc3QuY3BwICovLApAQCAtNTE1Nyw4ICs1MjgzLDYgQEAK
IAkJCQlCQzFBMzdDMjA5N0M3MTVGMDAxOUYzRDggLyogRE9NVmlld3NJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFQTQ3OEUwOTdDQUFDODAwOTRDOUU0IC8qIGNzc19iYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDc5MDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0VBNDc5MzA5N0NBQUM4MDA5
NEM5RTQgLyogY3NzX3J1bGVpbXBsLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQ0VBNDc5NzA5N0NB
QUM4MDA5NEM5RTQgLyogY3NzX3ZhbHVlaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ3
OUIwOTdDQUFDODAwOTRDOUU0IC8qIGNzc3BhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
QTQ3OUUwOTdDQUFDODAwOTRDOUU0IC8qIGNzc3N0eWxlc2VsZWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUE0ODUzMDk3RDkzMDIwMDk0QzlFNCAvKiBiaWRpLmggaW4gSGVhZGVycyAqLywK
QEAgLTU1MDYsNiArNTYzMCwzMyBAQAogCQkJCUE4RUE4MDBBMEExOTUxNkUwMEE4RUY1RiAvKiBT
dHlsZVNoZWV0TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTgwMEMwQTE5NTE2RTAwQThF
RjVGIC8qIFN0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE4MDBFMEExOTUxNkUw
MEE4RUY1RiAvKiBNZWRpYUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4MEU2Q0U2MEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgw
RTZDRTgwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBODBFNkNFOTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQlBODBFNkNFQTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUXVpcmtQcmltaXRpdmVWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgwRTZDRUQwQTE5ODlDQTAwN0ZCOEM1IC8qIEZvbnRW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgwRTZDRUUwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1ZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODBFNkNGMjBBMTk4OUNBMDA3RkI4QzUgLyog
Q1NTUnVsZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4MEU2Q0YzMEExOTg5Q0EwMDdGQjhD
NSAvKiBGb250RmFtaWx5VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4MEU2Q0Y2MEExOTg5
Q0EwMDdGQjhDNSAvKiBDU1NJbXBvcnRSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODBFNkNG
ODBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVW5rbm93blJ1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUE4MEU2Q0Y5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NDaGFyc2V0UnVsZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTgwRTZDRkEwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ltYWdlVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUE4MEU2Q0ZCMEExOTg5Q0EwMDdGQjhDNSAvKiBQYWlyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBODBFNkNGRDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTRm9udEZhY2VSdWxl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBODBFNkNGRjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJv
cGVydHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4MEU2RDAwMEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NQYWdlUnVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgwRTZEMDEwQTE5ODlDQTAwN0ZCOEM1
IC8qIENTU0luaGVyaXRlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODBFNkQwMzBBMTk4
OUNBMDA3RkI4QzUgLyogQ1NTTWVkaWFSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODBFNkQw
NDBBMTk4OUNBMDA3RkI4QzUgLyogQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgwRTZE
MDcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICov
LAorCQkJCUE4MEU2RDA4MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NJbml0aWFsVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUE4MEU2RDBBMEExOTg5Q0EwMDdGQjhDNSAvKiBSZWN0SW1wbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTgwRTZEMEIwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2FyZFJl
Z2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgwRTZEMEMwQTE5ODlDQTAwN0ZCOEM1IC8qIENT
U1N0eWxlUnVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgwRTZEMEQwQTE5ODlDQTAwN0ZCOEM1
IC8qIENTU1J1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4MEU2REZDMEExOTkwNjcwMDdGQjhD
NSAvKiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTgw
RTZFMEYwQTE5OTExQzAwN0ZCOEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNTk5MCw4ICs2MTQxLDYgQEAKIAkJCQlCQzFBMzdDMTA5N0M3MTVGMDAxOUYzRDgg
LyogRE9NVmlld3MubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDc4RDA5N0NBQUM4MDA5NEM5
RTQgLyogY3NzX2Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ3OEYwOTdDQUFDODAw
OTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCQ0VBNDc5MjA5N0NBQUM4MDA5NEM5RTQgLyogY3NzX3J1bGVpbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUJDRUE0Nzk2MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NfdmFsdWVpbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0Nzk4MDk3Q0FBQzgwMDk0QzlFNCAvKiBjc3NoZWxw
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ3OUEwOTdDQUFDODAwOTRDOUU0IC8qIGNz
c3BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDc5RDA5N0NBQUM4MDA5NEM5RTQg
LyogY3Nzc3R5bGVzZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTYzMTYsNiArNjQ2NSwy
NSBAQAogCQkJCUE4RUE4MDA5MEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThFQTgwMEIwQTE5NTE2RTAwQThFRjVGIC8qIFN0eWxlU2hlZXRMaXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE4MDBEMEExOTUxNkUwMEE4RUY1RiAvKiBTdHls
ZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4MEU2Q0U0MEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NWYWx1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTgwRTZDRTUwQTE5ODlDQTAw
N0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTgw
RTZDRTcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRGYWNlUnVsZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBODBFNkNFQjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTSW1wb3J0UnVsZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBODBFNkNFQzBBMTk4OUNBMDA3RkI4QzUgLyogRm9udEZhbWlseVZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4MEU2Q0VGMEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NTdHlsZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTgwRTZDRjAwQTE5ODlDQTAwN0ZC
OEM1IC8qIENTU0luaGVyaXRlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4MEU2Q0Yx
MEExOTg5Q0EwMDdGQjhDNSAvKiBGb250VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTgw
RTZDRjQwQTE5ODlDQTAwN0ZCOEM1IC8qIFNoYWRvd1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUE4MEU2Q0Y1MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQYWdlUnVsZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBODBFNkNGNzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJvcGVydHkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTgwRTZDRkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU01lZGlhUnVs
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODBFNkNGRTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NT
SW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODBFNkQwMjBBMTk4OUNBMDA3RkI4
QzUgLyogQ1NTSW5pdGlhbFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4MEU2RDA1MEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBODBFNkQwNjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBODBFNkQwOTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTgwRTZERkIwQTE5OTA2NzAwN0ZCOEM1IC8qIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4MEU2RTEwMEExOTkxMUMwMDdGQjhD
NSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogZWRpdGlu
Zy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9JbnNlcnRUZXh0
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE0NDA2KQorKysgZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgogCisjaW5jbHVkZSAiQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5oIgpJbmRleDogZWRpdGluZy9SZW1vdmVD
U1NQcm9wZXJ0eUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvUmVtb3ZlQ1NTUHJv
cGVydHlDb21tYW5kLmNwcAkocmV2aXNpb24gMTQ0MDYpCisrKyBlZGl0aW5nL1JlbW92ZUNTU1By
b3BlcnR5Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiwyNCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oIgog
Ci0jaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgotCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6UmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiAqZGVjbCwgaW50
IHByb3BlcnR5KQotICAgIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpLCBtX2RlY2woZGVjbC0+bWFr
ZU11dGFibGUoKSksIG1fcHJvcGVydHkocHJvcGVydHkpLCBtX2ltcG9ydGFudChmYWxzZSkKKyAg
ICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KQorICAgICwgbV9kZWNsKGRlY2wtPm1ha2VNdXRhYmxl
KCkpCisgICAgLCBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgICwgbV9pbXBvcnRhbnQoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKG1fZGVjbCk7CiB9CiAKK1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6
flJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZCgpCit7Cit9CisKIHZvaWQgUmVtb3ZlQ1NTUHJvcGVy
dHlDb21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBBU1NFUlQobV9kZWNsKTsKSW5kZXg6IGVkaXRp
bmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9SZW1v
dmVDU1NQcm9wZXJ0eUNvbW1hbmQuaAkocmV2aXNpb24gMTQ0MDYpCisrKyBlZGl0aW5nL1JlbW92
ZUNTU1Byb3BlcnR5Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMyArMjMsMzEgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgcmVtb3ZlX2Nzc19wcm9wZXJ0eV9jb21t
YW5kX2hfXwotI2RlZmluZSByZW1vdmVfY3NzX3Byb3BlcnR5X2NvbW1hbmRfaF9fCisjaWZuZGVm
IFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZF9ICisjZGVmaW5lIFJlbW92ZUNTU1Byb3BlcnR5Q29t
bWFuZF9ICiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLX0KIAotbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIAogY2xhc3MgUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kCiB7CiBwdWJsaWM6Ci0gICAgUmVtb3ZlQ1NTUHJv
cGVydHlDb21tYW5kKFdlYkNvcmU6OkRvY3VtZW50ICosIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFy
YXRpb24gKiwgaW50IHByb3BlcnR5KTsKLSAgICB2aXJ0dWFsIH5SZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQoKSB7IH0KKyAgICBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NT
dHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BlcnR5KTsKKyAgICB2aXJ0dWFsIH5SZW1vdmVDU1NQ
cm9wZXJ0eUNvbW1hbmQoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmly
dHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAgV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24gKnN0eWxlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RlY2wuZ2V0KCk7
IH0KKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVjbC5nZXQoKTsgfQogICAgIGludCBwcm9wZXJ0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvcGVydHk7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlY2w7CisgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlY2w7CiAgICAgaW50IG1fcHJvcGVydHk7Ci0gICAgV2Vi
Q29yZTo6U3RyaW5nIG1fb2xkVmFsdWU7CisgICAgU3RyaW5nIG1fb2xkVmFsdWU7CiAgICAgYm9v
bCBtX2ltcG9ydGFudDsKIH07CiAKSW5kZXg6IGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAko
cmV2aXNpb24gMTQ0MDYpCisrKyBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oIgogCi0jaW5jbHVkZSAiY3NzX3ZhbHVlaW1w
bC5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKSW5k
ZXg6IGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNDQwNikKKysrIGVkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKIAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKSW5kZXg6IGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBl
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDE0NDA2KQorKysgZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBA
CiAjZGVmaW5lIGNvbXBvc2l0ZV9lZGl0X2NvbW1hbmRfaF9fCiAKICNpbmNsdWRlICJFZGl0Q29t
bWFuZC5oIgotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVk
VmFsdWVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDU1NTdHlsZURl
Y2xhcmF0aW9uOwpJbmRleDogZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE0NDA2KQorKysgZWRpdGluZy9FZGl0
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJT
ZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5j
bHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKSW5kZXg6IGVkaXRp
bmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvSW5zZXJ0
TGluZUJyZWFrQ29tbWFuZC5oCShyZXZpc2lvbiAxNDQwNikKKysrIGVkaXRpbmcvSW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIF9faW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZF9oX18K
LSNkZWZpbmUgX19pbnNlcnRfbGluZV9icmVha19jb21tYW5kX2hfXworI2lmbmRlZiBJbnNlcnRM
aW5lQnJlYWtDb21tYW5kX0gKKyNkZWZpbmUgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZF9ICiAKICNp
bmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogCkBAIC00NSw0ICs0NSw0IEBACiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9faW5zZXJ0X2xpbmVfYnJlYWtfY29t
bWFuZF9oX18KKyNlbmRpZiAvLyBJbnNlcnRMaW5lQnJlYWtDb21tYW5kX0gKSW5kZXg6IGtjYW52
YXMvUmVuZGVyUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyUGF0aC5oCShyZXZp
c2lvbiAxNDQwNikKKysrIGtjYW52YXMvUmVuZGVyUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBACiB9OwogCiAvLyBIZWxwZXIgZGF0YSBzdHJ1Y3R1cmUKLXR5cGVkZWYgUTNW
YWx1ZUxpc3Q8Y29uc3QgUmVuZGVyUGF0aCAqPiBLQ2FudmFzSXRlbUxpc3Q7Cit0eXBlZGVmIERl
cHJlY2F0ZWRWYWx1ZUxpc3Q8Y29uc3QgUmVuZGVyUGF0aCAqPiBLQ2FudmFzSXRlbUxpc3Q7CiAK
IH0KIApJbmRleDoga2NhbnZhcy9LQ2FudmFzUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtjYW52YXMv
S0NhbnZhc1BhdGguaAkocmV2aXNpb24gMTQ0MDYpCisrKyBrY2FudmFzL0tDYW52YXNQYXRoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICBSZWZQdHI8S0NhbnZhc1BhdGg+
IHBhdGg7CiB9OwogCi1jbGFzcyBLQ0NsaXBEYXRhTGlzdCA6IHB1YmxpYyBRM1ZhbHVlTGlzdDxL
Q0NsaXBEYXRhPgorY2xhc3MgS0NDbGlwRGF0YUxpc3QgOiBwdWJsaWMgRGVwcmVjYXRlZFZhbHVl
TGlzdDxLQ0NsaXBEYXRhPgogewogcHVibGljOgogICAgIEtDQ2xpcERhdGFMaXN0KCkgeyB9Cklu
ZGV4OiBrY2FudmFzL0tDYW52YXNUcmVlRGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tD
YW52YXNUcmVlRGVidWcuaAkocmV2aXNpb24gMTQ0MDYpCisrKyBrY2FudmFzL0tDYW52YXNUcmVl
RGVidWcuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTEgKzYzLDExIEBACiBRVGV4dFN0cmVhbSAm
b3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmdMaXN0ICZs
KTsKICAgICAKIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZW0+Ci1RVGV4dFN0cmVhbSAmb3BlcmF0b3I8
PChRVGV4dFN0cmVhbSAmdHMsIGNvbnN0IFEzVmFsdWVMaXN0PEl0ZW0qPiAmbCkKK1FUZXh0U3Ry
ZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlz
dDxJdGVtKj4gJmwpCiB7CiAgICAgdHMgPDwgIlsiOwotICAgIHR5cGVuYW1lIFEzVmFsdWVMaXN0
PEl0ZW0qPjo6Q29uc3RJdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsKLSAgICB0eXBlbmFtZSBRM1Zh
bHVlTGlzdDxJdGVtKj46OkNvbnN0SXRlcmF0b3IgaXRfZSA9IGwuZW5kKCk7CisgICAgdHlwZW5h
bWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtKj46OkNvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2lu
KCk7CisgICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZhbHVlTGlzdDxJdGVtKj46OkNvbnN0SXRlcmF0
b3IgaXRfZSA9IGwuZW5kKCk7CiAgICAgd2hpbGUgKGl0ICE9IGl0X2UpCiAgICAgewogICAgICAg
ICB0cyA8PCAqKCppdCk7CkBAIC04MCwxMSArODAsMTEgQEAKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgSXRlbT4KLVFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywgY29uc3Qg
UTNWYWx1ZUxpc3Q8SXRlbT4gJmwpCitRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVh
bSAmdHMsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbT4gJmwpCiB7CiAgICAgdHMgPDwg
IlsiOwotICAgIHR5cGVuYW1lIFEzVmFsdWVMaXN0PEl0ZW0+OjpDb25zdEl0ZXJhdG9yIGl0ID0g
bC5iZWdpbigpOwotICAgIHR5cGVuYW1lIFEzVmFsdWVMaXN0PEl0ZW0+OjpDb25zdEl0ZXJhdG9y
IGl0X2UgPSBsLmVuZCgpOworICAgIHR5cGVuYW1lIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8SXRlbT46
OkNvbnN0SXRlcmF0b3IgaXQgPSBsLmJlZ2luKCk7CisgICAgdHlwZW5hbWUgRGVwcmVjYXRlZFZh
bHVlTGlzdDxJdGVtPjo6Q29uc3RJdGVyYXRvciBpdF9lID0gbC5lbmQoKTsKICAgICB3aGlsZSAo
aXQgIT0gaXRfZSkKICAgICB7CiAgICAgICAgIHRzIDw8ICppdDsKSW5kZXg6IGtjYW52YXMvS0Nh
bnZhc0ZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJKHJl
dmlzaW9uIDE0NDA2KQorKysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAKIAogcHJvdGVjdGVkOgogICAgIEZsb2F0UmVjdCBtX2ZpbHRl
clJlY3Q7Ci0gICAgUTNWYWx1ZUxpc3Q8S0NhbnZhc0ZpbHRlckVmZmVjdCAqPiBtX2VmZmVjdHM7
CisgICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxLQ2FudmFzRmlsdGVyRWZmZWN0ICo+IG1fZWZmZWN0
czsKICAgICBib29sIG1fZmlsdGVyQkJveE1vZGU7CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2Rl
OwogfTsKQEAgLTE5MiwxNCArMTkyLDE0IEBACiAgICAgS0NDb2xvck1hdHJpeFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZvaWQgc2V0VHlwZShLQ0NvbG9yTWF0cml4
VHlwZSB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KIAotICAgIFEzVmFsdWVMaXN0PGZsb2F0PiB2
YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQotICAgIHZvaWQgc2V0VmFsdWVzKGNv
bnN0IFEzVmFsdWVMaXN0PGZsb2F0PiAmdmFsdWVzKSB7IG1fdmFsdWVzID0gdmFsdWVzOyB9Owor
ICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8ZmxvYXQ+IHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzOyB9CisgICAgdm9pZCBzZXRWYWx1ZXMoY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxm
bG9hdD4gJnZhbHVlcykgeyBtX3ZhbHVlcyA9IHZhbHVlczsgfTsKIAogICAgIFFUZXh0U3RyZWFt
ICZleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIEtDQ29sb3JNYXRyaXhUeXBlIG1fdHlwZTsKLSAgICBRM1ZhbHVlTGlzdDxmbG9hdD4g
bV92YWx1ZXM7CisgICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxmbG9hdD4gbV92YWx1ZXM7CiB9Owog
CiB0eXBlZGVmIGVudW0gewpAQCAtMjk4LDggKzI5OCw4IEBACiAgICAgRmxvYXRTaXplIGtlcm5l
bFNpemUoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbFNpemU7IH0KICAgICB2b2lkIHNldEtlcm5l
bFNpemUoRmxvYXRTaXplIGtlcm5lbFNpemUpIHsgbV9rZXJuZWxTaXplID0ga2VybmVsU2l6ZTsg
fQogICAgIAotICAgIFEzVmFsdWVMaXN0PGZsb2F0PiBrZXJuZWwoKSBjb25zdCB7IHJldHVybiBt
X2tlcm5lbE1hdHJpeDsgfQotICAgIHZvaWQgc2V0S2VybmVsKFEzVmFsdWVMaXN0PGZsb2F0PiBr
ZXJuZWwpIHsgbV9rZXJuZWxNYXRyaXggPSBrZXJuZWw7IH0KKyAgICBEZXByZWNhdGVkVmFsdWVM
aXN0PGZsb2F0PiBrZXJuZWwoKSBjb25zdCB7IHJldHVybiBtX2tlcm5lbE1hdHJpeDsgfQorICAg
IHZvaWQgc2V0S2VybmVsKERlcHJlY2F0ZWRWYWx1ZUxpc3Q8ZmxvYXQ+IGtlcm5lbCkgeyBtX2tl
cm5lbE1hdHJpeCA9IGtlcm5lbDsgfQogICAgIAogICAgIGZsb2F0IGRpdmlzb3IoKSBjb25zdCB7
IHJldHVybiBtX2Rpdmlzb3I7IH0KICAgICB2b2lkIHNldERpdmlzb3IoZmxvYXQgZGl2aXNvcikg
eyBtX2Rpdmlzb3IgPSBkaXZpc29yOyB9CkBAIC0zMjMsNyArMzIzLDcgQEAKIAogcHJpdmF0ZToK
ICAgICBGbG9hdFNpemUgbV9rZXJuZWxTaXplOwotICAgIFEzVmFsdWVMaXN0PGZsb2F0PiBtX2tl
cm5lbE1hdHJpeDsgLy8gbWF5YmUgc2hvdWxkIGJlIGEgcmVhbCBtYXRyaXg/CisgICAgRGVwcmVj
YXRlZFZhbHVlTGlzdDxmbG9hdD4gbV9rZXJuZWxNYXRyaXg7IC8vIG1heWJlIHNob3VsZCBiZSBh
IHJlYWwgbWF0cml4PwogICAgIGZsb2F0IG1fZGl2aXNvcjsKICAgICBmbG9hdCBtX2JpYXM7CiAg
ICAgRmxvYXRTaXplIG1fdGFyZ2V0T2Zmc2V0OwpJbmRleDogY3NzL0Rhc2hib2FyZFJlZ2lvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGNzcy9EYXNoYm9hcmRSZWdpb24uaAkocmV2aXNpb24gMTQ0MDApCisr
KyBjc3MvRGFzaGJvYXJkUmVnaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDMzNSArMjAsMTMg
QEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgQ1NTX2Nz
c192YWx1ZWltcGxfaF8KLSNkZWZpbmUgQ1NTX2Nzc192YWx1ZWltcGxfaF8KKyNpZm5kZWYgRGFz
aGJvYXJkUmVnaW9uX0gKKyNkZWZpbmUgRGFzaGJvYXJkUmVnaW9uX0gKIAotI2luY2x1ZGUgIkNh
Y2hlZE9iamVjdENsaWVudC5oIgotI2luY2x1ZGUgImNzc19iYXNlLmgiCi0jaW5jbHVkZSAiRGVw
cmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0K
LWNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CisjaW5jbHVkZSAiUmVjdEltcGwuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKLWNs
YXNzIENhY2hlZEltYWdlOwotY2xhc3MgQ291bnRlcjsKLWNsYXNzIERvY0xvYWRlcjsKLWNsYXNz
IE5vZGU7Ci1jbGFzcyBQYWlyOwotY2xhc3MgUmVjdEltcGw7Ci1jbGFzcyBSZW5kZXJTdHlsZTsK
LQotI2lmIF9fQVBQTEVfXwotY2xhc3MgRGFzaGJvYXJkUmVnaW9uOwotI2VuZGlmCi0KLXR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWV4dGVybiBjb25zdCBpbnQgaW5oZXJpdGFibGVQcm9w
ZXJ0aWVzW107Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgbnVtSW5oZXJpdGFibGVQcm9wZXJ0aWVz
OwotCi1jbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFN0eWxlQmFzZSB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCBib29sIGlzU3R5bGVEZWNsYXJhdGlvbigpOwotCi0gICAgc3RhdGlj
IGJvb2wgaXNQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotCi0gICAg
Q1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
PSAwOwotCi0gICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlTaG9y
dGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgaXNQcm9wZXJ0eUlt
cGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICAKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0
eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50
IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0
aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3Bl
cnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQgc2V0UHJv
cGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNv
bnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVtb3Zl
UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwg
U3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJikgPSAw
OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBj
b3B5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKSA9IDA7Ci0gCi0gICAgdm9pZCBkaWZmKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNp
Z25lZCBsZW5ndGgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlv
bihDU1NSdWxlKiBwYXJlbnRSdWxlID0gMCk7Ci0KLXByaXZhdGU6Ci0gICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbihjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICYpOwotICAgIENTU1N0eWxlRGVjbGFy
YXRpb24mIG9wZXJhdG9yPShjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICYpOwotfTsKLQotY2xh
c3MgQ1NTVmFsdWUgOiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBVbml0
VHlwZXMgewotICAgICAgICBDU1NfSU5IRVJJVCA9IDAsCi0gICAgICAgIENTU19QUklNSVRJVkVf
VkFMVUUgPSAxLAotICAgICAgICBDU1NfVkFMVUVfTElTVCA9IDIsCi0gICAgICAgIENTU19DVVNU
T00gPSAzLAotICAgICAgICBDU1NfSU5JVElBTCA9IDQKLSAgICB9OwotCi0gICAgQ1NTVmFsdWUo
KSA6IFN0eWxlQmFzZSgwKSB7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFs
dWVUeXBlKCkgY29uc3QgeyByZXR1cm4gQ1NTX0NVU1RPTTsgfQotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYp
IHsgfSAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotCi0gICAgdmlydHVhbCBib29sIGlzVmFs
dWUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyBy
ZXR1cm4gZmFsc2U7IH0KLX07Ci0KLWNsYXNzIENTU0luaGVyaXRlZFZhbHVlIDogcHVibGljIENT
U1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5
cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci19OwotCi1j
bGFzcyBDU1NJbml0aWFsVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU1ZhbHVlTGlzdCA6IHB1Ymxp
YyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgfkNTU1ZhbHVlTGlzdCgpOwotCi0g
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY291bnQoKTsgfQot
ICAgIENTU1ZhbHVlKiBpdGVtICh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXMuYXQo
aW5kZXgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0Owot
Ci0gICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIERlcHJlY2F0ZWRQdHJMaXN0
PENTU1ZhbHVlPiBtX3ZhbHVlczsKLX07Ci0KLQotY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWUgOiBw
dWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0gICAgICAg
IENTU19VTktOT1dOID0gMCwKLSAgICAgICAgQ1NTX05VTUJFUiA9IDEsCi0gICAgICAgIENTU19Q
RVJDRU5UQUdFID0gMiwKLSAgICAgICAgQ1NTX0VNUyA9IDMsCi0gICAgICAgIENTU19FWFMgPSA0
LAotICAgICAgICBDU1NfUFggPSA1LAotICAgICAgICBDU1NfQ00gPSA2LAotICAgICAgICBDU1Nf
TU0gPSA3LAotICAgICAgICBDU1NfSU4gPSA4LAotICAgICAgICBDU1NfUFQgPSA5LAotICAgICAg
ICBDU1NfUEMgPSAxMCwKLSAgICAgICAgQ1NTX0RFRyA9IDExLAotICAgICAgICBDU1NfUkFEID0g
MTIsCi0gICAgICAgIENTU19HUkFEID0gMTMsCi0gICAgICAgIENTU19NUyA9IDE0LAotICAgICAg
ICBDU1NfUyA9IDE1LAotICAgICAgICBDU1NfSFogPSAxNiwKLSAgICAgICAgQ1NTX0tIWiA9IDE3
LAotICAgICAgICBDU1NfRElNRU5TSU9OID0gMTgsCi0gICAgICAgIENTU19TVFJJTkcgPSAxOSwK
LSAgICAgICAgQ1NTX1VSSSA9IDIwLAotICAgICAgICBDU1NfSURFTlQgPSAyMSwKLSAgICAgICAg
Q1NTX0FUVFIgPSAyMiwKLSAgICAgICAgQ1NTX0NPVU5URVIgPSAyMywKLSAgICAgICAgQ1NTX1JF
Q1QgPSAyNCwKLSAgICAgICAgQ1NTX1JHQkNPTE9SID0gMjUsCi0gICAgICAgIENTU19QQUlSID0g
MTAwLCAvLyBXZSBlbnZpc2lvbiB0aGlzIGJlaW5nIGV4cG9zZWQgYXMgYSBtZWFucyBvZiBnZXR0
aW5nIGNvbXB1dGVkIHN0eWxlIHZhbHVlcyBmb3IgcGFpcnMgKGJvcmRlci1zcGFjaW5nL3JhZGl1
cywgYmFja2dyb3VuZC1wb3NpdGlvbiwgZXRjLikKLSAgICAgICAgQ1NTX0RBU0hCT0FSRF9SRUdJ
T04gPSAxMDEgLy8gRklYTUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBkb2luZyBhcyBhIHByaW1p
dGl2ZSB2YWx1ZT8gSXQgc2hvdWxkIG5vdCBiZSEKLSAgICB9OwotCi0gICAgLy8gRklYTUU6IGlu
dCB2cy4gdW5zaWduZWQgb3ZlcmxvYWRpbmcgaXMgdG9vIHRyaWNreSBmb3IgY29sb3IgdnMuIGlk
ZW50Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShpbnQg
aWRlbnQpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSwgVW5pdFR5cGVzKTsKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmLCBVbml0VHlwZXMpOwotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBh
c3NSZWZQdHI8UmVjdEltcGw+KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSh1bnNpZ25lZCBjb2xv
cik7IC8vIFJHQiB2YWx1ZQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UGFpcj4p
OwotCi0jaWYgX19BUFBMRV9fCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxEYXNo
Ym9hcmRSZWdpb24+KTsgLy8gRklYTUU6IFdoeSBpcyBkYXNoYm9hcmQgcmVnaW9uIGEgcHJpbWl0
aXZlIHZhbHVlPyBUaGlzIG1ha2VzIG5vIHNlbnNlLgotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIH5D
U1NQcmltaXRpdmVWYWx1ZSgpOwotCi0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB1bnNpZ25l
ZCBzaG9ydCBwcmltaXRpdmVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICAv
KgotICAgICAqIGNvbXB1dGVzIGEgbGVuZ3RoIGluIHBpeGVscyBvdXQgb2YgdGhlIGdpdmVuIENT
U1ZhbHVlLiBOZWVkIHRoZSBSZW5kZXJTdHlsZSB0byBnZXQKLSAgICAgKiB0aGUgZm9udGluZm8g
aW4gY2FzZSB2YWwgaXMgZGVmaW5lZCBpbiBlbSBvciBleC4KLSAgICAgKgotICAgICAqIFRoZSBt
ZXRyaWNzIGhhdmUgdG8gYmUgYSBiaXQgZGlmZmVyZW50IGZvciBzY3JlZW4gYW5kIHByaW50ZXIg
b3V0cHV0LgotICAgICAqIEZvciBzY3JlZW4gb3V0cHV0IHdlIGFzc3VtZSAxIGluY2ggPT0gNzIg
cHgsIGZvciBwcmludGVyIHdlIGFzc3VtZSAzMDAgZHBpCi0gICAgICoKLSAgICAgKiB0aGlzIGlz
IHNjcmVlbi9wcmludGVyIGRlcGVuZGVudCwgc28gd2UgcHJvYmFibHkgbmVlZCBhIGNvbmZpZyBv
cHRpb24gZm9yIHRoaXMsCi0gICAgICogYW5kIHNvbWUgdG9vbCB0byBjYWxpYnJhdGUuCi0gICAg
ICovCi0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqKTsKLSAgICBpbnQgY29t
cHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBpbnQg
Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSopOwotICAgIGludCBjb21wdXRl
TGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAg
IHNob3J0IGNvbXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSopOwotICAgIHNob3J0IGNvbXB1
dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBkb3Vi
bGUgY29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxlKiwgYm9vbCBhcHBseVpvb21GYWN0b3Ig
PSB0cnVlKTsKLQotICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKLSAgICB2b2lkIHNldFByaW1pdGl2
ZVR5cGUodW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0gICAgdm9pZCBz
ZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0
IHVuaXRUeXBlKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWUu
bnVtOyB9Ci0KLSAgICB2b2lkIHNldFN0cmluZ1ZhbHVlKHVuc2lnbmVkIHNob3J0IHN0cmluZ1R5
cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJp
bmcgZ2V0U3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICAKLSAgICBDb3VudGVyKiBnZXRDb3VudGVy
VmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19DT1VOVEVSID8g
MCA6IG1fdmFsdWUuY291bnRlcjsKLSAgICB9Ci0KLSAgICBSZWN0SW1wbCogZ2V0UmVjdFZhbHVl
ICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkVDVCA/IDAgOiBtX3Zh
bHVlLnJlY3Q7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2V0UkdCQ29sb3JWYWx1ZSgpIGNvbnN0
IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkdCQ09MT1IgPyAwIDogbV92YWx1ZS5y
Z2Jjb2xvcjsKLSAgICB9Ci0KLSAgICBQYWlyKiBnZXRQYWlyVmFsdWUoKSBjb25zdCB7Ci0gICAg
ICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1BBSVIgPyAwIDogbV92YWx1ZS5wYWlyOwotICAgIH0K
LQotI2lmIF9fQVBQTEVfXwotICAgIERhc2hib2FyZFJlZ2lvbiAqZ2V0RGFzaGJvYXJkUmVnaW9u
VmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19EQVNIQk9BUkRf
UkVHSU9OID8gMCA6IG1fdmFsdWUucmVnaW9uOwotICAgIH0KLSNlbmRpZgotCi0gICAgdmlydHVh
bCBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQotICAgIGludCBnZXRJ
ZGVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJv
b2wgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAg
dmlydHVhbCBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBpbnQgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgaW50IGlkZW50OwotICAg
ICAgICBkb3VibGUgbnVtOwotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7Ci0gICAgICAgIENv
dW50ZXIqIGNvdW50ZXI7Ci0gICAgICAgIFJlY3RJbXBsKiByZWN0OwotICAgICAgICB1bnNpZ25l
ZCByZ2Jjb2xvcjsKLSAgICAgICAgUGFpciogcGFpcjsKLSNpZiBfX0FQUExFX18KLSAgICAgICAg
RGFzaGJvYXJkUmVnaW9uKiByZWdpb247Ci0jZW5kaWYKLSAgICB9IG1fdmFsdWU7Ci19OwotCi0v
LyBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gaGFuZGxlIHF1aXJreSBtYXJnaW5zIGluIHJlZmxvdyBy
b290cyAoYm9keSwgdGQsIGFuZCB0aCkgbGlrZSBXaW5JRS4KLS8vIFRoZSBiYXNpYyBpZGVhIGlz
IHRoYXQgYSBzdHlsZXNoZWV0IGNhbiB1c2UgdGhlIHZhbHVlIF9fcWVtIChmb3IgcXVpcmt5IGVt
KSBpbnN0ZWFkIG9mIGVtCi0vLyBpbiBhIHN0eWxlc2hlZXQuICBXaGVuIHRoZSBxdWlya3kgdmFs
dWUgaXMgdXNlZCwgaWYgeW91J3JlIGluIHF1aXJrcyBtb2RlLCB0aGUgbWFyZ2luIHdpbGwKLS8v
IGNvbGxhcHNlIGF3YXkgaW5zaWRlIGEgdGFibGUgY2VsbC4KLWNsYXNzIENTU1F1aXJrUHJpbWl0
aXZlVmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBDU1NR
dWlya1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotICAgICAgICA6
IENTU1ByaW1pdGl2ZVZhbHVlKG51bSwgdHlwZSkge30KLQotICAgIHZpcnR1YWwgYm9vbCBpc1F1
aXJrVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9Ci19OwotCi1jbGFzcyBDb3VudGVyIDogcHVibGlj
IFNoYXJlZDxDb3VudGVyPiB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBTdHJpbmcgbGlzdFN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0U3R5bGU7IH0KLSAgICBTdHJpbmcgc2VwYXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXBhcmF0b3I7IH0KLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgU3Ry
aW5nIG1fbGlzdFN0eWxlOwotICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKLX07Ci0KLWNsYXNzIFJl
Y3RJbXBsIDogcHVibGljIFNoYXJlZDxSZWN0SW1wbD4gewotcHVibGljOgotICAgIHZpcnR1YWwg
flJlY3RJbXBsKCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyByZXR1
cm4gbV90b3AuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmlnaHQoKSBjb25zdCB7
IHJldHVybiBtX3JpZ2h0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGJvdHRvbSgp
IGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0VG9w
KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsgfQotICAg
IHZvaWQgc2V0UmlnaHQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmlnaHQpIHsgbV9y
aWdodCA9IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gYm90dG9tKSB7IG1fYm90dG9tID0gYm90dG9tOyB9Ci0gICAgdm9pZCBzZXRMZWZ0
KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3RvcDsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVmdDsK
LX07Ci0KLS8vIEEgcHJpbWl0aXZlIHZhbHVlIHJlcHJlc2VudGluZyBhIHBhaXIuICBUaGlzIGlz
IHVzZWZ1bCBmb3IgcHJvcGVydGllcyBsaWtlIGJvcmRlci1yYWRpdXMsIGJhY2tncm91bmQtc2l6
ZS9wb3NpdGlvbiwKLS8vIGFuZCBib3JkZXItc3BhY2luZyAoYWxsIG9mIHdoaWNoIGFyZSBzcGFj
ZS1zZXBhcmF0ZWQgc2V0cyBvZiB0d28gdmFsdWVzKS4gIEF0IHRoZSBtb21lbnQgd2UgYXJlIG9u
bHkgdXNpbmcgaXQgZm9yCi0vLyBib3JkZXItcmFkaXVzIGFuZCBiYWNrZ3JvdW5kLXNpemUsIGJ1
dCAoRklYTUUpIGJvcmRlci1zcGFjaW5nIGFuZCBiYWNrZ3JvdW5kLXBvc2l0aW9uIGNvdWxkIGJl
IGNvbnZlcnRlZCBvdmVyIHRvIHVzZQotLy8gaXQgKGVsaW1pbmF0aW5nIHNvbWUgZXh0cmEgLXdl
YmtpdC0gaW50ZXJuYWwgcHJvcGVydGllcykuCi1jbGFzcyBQYWlyIDogcHVibGljIFNoYXJlZDxQ
YWlyPiB7Ci1wdWJsaWM6Ci0gICAgUGFpcigpIDogbV9maXJzdCgwKSwgbV9zZWNvbmQoMCkgeyB9
Ci0gICAgUGFpcihQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdCwgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKQotICAgICAgICA6IG1fZmlyc3QoZmlyc3QpLCBt
X3NlY29uZChzZWNvbmQpIHsgfQotICAgIHZpcnR1YWwgflBhaXIoKTsKLQotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3QuZ2V0KCk7IH0KLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV9zZWNvbmQuZ2V0KCk7
IH0KLQotICAgIHZvaWQgc2V0Rmlyc3QoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmly
c3QpIHsgbV9maXJzdCA9IGZpcnN0OyB9Ci0gICAgdm9pZCBzZXRTZWNvbmQoUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKSB7IG1fc2Vjb25kID0gc2Vjb25kOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3Q7Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZDsKLX07Ci0KIGNsYXNzIERhc2hib2FyZFJlZ2lv
biA6IHB1YmxpYyBSZWN0SW1wbCB7CiBwdWJsaWM6CiAgICAgRGFzaGJvYXJkUmVnaW9uKCkgOiBt
X2lzQ2lyY2xlKDApLCBtX2lzUmVjdGFuZ2xlKDApIHsgfQpAQCAtMzYwLDIwMSArMzgsNiBAQAog
ICAgIGJvb2wgbV9pc1JlY3RhbmdsZSA6IDE7CiB9OwogCi1jbGFzcyBDU1NJbWFnZVZhbHVlIDog
cHVibGljIENTU1ByaW1pdGl2ZVZhbHVlLCBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50Ci17Ci1w
dWJsaWM6Ci0gICAgQ1NTSW1hZ2VWYWx1ZSgpOwotICAgIENTU0ltYWdlVmFsdWUoY29uc3QgU3Ry
aW5nJiB1cmwsIFN0eWxlQmFzZSopOwotICAgIHZpcnR1YWwgfkNTU0ltYWdlVmFsdWUoKTsKLQot
ICAgIENhY2hlZEltYWdlKiBpbWFnZShEb2NMb2FkZXIqKTsKLQotcHJvdGVjdGVkOgotICAgIENh
Y2hlZEltYWdlKiBtX2ltYWdlOwotICAgIGJvb2wgbV9hY2Nlc3NlZEltYWdlOwotfTsKLQotY2xh
c3MgQ1NTQm9yZGVySW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAg
IENTU0JvcmRlckltYWdlVmFsdWUoKTsKLSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQ
dHI8Q1NTSW1hZ2VWYWx1ZT4sCi0gICAgICAgIFBhc3NSZWZQdHI8UmVjdEltcGw+LCBpbnQgaG9y
aXpvbnRhbFJ1bGUsIGludCB2ZXJ0aWNhbFJ1bGUpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwotCi1wdWJsaWM6Ci0gICAgLy8gVGhlIGJvcmRlciBpbWFnZS4KLSAgICBS
ZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4gbV9pbWFnZTsKLQotICAgIC8vIFRoZXNlIGZvdXIgdmFsdWVz
IGFyZSB1c2VkIHRvIG1ha2UgImN1dHMiIGluIHRoZSBpbWFnZS4gIFRoZXkgY2FuIGJlIG51bWJl
cnMKLSAgICAvLyBvciBwZXJjZW50YWdlcy4KLSAgICBSZWZQdHI8UmVjdEltcGw+IG1faW1hZ2VT
bGljZVJlY3Q7Ci0gICAgCi0gICAgLy8gVmFsdWVzIGZvciBob3cgdG8gaGFuZGxlIHRoZSBzY2Fs
aW5nL3N0cmV0Y2hpbmcvdGlsaW5nIG9mIHRoZSBpbWFnZSBzbGljZXMuCi0gICAgaW50IG1faG9y
aXpvbnRhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8gYWRqdXN0IHRoZSB3aWR0aHMgb2Yg
dGhlIHRvcC9taWRkbGUvYm90dG9tCi0gICAgaW50IG1fdmVydGljYWxTaXplUnVsZTsgLy8gUnVs
ZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgaGVpZ2h0cyBvZiB0aGUgbGVmdC9taWRkbGUvcmlnaHQK
LX07Ci0KLWNsYXNzIEZvbnRGYW1pbHlWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQot
ewotcHVibGljOgotICAgIEZvbnRGYW1pbHlWYWx1ZSggY29uc3QgRGVwcmVjYXRlZFN0cmluZyAm
c3RyaW5nKTsKLSAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBmb250TmFtZSgpIGNvbnN0IHsg
cmV0dXJuIHBhcnNlZEZvbnROYW1lOyB9Ci0gICAgaW50IGdlbmVyaWNGYW1pbHlUeXBlKCkgY29u
c3QgeyByZXR1cm4gX2dlbmVyaWNGYW1pbHlUeXBlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBj
c3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHBhcnNlZEZvbnROYW1lOwot
cHJpdmF0ZToKLSAgICBpbnQgX2dlbmVyaWNGYW1pbHlUeXBlOwotfTsKLQotY2xhc3MgRm9udFZh
bHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgpIHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGU7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YXJpYW50OwotICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gd2VpZ2h0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZTsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVIZWlnaHQ7Ci0gICAgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gZmFtaWx5OwotfTsKLQotLy8gVXNlZCBmb3IgdGV4dC1zaGFkb3cgYW5kIGJveC1z
aGFkb3cKLWNsYXNzIFNoYWRvd1ZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0g
ICAgU2hhZG93VmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geCwKLSAgICAgICAg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geSwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gYmx1ciwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29sb3IpOwotICAgIAotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQot
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBibHVyOwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotLy8gYW5vdGhlciBoZWxwZXIgY2xhc3MKLWNsYXNzIENTU1Byb3BlcnR5Ci17Ci1wdWJs
aWM6Ci0gICAgQ1NTUHJvcGVydHkoaW50IHByb3BJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGludCBzaG9ydGhhbmRJRCA9IDAsIGJvb2wgaW1w
bGljaXQgPSBmYWxzZSkKLSAgICAgICAgOiBtX2lkKHByb3BJRCksIG1fc2hvcnRoYW5kSUQoc2hv
cnRoYW5kSUQpLCBtX2ltcG9ydGFudChpbXBvcnRhbnQpLCBtX2ltcGxpY2l0KGltcGxpY2l0KSwg
bV92YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENTU1Byb3BlcnR5ICZvcGVy
YXRvcj0oY29uc3QgQ1NTUHJvcGVydHkmIG8pCi0gICAgewotICAgICAgICBtX2lkID0gby5tX2lk
OwotICAgICAgICBtX3Nob3J0aGFuZElEID0gby5tX3Nob3J0aGFuZElEOwotICAgICAgICBtX2lt
cG9ydGFudCA9IG8ubV9pbXBvcnRhbnQ7Ci0gICAgICAgIG1fdmFsdWUgPSBvLm1fdmFsdWU7Ci0g
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgCi0gICAgaW50IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pZDsgfQotICAgIGludCBzaG9ydGhhbmRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
cnRoYW5kSUQ7IH0KLSAgICAKLSAgICBib29sIGlzSW1wb3J0YW50KCkgY29uc3QgeyByZXR1cm4g
bV9pbXBvcnRhbnQ7IH0KLSAgICBib29sIGlzSW1wbGljaXQoKSBjb25zdCB7IHJldHVybiBtX2lt
cGxpY2l0OyB9Ci0KLSAgICBDU1NWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
LmdldCgpOyB9Ci0gICAgCi0gICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIC8vIG1h
a2Ugc3VyZSB0aGUgZm9sbG93aW5nIGZpdHMgaW4gNCBieXRlcy4KLSAgICBpbnQgbV9pZDsKLSAg
ICBpbnQgbV9zaG9ydGhhbmRJRDsgIC8vIElmIHRoaXMgcHJvcGVydHkgd2FzIHNldCBhcyBwYXJ0
IG9mIGEgc2hvcnRoYW5kLCBnaXZlcyB0aGUgc2hvcnRoYW5kLgotICAgIGJvb2wgbV9pbXBvcnRh
bnQgOiAxOwotICAgIGJvb2wgbV9pbXBsaWNpdCA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBw
cm9wZXJ0eSB3YXMgc2V0IGltcGxpY2l0bHkgYXMgdGhlIHJlc3VsdCBvZiBhIHNob3J0aGFuZC4K
LQotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTUHJvcGVydHkgJiwgY29uc3Qg
Q1NTUHJvcGVydHkgJik7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1fdmFsdWU7Ci19OwotCi1j
bGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0
aW9uCi17Ci1wdWJsaWM6Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsKLSAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlKTsKLSAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBEZXByZWNh
dGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiAmKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICosIGlu
dCBudW1Qcm9wZXJ0aWVzKTsKLQotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICZvcGVy
YXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gJik7Ci0KLSAgICB2b2lkIHNl
dE5vZGUoTm9kZSogbm9kZSkgeyBtX25vZGUgPSBub2RlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3Ry
aW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQg
cHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShp
bnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3Jp
dHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hv
cnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0
eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShp
bnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOwotCi0g
ICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IHZhbHVlc0l0
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQotCi0gICAgYm9vbCBz
ZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZh
bHNlLCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKTsKLSAgICBib29sIHNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBu
b3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwg
Ym9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSkKLSAgICAgICAgeyBFeGNlcHRpb25Db2RlIGVjOyBy
ZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIGltcG9ydGFudCwgbm90aWZ5Q2hh
bmdlZCwgZWMpOyB9Ci0KLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyByZW1vdmVQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSkKLSAgICAg
ICAgeyBFeGNlcHRpb25Db2RlIGVjOyByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwg
bm90aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICB2b2lkIHNl
dENoYW5nZWQoKTsKLSAKLSAgICAvLyBzZXRMZW5ndGhQcm9wZXJ0eSB0cmVhdHMgaW50ZWdlcnMg
YXMgcGl4ZWxzISAoTmVlZGVkIGZvciBjb252ZXJzaW9uIG9mIEhUTUwgYXR0cmlidXRlcy4pCi0g
ICAgdm9pZCBzZXRMZW5ndGhQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbXVsdGlMZW5ndGggPSBmYWxzZSk7Ci0gICAgdm9p
ZCBzZXRTdHJpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcywgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7IC8v
IHBhcnNlZCBzdHJpbmcgdmFsdWUKLSAgICB2b2lkIHNldEltYWdlUHJvcGVydHkoaW50IHByb3Bl
cnR5SWQsIGNvbnN0IFN0cmluZyYgVVJMLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKLSAKLSAg
ICAvLyBUaGUgZm9sbG93aW5nIHBhcnNlcyBhbiBlbnRpcmUgbmV3IHN0eWxlIGRlY2xhcmF0aW9u
LgotICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRp
b24pOwotCi0gICAgLy8gQmVzaWRlcyBhZGRpbmcgdGhlIHByb3BlcnRpZXMsIHRoaXMgYWxzbyBy
ZW1vdmVzIGFueSBleGlzdGluZyBwcm9wZXJ0aWVzIHdpdGggdGhlc2UgSURzLgotICAgIC8vIEl0
IGRvZXMgbm8gbm90aWZpY2F0aW9uIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSBwYXJzZXIuCi0g
ICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKiwg
aW50IG51bVByb3BlcnRpZXMpOwotIAotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZUJs
b2NrUHJvcGVydGllcygpOwotICAgIHZvaWQgcmVtb3ZlSW5oZXJpdGFibGVQcm9wZXJ0aWVzKCk7
Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICB2b2lkIG1lcmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwg
Ym9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1ZSk7Ci0gCi1wcml2YXRlOgotICAgIFN0
cmluZyBnZXRTaG9ydEhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1iZXIp
IGNvbnN0OwotICAgIFN0cmluZyBnZXQ0VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGllcykgY29u
c3Q7Ci0gCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gbV92YWx1ZXM7Ci0g
ICAgTm9kZSogbV9ub2RlOwotfTsKLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBj
c3MvQ1NTU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTU3R5bGVSdWxlLmNwcAko
cmV2aXNpb24gMTQ0MDApCisrKyBjc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsMjczICsyMCwxOCBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImNzc19ydWxlaW1w
bC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNp
bmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgotI2luY2x1
ZGUgImNzc3BhcnNlci5oIgotI2luY2x1ZGUgPEtVUkwuaD4KKyNpbmNsdWRlICJDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1N0eWxlU2hl
ZXQqIENTU1J1bGU6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAotewotICAgIHJldHVybiAocGFy
ZW50KCkgJiYgcGFyZW50KCktPmlzQ1NTU3R5bGVTaGVldCgpKSA/IHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQqPihwYXJlbnQoKSkgOiAwOwotfQotCi1DU1NSdWxlKiBDU1NSdWxlOjpwYXJlbnRS
dWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUo
KSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlKj4ocGFyZW50KCkpIDogMDsKLX0KLQotU3RyaW5nIENT
U1J1bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vICMjIwotICAgIHJldHVybiBTdHJpbmco
KTsKLX0KLQotdm9pZCBDU1NSdWxlOjpzZXRDc3NUZXh0KFN0cmluZyAvKnN0ciovKQotewotICAg
IC8vICMjIwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTRm9udEZhY2VSdWxlOjpD
U1NGb250RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCkK
LXsKLSAgICBtX3R5cGUgPSBGT05UX0ZBQ0VfUlVMRTsKLX0KLQotQ1NTRm9udEZhY2VSdWxlOjp+
Q1NTRm9udEZhY2VSdWxlKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTSW1w
b3J0UnVsZTo6Q1NTSW1wb3J0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBo
cmVmLCBNZWRpYUxpc3QqIG1lZGlhKQotICAgIDogQ1NTUnVsZShwYXJlbnQpCi0gICAgLCBtX3N0
ckhyZWYoaHJlZikKLSAgICAsIG1fbHN0TWVkaWEobWVkaWEpCi0gICAgLCBtX2NhY2hlZFNoZWV0
KDApCi0gICAgLCBtX2xvYWRpbmcoZmFsc2UpCi17Ci0gICAgbV90eXBlID0gSU1QT1JUX1JVTEU7
Ci0KLSAgICBpZiAobV9sc3RNZWRpYSkKLSAgICAgICAgbV9sc3RNZWRpYS0+c2V0UGFyZW50KHRo
aXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9sc3RNZWRpYSA9IG5ldyBNZWRpYUxpc3QodGhpcywg
U3RyaW5nKCkpOwotfQotCi1DU1NJbXBvcnRSdWxlOjp+Q1NTSW1wb3J0UnVsZSgpCi17Ci0gICAg
aWYgKG1fbHN0TWVkaWEpCi0gICAgICAgIG1fbHN0TWVkaWEtPnNldFBhcmVudCgwKTsKLSAgICBp
ZiAobV9zdHlsZVNoZWV0KQotICAgICAgICBtX3N0eWxlU2hlZXQtPnNldFBhcmVudCgwKTsKLSAg
ICBpZiAobV9jYWNoZWRTaGVldCkKLSAgICAgICAgbV9jYWNoZWRTaGVldC0+ZGVyZWYodGhpcyk7
Ci19Ci0KLXZvaWQgQ1NTSW1wb3J0UnVsZTo6c2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVy
bCwgY29uc3QgU3RyaW5nICZzaGVldCkKLXsKLSAgICBpZiAobV9zdHlsZVNoZWV0KQotICAgICAg
ICBtX3N0eWxlU2hlZXQtPnNldFBhcmVudCgwKTsKLSAgICBtX3N0eWxlU2hlZXQgPSBuZXcgQ1NT
U3R5bGVTaGVldCh0aGlzLCB1cmwpOwotCi0gICAgQ1NTU3R5bGVTaGVldCAqcGFyZW50ID0gcGFy
ZW50U3R5bGVTaGVldCgpOwotICAgIG1fc3R5bGVTaGVldC0+cGFyc2VTdHJpbmcoc2hlZXQsICFw
YXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIG1fbG9hZGluZyA9IGZh
bHNlOwotCi0gICAgY2hlY2tMb2FkZWQoKTsKLX0KLQotYm9vbCBDU1NJbXBvcnRSdWxlOjppc0xv
YWRpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2xvYWRpbmcgfHwgKG1fc3R5bGVTaGVldCAm
JiBtX3N0eWxlU2hlZXQtPmlzTG9hZGluZygpKTsKLX0KLQotdm9pZCBDU1NJbXBvcnRSdWxlOjpp
bnNlcnRlZEludG9QYXJlbnQoKQotewotICAgIFN0eWxlQmFzZSogcm9vdCA9IHRoaXM7Ci0gICAg
U3R5bGVCYXNlKiBwYXJlbnQ7Ci0gICAgd2hpbGUgKChwYXJlbnQgPSByb290LT5wYXJlbnQoKSkp
Ci0gICAgICAgIHJvb3QgPSBwYXJlbnQ7Ci0gICAgaWYgKCFyb290LT5pc0NTU1N0eWxlU2hlZXQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2NMb2FkZXIoKTsKLSAgICBpZiAoIWRvY0xvYWRl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGFic0hyZWYgPSBtX3N0ckhyZWY7Ci0g
ICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAg
aWYgKCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKQotICAgICAgICAvLyB1c2UgcGFyZW50
IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJlZiA9IEtVUkwo
cGFyZW50U2hlZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCksIG1fc3RySHJlZi5kZXByZWNh
dGVkU3RyaW5nKCkpLnVybCgpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGlt
cG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBhIHN0eWxlc2hlZXQKLSAgICAvLyBpbiBvdXIg
cGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KLSAgICBmb3Ig
KHBhcmVudCA9IHN0YXRpY19jYXN0PFN0eWxlQmFzZSo+KHRoaXMpLT5wYXJlbnQoKTsgcGFyZW50
OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKQotICAgICAgICBpZiAoYWJzSHJlZiA9PSBwYXJl
bnQtPmJhc2VVUkwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyAjIyMgcGFz
cyBjb3JyZWN0IGNoYXJzZXQgaGVyZSEhCi0gICAgbV9jYWNoZWRTaGVldCA9IGRvY0xvYWRlci0+
cmVxdWVzdFN0eWxlU2hlZXQoYWJzSHJlZiwgRGVwcmVjYXRlZFN0cmluZzo6bnVsbCk7Ci0gICAg
aWYgKG1fY2FjaGVkU2hlZXQpIHsKLSAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAg
bV9jYWNoZWRTaGVldC0+cmVmKHRoaXMpOwotICAgIH0KLX0KLQotU3RyaW5nIENTU0ltcG9ydFJ1
bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiQGltcG9ydCB1cmwo
XCIiOwotICAgIHJlc3VsdCArPSBtX3N0ckhyZWY7Ci0gICAgcmVzdWx0ICs9ICJcIikiOwotCi0g
ICAgaWYgKG1fbHN0TWVkaWEpIHsKLSAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVz
dWx0ICs9IG1fbHN0TWVkaWEtPm1lZGlhVGV4dCgpOwotICAgIH0KLSAgICByZXN1bHQgKz0gIjsi
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNTU01l
ZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgTWVkaWFMaXN0ICptZWRp
YUxpc3QsIENTU1J1bGVMaXN0ICpydWxlTGlzdCApCi0gICAgOiAgIENTU1J1bGUoIHBhcmVudCAp
Ci17Ci0gICAgbV90eXBlID0gTUVESUFfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gbWVkaWFMaXN0
OwotICAgIG1fbHN0Q1NTUnVsZXMgPSBydWxlTGlzdDsKLX0KLQotQ1NTTWVkaWFSdWxlOjpDU1NN
ZWRpYVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiAgIENTU1J1bGUoIHBhcmVudCApCi17
Ci0gICAgbV90eXBlID0gTUVESUFfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gMDsKLSAgICBtX2xz
dENTU1J1bGVzID0gbmV3IENTU1J1bGVMaXN0KCk7Ci19Ci0KLUNTU01lZGlhUnVsZTo6Q1NTTWVk
aWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgY29uc3QgU3RyaW5nICZtZWRpYSApCi06ICAgQ1NT
UnVsZSggcGFyZW50ICkKLXsKLSAgICBtX3R5cGUgPSBNRURJQV9SVUxFOwotICAgIG1fbHN0TWVk
aWEgPSBuZXcgTWVkaWFMaXN0KCB0aGlzLCBtZWRpYSApOwotICAgIG1fbHN0Q1NTUnVsZXMgPSBu
ZXcgQ1NTUnVsZUxpc3QoKTsKLX0KLQotQ1NTTWVkaWFSdWxlOjp+Q1NTTWVkaWFSdWxlKCkKLXsK
LSAgICBpZihtX2xzdE1lZGlhKQotICAgICAgICBtX2xzdE1lZGlhLT5zZXRQYXJlbnQoMCk7Ci0K
LSAgICBpbnQgbGVuZ3RoID0gbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgbV9sc3RDU1NSdWxlcy0+aXRlbShpKS0+
c2V0UGFyZW50KDApOwotfQotCi11bnNpZ25lZCBDU1NNZWRpYVJ1bGU6OmFwcGVuZCggQ1NTUnVs
ZSAqcnVsZSApCi17Ci0gICAgaWYgKCFydWxlKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHJ1bGUtPnNldFBhcmVudCh0aGlzKTsKLSAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy0+
aW5zZXJ0UnVsZSggcnVsZSwgbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCkgKTsKLX0KLQotdW5zaWdu
ZWQgQ1NTTWVkaWFSdWxlOjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSwgdW5zaWduZWQg
aW5kZXgpCi17Ci0gICAgQ1NTUGFyc2VyIHAodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBSZWZQ
dHI8Q1NTUnVsZT4gbmV3UnVsZSA9IHAucGFyc2VSdWxlKHBhcmVudFN0eWxlU2hlZXQoKSwgcnVs
ZSk7Ci0gICAgaWYgKCFuZXdSdWxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBuZXdSdWxlLT5z
ZXRQYXJlbnQodGhpcyk7Ci0gICAgcmV0dXJuIG1fbHN0Q1NTUnVsZXMtPmluc2VydFJ1bGUobmV3
UnVsZS5nZXQoKSwgaW5kZXgpOwotfQotCi1TdHJpbmcgQ1NTTWVkaWFSdWxlOjpjc3NUZXh0KCkg
Y29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIkBtZWRpYSAiOwotICAgIGlmIChtX2xzdE1l
ZGlhKSB7Ci0gICAgICAgIHJlc3VsdCArPSBtX2xzdE1lZGlhLT5tZWRpYVRleHQoKTsKLSAgICAg
ICAgcmVzdWx0ICs9ICIgIjsKLSAgICB9Ci0gICAgcmVzdWx0ICs9ICJ7IFxuIjsKLSAgICAKLSAg
ICBpZiAobV9sc3RDU1NSdWxlcykgewotICAgICAgICB1bnNpZ25lZCBsZW4gPSBtX2xzdENTU1J1
bGVzLT5sZW5ndGgoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIiAgIjsKLSAgICAgICAgICAgIHJlc3VsdCArPSBt
X2xzdENTU1J1bGVzLT5pdGVtKGkpLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICByZXN1bHQgKz0g
IlxuIjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXN1bHQgKz0gIn0iOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NSdWxlTGlzdDo6
Q1NTUnVsZUxpc3QoU3R5bGVMaXN0ICpsc3QpCi17Ci0gICAgaWYgKGxzdCkgewotICAgICAgICB1
bnNpZ25lZCBsZW4gPSBsc3QtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIFN0eWxlQmFzZSAqc3R5bGUgPSBsc3QtPml0
ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPmlzUnVsZSgpKQotICAgICAgICAgICAgICAg
IGFwcGVuZChzdGF0aWNfY2FzdDxDU1NSdWxlKj4oc3R5bGUpKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotQ1NTUnVsZUxpc3Q6On5DU1NSdWxlTGlzdCgpCi17Ci0gICAgQ1NTUnVsZSogcnVsZTsK
LSAgICB3aGlsZSAoICFtX2xzdENTU1J1bGVzLmlzRW1wdHkoKSAmJiAoIHJ1bGUgPSBtX2xzdENT
U1J1bGVzLnRha2UoIDAgKSApICkKLSAgICAgICAgcnVsZS0+ZGVyZWYoKTsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUNTU1BhZ2VSdWxlOjpDU1NQYWdlUnVsZShTdHlsZUJhc2UgKnBh
cmVudCkKLSAgICA6IENTU1J1bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9IFBBR0VfUlVMRTsK
LX0KLQotQ1NTUGFnZVJ1bGU6On5DU1NQYWdlUnVsZSgpCi17Ci19Ci0KLVN0cmluZyBDU1NQYWdl
UnVsZTo6c2VsZWN0b3JUZXh0KCkgY29uc3QKLXsKLSAgICAvLyAjIyMKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLXZvaWQgQ1NTUGFnZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChTdHJpbmcgLypz
dHIqLykKLXsKLSAgICAvLyAjIyMKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ1NTU3R5
bGVSdWxlOjpDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCiAgICAgOiBDU1NSdWxlKHBh
cmVudCkKKyAgICAsIG1fc2VsZWN0b3IoMCkKIHsKICAgICBtX3R5cGUgPSBTVFlMRV9SVUxFOwot
ICAgIG1fc2VsZWN0b3IgPSAwOwogfQogCiBDU1NTdHlsZVJ1bGU6On5DU1NTdHlsZVJ1bGUoKQpA
QCAtMzM3LDMwICs4Miw0IEBACiAgICAgbV9zdHlsZSA9IHN0eWxlOwogfQogCi12b2lkIENTU1J1
bGVMaXN0OjpkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKQotewotICAgIENTU1J1bGUgKnJ1
bGUgPSBtX2xzdENTU1J1bGVzLnRha2UoIGluZGV4ICk7Ci0gICAgaWYoIHJ1bGUgKQotICAgICAg
ICBydWxlLT5kZXJlZigpOwotICAgIGVsc2UKLSAgICAgICAgOyAvLyAjIyMgVGhyb3cgSU5ERVhf
U0laRV9FUlIgZXhjZXB0aW9uIGhlcmUgKFRPRE8pCi19Ci0KLXZvaWQgQ1NTUnVsZUxpc3Q6OmFw
cGVuZCggQ1NTUnVsZSAqcnVsZSApCi17Ci0gICAgaW5zZXJ0UnVsZSggcnVsZSwgbV9sc3RDU1NS
dWxlcy5jb3VudCgpICkgOwotfQotCi11bnNpZ25lZCBDU1NSdWxlTGlzdDo6aW5zZXJ0UnVsZSgg
Q1NTUnVsZSAqcnVsZSwgdW5zaWduZWQgaW5kZXggKQotewotICAgIGlmKCBydWxlICYmIG1fbHN0
Q1NTUnVsZXMuaW5zZXJ0KCBpbmRleCwgcnVsZSApICkKLSAgICB7Ci0gICAgICAgIHJ1bGUtPnJl
ZigpOwotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotCi0gICAgLy8gIyMjIFNob3VsZCB0
aHJvdyBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24gaW5zdGVhZCEgKFRPRE8pCi0gICAgcmV0dXJu
IDA7Ci19Ci0KIH0KSW5kZXg6IGNzcy9DU1NQcm9wZXJ0eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9D
U1NQcm9wZXJ0eS5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9DU1NQcm9wZXJ0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw0MzYgKzIwLDIyIEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KICAqLwogCi0jaWZuZGVmIENTU19jc3NfdmFsdWVpbXBsX2hfCi0jZGVmaW5lIENTU19j
c3NfdmFsdWVpbXBsX2hfCisjaWZuZGVmIENTU1Byb3BlcnR5X0gKKyNkZWZpbmUgQ1NTUHJvcGVy
dHlfSAogCi0jaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiY3NzX2Jh
c2UuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0
ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAi
Q1NTVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi1jbGFzcyBRUGFpbnRE
ZXZpY2VNZXRyaWNzOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDb3VudGVyOwotY2xh
c3MgRG9jTG9hZGVyOwotY2xhc3MgTm9kZTsKLWNsYXNzIFBhaXI7Ci1jbGFzcyBSZWN0SW1wbDsK
LWNsYXNzIFJlbmRlclN0eWxlOwotCi0jaWYgX19BUFBMRV9fCi1jbGFzcyBEYXNoYm9hcmRSZWdp
b247Ci0jZW5kaWYKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotZXh0ZXJuIGNvbnN0
IGludCBpbmhlcml0YWJsZVByb3BlcnRpZXNbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBudW1J
bmhlcml0YWJsZVByb3BlcnRpZXM7Ci0KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJs
aWMgU3R5bGVCYXNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURlY2xhcmF0
aW9uKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSk7Ci0KLSAgICBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRD
c3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdCA9IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcg
Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5n
IGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0
cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0g
ICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwot
ICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1
ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
aW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAw
OwotCi0gICAgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAKLSAg
ICB2b2lkIGRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQo
Y29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQotcHJpdmF0
ZToKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7
Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IENTU1N0eWxlRGVjbGFy
YXRpb24gJik7Ci19OwotCi1jbGFzcyBDU1NWYWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UKLXsKLXB1
YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0gICAgICAgIENTU19JTkhFUklUID0gMCwKLSAg
ICAgICAgQ1NTX1BSSU1JVElWRV9WQUxVRSA9IDEsCi0gICAgICAgIENTU19WQUxVRV9MSVNUID0g
MiwKLSAgICAgICAgQ1NTX0NVU1RPTSA9IDMsCi0gICAgICAgIENTU19JTklUSUFMID0gNAotICAg
IH07Ci0KLSAgICBDU1NWYWx1ZSgpIDogU3R5bGVCYXNlKDApIHsgfQotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NfQ1VTVE9NOyB9
Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIHNldENz
c1RleHQoY29uc3QgU3RyaW5nJikgeyB9IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNGb250VmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQotfTsKLQotY2xhc3MgQ1NTSW5oZXJp
dGVkVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1
ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3Mg
Q1NTVmFsdWVMaXN0IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
Q1NTVmFsdWVMaXN0KCk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5jb3VudCgpOyB9Ci0gICAgQ1NTVmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBtX3ZhbHVlcy5hdChpbmRleCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVl
TGlzdCgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3Nz
VmFsdWVUeXBlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVl
Pik7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgRGVwcmVjYXRlZFB0ckxpc3Q8Q1NTVmFsdWU+IG1fdmFsdWVzOwotfTsKLQotCi1jbGFzcyBD
U1NQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIGVudW0g
VW5pdFR5cGVzIHsKLSAgICAgICAgQ1NTX1VOS05PV04gPSAwLAotICAgICAgICBDU1NfTlVNQkVS
ID0gMSwKLSAgICAgICAgQ1NTX1BFUkNFTlRBR0UgPSAyLAotICAgICAgICBDU1NfRU1TID0gMywK
LSAgICAgICAgQ1NTX0VYUyA9IDQsCi0gICAgICAgIENTU19QWCA9IDUsCi0gICAgICAgIENTU19D
TSA9IDYsCi0gICAgICAgIENTU19NTSA9IDcsCi0gICAgICAgIENTU19JTiA9IDgsCi0gICAgICAg
IENTU19QVCA9IDksCi0gICAgICAgIENTU19QQyA9IDEwLAotICAgICAgICBDU1NfREVHID0gMTEs
Ci0gICAgICAgIENTU19SQUQgPSAxMiwKLSAgICAgICAgQ1NTX0dSQUQgPSAxMywKLSAgICAgICAg
Q1NTX01TID0gMTQsCi0gICAgICAgIENTU19TID0gMTUsCi0gICAgICAgIENTU19IWiA9IDE2LAot
ICAgICAgICBDU1NfS0haID0gMTcsCi0gICAgICAgIENTU19ESU1FTlNJT04gPSAxOCwKLSAgICAg
ICAgQ1NTX1NUUklORyA9IDE5LAotICAgICAgICBDU1NfVVJJID0gMjAsCi0gICAgICAgIENTU19J
REVOVCA9IDIxLAotICAgICAgICBDU1NfQVRUUiA9IDIyLAotICAgICAgICBDU1NfQ09VTlRFUiA9
IDIzLAotICAgICAgICBDU1NfUkVDVCA9IDI0LAotICAgICAgICBDU1NfUkdCQ09MT1IgPSAyNSwK
LSAgICAgICAgQ1NTX1BBSVIgPSAxMDAsIC8vIFdlIGVudmlzaW9uIHRoaXMgYmVpbmcgZXhwb3Nl
ZCBhcyBhIG1lYW5zIG9mIGdldHRpbmcgY29tcHV0ZWQgc3R5bGUgdmFsdWVzIGZvciBwYWlycyAo
Ym9yZGVyLXNwYWNpbmcvcmFkaXVzLCBiYWNrZ3JvdW5kLXBvc2l0aW9uLCBldGMuKQotICAgICAg
ICBDU1NfREFTSEJPQVJEX1JFR0lPTiA9IDEwMSAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0
aGlzIGRvaW5nIGFzIGEgcHJpbWl0aXZlIHZhbHVlPyBJdCBzaG91bGQgbm90IGJlIQotICAgIH07
Ci0KLSAgICAvLyBGSVhNRTogaW50IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0b28gdHJp
Y2t5IGZvciBjb2xvciB2cy4gaWRlbnQKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKGludCBpZGVudCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoZG91Ymxl
LCBVbml0VHlwZXMpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYsIFVuaXRU
eXBlcyk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxSZWN0SW1wbD4pOwotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKHVuc2lnbmVkIGNvbG9yKTsgLy8gUkdCIHZhbHVlCi0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUoUGFzc1JlZlB0cjxQYWlyPik7Ci0KLSNpZiBfX0FQUExFX18KLSAgICBDU1NQcmltaXRpdmVW
YWx1ZShQYXNzUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4pOyAvLyBGSVhNRTogV2h5IGlzIGRhc2hi
b2FyZCByZWdpb24gYSBwcmltaXRpdmUgdmFsdWU/IFRoaXMgbWFrZXMgbm8gc2Vuc2UuCi0jZW5k
aWYKLQotICAgIHZpcnR1YWwgfkNTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0KLSAgICB2b2lkIGNsZWFu
dXAoKTsKLQotICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLQotICAgIC8qCi0gICAgICogY29tcHV0ZXMgYSBsZW5ndGggaW4gcGl4ZWxz
IG91dCBvZiB0aGUgZ2l2ZW4gQ1NTVmFsdWUuIE5lZWQgdGhlIFJlbmRlclN0eWxlIHRvIGdldAot
ICAgICAqIHRoZSBmb250aW5mbyBpbiBjYXNlIHZhbCBpcyBkZWZpbmVkIGluIGVtIG9yIGV4Lgot
ICAgICAqCi0gICAgICogVGhlIG1ldHJpY3MgaGF2ZSB0byBiZSBhIGJpdCBkaWZmZXJlbnQgZm9y
IHNjcmVlbiBhbmQgcHJpbnRlciBvdXRwdXQuCi0gICAgICogRm9yIHNjcmVlbiBvdXRwdXQgd2Ug
YXNzdW1lIDEgaW5jaCA9PSA3MiBweCwgZm9yIHByaW50ZXIgd2UgYXNzdW1lIDMwMCBkcGkKLSAg
ICAgKgotICAgICAqIHRoaXMgaXMgc2NyZWVuL3ByaW50ZXIgZGVwZW5kZW50LCBzbyB3ZSBwcm9i
YWJseSBuZWVkIGEgY29uZmlnIG9wdGlvbiBmb3IgdGhpcywKLSAgICAgKiBhbmQgc29tZSB0b29s
IHRvIGNhbGlicmF0ZS4KLSAgICAgKi8KLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJT
dHlsZSopOwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKiwgZG91YmxlIG11
bHRpcGxpZXIpOwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxl
Kik7Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3Vi
bGUgbXVsdGlwbGllcik7Ci0gICAgc2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxl
Kik7Ci0gICAgc2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11
bHRpcGxpZXIpOwotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqLCBi
b29sIGFwcGx5Wm9vbUZhY3RvciA9IHRydWUpOwotCi0gICAgLy8gdXNlIHdpdGggY2FyZSEhIQot
ICAgIHZvaWQgc2V0UHJpbWl0aXZlVHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9
IHR5cGU7IH0KLSAgICB2b2lkIHNldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUs
IGRvdWJsZSBmbG9hdFZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0
VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVl
KCkgeyByZXR1cm4gbV92YWx1ZS5udW07IH0KLQotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUodW5z
aWduZWQgc2hvcnQgc3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIAotICAg
IENvdW50ZXIqIGdldENvdW50ZXJWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5
cGUgIT0gQ1NTX0NPVU5URVIgPyAwIDogbV92YWx1ZS5jb3VudGVyOwotICAgIH0KLQotICAgIFJl
Y3RJbXBsKiBnZXRSZWN0VmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9
IENTU19SRUNUID8gMCA6IG1fdmFsdWUucmVjdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRS
R0JDb2xvclZhbHVlKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SR0JD
T0xPUiA/IDAgOiBtX3ZhbHVlLnJnYmNvbG9yOwotICAgIH0KLQotICAgIFBhaXIqIGdldFBhaXJW
YWx1ZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUEFJUiA/IDAgOiBt
X3ZhbHVlLnBhaXI7Ci0gICAgfQotCi0jaWYgX19BUFBMRV9fCi0gICAgRGFzaGJvYXJkUmVnaW9u
ICpnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5
cGUgIT0gQ1NTX0RBU0hCT0FSRF9SRUdJT04gPyAwIDogbV92YWx1ZS5yZWdpb247Ci0gICAgfQot
I2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQcmltaXRpdmVWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNv
bnN0OwotCi0gICAgaW50IGdldElkZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nJiwgYm9vbCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLQotcHJvdGVjdGVkOgotICAgIGludCBtX3R5cGU7Ci0gICAgdW5pb24gewotICAg
ICAgICBpbnQgaWRlbnQ7Ci0gICAgICAgIGRvdWJsZSBudW07Ci0gICAgICAgIFN0cmluZ0ltcGwq
IHN0cmluZzsKLSAgICAgICAgQ291bnRlciogY291bnRlcjsKLSAgICAgICAgUmVjdEltcGwqIHJl
Y3Q7Ci0gICAgICAgIHVuc2lnbmVkIHJnYmNvbG9yOwotICAgICAgICBQYWlyKiBwYWlyOwotI2lm
IF9fQVBQTEVfXwotICAgICAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbjsKLSNlbmRpZgotICAg
IH0gbV92YWx1ZTsKLX07Ci0KLS8vIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5
IG1hcmdpbnMgaW4gcmVmbG93IHJvb3RzIChib2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgot
Ly8gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCBhIHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUg
X19xZW0gKGZvciBxdWlya3kgZW0pIGluc3RlYWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4g
IFdoZW4gdGhlIHF1aXJreSB2YWx1ZSBpcyB1c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUs
IHRoZSBtYXJnaW4gd2lsbAotLy8gY29sbGFwc2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgot
Y2xhc3MgQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQot
ewotcHVibGljOgotICAgIENTU1F1aXJrUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5
cGVzIHR5cGUpCi0gICAgICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUobnVtLCB0eXBlKSB7fQotCi0g
ICAgdmlydHVhbCBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLWNs
YXNzIENvdW50ZXIgOiBwdWJsaWMgU2hhcmVkPENvdW50ZXI+IHsKLXB1YmxpYzoKLSAgICBTdHJp
bmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIFN0cmlu
ZyBsaXN0U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xpc3RTdHlsZTsgfQotICAgIFN0cmluZyBz
ZXBhcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3NlcGFyYXRvcjsgfQotCi0gICAgU3RyaW5nIG1f
aWRlbnRpZmllcjsKLSAgICBTdHJpbmcgbV9saXN0U3R5bGU7Ci0gICAgU3RyaW5nIG1fc2VwYXJh
dG9yOwotfTsKLQotY2xhc3MgUmVjdEltcGwgOiBwdWJsaWMgU2hhcmVkPFJlY3RJbXBsPiB7Ci1w
dWJsaWM6Ci0gICAgdmlydHVhbCB+UmVjdEltcGwoKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQuZ2V0KCk7IH0KLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b20uZ2V0KCk7IH0KLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdC5nZXQoKTsg
fQotCi0gICAgdm9pZCBzZXRUb3AoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wKSB7
IG1fdG9wID0gdG9wOyB9Ci0gICAgdm9pZCBzZXRSaWdodChQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiByaWdodCkgeyBtX3JpZ2h0ID0gcmlnaHQ7IH0KLSAgICB2b2lkIHNldEJvdHRvbShQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBib3R0b20pIHsgbV9ib3R0b20gPSBib3R0b207
IH0KLSAgICB2b2lkIHNldExlZnQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVmdCkg
eyBtX2xlZnQgPSBsZWZ0OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG1fdG9wOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm90dG9tOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbV9sZWZ0OwotfTsKLQotLy8gQSBwcmltaXRpdmUgdmFsdWUgcmVwcmVzZW50
aW5nIGEgcGFpci4gIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9wZXJ0aWVzIGxpa2UgYm9yZGVyLXJh
ZGl1cywgYmFja2dyb3VuZC1zaXplL3Bvc2l0aW9uLAotLy8gYW5kIGJvcmRlci1zcGFjaW5nIChh
bGwgb2Ygd2hpY2ggYXJlIHNwYWNlLXNlcGFyYXRlZCBzZXRzIG9mIHR3byB2YWx1ZXMpLiAgQXQg
dGhlIG1vbWVudCB3ZSBhcmUgb25seSB1c2luZyBpdCBmb3IKLS8vIGJvcmRlci1yYWRpdXMgYW5k
IGJhY2tncm91bmQtc2l6ZSwgYnV0IChGSVhNRSkgYm9yZGVyLXNwYWNpbmcgYW5kIGJhY2tncm91
bmQtcG9zaXRpb24gY291bGQgYmUgY29udmVydGVkIG92ZXIgdG8gdXNlCi0vLyBpdCAoZWxpbWlu
YXRpbmcgc29tZSBleHRyYSAtd2Via2l0LSBpbnRlcm5hbCBwcm9wZXJ0aWVzKS4KLWNsYXNzIFBh
aXIgOiBwdWJsaWMgU2hhcmVkPFBhaXI+IHsKLXB1YmxpYzoKLSAgICBQYWlyKCkgOiBtX2ZpcnN0
KDApLCBtX3NlY29uZCgwKSB7IH0KLSAgICBQYWlyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGZpcnN0LCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpCi0gICAgICAg
IDogbV9maXJzdChmaXJzdCksIG1fc2Vjb25kKHNlY29uZCkgeyB9Ci0gICAgdmlydHVhbCB+UGFp
cigpOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9m
aXJzdC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJl
dHVybiBtX3NlY29uZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRGaXJzdChQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBmaXJzdCkgeyBtX2ZpcnN0ID0gZmlyc3Q7IH0KLSAgICB2b2lkIHNl
dFNlY29uZChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpIHsgbV9zZWNvbmQg
PSBzZWNvbmQ7IH0KLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bV9maXJzdDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kOwotfTsKLQot
Y2xhc3MgRGFzaGJvYXJkUmVnaW9uIDogcHVibGljIFJlY3RJbXBsIHsKLXB1YmxpYzoKLSAgICBE
YXNoYm9hcmRSZWdpb24oKSA6IG1faXNDaXJjbGUoMCksIG1faXNSZWN0YW5nbGUoMCkgeyB9Ci0K
LSAgICBSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiBtX25leHQ7Ci0gICAgU3RyaW5nIG1fbGFiZWw7
Ci0gICAgU3RyaW5nIG1fZ2VvbWV0cnlUeXBlOwotICAgIGJvb2wgbV9pc0NpcmNsZSA6IDE7Ci0g
ICAgYm9vbCBtX2lzUmVjdGFuZ2xlIDogMTsKLX07Ci0KLWNsYXNzIENTU0ltYWdlVmFsdWUgOiBw
dWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUsIHB1YmxpYyBDYWNoZWRPYmplY3RDbGllbnQKLXsKLXB1
YmxpYzoKLSAgICBDU1NJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJp
bmcmIHVybCwgU3R5bGVCYXNlKik7Ci0gICAgdmlydHVhbCB+Q1NTSW1hZ2VWYWx1ZSgpOwotCi0g
ICAgQ2FjaGVkSW1hZ2UqIGltYWdlKERvY0xvYWRlciopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2Fj
aGVkSW1hZ2UqIG1faW1hZ2U7Ci0gICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7Ci19OwotCi1jbGFz
cyBDU1NCb3JkZXJJbWFnZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAg
Q1NTQm9yZGVySW1hZ2VWYWx1ZSgpOwotICAgIENTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0
cjxDU1NJbWFnZVZhbHVlPiwKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4sIGludCBob3Jp
em9udGFsUnVsZSwgaW50IHZlcnRpY2FsUnVsZSk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7Ci0KLXB1YmxpYzoKLSAgICAvLyBUaGUgYm9yZGVyIGltYWdlLgotICAgIFJl
ZlB0cjxDU1NJbWFnZVZhbHVlPiBtX2ltYWdlOwotCi0gICAgLy8gVGhlc2UgZm91ciB2YWx1ZXMg
YXJlIHVzZWQgdG8gbWFrZSAiY3V0cyIgaW4gdGhlIGltYWdlLiAgVGhleSBjYW4gYmUgbnVtYmVy
cwotICAgIC8vIG9yIHBlcmNlbnRhZ2VzLgotICAgIFJlZlB0cjxSZWN0SW1wbD4gbV9pbWFnZVNs
aWNlUmVjdDsKLSAgICAKLSAgICAvLyBWYWx1ZXMgZm9yIGhvdyB0byBoYW5kbGUgdGhlIHNjYWxp
bmcvc3RyZXRjaGluZy90aWxpbmcgb2YgdGhlIGltYWdlIHNsaWNlcy4KLSAgICBpbnQgbV9ob3Jp
em9udGFsU2l6ZVJ1bGU7IC8vIFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIHdpZHRocyBvZiB0
aGUgdG9wL21pZGRsZS9ib3R0b20KLSAgICBpbnQgbV92ZXJ0aWNhbFNpemVSdWxlOyAvLyBSdWxl
IGZvciBob3cgdG8gYWRqdXN0IHRoZSBoZWlnaHRzIG9mIHRoZSBsZWZ0L21pZGRsZS9yaWdodAot
fTsKLQotY2xhc3MgRm9udEZhbWlseVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17
Ci1wdWJsaWM6Ci0gICAgRm9udEZhbWlseVZhbHVlKCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZz
dHJpbmcpOwotICAgIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGZvbnROYW1lKCkgY29uc3QgeyBy
ZXR1cm4gcGFyc2VkRm9udE5hbWU7IH0KLSAgICBpbnQgZ2VuZXJpY0ZhbWlseVR5cGUoKSBjb25z
dCB7IHJldHVybiBfZ2VuZXJpY0ZhbWlseVR5cGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNz
c1RleHQoKSBjb25zdDsKLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgcGFyc2VkRm9udE5hbWU7Ci1w
cml2YXRlOgotICAgIGludCBfZ2VuZXJpY0ZhbWlseVR5cGU7Ci19OwotCi1jbGFzcyBGb250VmFs
dWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhcmlhbnQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB3ZWlnaHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplOwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodDsKLSAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBmYW1pbHk7Ci19OwotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNo
YWRvdwotY2xhc3MgU2hhZG93VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAg
ICBTaGFkb3dWYWx1ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4LAotICAgICAgICBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5LAotICAgICAgICBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBibHVyLAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjb2xvcik7Ci0gICAgCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4geTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXI7Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcjsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi0vLyBhbm90aGVyIGhlbHBlciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkKLXsKK2NsYXNz
IENTU1Byb3BlcnR5IHsKIHB1YmxpYzoKICAgICBDU1NQcm9wZXJ0eShpbnQgcHJvcElELCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgaW50IHNob3J0
aGFuZElEID0gMCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKQotICAgICAgICA6IG1faWQocHJvcElE
KSwgbV9zaG9ydGhhbmRJRChzaG9ydGhhbmRJRCksIG1faW1wb3J0YW50KGltcG9ydGFudCksIG1f
aW1wbGljaXQoaW1wbGljaXQpLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICA6IG1faWQocHJvcElE
KQorICAgICAgICAsIG1fc2hvcnRoYW5kSUQoc2hvcnRoYW5kSUQpCisgICAgICAgICwgbV9pbXBv
cnRhbnQoaW1wb3J0YW50KQorICAgICAgICAsIG1faW1wbGljaXQoaW1wbGljaXQpCisgICAgICAg
ICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtNDgzLDc4ICs2OSw2IEBA
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBtX3ZhbHVlOwogfTsKIAotY2xhc3MgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbgotewotcHVibGljOgot
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQ
cm9wZXJ0eT4gJik7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFy
ZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJvcGVydGllcyk7
Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmb3BlcmF0b3I9KGNvbnN0IENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uICYpOwotCi0gICAgdm9pZCBzZXROb2RlKE5vZGUqIG5vZGUp
IHsgbV9ub2RlID0gbm9kZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlE
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVy
dHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJv
cGVydHlJRCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3Bl
cnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4
Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKLQotICAgIERlcHJlY2F0ZWRWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiB2YWx1ZXNJdGVyYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KLQotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHBy
b3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3RpZnlD
aGFuZ2VkID0gdHJ1ZSk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdl
ZCA9IHRydWUpCi0gICAgICAgIHsgRXhjZXB0aW9uQ29kZSBlYzsgcmV0dXJuIHNldFByb3BlcnR5
KHByb3BlcnR5SWQsIHZhbHVlLCBpbXBvcnRhbnQsIG5vdGlmeUNoYW5nZWQsIGVjKTsgfQotCi0g
ICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5n
ZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpCi0gICAgICAgIHsgRXhjZXB0aW9uQ29k
ZSBlYzsgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQsIGVj
KTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgdm9pZCBzZXRDaGFuZ2VkKCk7Ci0gCi0g
ICAgLy8gc2V0TGVuZ3RoUHJvcGVydHkgdHJlYXRzIGludGVnZXJzIGFzIHBpeGVscyEgKE5lZWRl
ZCBmb3IgY29udmVyc2lvbiBvZiBIVE1MIGF0dHJpYnV0ZXMuKQotICAgIHZvaWQgc2V0TGVuZ3Ro
UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0
YW50LCBib29sIG11bHRpTGVuZ3RoID0gZmFsc2UpOwotICAgIHZvaWQgc2V0U3RyaW5nUHJvcGVy
dHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOyAvLyBwYXJzZWQgc3RyaW5nIHZh
bHVlCi0gICAgdm9pZCBzZXRJbWFnZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIFVSTCwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7Ci0gCi0gICAgLy8gVGhlIGZvbGxvd2lu
ZyBwYXJzZXMgYW4gZW50aXJlIG5ldyBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICB2b2lkIHBhcnNl
RGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uKTsKLQotICAgIC8vIEJl
c2lkZXMgYWRkaW5nIHRoZSBwcm9wZXJ0aWVzLCB0aGlzIGFsc28gcmVtb3ZlcyBhbnkgZXhpc3Rp
bmcgcHJvcGVydGllcyB3aXRoIHRoZXNlIElEcy4KLSAgICAvLyBJdCBkb2VzIG5vIG5vdGlmaWNh
dGlvbiBzaW5jZSBpdCdzIGNhbGxlZCBieSB0aGUgcGFyc2VyLgotICAgIHZvaWQgYWRkUGFyc2Vk
UHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVz
KTsKLSAKLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5Qmxv
Y2tQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsK
LSAgICB2b2lkIHJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygpOwotICAgIHZvaWQgcmVtb3Zl
UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
dm9pZCBtZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYXJnT3ZlcnJpZGVz
T25Db25mbGljdCA9IHRydWUpOwotIAotcHJpdmF0ZToKLSAgICBTdHJpbmcgZ2V0U2hvcnRIYW5k
VmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyKSBjb25zdDsKLSAgICBTdHJp
bmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0OwotIAotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IG1fdmFsdWVzOwotICAgIE5vZGUqIG1fbm9kZTsK
LX07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTQ0MDYp
CisrKyBjc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDkg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAKLSNp
bmNsdWRlICJjc3NfcnVsZWltcGwuaCIKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCiAjaW5j
bHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb2RlLmgi
CkluZGV4OiBjc3MvRm9udFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0ZvbnRWYWx1ZS5oCShy
ZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9Gb250VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAs
Mzk1ICsyMCwxNCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBDU1NfY3NzX3ZhbHVlaW1wbF9oXwotI2RlZmluZSBDU1NfY3NzX3ZhbHVlaW1wbF9oXwor
I2lmbmRlZiBGb250VmFsdWVfSAorI2RlZmluZSBGb250VmFsdWVfSAogCi0jaW5jbHVkZSAiQ2Fj
aGVkT2JqZWN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiY3NzX2Jhc2UuaCIKLSNpbmNsdWRlICJEZXBy
ZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRl
ICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQot
Y2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKKyNpbmNsdWRlICJDU1NWYWx1ZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xh
c3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDb3VudGVyOwotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3Mg
Tm9kZTsKLWNsYXNzIFBhaXI7Ci1jbGFzcyBSZWN0SW1wbDsKLWNsYXNzIFJlbmRlclN0eWxlOwot
Ci0jaWYgX19BUFBMRV9fCi1jbGFzcyBEYXNoYm9hcmRSZWdpb247Ci0jZW5kaWYKLQotdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotZXh0ZXJuIGNvbnN0IGludCBpbmhlcml0YWJsZVByb3Bl
cnRpZXNbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXM7
Ci0KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgU3R5bGVCYXNlIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURlY2xhcmF0aW9uKCk7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0KLSAgICBD
U1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9
IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHko
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0
aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgYm9vbCBpc1Byb3BlcnR5SW1w
bGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIAotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5
SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQg
cHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRo
YW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVy
dHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBzZXRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyByZW1vdmVQ
cm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNv
cHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAKLSAgICB2b2lkIGRpZmYoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2ln
bmVkIGxlbmd0aCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQotcHJpdmF0ZToKLSAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci0gICAgQ1NTU3R5bGVEZWNsYXJh
dGlvbiYgb3BlcmF0b3I9KGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci19OwotCi1jbGFz
cyBDU1NWYWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UKLXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRU
eXBlcyB7Ci0gICAgICAgIENTU19JTkhFUklUID0gMCwKLSAgICAgICAgQ1NTX1BSSU1JVElWRV9W
QUxVRSA9IDEsCi0gICAgICAgIENTU19WQUxVRV9MSVNUID0gMiwKLSAgICAgICAgQ1NTX0NVU1RP
TSA9IDMsCi0gICAgICAgIENTU19JTklUSUFMID0gNAotICAgIH07Ci0KLSAgICBDU1NWYWx1ZSgp
IDogU3R5bGVCYXNlKDApIHsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NfQ1VTVE9NOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJikg
eyB9IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1
ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJl
dHVybiBmYWxzZTsgfQotfTsKLQotY2xhc3MgQ1NTSW5oZXJpdGVkVmFsdWUgOiBwdWJsaWMgQ1NT
VmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlw
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLX07Ci0KLWNs
YXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZp
cnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTVmFsdWVMaXN0IDogcHVibGlj
IENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTVmFsdWVMaXN0KCk7Ci0KLSAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5jb3VudCgpOyB9Ci0g
ICAgQ1NTVmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlcy5hdChp
bmRleCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlTGlzdCgpIHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7Ci0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8
Q1NTVmFsdWU+IG1fdmFsdWVzOwotfTsKLQotCi1jbGFzcyBDU1NQcmltaXRpdmVWYWx1ZSA6IHB1
YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5cGVzIHsKLSAgICAgICAg
Q1NTX1VOS05PV04gPSAwLAotICAgICAgICBDU1NfTlVNQkVSID0gMSwKLSAgICAgICAgQ1NTX1BF
UkNFTlRBR0UgPSAyLAotICAgICAgICBDU1NfRU1TID0gMywKLSAgICAgICAgQ1NTX0VYUyA9IDQs
Ci0gICAgICAgIENTU19QWCA9IDUsCi0gICAgICAgIENTU19DTSA9IDYsCi0gICAgICAgIENTU19N
TSA9IDcsCi0gICAgICAgIENTU19JTiA9IDgsCi0gICAgICAgIENTU19QVCA9IDksCi0gICAgICAg
IENTU19QQyA9IDEwLAotICAgICAgICBDU1NfREVHID0gMTEsCi0gICAgICAgIENTU19SQUQgPSAx
MiwKLSAgICAgICAgQ1NTX0dSQUQgPSAxMywKLSAgICAgICAgQ1NTX01TID0gMTQsCi0gICAgICAg
IENTU19TID0gMTUsCi0gICAgICAgIENTU19IWiA9IDE2LAotICAgICAgICBDU1NfS0haID0gMTcs
Ci0gICAgICAgIENTU19ESU1FTlNJT04gPSAxOCwKLSAgICAgICAgQ1NTX1NUUklORyA9IDE5LAot
ICAgICAgICBDU1NfVVJJID0gMjAsCi0gICAgICAgIENTU19JREVOVCA9IDIxLAotICAgICAgICBD
U1NfQVRUUiA9IDIyLAotICAgICAgICBDU1NfQ09VTlRFUiA9IDIzLAotICAgICAgICBDU1NfUkVD
VCA9IDI0LAotICAgICAgICBDU1NfUkdCQ09MT1IgPSAyNSwKLSAgICAgICAgQ1NTX1BBSVIgPSAx
MDAsIC8vIFdlIGVudmlzaW9uIHRoaXMgYmVpbmcgZXhwb3NlZCBhcyBhIG1lYW5zIG9mIGdldHRp
bmcgY29tcHV0ZWQgc3R5bGUgdmFsdWVzIGZvciBwYWlycyAoYm9yZGVyLXNwYWNpbmcvcmFkaXVz
LCBiYWNrZ3JvdW5kLXBvc2l0aW9uLCBldGMuKQotICAgICAgICBDU1NfREFTSEJPQVJEX1JFR0lP
TiA9IDEwMSAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0aGlzIGRvaW5nIGFzIGEgcHJpbWl0
aXZlIHZhbHVlPyBJdCBzaG91bGQgbm90IGJlIQotICAgIH07Ci0KLSAgICAvLyBGSVhNRTogaW50
IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0b28gdHJpY2t5IGZvciBjb2xvciB2cy4gaWRl
bnQKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGludCBp
ZGVudCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlLCBVbml0VHlwZXMpOwotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYsIFVuaXRUeXBlcyk7Ci0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFz
c1JlZlB0cjxSZWN0SW1wbD4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKHVuc2lnbmVkIGNvbG9y
KTsgLy8gUkdCIHZhbHVlCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxQYWlyPik7
Ci0KLSNpZiBfX0FQUExFX18KLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPERhc2hi
b2FyZFJlZ2lvbj4pOyAvLyBGSVhNRTogV2h5IGlzIGRhc2hib2FyZCByZWdpb24gYSBwcmltaXRp
dmUgdmFsdWU/IFRoaXMgbWFrZXMgbm8gc2Vuc2UuCi0jZW5kaWYKLQotICAgIHZpcnR1YWwgfkNT
U1ByaW1pdGl2ZVZhbHVlKCk7Ci0KLSAgICB2b2lkIGNsZWFudXAoKTsKLQotICAgIHVuc2lnbmVk
IHNob3J0IHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIC8q
Ci0gICAgICogY29tcHV0ZXMgYSBsZW5ndGggaW4gcGl4ZWxzIG91dCBvZiB0aGUgZ2l2ZW4gQ1NT
VmFsdWUuIE5lZWQgdGhlIFJlbmRlclN0eWxlIHRvIGdldAotICAgICAqIHRoZSBmb250aW5mbyBp
biBjYXNlIHZhbCBpcyBkZWZpbmVkIGluIGVtIG9yIGV4LgotICAgICAqCi0gICAgICogVGhlIG1l
dHJpY3MgaGF2ZSB0byBiZSBhIGJpdCBkaWZmZXJlbnQgZm9yIHNjcmVlbiBhbmQgcHJpbnRlciBv
dXRwdXQuCi0gICAgICogRm9yIHNjcmVlbiBvdXRwdXQgd2UgYXNzdW1lIDEgaW5jaCA9PSA3MiBw
eCwgZm9yIHByaW50ZXIgd2UgYXNzdW1lIDMwMCBkcGkKLSAgICAgKgotICAgICAqIHRoaXMgaXMg
c2NyZWVuL3ByaW50ZXIgZGVwZW5kZW50LCBzbyB3ZSBwcm9iYWJseSBuZWVkIGEgY29uZmlnIG9w
dGlvbiBmb3IgdGhpcywKLSAgICAgKiBhbmQgc29tZSB0b29sIHRvIGNhbGlicmF0ZS4KLSAgICAg
Ki8KLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSopOwotICAgIGludCBjb21w
dXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIGludCBj
b21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKik7Ci0gICAgaW50IGNvbXB1dGVM
ZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0gICAg
c2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKik7Ci0gICAgc2hvcnQgY29tcHV0
ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIGRvdWJs
ZSBjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqLCBib29sIGFwcGx5Wm9vbUZhY3RvciA9
IHRydWUpOwotCi0gICAgLy8gdXNlIHdpdGggY2FyZSEhIQotICAgIHZvaWQgc2V0UHJpbWl0aXZl
VHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KLSAgICB2b2lkIHNl
dEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9hdFZhbHVlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQg
dW5pdFR5cGUpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZS5u
dW07IH0KLQotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUodW5zaWduZWQgc2hvcnQgc3RyaW5nVHlw
ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmlu
ZyBnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIAotICAgIENvdW50ZXIqIGdldENvdW50ZXJW
YWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0NPVU5URVIgPyAw
IDogbV92YWx1ZS5jb3VudGVyOwotICAgIH0KLQotICAgIFJlY3RJbXBsKiBnZXRSZWN0VmFsdWUg
KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SRUNUID8gMCA6IG1fdmFs
dWUucmVjdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRSR0JDb2xvclZhbHVlKCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SR0JDT0xPUiA/IDAgOiBtX3ZhbHVlLnJn
YmNvbG9yOwotICAgIH0KLQotICAgIFBhaXIqIGdldFBhaXJWYWx1ZSgpIGNvbnN0IHsKLSAgICAg
ICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUEFJUiA/IDAgOiBtX3ZhbHVlLnBhaXI7Ci0gICAgfQot
Ci0jaWYgX19BUFBMRV9fCi0gICAgRGFzaGJvYXJkUmVnaW9uICpnZXREYXNoYm9hcmRSZWdpb25W
YWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0RBU0hCT0FSRF9S
RUdJT04gPyAwIDogbV92YWx1ZS5yZWdpb247Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNQcmltaXRpdmVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAgaW50IGdldElk
ZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9v
bCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJvdGVjdGVk
OgotICAgIGludCBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBpbnQgaWRlbnQ7Ci0gICAg
ICAgIGRvdWJsZSBudW07Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgQ291
bnRlciogY291bnRlcjsKLSAgICAgICAgUmVjdEltcGwqIHJlY3Q7Ci0gICAgICAgIHVuc2lnbmVk
IHJnYmNvbG9yOwotICAgICAgICBQYWlyKiBwYWlyOwotI2lmIF9fQVBQTEVfXwotICAgICAgICBE
YXNoYm9hcmRSZWdpb24qIHJlZ2lvbjsKLSNlbmRpZgotICAgIH0gbV92YWx1ZTsKLX07Ci0KLS8v
IFRoaXMgdmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5IG1hcmdpbnMgaW4gcmVmbG93IHJv
b3RzIChib2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgotLy8gVGhlIGJhc2ljIGlkZWEgaXMg
dGhhdCBhIHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0gKGZvciBxdWlya3kgZW0p
IGluc3RlYWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4gIFdoZW4gdGhlIHF1aXJreSB2YWx1
ZSBpcyB1c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZSBtYXJnaW4gd2lsbAotLy8g
Y29sbGFwc2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgotY2xhc3MgQ1NTUXVpcmtQcmltaXRp
dmVWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgotICAgIENTU1F1
aXJrUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi0gICAgICAgIDog
Q1NTUHJpbWl0aXZlVmFsdWUobnVtLCB0eXBlKSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzUXVp
cmtWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLWNsYXNzIENvdW50ZXIgOiBwdWJsaWMg
U2hhcmVkPENvdW50ZXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIFN0cmluZyBsaXN0U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX2xpc3RTdHlsZTsgfQotICAgIFN0cmluZyBzZXBhcmF0b3IoKSBjb25zdCB7IHJl
dHVybiBtX3NlcGFyYXRvcjsgfQotCi0gICAgU3RyaW5nIG1faWRlbnRpZmllcjsKLSAgICBTdHJp
bmcgbV9saXN0U3R5bGU7Ci0gICAgU3RyaW5nIG1fc2VwYXJhdG9yOwotfTsKLQotY2xhc3MgUmVj
dEltcGwgOiBwdWJsaWMgU2hhcmVkPFJlY3RJbXBsPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
UmVjdEltcGwoKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVy
biBtX3RvcC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHQuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogYm90dG9tKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3R0b20uZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
bGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRUb3Ao
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9wID0gdG9wOyB9Ci0gICAg
dm9pZCBzZXRSaWdodChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByaWdodCkgeyBtX3Jp
Z2h0ID0gcmlnaHQ7IH0KLSAgICB2b2lkIHNldEJvdHRvbShQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBib3R0b20pIHsgbV9ib3R0b20gPSBib3R0b207IH0KLSAgICB2b2lkIHNldExlZnQo
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xlZnQgPSBsZWZ0OyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9wOwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG1fYm90dG9tOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0Owot
fTsKLQotLy8gQSBwcmltaXRpdmUgdmFsdWUgcmVwcmVzZW50aW5nIGEgcGFpci4gIFRoaXMgaXMg
dXNlZnVsIGZvciBwcm9wZXJ0aWVzIGxpa2UgYm9yZGVyLXJhZGl1cywgYmFja2dyb3VuZC1zaXpl
L3Bvc2l0aW9uLAotLy8gYW5kIGJvcmRlci1zcGFjaW5nIChhbGwgb2Ygd2hpY2ggYXJlIHNwYWNl
LXNlcGFyYXRlZCBzZXRzIG9mIHR3byB2YWx1ZXMpLiAgQXQgdGhlIG1vbWVudCB3ZSBhcmUgb25s
eSB1c2luZyBpdCBmb3IKLS8vIGJvcmRlci1yYWRpdXMgYW5kIGJhY2tncm91bmQtc2l6ZSwgYnV0
IChGSVhNRSkgYm9yZGVyLXNwYWNpbmcgYW5kIGJhY2tncm91bmQtcG9zaXRpb24gY291bGQgYmUg
Y29udmVydGVkIG92ZXIgdG8gdXNlCi0vLyBpdCAoZWxpbWluYXRpbmcgc29tZSBleHRyYSAtd2Vi
a2l0LSBpbnRlcm5hbCBwcm9wZXJ0aWVzKS4KLWNsYXNzIFBhaXIgOiBwdWJsaWMgU2hhcmVkPFBh
aXI+IHsKLXB1YmxpYzoKLSAgICBQYWlyKCkgOiBtX2ZpcnN0KDApLCBtX3NlY29uZCgwKSB7IH0K
LSAgICBQYWlyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0LCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpCi0gICAgICAgIDogbV9maXJzdChmaXJzdCksIG1f
c2Vjb25kKHNlY29uZCkgeyB9Ci0gICAgdmlydHVhbCB+UGFpcigpOwotCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdC5nZXQoKTsgfQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBtX3NlY29uZC5nZXQoKTsg
fQotCi0gICAgdm9pZCBzZXRGaXJzdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJz
dCkgeyBtX2ZpcnN0ID0gZmlyc3Q7IH0KLSAgICB2b2lkIHNldFNlY29uZChQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpIHsgbV9zZWNvbmQgPSBzZWNvbmQ7IH0KLQotcHJvdGVj
dGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdDsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kOwotfTsKLQotY2xhc3MgRGFzaGJvYXJkUmVnaW9u
IDogcHVibGljIFJlY3RJbXBsIHsKLXB1YmxpYzoKLSAgICBEYXNoYm9hcmRSZWdpb24oKSA6IG1f
aXNDaXJjbGUoMCksIG1faXNSZWN0YW5nbGUoMCkgeyB9Ci0KLSAgICBSZWZQdHI8RGFzaGJvYXJk
UmVnaW9uPiBtX25leHQ7Ci0gICAgU3RyaW5nIG1fbGFiZWw7Ci0gICAgU3RyaW5nIG1fZ2VvbWV0
cnlUeXBlOwotICAgIGJvb2wgbV9pc0NpcmNsZSA6IDE7Ci0gICAgYm9vbCBtX2lzUmVjdGFuZ2xl
IDogMTsKLX07Ci0KLWNsYXNzIENTU0ltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFs
dWUsIHB1YmxpYyBDYWNoZWRPYmplY3RDbGllbnQKLXsKLXB1YmxpYzoKLSAgICBDU1NJbWFnZVZh
bHVlKCk7Ci0gICAgQ1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJpbmcmIHVybCwgU3R5bGVCYXNlKik7
Ci0gICAgdmlydHVhbCB+Q1NTSW1hZ2VWYWx1ZSgpOwotCi0gICAgQ2FjaGVkSW1hZ2UqIGltYWdl
KERvY0xvYWRlciopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2FjaGVkSW1hZ2UqIG1faW1hZ2U7Ci0g
ICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7Ci19OwotCi1jbGFzcyBDU1NCb3JkZXJJbWFnZVZhbHVl
IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZSgp
OwotICAgIENTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiwKLSAg
ICAgICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4sIGludCBob3Jpem9udGFsUnVsZSwgaW50IHZlcnRp
Y2FsUnVsZSk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLXB1Ymxp
YzoKLSAgICAvLyBUaGUgYm9yZGVyIGltYWdlLgotICAgIFJlZlB0cjxDU1NJbWFnZVZhbHVlPiBt
X2ltYWdlOwotCi0gICAgLy8gVGhlc2UgZm91ciB2YWx1ZXMgYXJlIHVzZWQgdG8gbWFrZSAiY3V0
cyIgaW4gdGhlIGltYWdlLiAgVGhleSBjYW4gYmUgbnVtYmVycwotICAgIC8vIG9yIHBlcmNlbnRh
Z2VzLgotICAgIFJlZlB0cjxSZWN0SW1wbD4gbV9pbWFnZVNsaWNlUmVjdDsKLSAgICAKLSAgICAv
LyBWYWx1ZXMgZm9yIGhvdyB0byBoYW5kbGUgdGhlIHNjYWxpbmcvc3RyZXRjaGluZy90aWxpbmcg
b2YgdGhlIGltYWdlIHNsaWNlcy4KLSAgICBpbnQgbV9ob3Jpem9udGFsU2l6ZVJ1bGU7IC8vIFJ1
bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIHdpZHRocyBvZiB0aGUgdG9wL21pZGRsZS9ib3R0b20K
LSAgICBpbnQgbV92ZXJ0aWNhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8gYWRqdXN0IHRo
ZSBoZWlnaHRzIG9mIHRoZSBsZWZ0L21pZGRsZS9yaWdodAotfTsKLQotY2xhc3MgRm9udEZhbWls
eVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgRm9udEZh
bWlseVZhbHVlKCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpOwotICAgIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcmIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gcGFyc2VkRm9udE5hbWU7
IH0KLSAgICBpbnQgZ2VuZXJpY0ZhbWlseVR5cGUoKSBjb25zdCB7IHJldHVybiBfZ2VuZXJpY0Zh
bWlseVR5cGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAg
IERlcHJlY2F0ZWRTdHJpbmcgcGFyc2VkRm9udE5hbWU7Ci1wcml2YXRlOgotICAgIGludCBfZ2Vu
ZXJpY0ZhbWlseVR5cGU7Ci19OworY2xhc3MgQ1NTVmFsdWVMaXN0OwogCiBjbGFzcyBGb250VmFs
dWUgOiBwdWJsaWMgQ1NTVmFsdWUKIHsKQEAgLTQyNSwxMzYgKzQ0LDYgQEAKICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBmYW1pbHk7CiB9OwogCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQg
Ym94LXNoYWRvdwotY2xhc3MgU2hhZG93VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1Ymxp
YzoKLSAgICBTaGFkb3dWYWx1ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4LAotICAg
ICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5LAotICAgICAgICBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBibHVyLAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb2xvcik7Ci0gICAgCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4OwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4geTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXI7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcjsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi0vLyBhbm90aGVyIGhlbHBlciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkKLXsK
LXB1YmxpYzoKLSAgICBDU1NQcm9wZXJ0eShpbnQgcHJvcElELCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgaW50IHNob3J0aGFuZElEID0gMCwgYm9v
bCBpbXBsaWNpdCA9IGZhbHNlKQotICAgICAgICA6IG1faWQocHJvcElEKSwgbV9zaG9ydGhhbmRJ
RChzaG9ydGhhbmRJRCksIG1faW1wb3J0YW50KGltcG9ydGFudCksIG1faW1wbGljaXQoaW1wbGlj
aXQpLCBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ1NTUHJvcGVydHkg
Jm9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eSYgbykKLSAgICB7Ci0gICAgICAgIG1faWQgPSBv
Lm1faWQ7Ci0gICAgICAgIG1fc2hvcnRoYW5kSUQgPSBvLm1fc2hvcnRoYW5kSUQ7Ci0gICAgICAg
IG1faW1wb3J0YW50ID0gby5tX2ltcG9ydGFudDsKLSAgICAgICAgbV92YWx1ZSA9IG8ubV92YWx1
ZTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAKLSAgICBpbnQgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW50IHNob3J0aGFuZElEKCkgY29uc3QgeyByZXR1cm4g
bV9zaG9ydGhhbmRJRDsgfQotICAgIAotICAgIGJvb2wgaXNJbXBvcnRhbnQoKSBjb25zdCB7IHJl
dHVybiBtX2ltcG9ydGFudDsgfQotICAgIGJvb2wgaXNJbXBsaWNpdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbGljaXQ7IH0KLQotICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWUuZ2V0KCk7IH0KLSAgICAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAg
Ly8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZml0cyBpbiA0IGJ5dGVzLgotICAgIGludCBtX2lk
OwotICAgIGludCBtX3Nob3J0aGFuZElEOyAgLy8gSWYgdGhpcyBwcm9wZXJ0eSB3YXMgc2V0IGFz
IHBhcnQgb2YgYSBzaG9ydGhhbmQsIGdpdmVzIHRoZSBzaG9ydGhhbmQuCi0gICAgYm9vbCBtX2lt
cG9ydGFudCA6IDE7Ci0gICAgYm9vbCBtX2ltcGxpY2l0IDogMTsgLy8gV2hldGhlciBvciBub3Qg
dGhlIHByb3BlcnR5IHdhcyBzZXQgaW1wbGljaXRseSBhcyB0aGUgcmVzdWx0IG9mIGEgc2hvcnRo
YW5kLgotCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAmLCBj
b25zdCBDU1NQcm9wZXJ0eSAmKTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV92YWx1ZTsKLX07
Ci0KLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVj
bGFyYXRpb24KLXsKLXB1YmxpYzoKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwot
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpOwotICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IERl
cHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+ICYpOwotICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3Qg
KiwgaW50IG51bVByb3BlcnRpZXMpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24g
Jm9wZXJhdG9yPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmKTsKLQotICAgIHZv
aWQgc2V0Tm9kZShOb2RlKiBub2RlKSB7IG1fbm9kZSA9IG5vZGU7IH0KLQotICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVl
KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZh
bHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQ
cmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVy
dHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1By
b3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lk
IHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCk7
Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gdmFs
dWVzSXRlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9Ci0KLSAgICBi
b29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50
ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpOwotICAgIGJvb2wgc2V0UHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBi
b29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFByb3BlcnR5
KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZh
bHNlLCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUg
ZWM7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZSwgaW1wb3J0YW50LCBub3Rp
ZnlDaGFuZ2VkLCBlYyk7IH0KLQotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQot
ICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlELCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0KLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHZv
aWQgc2V0Q2hhbmdlZCgpOwotIAotICAgIC8vIHNldExlbmd0aFByb3BlcnR5IHRyZWF0cyBpbnRl
Z2VycyBhcyBwaXhlbHMhIChOZWVkZWQgZm9yIGNvbnZlcnNpb24gb2YgSFRNTCBhdHRyaWJ1dGVz
LikKLSAgICB2b2lkIHNldExlbmd0aFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBtdWx0aUxlbmd0aCA9IGZhbHNlKTsKLSAg
ICB2b2lkIHNldFN0cmluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzLCBib29sIGltcG9ydGFudCA9IGZhbHNl
KTsgLy8gcGFyc2VkIHN0cmluZyB2YWx1ZQotICAgIHZvaWQgc2V0SW1hZ2VQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBVUkwsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwot
IAotICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFyc2VzIGFuIGVudGlyZSBuZXcgc3R5bGUgZGVjbGFy
YXRpb24uCi0gICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNs
YXJhdGlvbik7Ci0KLSAgICAvLyBCZXNpZGVzIGFkZGluZyB0aGUgcHJvcGVydGllcywgdGhpcyBh
bHNvIHJlbW92ZXMgYW55IGV4aXN0aW5nIHByb3BlcnRpZXMgd2l0aCB0aGVzZSBJRHMuCi0gICAg
Ly8gSXQgZG9lcyBubyBub3RpZmljYXRpb24gc2luY2UgaXQncyBjYWxsZWQgYnkgdGhlIHBhcnNl
ci4KLSAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkgKiBjb25z
dCAqLCBpbnQgbnVtUHJvcGVydGllcyk7Ci0gCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gY29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0OwotICAgIHZvaWQgcmVt
b3ZlQmxvY2tQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVJbmhlcml0YWJsZVByb3BlcnRp
ZXMoKTsKLSAgICB2b2lkIHJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKLQotICAgIHZvaWQgbWVyZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QgPSB0cnVlKTsKLSAKLXByaXZhdGU6Ci0g
ICAgU3RyaW5nIGdldFNob3J0SGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51
bWJlcikgY29uc3Q7Ci0gICAgU3RyaW5nIGdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0aWVz
KSBjb25zdDsKLSAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBtX3ZhbHVl
czsKLSAgICBOb2RlKiBtX25vZGU7Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5k
ZXg6IGNzcy9NZWRpYUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9NZWRpYUxpc3QuY3BwCShy
ZXZpc2lvbiAxNDQwNikKKysrIGNzcy9NZWRpYUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0Lmgi
CiAKKyNpbmNsdWRlICJDU1NSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2lu
Y2x1ZGUgImNzc19ydWxlaW1wbC5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IGNzcy9DU1NNZWRpYVJ1bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGNzcy9DU1NNZWRpYVJ1bGUuY3BwCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9D
U1NNZWRpYVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNjggKzIwLDM4IEBACiAgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiY3NzX3J1bGVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTTWVkaWFS
dWxlLmgiCiAKLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hl
ZXQuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgi
CisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNs
dWRlICJNZWRpYUxpc3QuaCIKLSNpbmNsdWRlICJjc3NwYXJzZXIuaCIKLSNpbmNsdWRlIDxLVVJM
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTU3R5bGVTaGVldCogQ1NTUnVsZTo6cGFy
ZW50U3R5bGVTaGVldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChwYXJlbnQoKSAmJiBwYXJlbnQo
KS0+aXNDU1NTdHlsZVNoZWV0KCkpID8gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHBhcmVu
dCgpKSA6IDA7Ci19Ci0KLUNTU1J1bGUqIENTU1J1bGU6OnBhcmVudFJ1bGUoKSBjb25zdAotewot
ICAgIHJldHVybiAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0
PENTU1J1bGUqPihwYXJlbnQoKSkgOiAwOwotfQotCi1TdHJpbmcgQ1NTUnVsZTo6Y3NzVGV4dCgp
IGNvbnN0Ci17Ci0gICAgLy8gIyMjCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIENT
U1J1bGU6OnNldENzc1RleHQoU3RyaW5nIC8qc3RyKi8pCi17Ci0gICAgLy8gIyMjCi19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NGb250RmFjZVJ1bGU6OkNTU0ZvbnRGYWNlUnVsZShT
dHlsZUJhc2UgKnBhcmVudCkKLSAgICA6IENTU1J1bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9
IEZPTlRfRkFDRV9SVUxFOwotfQotCi1DU1NGb250RmFjZVJ1bGU6On5DU1NGb250RmFjZVJ1bGUo
KQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NJbXBvcnRSdWxlOjpDU1NJbXBv
cnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlzdCog
bWVkaWEpCi0gICAgOiBDU1NSdWxlKHBhcmVudCkKLSAgICAsIG1fc3RySHJlZihocmVmKQotICAg
ICwgbV9sc3RNZWRpYShtZWRpYSkKLSAgICAsIG1fY2FjaGVkU2hlZXQoMCkKLSAgICAsIG1fbG9h
ZGluZyhmYWxzZSkKLXsKLSAgICBtX3R5cGUgPSBJTVBPUlRfUlVMRTsKLQotICAgIGlmIChtX2xz
dE1lZGlhKQotICAgICAgICBtX2xzdE1lZGlhLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlzdCh0aGlzLCBTdHJpbmcoKSk7Ci19Ci0K
LUNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRSdWxlKCkKLXsKLSAgICBpZiAobV9sc3RNZWRpYSkK
LSAgICAgICAgbV9sc3RNZWRpYS0+c2V0UGFyZW50KDApOwotICAgIGlmIChtX3N0eWxlU2hlZXQp
Ci0gICAgICAgIG1fc3R5bGVTaGVldC0+c2V0UGFyZW50KDApOwotICAgIGlmIChtX2NhY2hlZFNo
ZWV0KQotICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKLX0KLQotdm9pZCBDU1NJ
bXBvcnRSdWxlOjpzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyAmdXJsLCBjb25zdCBTdHJpbmcg
JnNoZWV0KQotewotICAgIGlmIChtX3N0eWxlU2hlZXQpCi0gICAgICAgIG1fc3R5bGVTaGVldC0+
c2V0UGFyZW50KDApOwotICAgIG1fc3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMs
IHVybCk7Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICpwYXJlbnQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7
Ci0gICAgbV9zdHlsZVNoZWV0LT5wYXJzZVN0cmluZyhzaGVldCwgIXBhcmVudCB8fCBwYXJlbnQt
PnVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0KLSAgICBjaGVj
a0xvYWRlZCgpOwotfQotCi1ib29sIENTU0ltcG9ydFJ1bGU6OmlzTG9hZGluZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbG9hZGluZyB8fCAobV9zdHlsZVNoZWV0ICYmIG1fc3R5bGVTaGVldC0+
aXNMb2FkaW5nKCkpOwotfQotCi12b2lkIENTU0ltcG9ydFJ1bGU6Omluc2VydGVkSW50b1BhcmVu
dCgpCi17Ci0gICAgU3R5bGVCYXNlKiByb290ID0gdGhpczsKLSAgICBTdHlsZUJhc2UqIHBhcmVu
dDsKLSAgICB3aGlsZSAoKHBhcmVudCA9IHJvb3QtPnBhcmVudCgpKSkKLSAgICAgICAgcm9vdCA9
IHBhcmVudDsKLSAgICBpZiAoIXJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICByZXR1
cm47Ci0gICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0
Kj4ocm9vdCktPmRvY0xvYWRlcigpOwotICAgIGlmICghZG9jTG9hZGVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTdHJpbmcgYWJzSHJlZiA9IG1fc3RySHJlZjsKLSAgICBDU1NTdHlsZVNoZWV0
KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICBpZiAoIXBhcmVudFNoZWV0
LT5ocmVmKCkuaXNOdWxsKCkpCi0gICAgICAgIC8vIHVzZSBwYXJlbnQgc3R5bGVoZWV0J3MgVVJM
IGFzIHRoZSBiYXNlIFVSTAotICAgICAgICBhYnNIcmVmID0gS1VSTChwYXJlbnRTaGVldC0+aHJl
ZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgbV9zdHJIcmVmLmRlcHJlY2F0ZWRTdHJpbmcoKSkudXJs
KCk7Ci0KLSAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYg
d2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAotICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0
aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgotICAgIGZvciAocGFyZW50ID0gc3RhdGlj
X2Nhc3Q8U3R5bGVCYXNlKj4odGhpcyktPnBhcmVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVu
dC0+cGFyZW50KCkpCi0gICAgICAgIGlmIChhYnNIcmVmID09IHBhcmVudC0+YmFzZVVSTCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vICMjIyBwYXNzIGNvcnJlY3QgY2hhcnNl
dCBoZXJlISEKLSAgICBtX2NhY2hlZFNoZWV0ID0gZG9jTG9hZGVyLT5yZXF1ZXN0U3R5bGVTaGVl
dChhYnNIcmVmLCBEZXByZWNhdGVkU3RyaW5nOjpudWxsKTsKLSAgICBpZiAobV9jYWNoZWRTaGVl
dCkgewotICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwotICAgICAgICBtX2NhY2hlZFNoZWV0LT5y
ZWYodGhpcyk7Ci0gICAgfQotfQotCi1TdHJpbmcgQ1NTSW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIHJlc3VsdCA9ICJAaW1wb3J0IHVybChcIiI7Ci0gICAgcmVzdWx0
ICs9IG1fc3RySHJlZjsKLSAgICByZXN1bHQgKz0gIlwiKSI7Ci0KLSAgICBpZiAobV9sc3RNZWRp
YSkgewotICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gbV9sc3RNZWRp
YS0+bWVkaWFUZXh0KCk7Ci0gICAgfQotICAgIHJlc3VsdCArPSAiOyI7Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ1NTTWVkaWFSdWxlOjpDU1NNZWRp
YVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50LCBNZWRpYUxpc3QgKm1lZGlhTGlzdCwgQ1NTUnVsZUxp
c3QgKnJ1bGVMaXN0ICkKICAgICA6ICAgQ1NTUnVsZSggcGFyZW50ICkKKyAgICAsIG1fbHN0TWVk
aWEobWVkaWFMaXN0KQorICAgICwgbV9sc3RDU1NSdWxlcyhydWxlTGlzdCkKIHsKICAgICBtX3R5
cGUgPSBNRURJQV9SVUxFOwotICAgIG1fbHN0TWVkaWEgPSBtZWRpYUxpc3Q7Ci0gICAgbV9sc3RD
U1NSdWxlcyA9IHJ1bGVMaXN0OwogfQogCiBDU1NNZWRpYVJ1bGU6OkNTU01lZGlhUnVsZShTdHls
ZUJhc2UgKnBhcmVudCkKICAgICA6ICAgQ1NTUnVsZSggcGFyZW50ICkKKyAgICAsIG1fbHN0TWVk
aWEoMCkKKyAgICAsIG1fbHN0Q1NTUnVsZXMobmV3IENTU1J1bGVMaXN0KCkpCisKIHsKICAgICBt
X3R5cGUgPSBNRURJQV9SVUxFOwotICAgIG1fbHN0TWVkaWEgPSAwOwotICAgIG1fbHN0Q1NTUnVs
ZXMgPSBuZXcgQ1NTUnVsZUxpc3QoKTsKIH0KIAogQ1NTTWVkaWFSdWxlOjpDU1NNZWRpYVJ1bGUo
IFN0eWxlQmFzZSAqcGFyZW50LCBjb25zdCBTdHJpbmcgJm1lZGlhICkKIDogICBDU1NSdWxlKCBw
YXJlbnQgKQorICAgICwgbV9sc3RNZWRpYShuZXcgTWVkaWFMaXN0KHRoaXMsIG1lZGlhKSkKKyAg
ICAsIG1fbHN0Q1NTUnVsZXMobmV3IENTU1J1bGVMaXN0KCkpCiB7CiAgICAgbV90eXBlID0gTUVE
SUFfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlzdCggdGhpcywgbWVkaWEgKTsK
LSAgICBtX2xzdENTU1J1bGVzID0gbmV3IENTU1J1bGVMaXN0KCk7CiB9CiAKIENTU01lZGlhUnVs
ZTo6fkNTU01lZGlhUnVsZSgpCkBAIC0xOTYsOSArNjYsOCBAQAogCiB1bnNpZ25lZCBDU1NNZWRp
YVJ1bGU6OmFwcGVuZCggQ1NTUnVsZSAqcnVsZSApCiB7Ci0gICAgaWYgKCFydWxlKSB7CisgICAg
aWYgKCFydWxlKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICBydWxlLT5zZXRQYXJl
bnQodGhpcyk7CiAgICAgcmV0dXJuIG1fbHN0Q1NTUnVsZXMtPmluc2VydFJ1bGUoIHJ1bGUsIG1f
bHN0Q1NTUnVsZXMtPmxlbmd0aCgpICk7CkBAIC0yMTQsNiArODMsMTEgQEAKICAgICByZXR1cm4g
bV9sc3RDU1NSdWxlcy0+aW5zZXJ0UnVsZShuZXdSdWxlLmdldCgpLCBpbmRleCk7CiB9CiAKK3Zv
aWQgQ1NTTWVkaWFSdWxlOjpkZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KQoreworICAgIG1fbHN0
Q1NTUnVsZXMtPmRlbGV0ZVJ1bGUoaW5kZXgpOworfQorCiBTdHJpbmcgQ1NTTWVkaWFSdWxlOjpj
c3NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0ID0gIkBtZWRpYSAiOwpAQCAtMjM1
LDEzMiArMTA5LDQgQEAKICAgICByZXN1bHQgKz0gIn0iOwogICAgIHJldHVybiByZXN1bHQ7CiB9
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NSdWxlTGlzdDo6Q1NTUnVsZUxpc3QoU3R5
bGVMaXN0ICpsc3QpCi17Ci0gICAgaWYgKGxzdCkgewotICAgICAgICB1bnNpZ25lZCBsZW4gPSBs
c3QtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kp
IHsKLSAgICAgICAgICAgIFN0eWxlQmFzZSAqc3R5bGUgPSBsc3QtPml0ZW0oaSk7Ci0gICAgICAg
ICAgICBpZiAoc3R5bGUtPmlzUnVsZSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZChzdGF0aWNf
Y2FzdDxDU1NSdWxlKj4oc3R5bGUpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQ1NTUnVsZUxp
c3Q6On5DU1NSdWxlTGlzdCgpCi17Ci0gICAgQ1NTUnVsZSogcnVsZTsKLSAgICB3aGlsZSAoICFt
X2xzdENTU1J1bGVzLmlzRW1wdHkoKSAmJiAoIHJ1bGUgPSBtX2xzdENTU1J1bGVzLnRha2UoIDAg
KSApICkKLSAgICAgICAgcnVsZS0+ZGVyZWYoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUNTU1BhZ2VSdWxlOjpDU1NQYWdlUnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICA6IENT
U1J1bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9IFBBR0VfUlVMRTsKLX0KLQotQ1NTUGFnZVJ1
bGU6On5DU1NQYWdlUnVsZSgpCi17Ci19Ci0KLVN0cmluZyBDU1NQYWdlUnVsZTo6c2VsZWN0b3JU
ZXh0KCkgY29uc3QKLXsKLSAgICAvLyAjIyMKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZv
aWQgQ1NTUGFnZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChTdHJpbmcgLypzdHIqLykKLXsKLSAgICAv
LyAjIyMKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTU3R5bGVSdWxlOjpDU1NTdHls
ZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCkKLXsKLSAgICBt
X3R5cGUgPSBTVFlMRV9SVUxFOwotICAgIG1fc2VsZWN0b3IgPSAwOwotfQotCi1DU1NTdHlsZVJ1
bGU6On5DU1NTdHlsZVJ1bGUoKQotewotICAgIGlmIChtX3N0eWxlKQotICAgICAgICBtX3N0eWxl
LT5zZXRQYXJlbnQoMCk7Ci0gICAgZGVsZXRlIG1fc2VsZWN0b3I7Ci19Ci0KLVN0cmluZyBDU1NT
dHlsZVJ1bGU6OnNlbGVjdG9yVGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc2VsZWN0b3IpIHsK
LSAgICAgICAgU3RyaW5nIHN0cjsKLSAgICAgICAgZm9yIChDU1NTZWxlY3RvciAqcyA9IG1fc2Vs
ZWN0b3I7IHM7IHMgPSBzLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChzICE9IG1fc2VsZWN0
b3IpCi0gICAgICAgICAgICAgICAgc3RyICs9ICIsICI7Ci0gICAgICAgICAgICBzdHIgKz0gcy0+
c2VsZWN0b3JUZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0cjsKLSAgICB9Ci0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIENTU1N0eWxlUnVsZTo6c2V0U2VsZWN0b3JU
ZXh0KFN0cmluZyAvKnN0ciovKQotewotICAgIC8vICMjIwotfQotCi1TdHJpbmcgQ1NTU3R5bGVS
dWxlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gc2VsZWN0b3JUZXh0
KCk7Ci0gICAgCi0gICAgcmVzdWx0ICs9ICIgeyAiOwotICAgIHJlc3VsdCArPSBtX3N0eWxlLT5j
c3NUZXh0KCk7Ci0gICAgcmVzdWx0ICs9ICJ9IjsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIENTU1N0eWxlUnVsZTo6cGFyc2VTdHJpbmcoIGNvbnN0IFN0cmluZyAmLypzdHJp
bmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IENTU1N0eWxlUnVsZTo6c2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gc3R5bGUpCi17Ci0gICAgbV9zdHlsZSA9IHN0eWxlOwotfQotCi12b2lkIENT
U1J1bGVMaXN0OjpkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKQotewotICAgIENTU1J1bGUg
KnJ1bGUgPSBtX2xzdENTU1J1bGVzLnRha2UoIGluZGV4ICk7Ci0gICAgaWYoIHJ1bGUgKQotICAg
ICAgICBydWxlLT5kZXJlZigpOwotICAgIGVsc2UKLSAgICAgICAgOyAvLyAjIyMgVGhyb3cgSU5E
RVhfU0laRV9FUlIgZXhjZXB0aW9uIGhlcmUgKFRPRE8pCi19Ci0KLXZvaWQgQ1NTUnVsZUxpc3Q6
OmFwcGVuZCggQ1NTUnVsZSAqcnVsZSApCi17Ci0gICAgaW5zZXJ0UnVsZSggcnVsZSwgbV9sc3RD
U1NSdWxlcy5jb3VudCgpICkgOwotfQotCi11bnNpZ25lZCBDU1NSdWxlTGlzdDo6aW5zZXJ0UnVs
ZSggQ1NTUnVsZSAqcnVsZSwgdW5zaWduZWQgaW5kZXggKQotewotICAgIGlmKCBydWxlICYmIG1f
bHN0Q1NTUnVsZXMuaW5zZXJ0KCBpbmRleCwgcnVsZSApICkKLSAgICB7Ci0gICAgICAgIHJ1bGUt
PnJlZigpOwotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotCi0gICAgLy8gIyMjIFNob3Vs
ZCB0aHJvdyBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24gaW5zdGVhZCEgKFRPRE8pCi0gICAgcmV0
dXJuIDA7Ci19Ci0KIH0KSW5kZXg6IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZp
c2lvbiAxNDQwNikKKysrIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTcgQEAKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRGFz
aGJvYXJkUmVnaW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0Lmgi
CisjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlNoYWRvd1ZhbHVlLmgiCiAKIGV4dGVybiBXZWJDb3JlOjpTdHJpbmcgZ2V0UHJvcGVydHlOYW1l
KHVuc2lnbmVkIHNob3J0IGlkKTsKIApAQCAtMTI2Nyw2ICsxMjczLDMzIEBACiAgICAgcmV0dXJu
IGdldFByb3BlcnR5TmFtZShjb21wdXRlZFByb3BlcnRpZXNbaV0pOwogfQogCisvLyBUaGlzIGlz
IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRoZSBjb3B5SW5oZXJp
dGFibGVQcm9wZXJ0aWVzKCkgZnVuY3Rpb24uCisvLyBJdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9m
IHRoZSBsaXN0IG9mIGluaGVyaXRlZCBDU1MgcHJvcGVydGllcyBhbmQgdGhlCisvLyBwcm9wZXJ0
aWVzIGZvciB3aGljaCB3ZSBoYXZlIGEgY29tcHV0ZWQgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBm
aWxlLgorY29uc3QgaW50IGluaGVyaXRhYmxlUHJvcGVydGllc1tdID0geworICAgIENTU19QUk9Q
X0JPUkRFUl9DT0xMQVBTRSwKKyAgICBDU1NfUFJPUF9CT1JERVJfU1BBQ0lORywKKyAgICBDU1Nf
UFJPUF9DT0xPUiwKKyAgICBDU1NfUFJPUF9GT05UX0ZBTUlMWSwKKyAgICBDU1NfUFJPUF9GT05U
X1NJWkUsCisgICAgQ1NTX1BST1BfRk9OVF9TVFlMRSwKKyAgICBDU1NfUFJPUF9GT05UX1ZBUklB
TlQsCisgICAgQ1NTX1BST1BfRk9OVF9XRUlHSFQsCisgICAgQ1NTX1BST1BfTEVUVEVSX1NQQUNJ
TkcsCisgICAgQ1NTX1BST1BfTElORV9IRUlHSFQsCisgICAgQ1NTX1BST1BfVEVYVF9BTElHTiwK
KyAgICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfREVDT1JBVElPTlNfSU5fRUZGRUNULAorICAgIENT
U19QUk9QX1RFWFRfSU5ERU5ULAorICAgIENTU19QUk9QX19XRUJLSVRfVEVYVF9TSVpFX0FESlVT
VCwKKyAgICBDU1NfUFJPUF9URVhUX1RSQU5TRk9STSwKKyAgICBDU1NfUFJPUF9PUlBIQU5TLAor
ICAgIENTU19QUk9QX1dISVRFX1NQQUNFLAorICAgIENTU19QUk9QX1dJRE9XUywKKyAgICBDU1Nf
UFJPUF9XT1JEX1NQQUNJTkcsCit9OworCitjb25zdCB1bnNpZ25lZCBudW1Jbmhlcml0YWJsZVBy
b3BlcnRpZXMgPSBzaXplb2YoaW5oZXJpdGFibGVQcm9wZXJ0aWVzKSAvIHNpemVvZihpbmhlcml0
YWJsZVByb3BlcnRpZXNbMF0pOworCiBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNvcHlJbmhlcml0YWJsZVByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIHJldHVybiBjb3B5UHJvcGVydGllc0luU2V0KGluaGVyaXRhYmxl
UHJvcGVydGllcywgbnVtSW5oZXJpdGFibGVQcm9wZXJ0aWVzKTsKSW5kZXg6IGNzcy9DU1NSdWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTUnVsZS5jcHAJKHJldmlzaW9uIDE0NDAwKQorKysg
Y3NzL0NTU1J1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNyArMjAsMTAgQEAKICAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJjc3NfcnVsZWltcGwuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgi
CiAKLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5j
bHVkZSAiTWVkaWFMaXN0LmgiCi0jaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0jaW5jbHVkZSA8S1VS
TC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU1LDMxMiArNDgsNCBAQAogICAgIC8v
ICMjIwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTRm9udEZhY2VSdWxlOjpDU1NG
b250RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCkKLXsK
LSAgICBtX3R5cGUgPSBGT05UX0ZBQ0VfUlVMRTsKLX0KLQotQ1NTRm9udEZhY2VSdWxlOjp+Q1NT
Rm9udEZhY2VSdWxlKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTSW1wb3J0
UnVsZTo6Q1NTSW1wb3J0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVm
LCBNZWRpYUxpc3QqIG1lZGlhKQotICAgIDogQ1NTUnVsZShwYXJlbnQpCi0gICAgLCBtX3N0ckhy
ZWYoaHJlZikKLSAgICAsIG1fbHN0TWVkaWEobWVkaWEpCi0gICAgLCBtX2NhY2hlZFNoZWV0KDAp
Ci0gICAgLCBtX2xvYWRpbmcoZmFsc2UpCi17Ci0gICAgbV90eXBlID0gSU1QT1JUX1JVTEU7Ci0K
LSAgICBpZiAobV9sc3RNZWRpYSkKLSAgICAgICAgbV9sc3RNZWRpYS0+c2V0UGFyZW50KHRoaXMp
OwotICAgIGVsc2UKLSAgICAgICAgbV9sc3RNZWRpYSA9IG5ldyBNZWRpYUxpc3QodGhpcywgU3Ry
aW5nKCkpOwotfQotCi1DU1NJbXBvcnRSdWxlOjp+Q1NTSW1wb3J0UnVsZSgpCi17Ci0gICAgaWYg
KG1fbHN0TWVkaWEpCi0gICAgICAgIG1fbHN0TWVkaWEtPnNldFBhcmVudCgwKTsKLSAgICBpZiAo
bV9zdHlsZVNoZWV0KQotICAgICAgICBtX3N0eWxlU2hlZXQtPnNldFBhcmVudCgwKTsKLSAgICBp
ZiAobV9jYWNoZWRTaGVldCkKLSAgICAgICAgbV9jYWNoZWRTaGVldC0+ZGVyZWYodGhpcyk7Ci19
Ci0KLXZvaWQgQ1NTSW1wb3J0UnVsZTo6c2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVybCwg
Y29uc3QgU3RyaW5nICZzaGVldCkKLXsKLSAgICBpZiAobV9zdHlsZVNoZWV0KQotICAgICAgICBt
X3N0eWxlU2hlZXQtPnNldFBhcmVudCgwKTsKLSAgICBtX3N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5
bGVTaGVldCh0aGlzLCB1cmwpOwotCi0gICAgQ1NTU3R5bGVTaGVldCAqcGFyZW50ID0gcGFyZW50
U3R5bGVTaGVldCgpOwotICAgIG1fc3R5bGVTaGVldC0+cGFyc2VTdHJpbmcoc2hlZXQsICFwYXJl
bnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIG1fbG9hZGluZyA9IGZhbHNl
OwotCi0gICAgY2hlY2tMb2FkZWQoKTsKLX0KLQotYm9vbCBDU1NJbXBvcnRSdWxlOjppc0xvYWRp
bmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2xvYWRpbmcgfHwgKG1fc3R5bGVTaGVldCAmJiBt
X3N0eWxlU2hlZXQtPmlzTG9hZGluZygpKTsKLX0KLQotdm9pZCBDU1NJbXBvcnRSdWxlOjppbnNl
cnRlZEludG9QYXJlbnQoKQotewotICAgIFN0eWxlQmFzZSogcm9vdCA9IHRoaXM7Ci0gICAgU3R5
bGVCYXNlKiBwYXJlbnQ7Ci0gICAgd2hpbGUgKChwYXJlbnQgPSByb290LT5wYXJlbnQoKSkpCi0g
ICAgICAgIHJvb3QgPSBwYXJlbnQ7Ci0gICAgaWYgKCFyb290LT5pc0NTU1N0eWxlU2hlZXQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2NMb2FkZXIoKTsKLSAgICBpZiAoIWRvY0xvYWRlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGFic0hyZWYgPSBtX3N0ckhyZWY7Ci0gICAg
Q1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgaWYg
KCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKQotICAgICAgICAvLyB1c2UgcGFyZW50IHN0
eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJlZiA9IEtVUkwocGFy
ZW50U2hlZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCksIG1fc3RySHJlZi5kZXByZWNhdGVk
U3RyaW5nKCkpLnVybCgpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4gb3VyIGltcG9y
dCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBhIHN0eWxlc2hlZXQKLSAgICAvLyBpbiBvdXIgcGFy
ZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KLSAgICBmb3IgKHBh
cmVudCA9IHN0YXRpY19jYXN0PFN0eWxlQmFzZSo+KHRoaXMpLT5wYXJlbnQoKTsgcGFyZW50OyBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKQotICAgICAgICBpZiAoYWJzSHJlZiA9PSBwYXJlbnQt
PmJhc2VVUkwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyAjIyMgcGFzcyBj
b3JyZWN0IGNoYXJzZXQgaGVyZSEhCi0gICAgbV9jYWNoZWRTaGVldCA9IGRvY0xvYWRlci0+cmVx
dWVzdFN0eWxlU2hlZXQoYWJzSHJlZiwgRGVwcmVjYXRlZFN0cmluZzo6bnVsbCk7Ci0gICAgaWYg
KG1fY2FjaGVkU2hlZXQpIHsKLSAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgbV9j
YWNoZWRTaGVldC0+cmVmKHRoaXMpOwotICAgIH0KLX0KLQotU3RyaW5nIENTU0ltcG9ydFJ1bGU6
OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiQGltcG9ydCB1cmwoXCIi
OwotICAgIHJlc3VsdCArPSBtX3N0ckhyZWY7Ci0gICAgcmVzdWx0ICs9ICJcIikiOwotCi0gICAg
aWYgKG1fbHN0TWVkaWEpIHsKLSAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0
ICs9IG1fbHN0TWVkaWEtPm1lZGlhVGV4dCgpOwotICAgIH0KLSAgICByZXN1bHQgKz0gIjsiOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNTU01lZGlh
UnVsZTo6Q1NTTWVkaWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgTWVkaWFMaXN0ICptZWRpYUxp
c3QsIENTU1J1bGVMaXN0ICpydWxlTGlzdCApCi0gICAgOiAgIENTU1J1bGUoIHBhcmVudCApCi17
Ci0gICAgbV90eXBlID0gTUVESUFfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gbWVkaWFMaXN0Owot
ICAgIG1fbHN0Q1NTUnVsZXMgPSBydWxlTGlzdDsKLX0KLQotQ1NTTWVkaWFSdWxlOjpDU1NNZWRp
YVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiAgIENTU1J1bGUoIHBhcmVudCApCi17Ci0g
ICAgbV90eXBlID0gTUVESUFfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gMDsKLSAgICBtX2xzdENT
U1J1bGVzID0gbmV3IENTU1J1bGVMaXN0KCk7Ci19Ci0KLUNTU01lZGlhUnVsZTo6Q1NTTWVkaWFS
dWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgY29uc3QgU3RyaW5nICZtZWRpYSApCi06ICAgQ1NTUnVs
ZSggcGFyZW50ICkKLXsKLSAgICBtX3R5cGUgPSBNRURJQV9SVUxFOwotICAgIG1fbHN0TWVkaWEg
PSBuZXcgTWVkaWFMaXN0KCB0aGlzLCBtZWRpYSApOwotICAgIG1fbHN0Q1NTUnVsZXMgPSBuZXcg
Q1NTUnVsZUxpc3QoKTsKLX0KLQotQ1NTTWVkaWFSdWxlOjp+Q1NTTWVkaWFSdWxlKCkKLXsKLSAg
ICBpZihtX2xzdE1lZGlhKQotICAgICAgICBtX2xzdE1lZGlhLT5zZXRQYXJlbnQoMCk7Ci0KLSAg
ICBpbnQgbGVuZ3RoID0gbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgbV9sc3RDU1NSdWxlcy0+aXRlbShpKS0+c2V0
UGFyZW50KDApOwotfQotCi11bnNpZ25lZCBDU1NNZWRpYVJ1bGU6OmFwcGVuZCggQ1NTUnVsZSAq
cnVsZSApCi17Ci0gICAgaWYgKCFydWxlKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIHJ1bGUtPnNldFBhcmVudCh0aGlzKTsKLSAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy0+aW5z
ZXJ0UnVsZSggcnVsZSwgbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCkgKTsKLX0KLQotdW5zaWduZWQg
Q1NTTWVkaWFSdWxlOjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSwgdW5zaWduZWQgaW5k
ZXgpCi17Ci0gICAgQ1NTUGFyc2VyIHAodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBSZWZQdHI8
Q1NTUnVsZT4gbmV3UnVsZSA9IHAucGFyc2VSdWxlKHBhcmVudFN0eWxlU2hlZXQoKSwgcnVsZSk7
Ci0gICAgaWYgKCFuZXdSdWxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBuZXdSdWxlLT5zZXRQ
YXJlbnQodGhpcyk7Ci0gICAgcmV0dXJuIG1fbHN0Q1NTUnVsZXMtPmluc2VydFJ1bGUobmV3UnVs
ZS5nZXQoKSwgaW5kZXgpOwotfQotCi1TdHJpbmcgQ1NTTWVkaWFSdWxlOjpjc3NUZXh0KCkgY29u
c3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIkBtZWRpYSAiOwotICAgIGlmIChtX2xzdE1lZGlh
KSB7Ci0gICAgICAgIHJlc3VsdCArPSBtX2xzdE1lZGlhLT5tZWRpYVRleHQoKTsKLSAgICAgICAg
cmVzdWx0ICs9ICIgIjsKLSAgICB9Ci0gICAgcmVzdWx0ICs9ICJ7IFxuIjsKLSAgICAKLSAgICBp
ZiAobV9sc3RDU1NSdWxlcykgewotICAgICAgICB1bnNpZ25lZCBsZW4gPSBtX2xzdENTU1J1bGVz
LT5sZW5ndGgoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgICAgICByZXN1bHQgKz0gIiAgIjsKLSAgICAgICAgICAgIHJlc3VsdCArPSBtX2xz
dENTU1J1bGVzLT5pdGVtKGkpLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIlxu
IjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXN1bHQgKz0gIn0iOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NSdWxlTGlzdDo6Q1NT
UnVsZUxpc3QoU3R5bGVMaXN0ICpsc3QpCi17Ci0gICAgaWYgKGxzdCkgewotICAgICAgICB1bnNp
Z25lZCBsZW4gPSBsc3QtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIFN0eWxlQmFzZSAqc3R5bGUgPSBsc3QtPml0ZW0o
aSk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUtPmlzUnVsZSgpKQotICAgICAgICAgICAgICAgIGFw
cGVuZChzdGF0aWNfY2FzdDxDU1NSdWxlKj4oc3R5bGUpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotQ1NTUnVsZUxpc3Q6On5DU1NSdWxlTGlzdCgpCi17Ci0gICAgQ1NTUnVsZSogcnVsZTsKLSAg
ICB3aGlsZSAoICFtX2xzdENTU1J1bGVzLmlzRW1wdHkoKSAmJiAoIHJ1bGUgPSBtX2xzdENTU1J1
bGVzLnRha2UoIDAgKSApICkKLSAgICAgICAgcnVsZS0+ZGVyZWYoKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUNTU1BhZ2VSdWxlOjpDU1NQYWdlUnVsZShTdHlsZUJhc2UgKnBhcmVu
dCkKLSAgICA6IENTU1J1bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9IFBBR0VfUlVMRTsKLX0K
LQotQ1NTUGFnZVJ1bGU6On5DU1NQYWdlUnVsZSgpCi17Ci19Ci0KLVN0cmluZyBDU1NQYWdlUnVs
ZTo6c2VsZWN0b3JUZXh0KCkgY29uc3QKLXsKLSAgICAvLyAjIyMKLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLXZvaWQgQ1NTUGFnZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChTdHJpbmcgLypzdHIq
LykKLXsKLSAgICAvLyAjIyMKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTU3R5bGVS
dWxlOjpDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVu
dCkKLXsKLSAgICBtX3R5cGUgPSBTVFlMRV9SVUxFOwotICAgIG1fc2VsZWN0b3IgPSAwOwotfQot
Ci1DU1NTdHlsZVJ1bGU6On5DU1NTdHlsZVJ1bGUoKQotewotICAgIGlmIChtX3N0eWxlKQotICAg
ICAgICBtX3N0eWxlLT5zZXRQYXJlbnQoMCk7Ci0gICAgZGVsZXRlIG1fc2VsZWN0b3I7Ci19Ci0K
LVN0cmluZyBDU1NTdHlsZVJ1bGU6OnNlbGVjdG9yVGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
c2VsZWN0b3IpIHsKLSAgICAgICAgU3RyaW5nIHN0cjsKLSAgICAgICAgZm9yIChDU1NTZWxlY3Rv
ciAqcyA9IG1fc2VsZWN0b3I7IHM7IHMgPSBzLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChz
ICE9IG1fc2VsZWN0b3IpCi0gICAgICAgICAgICAgICAgc3RyICs9ICIsICI7Ci0gICAgICAgICAg
ICBzdHIgKz0gcy0+c2VsZWN0b3JUZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN0
cjsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIENTU1N0eWxlUnVsZTo6
c2V0U2VsZWN0b3JUZXh0KFN0cmluZyAvKnN0ciovKQotewotICAgIC8vICMjIwotfQotCi1TdHJp
bmcgQ1NTU3R5bGVSdWxlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0g
c2VsZWN0b3JUZXh0KCk7Ci0gICAgCi0gICAgcmVzdWx0ICs9ICIgeyAiOwotICAgIHJlc3VsdCAr
PSBtX3N0eWxlLT5jc3NUZXh0KCk7Ci0gICAgcmVzdWx0ICs9ICJ9IjsKLSAgICAKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1ib29sIENTU1N0eWxlUnVsZTo6cGFyc2VTdHJpbmcoIGNvbnN0IFN0
cmluZyAmLypzdHJpbmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIENTU1N0eWxlUnVsZTo6c2V0RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUpCi17Ci0gICAgbV9zdHlsZSA9IHN0eWxlOwot
fQotCi12b2lkIENTU1J1bGVMaXN0OjpkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKQotewot
ICAgIENTU1J1bGUgKnJ1bGUgPSBtX2xzdENTU1J1bGVzLnRha2UoIGluZGV4ICk7Ci0gICAgaWYo
IHJ1bGUgKQotICAgICAgICBydWxlLT5kZXJlZigpOwotICAgIGVsc2UKLSAgICAgICAgOyAvLyAj
IyMgVGhyb3cgSU5ERVhfU0laRV9FUlIgZXhjZXB0aW9uIGhlcmUgKFRPRE8pCi19Ci0KLXZvaWQg
Q1NTUnVsZUxpc3Q6OmFwcGVuZCggQ1NTUnVsZSAqcnVsZSApCi17Ci0gICAgaW5zZXJ0UnVsZSgg
cnVsZSwgbV9sc3RDU1NSdWxlcy5jb3VudCgpICkgOwotfQotCi11bnNpZ25lZCBDU1NSdWxlTGlz
dDo6aW5zZXJ0UnVsZSggQ1NTUnVsZSAqcnVsZSwgdW5zaWduZWQgaW5kZXggKQotewotICAgIGlm
KCBydWxlICYmIG1fbHN0Q1NTUnVsZXMuaW5zZXJ0KCBpbmRleCwgcnVsZSApICkKLSAgICB7Ci0g
ICAgICAgIHJ1bGUtPnJlZigpOwotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotCi0gICAg
Ly8gIyMjIFNob3VsZCB0aHJvdyBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24gaW5zdGVhZCEgKFRP
RE8pCi0gICAgcmV0dXJuIDA7Ci19Ci0KIH0KSW5kZXg6IGNzcy9DU1NQYWdlUnVsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGNzcy9DU1NQYWdlUnVsZS5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9DU1NQ
YWdlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxNTQgKzIxLDE0IEBACiAgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZuZGVmIENTU19jc3NfcnVsZWltcGxfaF8K
LSNkZWZpbmUgQ1NTX2Nzc19ydWxlaW1wbF9oXworI2lmbmRlZiBDU1NQYWdlUnVsZV9ICisjZGVm
aW5lIENTU1BhZ2VSdWxlX0gKIAotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRl
ICJDU1NSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkQ1NTU3R5
bGVTaGVldDsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ1NTU3R5
bGVTaGVldDsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBNZWRpYUxpc3Q7Ci0KLWNsYXNz
IENTU1J1bGUgOiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBDU1NSdWxl
VHlwZSB7IAotICAgICAgICBVTktOT1dOX1JVTEUsIAotICAgICAgICBTVFlMRV9SVUxFLCAKLSAg
ICAgICAgQ0hBUlNFVF9SVUxFLCAKLSAgICAgICAgSU1QT1JUX1JVTEUsIAotICAgICAgICBNRURJ
QV9SVUxFLCAKLSAgICAgICAgRk9OVF9GQUNFX1JVTEUsIAotICAgICAgICBQQUdFX1JVTEUgCi0g
ICAgfTsKLSAgICAKLSAgICBDU1NSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAgICA6IFN0
eWxlQmFzZShwYXJlbnQpLCBtX3R5cGUoVU5LTk9XTl9SVUxFKSB7fQotCi0gICAgdmlydHVhbCBi
b29sIGlzUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICpwYXJlbnRTdHls
ZVNoZWV0KCkgY29uc3Q7Ci0gICAgQ1NTUnVsZSAqcGFyZW50UnVsZSgpIGNvbnN0OwotCi0gICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q3NzVGV4dChXZWJD
b3JlOjpTdHJpbmcgc3RyKTsKLQotcHJvdGVjdGVkOgotICAgIENTU1J1bGVUeXBlIG1fdHlwZTsK
LX07Ci0KLQotY2xhc3MgQ1NTQ2hhcnNldFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGlj
OgotICAgIENTU0NoYXJzZXRSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAgICA6IENTU1J1
bGUocGFyZW50KSB7IG1fdHlwZSA9IENIQVJTRVRfUlVMRTsgfQotCi0gICAgdmlydHVhbCBib29s
IGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwotCi0gICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9l
bmNvZGluZzsgfQotICAgIHZvaWQgc2V0RW5jb2RpbmcoU3RyaW5nIF9lbmNvZGluZykgeyBtX2Vu
Y29kaW5nID0gX2VuY29kaW5nOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgbV9lbmNvZGlu
ZzsKLX07Ci0KLQotY2xhc3MgQ1NTRm9udEZhY2VSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1
YmxpYzoKLSAgICBDU1NGb250RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpOwotICAgIHZpcnR1
YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24g
KnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBi
b29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotfTsKLQotCi1jbGFz
cyBDU1NJbXBvcnRSdWxlIDogcHVibGljIENhY2hlZE9iamVjdENsaWVudCwgcHVibGljIENTU1J1
bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25z
dCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlzdCopOwotICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUo
KTsKLQotICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVmOyB9Ci0gICAg
TWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7IH0KLSAg
ICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0
LmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgCi0gICAgYm9vbCBp
c0xvYWRpbmcoKSBjb25zdDsKLQotICAgIC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgc2hlZXQpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1BhcmVudCgpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fc3RySHJlZjsKLSAgICBSZWZQdHI8TWVkaWFMaXN0PiBt
X2xzdE1lZGlhOwotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7Ci0gICAg
Q2FjaGVkQ1NTU3R5bGVTaGVldCogbV9jYWNoZWRTaGVldDsKLSAgICBib29sIG1fbG9hZGluZzsK
LX07Ci0KLWNsYXNzIE1lZGlhTGlzdDsKLQotY2xhc3MgQ1NTUnVsZUxpc3QgOiBwdWJsaWMgU2hh
cmVkPENTU1J1bGVMaXN0PgotewotcHVibGljOgotICAgIENTU1J1bGVMaXN0KCkgeyB9Ci0gICAg
Q1NTUnVsZUxpc3QoU3R5bGVMaXN0ICopOwotICAgIH5DU1NSdWxlTGlzdCgpOwotCi0gICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5jb3VudCgpOyB9Ci0g
ICAgQ1NTUnVsZSAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgeyByZXR1cm4gbV9sc3RDU1NSdWxl
cy5hdCggaW5kZXggKTsgfQotCi0gICAgLyogbm90IHBhcnQgb2YgdGhlIERPTSAqLwotICAgIHVu
c2lnbmVkIGluc2VydFJ1bGUgKCBDU1NSdWxlICpydWxlLCB1bnNpZ25lZCBpbmRleCApOwotICAg
IHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVkIGluZGV4ICk7Ci0gICAgdm9pZCBhcHBlbmQoIENT
U1J1bGUgKnJ1bGUgKTsKLQotcHJvdGVjdGVkOgotICAgIERlcHJlY2F0ZWRQdHJMaXN0PENTU1J1
bGU+IG1fbHN0Q1NTUnVsZXM7Ci19OwotCi1jbGFzcyBDU1NNZWRpYVJ1bGUgOiBwdWJsaWMgQ1NT
UnVsZQotewotcHVibGljOgotICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQgKTsK
LSAgICBDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50LCBjb25zdCBXZWJDb3JlOjpTdHJp
bmcgJm1lZGlhICk7Ci0gICAgQ1NTTWVkaWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgTWVkaWFM
aXN0ICptZWRpYUxpc3QsIENTU1J1bGVMaXN0ICpydWxlTGlzdCApOwotICAgIHZpcnR1YWwgfkNT
U01lZGlhUnVsZSgpOwotCi0gICAgTWVkaWFMaXN0ICptZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1f
bHN0TWVkaWEuZ2V0KCk7IH0KLSAgICBDU1NSdWxlTGlzdCAqY3NzUnVsZXMoKSB7IHJldHVybiBt
X2xzdENTU1J1bGVzLmdldCgpOyB9Ci0KLSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlICggY29uc3Qg
V2ViQ29yZTo6U3RyaW5nICZydWxlLCB1bnNpZ25lZCBpbmRleCApOwotICAgIHZvaWQgZGVsZXRl
UnVsZSAoIHVuc2lnbmVkIGluZGV4ICkgeyBtX2xzdENTU1J1bGVzLT5kZWxldGVSdWxlKCBpbmRl
eCApOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLyogTm90IHBhcnQg
b2YgdGhlIERPTSAqLwotICAgIHVuc2lnbmVkIGFwcGVuZCggQ1NTUnVsZSAqcnVsZSApOwotcHJv
dGVjdGVkOgotICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1fbHN0TWVkaWE7Ci0gICAgUmVmUHRyPENT
U1J1bGVMaXN0PiBtX2xzdENTU1J1bGVzOwotfTsKLQogCiBjbGFzcyBDU1NQYWdlUnVsZSA6IHB1
YmxpYyBDU1NSdWxlCiB7CkBAIC0xODEsNDcgKzQxLDEwIEBACiAgICAgdmlydHVhbCBib29sIGlz
UGFnZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBXZWJDb3JlOjpTdHJpbmcgc2VsZWN0
b3JUZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RvclRleHQoV2ViQ29yZTo6U3RyaW5n
IHN0cik7Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IG1fc3R5bGU7Ci19OwotCi1jbGFzcyBDU1NJbXBvcnRhbnRSdWxlOwotCi1jbGFzcyBDU1NT
dHlsZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1N0eWxlUnVsZShT
dHlsZUJhc2UqIHBhcmVudCk7Ci0gICAgdmlydHVhbCB+Q1NTU3R5bGVSdWxlKCk7Ci0KLSAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
LmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVJ1bGUoKSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgV2ViQ29yZTo6
U3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KFdl
YkNvcmU6OlN0cmluZyBzdHIpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKCBjb25z
dCBTdHJpbmcgJnN0cmluZywgYm9vbCA9IGZhbHNlICk7Ci0KLSAgICB2b2lkIHNldFNlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWxlY3RvcikgeyBtX3NlbGVjdG9yID0gc2VsZWN0b3I7IH0KLSAgICB2
b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
KTsKLQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0K
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24oKSB7IHJldHVybiBt
X3N0eWxlLmdldCgpOyB9CisgICAgdm9pZCBzZXRTZWxlY3RvclRleHQoU3RyaW5nIHN0cik7CiAg
CiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0
eWxlOwotICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOwotfTsKLQotY2xhc3MgQ1NTVW5rbm93
blJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1Vua25vd25SdWxlKFN0
eWxlQmFzZSAqcGFyZW50KSA6IENTU1J1bGUocGFyZW50KSB7fQotCi0gICAgdmlydHVhbCBib29s
IGlzVW5rbm93blJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpJ
bmRleDogY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0luaGVy
aXRlZFZhbHVlLmgJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDEwNSArMjAsMTMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgQ1NTX2Nzc192YWx1ZWltcGxfaF8KLSNkZWZpbmUg
Q1NTX2Nzc192YWx1ZWltcGxfaF8KKyNpZm5kZWYgQ1NTSW5oZXJpdGVkVmFsdWVfSAorI2RlZmlu
ZSBDU1NJbmhlcml0ZWRWYWx1ZV9ICiAKLSNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnQuaCIK
LSNpbmNsdWRlICJjc3NfYmFzZS5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCi0j
aW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxp
c3QuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1jbGFzcyBRUGFpbnREZXZpY2VN
ZXRyaWNzOworI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBDYWNoZWRJbWFnZTsKLWNs
YXNzIENvdW50ZXI7Ci1jbGFzcyBEb2NMb2FkZXI7Ci1jbGFzcyBOb2RlOwotY2xhc3MgUGFpcjsK
LWNsYXNzIFJlY3RJbXBsOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLSNpZiBfX0FQUExFX18KLWNs
YXNzIERhc2hib2FyZFJlZ2lvbjsKLSNlbmRpZgotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwotCi1leHRlcm4gY29uc3QgaW50IGluaGVyaXRhYmxlUHJvcGVydGllc1tdOwotZXh0ZXJuIGNv
bnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVydGllczsKLQotY2xhc3MgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiA6IHB1YmxpYyBTdHlsZUJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9v
bCBpc1N0eWxlRGVjbGFyYXRpb24oKTsKLQotICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlOYW1l
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLQotICAgIENTU1J1bGUqIHBhcmVudFJ1bGUo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKLQotICAgIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lKTsKLSAgICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSk7Ci0gICAgCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9w
ZXJ0eUlEKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBy
b3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFu
dCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRh
YmxlKCkgPSAwOwotIAotICAgIHZvaWQgZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiop
IGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29w
eVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotICAgIENTU1N0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVs
ZSA9IDApOwotCi1wcml2YXRlOgotICAgIENTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgQ1NTU3R5
bGVEZWNsYXJhdGlvbiAmKTsKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uJiBvcGVyYXRvcj0oY29u
c3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKLX07Ci0KLWNsYXNzIENTU1ZhbHVlIDogcHVibGlj
IFN0eWxlQmFzZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5cGVzIHsKLSAgICAgICAgQ1NT
X0lOSEVSSVQgPSAwLAotICAgICAgICBDU1NfUFJJTUlUSVZFX1ZBTFVFID0gMSwKLSAgICAgICAg
Q1NTX1ZBTFVFX0xJU1QgPSAyLAotICAgICAgICBDU1NfQ1VTVE9NID0gMywKLSAgICAgICAgQ1NT
X0lOSVRJQUwgPSA0Ci0gICAgfTsKLQotICAgIENTU1ZhbHVlKCkgOiBTdHlsZUJhc2UoMCkgeyB9
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIENTU19DVVNUT007IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAw
OwotICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmKSB7IH0gLy8gRklYTUU6IE5vdCBp
bXBsZW1lbnRlZC4KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19Owot
CiBjbGFzcyBDU1NJbmhlcml0ZWRWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQogewogcHVibGljOgpA
QCAtMTI2LDQzNSArMzQsNiBAQAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
IH07CiAKLWNsYXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGlj
OgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTVmFsdWVMaXN0
IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTVmFsdWVMaXN0
KCk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5jb3Vu
dCgpOyB9Ci0gICAgQ1NTVmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3Zh
bHVlcy5hdChpbmRleCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlTGlzdCgpIHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7Ci0gICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRl
ZFB0ckxpc3Q8Q1NTVmFsdWU+IG1fdmFsdWVzOwotfTsKLQotCi1jbGFzcyBDU1NQcmltaXRpdmVW
YWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5cGVzIHsK
LSAgICAgICAgQ1NTX1VOS05PV04gPSAwLAotICAgICAgICBDU1NfTlVNQkVSID0gMSwKLSAgICAg
ICAgQ1NTX1BFUkNFTlRBR0UgPSAyLAotICAgICAgICBDU1NfRU1TID0gMywKLSAgICAgICAgQ1NT
X0VYUyA9IDQsCi0gICAgICAgIENTU19QWCA9IDUsCi0gICAgICAgIENTU19DTSA9IDYsCi0gICAg
ICAgIENTU19NTSA9IDcsCi0gICAgICAgIENTU19JTiA9IDgsCi0gICAgICAgIENTU19QVCA9IDks
Ci0gICAgICAgIENTU19QQyA9IDEwLAotICAgICAgICBDU1NfREVHID0gMTEsCi0gICAgICAgIENT
U19SQUQgPSAxMiwKLSAgICAgICAgQ1NTX0dSQUQgPSAxMywKLSAgICAgICAgQ1NTX01TID0gMTQs
Ci0gICAgICAgIENTU19TID0gMTUsCi0gICAgICAgIENTU19IWiA9IDE2LAotICAgICAgICBDU1Nf
S0haID0gMTcsCi0gICAgICAgIENTU19ESU1FTlNJT04gPSAxOCwKLSAgICAgICAgQ1NTX1NUUklO
RyA9IDE5LAotICAgICAgICBDU1NfVVJJID0gMjAsCi0gICAgICAgIENTU19JREVOVCA9IDIxLAot
ICAgICAgICBDU1NfQVRUUiA9IDIyLAotICAgICAgICBDU1NfQ09VTlRFUiA9IDIzLAotICAgICAg
ICBDU1NfUkVDVCA9IDI0LAotICAgICAgICBDU1NfUkdCQ09MT1IgPSAyNSwKLSAgICAgICAgQ1NT
X1BBSVIgPSAxMDAsIC8vIFdlIGVudmlzaW9uIHRoaXMgYmVpbmcgZXhwb3NlZCBhcyBhIG1lYW5z
IG9mIGdldHRpbmcgY29tcHV0ZWQgc3R5bGUgdmFsdWVzIGZvciBwYWlycyAoYm9yZGVyLXNwYWNp
bmcvcmFkaXVzLCBiYWNrZ3JvdW5kLXBvc2l0aW9uLCBldGMuKQotICAgICAgICBDU1NfREFTSEJP
QVJEX1JFR0lPTiA9IDEwMSAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0aGlzIGRvaW5nIGFz
IGEgcHJpbWl0aXZlIHZhbHVlPyBJdCBzaG91bGQgbm90IGJlIQotICAgIH07Ci0KLSAgICAvLyBG
SVhNRTogaW50IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0b28gdHJpY2t5IGZvciBjb2xv
ciB2cy4gaWRlbnQKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKGludCBpZGVudCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlLCBVbml0VHlwZXMp
OwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYsIFVuaXRUeXBlcyk7Ci0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUoUGFzc1JlZlB0cjxSZWN0SW1wbD4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKHVuc2ln
bmVkIGNvbG9yKTsgLy8gUkdCIHZhbHVlCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0
cjxQYWlyPik7Ci0KLSNpZiBfX0FQUExFX18KLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVm
UHRyPERhc2hib2FyZFJlZ2lvbj4pOyAvLyBGSVhNRTogV2h5IGlzIGRhc2hib2FyZCByZWdpb24g
YSBwcmltaXRpdmUgdmFsdWU/IFRoaXMgbWFrZXMgbm8gc2Vuc2UuCi0jZW5kaWYKLQotICAgIHZp
cnR1YWwgfkNTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0KLSAgICB2b2lkIGNsZWFudXAoKTsKLQotICAg
IHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LQotICAgIC8qCi0gICAgICogY29tcHV0ZXMgYSBsZW5ndGggaW4gcGl4ZWxzIG91dCBvZiB0aGUg
Z2l2ZW4gQ1NTVmFsdWUuIE5lZWQgdGhlIFJlbmRlclN0eWxlIHRvIGdldAotICAgICAqIHRoZSBm
b250aW5mbyBpbiBjYXNlIHZhbCBpcyBkZWZpbmVkIGluIGVtIG9yIGV4LgotICAgICAqCi0gICAg
ICogVGhlIG1ldHJpY3MgaGF2ZSB0byBiZSBhIGJpdCBkaWZmZXJlbnQgZm9yIHNjcmVlbiBhbmQg
cHJpbnRlciBvdXRwdXQuCi0gICAgICogRm9yIHNjcmVlbiBvdXRwdXQgd2UgYXNzdW1lIDEgaW5j
aCA9PSA3MiBweCwgZm9yIHByaW50ZXIgd2UgYXNzdW1lIDMwMCBkcGkKLSAgICAgKgotICAgICAq
IHRoaXMgaXMgc2NyZWVuL3ByaW50ZXIgZGVwZW5kZW50LCBzbyB3ZSBwcm9iYWJseSBuZWVkIGEg
Y29uZmlnIG9wdGlvbiBmb3IgdGhpcywKLSAgICAgKiBhbmQgc29tZSB0b29sIHRvIGNhbGlicmF0
ZS4KLSAgICAgKi8KLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSopOwotICAg
IGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwot
ICAgIGludCBjb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKik7Ci0gICAgaW50
IGNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGll
cik7Ci0gICAgc2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKik7Ci0gICAgc2hv
cnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwot
ICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqLCBib29sIGFwcGx5Wm9v
bUZhY3RvciA9IHRydWUpOwotCi0gICAgLy8gdXNlIHdpdGggY2FyZSEhIQotICAgIHZvaWQgc2V0
UHJpbWl0aXZlVHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KLSAg
ICB2b2lkIHNldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9h
dFZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUodW5zaWdu
ZWQgc2hvcnQgdW5pdFR5cGUpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKCkgeyByZXR1cm4g
bV92YWx1ZS5udW07IH0KLQotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUodW5zaWduZWQgc2hvcnQg
c3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIAotICAgIENvdW50ZXIqIGdl
dENvdW50ZXJWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0NP
VU5URVIgPyAwIDogbV92YWx1ZS5jb3VudGVyOwotICAgIH0KLQotICAgIFJlY3RJbXBsKiBnZXRS
ZWN0VmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SRUNUID8g
MCA6IG1fdmFsdWUucmVjdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRSR0JDb2xvclZhbHVl
KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SR0JDT0xPUiA/IDAgOiBt
X3ZhbHVlLnJnYmNvbG9yOwotICAgIH0KLQotICAgIFBhaXIqIGdldFBhaXJWYWx1ZSgpIGNvbnN0
IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUEFJUiA/IDAgOiBtX3ZhbHVlLnBhaXI7
Ci0gICAgfQotCi0jaWYgX19BUFBMRV9fCi0gICAgRGFzaGJvYXJkUmVnaW9uICpnZXREYXNoYm9h
cmRSZWdpb25WYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0RB
U0hCT0FSRF9SRUdJT04gPyAwIDogbV92YWx1ZS5yZWdpb247Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNQcmltaXRpdmVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAg
aW50IGdldElkZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgYm9vbCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQot
cHJvdGVjdGVkOgotICAgIGludCBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBpbnQgaWRl
bnQ7Ci0gICAgICAgIGRvdWJsZSBudW07Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAg
ICAgICAgQ291bnRlciogY291bnRlcjsKLSAgICAgICAgUmVjdEltcGwqIHJlY3Q7Ci0gICAgICAg
IHVuc2lnbmVkIHJnYmNvbG9yOwotICAgICAgICBQYWlyKiBwYWlyOwotI2lmIF9fQVBQTEVfXwot
ICAgICAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbjsKLSNlbmRpZgotICAgIH0gbV92YWx1ZTsK
LX07Ci0KLS8vIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5IG1hcmdpbnMgaW4g
cmVmbG93IHJvb3RzIChib2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgotLy8gVGhlIGJhc2lj
IGlkZWEgaXMgdGhhdCBhIHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0gKGZvciBx
dWlya3kgZW0pIGluc3RlYWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4gIFdoZW4gdGhlIHF1
aXJreSB2YWx1ZSBpcyB1c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZSBtYXJnaW4g
d2lsbAotLy8gY29sbGFwc2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgotY2xhc3MgQ1NTUXVp
cmtQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgot
ICAgIENTU1F1aXJrUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi0g
ICAgICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUobnVtLCB0eXBlKSB7fQotCi0gICAgdmlydHVhbCBi
b29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLWNsYXNzIENvdW50ZXIg
OiBwdWJsaWMgU2hhcmVkPENvdW50ZXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmcgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIFN0cmluZyBsaXN0U3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX2xpc3RTdHlsZTsgfQotICAgIFN0cmluZyBzZXBhcmF0b3IoKSBj
b25zdCB7IHJldHVybiBtX3NlcGFyYXRvcjsgfQotCi0gICAgU3RyaW5nIG1faWRlbnRpZmllcjsK
LSAgICBTdHJpbmcgbV9saXN0U3R5bGU7Ci0gICAgU3RyaW5nIG1fc2VwYXJhdG9yOwotfTsKLQot
Y2xhc3MgUmVjdEltcGwgOiBwdWJsaWMgU2hhcmVkPFJlY3RJbXBsPiB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+UmVjdEltcGwoKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25z
dCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Ym90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b20uZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdC5nZXQoKTsgfQotCi0gICAgdm9p
ZCBzZXRUb3AoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9wID0gdG9w
OyB9Ci0gICAgdm9pZCBzZXRSaWdodChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByaWdo
dCkgeyBtX3JpZ2h0ID0gcmlnaHQ7IH0KLSAgICB2b2lkIHNldEJvdHRvbShQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBib3R0b20pIHsgbV9ib3R0b20gPSBib3R0b207IH0KLSAgICB2b2lk
IHNldExlZnQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xlZnQgPSBs
ZWZ0OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9w
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IG1fYm90dG9tOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bV9sZWZ0OwotfTsKLQotLy8gQSBwcmltaXRpdmUgdmFsdWUgcmVwcmVzZW50aW5nIGEgcGFpci4g
IFRoaXMgaXMgdXNlZnVsIGZvciBwcm9wZXJ0aWVzIGxpa2UgYm9yZGVyLXJhZGl1cywgYmFja2dy
b3VuZC1zaXplL3Bvc2l0aW9uLAotLy8gYW5kIGJvcmRlci1zcGFjaW5nIChhbGwgb2Ygd2hpY2gg
YXJlIHNwYWNlLXNlcGFyYXRlZCBzZXRzIG9mIHR3byB2YWx1ZXMpLiAgQXQgdGhlIG1vbWVudCB3
ZSBhcmUgb25seSB1c2luZyBpdCBmb3IKLS8vIGJvcmRlci1yYWRpdXMgYW5kIGJhY2tncm91bmQt
c2l6ZSwgYnV0IChGSVhNRSkgYm9yZGVyLXNwYWNpbmcgYW5kIGJhY2tncm91bmQtcG9zaXRpb24g
Y291bGQgYmUgY29udmVydGVkIG92ZXIgdG8gdXNlCi0vLyBpdCAoZWxpbWluYXRpbmcgc29tZSBl
eHRyYSAtd2Via2l0LSBpbnRlcm5hbCBwcm9wZXJ0aWVzKS4KLWNsYXNzIFBhaXIgOiBwdWJsaWMg
U2hhcmVkPFBhaXI+IHsKLXB1YmxpYzoKLSAgICBQYWlyKCkgOiBtX2ZpcnN0KDApLCBtX3NlY29u
ZCgwKSB7IH0KLSAgICBQYWlyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0LCBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpCi0gICAgICAgIDogbV9maXJzdChm
aXJzdCksIG1fc2Vjb25kKHNlY29uZCkgeyB9Ci0gICAgdmlydHVhbCB+UGFpcigpOwotCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdC5nZXQoKTsg
fQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBtX3NlY29u
ZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRGaXJzdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBmaXJzdCkgeyBtX2ZpcnN0ID0gZmlyc3Q7IH0KLSAgICB2b2lkIHNldFNlY29uZChQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpIHsgbV9zZWNvbmQgPSBzZWNvbmQ7IH0K
LQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdDsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kOwotfTsKLQotY2xhc3MgRGFzaGJv
YXJkUmVnaW9uIDogcHVibGljIFJlY3RJbXBsIHsKLXB1YmxpYzoKLSAgICBEYXNoYm9hcmRSZWdp
b24oKSA6IG1faXNDaXJjbGUoMCksIG1faXNSZWN0YW5nbGUoMCkgeyB9Ci0KLSAgICBSZWZQdHI8
RGFzaGJvYXJkUmVnaW9uPiBtX25leHQ7Ci0gICAgU3RyaW5nIG1fbGFiZWw7Ci0gICAgU3RyaW5n
IG1fZ2VvbWV0cnlUeXBlOwotICAgIGJvb2wgbV9pc0NpcmNsZSA6IDE7Ci0gICAgYm9vbCBtX2lz
UmVjdGFuZ2xlIDogMTsKLX07Ci0KLWNsYXNzIENTU0ltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTUHJp
bWl0aXZlVmFsdWUsIHB1YmxpYyBDYWNoZWRPYmplY3RDbGllbnQKLXsKLXB1YmxpYzoKLSAgICBD
U1NJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJpbmcmIHVybCwgU3R5
bGVCYXNlKik7Ci0gICAgdmlydHVhbCB+Q1NTSW1hZ2VWYWx1ZSgpOwotCi0gICAgQ2FjaGVkSW1h
Z2UqIGltYWdlKERvY0xvYWRlciopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2FjaGVkSW1hZ2UqIG1f
aW1hZ2U7Ci0gICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7Ci19OwotCi1jbGFzcyBDU1NCb3JkZXJJ
bWFnZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTQm9yZGVySW1h
Z2VWYWx1ZSgpOwotICAgIENTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZh
bHVlPiwKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4sIGludCBob3Jpem9udGFsUnVsZSwg
aW50IHZlcnRpY2FsUnVsZSk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0KLXB1YmxpYzoKLSAgICAvLyBUaGUgYm9yZGVyIGltYWdlLgotICAgIFJlZlB0cjxDU1NJbWFn
ZVZhbHVlPiBtX2ltYWdlOwotCi0gICAgLy8gVGhlc2UgZm91ciB2YWx1ZXMgYXJlIHVzZWQgdG8g
bWFrZSAiY3V0cyIgaW4gdGhlIGltYWdlLiAgVGhleSBjYW4gYmUgbnVtYmVycwotICAgIC8vIG9y
IHBlcmNlbnRhZ2VzLgotICAgIFJlZlB0cjxSZWN0SW1wbD4gbV9pbWFnZVNsaWNlUmVjdDsKLSAg
ICAKLSAgICAvLyBWYWx1ZXMgZm9yIGhvdyB0byBoYW5kbGUgdGhlIHNjYWxpbmcvc3RyZXRjaGlu
Zy90aWxpbmcgb2YgdGhlIGltYWdlIHNsaWNlcy4KLSAgICBpbnQgbV9ob3Jpem9udGFsU2l6ZVJ1
bGU7IC8vIFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIHdpZHRocyBvZiB0aGUgdG9wL21pZGRs
ZS9ib3R0b20KLSAgICBpbnQgbV92ZXJ0aWNhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8g
YWRqdXN0IHRoZSBoZWlnaHRzIG9mIHRoZSBsZWZ0L21pZGRsZS9yaWdodAotfTsKLQotY2xhc3Mg
Rm9udEZhbWlseVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0g
ICAgRm9udEZhbWlseVZhbHVlKCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpOwotICAg
IGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gcGFyc2Vk
Rm9udE5hbWU7IH0KLSAgICBpbnQgZ2VuZXJpY0ZhbWlseVR5cGUoKSBjb25zdCB7IHJldHVybiBf
Z2VuZXJpY0ZhbWlseVR5cGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgcGFyc2VkRm9udE5hbWU7Ci1wcml2YXRlOgotICAg
IGludCBfZ2VuZXJpY0ZhbWlseVR5cGU7Ci19OwotCi1jbGFzcyBGb250VmFsdWUgOiBwdWJsaWMg
Q1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHZhcmlhbnQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB3ZWln
aHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodDsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmYW1p
bHk7Ci19OwotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotY2xhc3Mg
U2hhZG93VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBTaGFkb3dWYWx1
ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4LAotICAgICAgICBQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB5LAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBibHVyLAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcik7Ci0g
ICAgCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB4OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geTsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXI7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb2xvcjsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBhbm90
aGVyIGhlbHBlciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkKLXsKLXB1YmxpYzoKLSAgICBDU1NQ
cm9wZXJ0eShpbnQgcHJvcElELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQgPSBmYWxzZSwgaW50IHNob3J0aGFuZElEID0gMCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNl
KQotICAgICAgICA6IG1faWQocHJvcElEKSwgbV9zaG9ydGhhbmRJRChzaG9ydGhhbmRJRCksIG1f
aW1wb3J0YW50KGltcG9ydGFudCksIG1faW1wbGljaXQoaW1wbGljaXQpLCBtX3ZhbHVlKHZhbHVl
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ1NTUHJvcGVydHkgJm9wZXJhdG9yPShjb25zdCBD
U1NQcm9wZXJ0eSYgbykKLSAgICB7Ci0gICAgICAgIG1faWQgPSBvLm1faWQ7Ci0gICAgICAgIG1f
c2hvcnRoYW5kSUQgPSBvLm1fc2hvcnRoYW5kSUQ7Ci0gICAgICAgIG1faW1wb3J0YW50ID0gby5t
X2ltcG9ydGFudDsKLSAgICAgICAgbV92YWx1ZSA9IG8ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLSAgICAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
Ci0gICAgaW50IHNob3J0aGFuZElEKCkgY29uc3QgeyByZXR1cm4gbV9zaG9ydGhhbmRJRDsgfQot
ICAgIAotICAgIGJvb2wgaXNJbXBvcnRhbnQoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFudDsg
fQotICAgIGJvb2wgaXNJbXBsaWNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbGljaXQ7IH0KLQot
ICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLSAg
ICAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLy8gbWFrZSBzdXJlIHRoZSBm
b2xsb3dpbmcgZml0cyBpbiA0IGJ5dGVzLgotICAgIGludCBtX2lkOwotICAgIGludCBtX3Nob3J0
aGFuZElEOyAgLy8gSWYgdGhpcyBwcm9wZXJ0eSB3YXMgc2V0IGFzIHBhcnQgb2YgYSBzaG9ydGhh
bmQsIGdpdmVzIHRoZSBzaG9ydGhhbmQuCi0gICAgYm9vbCBtX2ltcG9ydGFudCA6IDE7Ci0gICAg
Ym9vbCBtX2ltcGxpY2l0IDogMTsgLy8gV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHdhcyBz
ZXQgaW1wbGljaXRseSBhcyB0aGUgcmVzdWx0IG9mIGEgc2hvcnRoYW5kLgotCi0gICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAmLCBjb25zdCBDU1NQcm9wZXJ0eSAm
KTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV92YWx1ZTsKLX07Ci0KLWNsYXNzIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24KLXsKLXB1Ymxp
YzoKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpOwotICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
Q1NTUHJvcGVydHk+ICYpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUq
IHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRp
ZXMpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gJm9wZXJhdG9yPShjb25zdCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmKTsKLQotICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBu
b2RlKSB7IG1fbm9kZSA9IG5vZGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlE
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVy
dHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHBy
b3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50
IHByb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCk7Ci0KLSAgICBEZXByZWNhdGVk
VmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gdmFsdWVzSXRlcmF0b3IoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9Ci0KLSAgICBib29sIHNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90
aWZ5Q2hhbmdlZCA9IHRydWUpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNo
YW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiBzZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZSwgaW1wb3J0YW50LCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0K
LQotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlD
aGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlv
bkNvZGUgZWM7IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2Vk
LCBlYyk7IH0KLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHZvaWQgc2V0Q2hhbmdlZCgpOwot
IAotICAgIC8vIHNldExlbmd0aFByb3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChO
ZWVkZWQgZm9yIGNvbnZlcnNpb24gb2YgSFRNTCBhdHRyaWJ1dGVzLikKLSAgICB2b2lkIHNldExl
bmd0aFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCwgYm9vbCBtdWx0aUxlbmd0aCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldFN0cmluZ1By
b3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsgLy8gcGFyc2VkIHN0cmlu
ZyB2YWx1ZQotICAgIHZvaWQgc2V0SW1hZ2VQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiBVUkwsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwotIAotICAgIC8vIFRoZSBmb2xs
b3dpbmcgcGFyc2VzIGFuIGVudGlyZSBuZXcgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgdm9pZCBw
YXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbik7Ci0KLSAgICAv
LyBCZXNpZGVzIGFkZGluZyB0aGUgcHJvcGVydGllcywgdGhpcyBhbHNvIHJlbW92ZXMgYW55IGV4
aXN0aW5nIHByb3BlcnRpZXMgd2l0aCB0aGVzZSBJRHMuCi0gICAgLy8gSXQgZG9lcyBubyBub3Rp
ZmljYXRpb24gc2luY2UgaXQncyBjYWxsZWQgYnkgdGhlIHBhcnNlci4KLSAgICB2b2lkIGFkZFBh
cnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJvcGVy
dGllcyk7Ci0gCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29w
eUJsb2NrUHJvcGVydGllcygpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCk7Ci0gICAgdm9pZCByZW1vdmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJl
bW92ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQot
ICAgIHZvaWQgbWVyZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBib29sIGFyZ092ZXJy
aWRlc09uQ29uZmxpY3QgPSB0cnVlKTsKLSAKLXByaXZhdGU6Ci0gICAgU3RyaW5nIGdldFNob3J0
SGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bWJlcikgY29uc3Q7Ci0gICAg
U3RyaW5nIGdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0aWVzKSBjb25zdDsKLSAKLSAgICBE
ZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBtX3ZhbHVlczsKLSAgICBOb2RlKiBtX25v
ZGU7Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGNzcy9DU1NJbWFnZVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0ltYWdlVmFsdWUuaAkocmV2aXNpb24gMTQ0MDAp
CisrKyBjc3MvQ1NTSW1hZ2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwzNDUgKzIwLDE1
IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZuZGVmIENTU19j
c3NfdmFsdWVpbXBsX2hfCi0jZGVmaW5lIENTU19jc3NfdmFsdWVpbXBsX2hfCisjaWZuZGVmIENT
U0ltYWdlVmFsdWVfSAorI2RlZmluZSBDU1NJbWFnZVZhbHVlX0gKIAorI2luY2x1ZGUgIkNTU1By
aW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCi0jaW5jbHVk
ZSAiY3NzX2Jhc2UuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUg
IkRlcHJlY2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCi0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjsKLWNsYXNzIENhY2hlZEltYWdlOwotY2xhc3MgQ291bnRlcjsKIGNsYXNzIERvY0xvYWRlcjsK
LWNsYXNzIE5vZGU7Ci1jbGFzcyBQYWlyOwotY2xhc3MgUmVjdEltcGw7Ci1jbGFzcyBSZW5kZXJT
dHlsZTsKLQotI2lmIF9fQVBQTEVfXwotY2xhc3MgRGFzaGJvYXJkUmVnaW9uOwotI2VuZGlmCi0K
LXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWV4dGVybiBjb25zdCBpbnQgaW5oZXJpdGFi
bGVQcm9wZXJ0aWVzW107Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgbnVtSW5oZXJpdGFibGVQcm9w
ZXJ0aWVzOwotCi1jbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFN0eWxlQmFzZSB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGlzU3R5bGVEZWNsYXJhdGlvbigpOwotCi0gICAg
c3RhdGljIGJvb2wgaXNQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwot
Ci0gICAgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgPSAwOwotCi0gICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1
ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5VmFs
dWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVBy
aW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVy
dHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgaXNQcm9w
ZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICAKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5
SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBw
cm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3Jp
dHkoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0
eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQg
c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcg
cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZp
cnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2Rl
JikgPSAwOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBjb3B5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKSA9IDA7Ci0gCi0gICAgdm9pZCBkaWZmKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0
LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlID0gMCk7Ci0KLXByaXZhdGU6Ci0gICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbihjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICYpOwotICAgIENTU1N0eWxl
RGVjbGFyYXRpb24mIG9wZXJhdG9yPShjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICYpOwotfTsK
LQotY2xhc3MgQ1NTVmFsdWUgOiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51
bSBVbml0VHlwZXMgewotICAgICAgICBDU1NfSU5IRVJJVCA9IDAsCi0gICAgICAgIENTU19QUklN
SVRJVkVfVkFMVUUgPSAxLAotICAgICAgICBDU1NfVkFMVUVfTElTVCA9IDIsCi0gICAgICAgIENT
U19DVVNUT00gPSAzLAotICAgICAgICBDU1NfSU5JVElBTCA9IDQKLSAgICB9OwotCi0gICAgQ1NT
VmFsdWUoKSA6IFN0eWxlQmFzZSgwKSB7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQg
Y3NzVmFsdWVUeXBlKCkgY29uc3QgeyByZXR1cm4gQ1NTX0NVU1RPTTsgfQotICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0
cmluZyYpIHsgfSAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotCi0gICAgdmlydHVhbCBib29s
IGlzVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVl
KCkgeyByZXR1cm4gZmFsc2U7IH0KLX07Ci0KLWNsYXNzIENTU0luaGVyaXRlZFZhbHVlIDogcHVi
bGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NW
YWx1ZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci19
OwotCi1jbGFzcyBDU1NJbml0aWFsVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU1ZhbHVlTGlzdCA6
IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgfkNTU1ZhbHVlTGlzdCgp
OwotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY291bnQo
KTsgfQotICAgIENTU1ZhbHVlKiBpdGVtICh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YWx1
ZXMuYXQoaW5kZXgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwotICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIERlcHJlY2F0ZWRQ
dHJMaXN0PENTU1ZhbHVlPiBtX3ZhbHVlczsKLX07Ci0KLQotY2xhc3MgQ1NTUHJpbWl0aXZlVmFs
dWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0g
ICAgICAgIENTU19VTktOT1dOID0gMCwKLSAgICAgICAgQ1NTX05VTUJFUiA9IDEsCi0gICAgICAg
IENTU19QRVJDRU5UQUdFID0gMiwKLSAgICAgICAgQ1NTX0VNUyA9IDMsCi0gICAgICAgIENTU19F
WFMgPSA0LAotICAgICAgICBDU1NfUFggPSA1LAotICAgICAgICBDU1NfQ00gPSA2LAotICAgICAg
ICBDU1NfTU0gPSA3LAotICAgICAgICBDU1NfSU4gPSA4LAotICAgICAgICBDU1NfUFQgPSA5LAot
ICAgICAgICBDU1NfUEMgPSAxMCwKLSAgICAgICAgQ1NTX0RFRyA9IDExLAotICAgICAgICBDU1Nf
UkFEID0gMTIsCi0gICAgICAgIENTU19HUkFEID0gMTMsCi0gICAgICAgIENTU19NUyA9IDE0LAot
ICAgICAgICBDU1NfUyA9IDE1LAotICAgICAgICBDU1NfSFogPSAxNiwKLSAgICAgICAgQ1NTX0tI
WiA9IDE3LAotICAgICAgICBDU1NfRElNRU5TSU9OID0gMTgsCi0gICAgICAgIENTU19TVFJJTkcg
PSAxOSwKLSAgICAgICAgQ1NTX1VSSSA9IDIwLAotICAgICAgICBDU1NfSURFTlQgPSAyMSwKLSAg
ICAgICAgQ1NTX0FUVFIgPSAyMiwKLSAgICAgICAgQ1NTX0NPVU5URVIgPSAyMywKLSAgICAgICAg
Q1NTX1JFQ1QgPSAyNCwKLSAgICAgICAgQ1NTX1JHQkNPTE9SID0gMjUsCi0gICAgICAgIENTU19Q
QUlSID0gMTAwLCAvLyBXZSBlbnZpc2lvbiB0aGlzIGJlaW5nIGV4cG9zZWQgYXMgYSBtZWFucyBv
ZiBnZXR0aW5nIGNvbXB1dGVkIHN0eWxlIHZhbHVlcyBmb3IgcGFpcnMgKGJvcmRlci1zcGFjaW5n
L3JhZGl1cywgYmFja2dyb3VuZC1wb3NpdGlvbiwgZXRjLikKLSAgICAgICAgQ1NTX0RBU0hCT0FS
RF9SRUdJT04gPSAxMDEgLy8gRklYTUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBkb2luZyBhcyBh
IHByaW1pdGl2ZSB2YWx1ZT8gSXQgc2hvdWxkIG5vdCBiZSEKLSAgICB9OwotCi0gICAgLy8gRklY
TUU6IGludCB2cy4gdW5zaWduZWQgb3ZlcmxvYWRpbmcgaXMgdG9vIHRyaWNreSBmb3IgY29sb3Ig
dnMuIGlkZW50Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1
ZShpbnQgaWRlbnQpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSwgVW5pdFR5cGVzKTsK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmLCBVbml0VHlwZXMpOwotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4pOwotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKFBhc3NSZWZQdHI8UmVjdEltcGw+KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSh1bnNpZ25l
ZCBjb2xvcik7IC8vIFJHQiB2YWx1ZQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8
UGFpcj4pOwotCi0jaWYgX19BUFBMRV9fCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0
cjxEYXNoYm9hcmRSZWdpb24+KTsgLy8gRklYTUU6IFdoeSBpcyBkYXNoYm9hcmQgcmVnaW9uIGEg
cHJpbWl0aXZlIHZhbHVlPyBUaGlzIG1ha2VzIG5vIHNlbnNlLgotI2VuZGlmCi0KLSAgICB2aXJ0
dWFsIH5DU1NQcmltaXRpdmVWYWx1ZSgpOwotCi0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB1
bnNpZ25lZCBzaG9ydCBwcmltaXRpdmVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0K
LSAgICAvKgotICAgICAqIGNvbXB1dGVzIGEgbGVuZ3RoIGluIHBpeGVscyBvdXQgb2YgdGhlIGdp
dmVuIENTU1ZhbHVlLiBOZWVkIHRoZSBSZW5kZXJTdHlsZSB0byBnZXQKLSAgICAgKiB0aGUgZm9u
dGluZm8gaW4gY2FzZSB2YWwgaXMgZGVmaW5lZCBpbiBlbSBvciBleC4KLSAgICAgKgotICAgICAq
IFRoZSBtZXRyaWNzIGhhdmUgdG8gYmUgYSBiaXQgZGlmZmVyZW50IGZvciBzY3JlZW4gYW5kIHBy
aW50ZXIgb3V0cHV0LgotICAgICAqIEZvciBzY3JlZW4gb3V0cHV0IHdlIGFzc3VtZSAxIGluY2gg
PT0gNzIgcHgsIGZvciBwcmludGVyIHdlIGFzc3VtZSAzMDAgZHBpCi0gICAgICoKLSAgICAgKiB0
aGlzIGlzIHNjcmVlbi9wcmludGVyIGRlcGVuZGVudCwgc28gd2UgcHJvYmFibHkgbmVlZCBhIGNv
bmZpZyBvcHRpb24gZm9yIHRoaXMsCi0gICAgICogYW5kIHNvbWUgdG9vbCB0byBjYWxpYnJhdGUu
Ci0gICAgICovCi0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqKTsKLSAgICBp
bnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAg
ICBpbnQgY29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSopOwotICAgIGludCBj
b21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIp
OwotICAgIHNob3J0IGNvbXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSopOwotICAgIHNob3J0
IGNvbXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAg
ICBkb3VibGUgY29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxlKiwgYm9vbCBhcHBseVpvb21G
YWN0b3IgPSB0cnVlKTsKLQotICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKLSAgICB2b2lkIHNldFBy
aW1pdGl2ZVR5cGUodW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0gICAg
dm9pZCBzZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRW
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKHVuc2lnbmVk
IHNob3J0IHVuaXRUeXBlKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSgpIHsgcmV0dXJuIG1f
dmFsdWUubnVtOyB9Ci0KLSAgICB2b2lkIHNldFN0cmluZ1ZhbHVlKHVuc2lnbmVkIHNob3J0IHN0
cmluZ1R5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICAKLSAgICBDb3VudGVyKiBnZXRD
b3VudGVyVmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19DT1VO
VEVSID8gMCA6IG1fdmFsdWUuY291bnRlcjsKLSAgICB9Ci0KLSAgICBSZWN0SW1wbCogZ2V0UmVj
dFZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkVDVCA/IDAg
OiBtX3ZhbHVlLnJlY3Q7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2V0UkdCQ29sb3JWYWx1ZSgp
IGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkdCQ09MT1IgPyAwIDogbV92
YWx1ZS5yZ2Jjb2xvcjsKLSAgICB9Ci0KLSAgICBQYWlyKiBnZXRQYWlyVmFsdWUoKSBjb25zdCB7
Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1BBSVIgPyAwIDogbV92YWx1ZS5wYWlyOwot
ICAgIH0KLQotI2lmIF9fQVBQTEVfXwotICAgIERhc2hib2FyZFJlZ2lvbiAqZ2V0RGFzaGJvYXJk
UmVnaW9uVmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19EQVNI
Qk9BUkRfUkVHSU9OID8gMCA6IG1fdmFsdWUucmVnaW9uOwotICAgIH0KLSNlbmRpZgotCi0gICAg
dmlydHVhbCBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQotICAgIGlu
dCBnZXRJZGVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYsIGJvb2wgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBpbnQgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgaW50IGlkZW50
OwotICAgICAgICBkb3VibGUgbnVtOwotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7Ci0gICAg
ICAgIENvdW50ZXIqIGNvdW50ZXI7Ci0gICAgICAgIFJlY3RJbXBsKiByZWN0OwotICAgICAgICB1
bnNpZ25lZCByZ2Jjb2xvcjsKLSAgICAgICAgUGFpciogcGFpcjsKLSNpZiBfX0FQUExFX18KLSAg
ICAgICAgRGFzaGJvYXJkUmVnaW9uKiByZWdpb247Ci0jZW5kaWYKLSAgICB9IG1fdmFsdWU7Ci19
OwotCi0vLyBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gaGFuZGxlIHF1aXJreSBtYXJnaW5zIGluIHJl
ZmxvdyByb290cyAoYm9keSwgdGQsIGFuZCB0aCkgbGlrZSBXaW5JRS4KLS8vIFRoZSBiYXNpYyBp
ZGVhIGlzIHRoYXQgYSBzdHlsZXNoZWV0IGNhbiB1c2UgdGhlIHZhbHVlIF9fcWVtIChmb3IgcXVp
cmt5IGVtKSBpbnN0ZWFkIG9mIGVtCi0vLyBpbiBhIHN0eWxlc2hlZXQuICBXaGVuIHRoZSBxdWly
a3kgdmFsdWUgaXMgdXNlZCwgaWYgeW91J3JlIGluIHF1aXJrcyBtb2RlLCB0aGUgbWFyZ2luIHdp
bGwKLS8vIGNvbGxhcHNlIGF3YXkgaW5zaWRlIGEgdGFibGUgY2VsbC4KLWNsYXNzIENTU1F1aXJr
UHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUKLXsKLXB1YmxpYzoKLSAg
ICBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotICAg
ICAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKG51bSwgdHlwZSkge30KLQotICAgIHZpcnR1YWwgYm9v
bCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9Ci19OwotCi1jbGFzcyBDb3VudGVyIDog
cHVibGljIFNoYXJlZDxDb3VudGVyPiB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nIGlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBTdHJpbmcgbGlzdFN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9saXN0U3R5bGU7IH0KLSAgICBTdHJpbmcgc2VwYXJhdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zZXBhcmF0b3I7IH0KLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0g
ICAgU3RyaW5nIG1fbGlzdFN0eWxlOwotICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKLX07Ci0KLWNs
YXNzIFJlY3RJbXBsIDogcHVibGljIFNoYXJlZDxSZWN0SW1wbD4gewotcHVibGljOgotICAgIHZp
cnR1YWwgflJlY3RJbXBsKCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3Qg
eyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmlnaHQoKSBj
b25zdCB7IHJldHVybiBtX3JpZ2h0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQuZ2V0KCk7IH0KLQotICAgIHZvaWQg
c2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsg
fQotICAgIHZvaWQgc2V0UmlnaHQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmlnaHQp
IHsgbV9yaWdodCA9IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gYm90dG9tKSB7IG1fYm90dG9tID0gYm90dG9tOyB9Ci0gICAgdm9pZCBz
ZXRMZWZ0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVm
dDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3RvcDsK
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1f
bGVmdDsKLX07Ci0KLS8vIEEgcHJpbWl0aXZlIHZhbHVlIHJlcHJlc2VudGluZyBhIHBhaXIuICBU
aGlzIGlzIHVzZWZ1bCBmb3IgcHJvcGVydGllcyBsaWtlIGJvcmRlci1yYWRpdXMsIGJhY2tncm91
bmQtc2l6ZS9wb3NpdGlvbiwKLS8vIGFuZCBib3JkZXItc3BhY2luZyAoYWxsIG9mIHdoaWNoIGFy
ZSBzcGFjZS1zZXBhcmF0ZWQgc2V0cyBvZiB0d28gdmFsdWVzKS4gIEF0IHRoZSBtb21lbnQgd2Ug
YXJlIG9ubHkgdXNpbmcgaXQgZm9yCi0vLyBib3JkZXItcmFkaXVzIGFuZCBiYWNrZ3JvdW5kLXNp
emUsIGJ1dCAoRklYTUUpIGJvcmRlci1zcGFjaW5nIGFuZCBiYWNrZ3JvdW5kLXBvc2l0aW9uIGNv
dWxkIGJlIGNvbnZlcnRlZCBvdmVyIHRvIHVzZQotLy8gaXQgKGVsaW1pbmF0aW5nIHNvbWUgZXh0
cmEgLXdlYmtpdC0gaW50ZXJuYWwgcHJvcGVydGllcykuCi1jbGFzcyBQYWlyIDogcHVibGljIFNo
YXJlZDxQYWlyPiB7Ci1wdWJsaWM6Ci0gICAgUGFpcigpIDogbV9maXJzdCgwKSwgbV9zZWNvbmQo
MCkgeyB9Ci0gICAgUGFpcihQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdCwgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKQotICAgICAgICA6IG1fZmlyc3QoZmly
c3QpLCBtX3NlY29uZChzZWNvbmQpIHsgfQotICAgIHZpcnR1YWwgflBhaXIoKTsKLQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3QuZ2V0KCk7IH0K
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV9zZWNvbmQu
Z2V0KCk7IH0KLQotICAgIHZvaWQgc2V0Rmlyc3QoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gZmlyc3QpIHsgbV9maXJzdCA9IGZpcnN0OyB9Ci0gICAgdm9pZCBzZXRTZWNvbmQoUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKSB7IG1fc2Vjb25kID0gc2Vjb25kOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3Q7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZDsKLX07Ci0KLWNsYXNzIERhc2hib2Fy
ZFJlZ2lvbiA6IHB1YmxpYyBSZWN0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgRGFzaGJvYXJkUmVnaW9u
KCkgOiBtX2lzQ2lyY2xlKDApLCBtX2lzUmVjdGFuZ2xlKDApIHsgfQotCi0gICAgUmVmUHRyPERh
c2hib2FyZFJlZ2lvbj4gbV9uZXh0OwotICAgIFN0cmluZyBtX2xhYmVsOwotICAgIFN0cmluZyBt
X2dlb21ldHJ5VHlwZTsKLSAgICBib29sIG1faXNDaXJjbGUgOiAxOwotICAgIGJvb2wgbV9pc1Jl
Y3RhbmdsZSA6IDE7Ci19OwogCiBjbGFzcyBDU1NJbWFnZVZhbHVlIDogcHVibGljIENTU1ByaW1p
dGl2ZVZhbHVlLCBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50CiB7CkBAIC0zNzQsMTg3ICs0NCw2
IEBACiAgICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7CiB9OwogCi1jbGFzcyBDU1NCb3JkZXJJbWFn
ZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTQm9yZGVySW1hZ2VW
YWx1ZSgpOwotICAgIENTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVl
PiwKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4sIGludCBob3Jpem9udGFsUnVsZSwgaW50
IHZlcnRpY2FsUnVsZSk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0K
LXB1YmxpYzoKLSAgICAvLyBUaGUgYm9yZGVyIGltYWdlLgotICAgIFJlZlB0cjxDU1NJbWFnZVZh
bHVlPiBtX2ltYWdlOwotCi0gICAgLy8gVGhlc2UgZm91ciB2YWx1ZXMgYXJlIHVzZWQgdG8gbWFr
ZSAiY3V0cyIgaW4gdGhlIGltYWdlLiAgVGhleSBjYW4gYmUgbnVtYmVycwotICAgIC8vIG9yIHBl
cmNlbnRhZ2VzLgotICAgIFJlZlB0cjxSZWN0SW1wbD4gbV9pbWFnZVNsaWNlUmVjdDsKLSAgICAK
LSAgICAvLyBWYWx1ZXMgZm9yIGhvdyB0byBoYW5kbGUgdGhlIHNjYWxpbmcvc3RyZXRjaGluZy90
aWxpbmcgb2YgdGhlIGltYWdlIHNsaWNlcy4KLSAgICBpbnQgbV9ob3Jpem9udGFsU2l6ZVJ1bGU7
IC8vIFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIHdpZHRocyBvZiB0aGUgdG9wL21pZGRsZS9i
b3R0b20KLSAgICBpbnQgbV92ZXJ0aWNhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8gYWRq
dXN0IHRoZSBoZWlnaHRzIG9mIHRoZSBsZWZ0L21pZGRsZS9yaWdodAotfTsKLQotY2xhc3MgRm9u
dEZhbWlseVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0gICAg
Rm9udEZhbWlseVZhbHVlKCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpOwotICAgIGNv
bnN0IERlcHJlY2F0ZWRTdHJpbmcmIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gcGFyc2VkRm9u
dE5hbWU7IH0KLSAgICBpbnQgZ2VuZXJpY0ZhbWlseVR5cGUoKSBjb25zdCB7IHJldHVybiBfZ2Vu
ZXJpY0ZhbWlseVR5cGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LQotICAgIERlcHJlY2F0ZWRTdHJpbmcgcGFyc2VkRm9udE5hbWU7Ci1wcml2YXRlOgotICAgIGlu
dCBfZ2VuZXJpY0ZhbWlseVR5cGU7Ci19OwotCi1jbGFzcyBGb250VmFsdWUgOiBwdWJsaWMgQ1NT
VmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0g
ICAgCi0gICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHZhcmlhbnQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB3ZWlnaHQ7
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbGluZUhlaWdodDsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmYW1pbHk7
Ci19OwotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotY2xhc3MgU2hh
ZG93VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBTaGFkb3dWYWx1ZShQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4LAotICAgICAgICBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB5LAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBi
bHVyLAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcik7Ci0gICAg
Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB4OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXI7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb2xvcjsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBhbm90aGVy
IGhlbHBlciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkKLXsKLXB1YmxpYzoKLSAgICBDU1NQcm9w
ZXJ0eShpbnQgcHJvcElELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSwgaW50IHNob3J0aGFuZElEID0gMCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKQot
ICAgICAgICA6IG1faWQocHJvcElEKSwgbV9zaG9ydGhhbmRJRChzaG9ydGhhbmRJRCksIG1faW1w
b3J0YW50KGltcG9ydGFudCksIG1faW1wbGljaXQoaW1wbGljaXQpLCBtX3ZhbHVlKHZhbHVlKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ1NTUHJvcGVydHkgJm9wZXJhdG9yPShjb25zdCBDU1NQ
cm9wZXJ0eSYgbykKLSAgICB7Ci0gICAgICAgIG1faWQgPSBvLm1faWQ7Ci0gICAgICAgIG1fc2hv
cnRoYW5kSUQgPSBvLm1fc2hvcnRoYW5kSUQ7Ci0gICAgICAgIG1faW1wb3J0YW50ID0gby5tX2lt
cG9ydGFudDsKLSAgICAgICAgbV92YWx1ZSA9IG8ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJuICp0
aGlzOwotICAgIH0KLSAgICAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0g
ICAgaW50IHNob3J0aGFuZElEKCkgY29uc3QgeyByZXR1cm4gbV9zaG9ydGhhbmRJRDsgfQotICAg
IAotICAgIGJvb2wgaXNJbXBvcnRhbnQoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFudDsgfQot
ICAgIGJvb2wgaXNJbXBsaWNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbGljaXQ7IH0KLQotICAg
IENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLSAgICAK
LSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLy8gbWFrZSBzdXJlIHRoZSBmb2xs
b3dpbmcgZml0cyBpbiA0IGJ5dGVzLgotICAgIGludCBtX2lkOwotICAgIGludCBtX3Nob3J0aGFu
ZElEOyAgLy8gSWYgdGhpcyBwcm9wZXJ0eSB3YXMgc2V0IGFzIHBhcnQgb2YgYSBzaG9ydGhhbmQs
IGdpdmVzIHRoZSBzaG9ydGhhbmQuCi0gICAgYm9vbCBtX2ltcG9ydGFudCA6IDE7Ci0gICAgYm9v
bCBtX2ltcGxpY2l0IDogMTsgLy8gV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHdhcyBzZXQg
aW1wbGljaXRseSBhcyB0aGUgcmVzdWx0IG9mIGEgc2hvcnRoYW5kLgotCi0gICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAmLCBjb25zdCBDU1NQcm9wZXJ0eSAmKTsK
LQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV92YWx1ZTsKLX07Ci0KLWNsYXNzIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24KLXsKLXB1YmxpYzoK
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpOwotICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NT
UHJvcGVydHk+ICYpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBh
cmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMp
OwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gJm9wZXJhdG9yPShjb25zdCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmKTsKLQotICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2Rl
KSB7IG1fbm9kZSA9IG5vZGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJik7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJ
RCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3Bl
cnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHBy
b3BlcnR5SUQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9w
ZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCk7Ci0KLSAgICBEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gdmFsdWVzSXRlcmF0b3IoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9Ci0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5
Q2hhbmdlZCA9IHRydWUpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNoYW5n
ZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiBzZXRQcm9wZXJ0
eShwcm9wZXJ0eUlkLCB2YWx1ZSwgaW1wb3J0YW50LCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0KLQot
ICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFu
Z2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNv
ZGUgZWM7IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBl
Yyk7IH0KLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHZvaWQgc2V0Q2hhbmdlZCgpOwotIAot
ICAgIC8vIHNldExlbmd0aFByb3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChOZWVk
ZWQgZm9yIGNvbnZlcnNpb24gb2YgSFRNTCBhdHRyaWJ1dGVzLikKLSAgICB2b2lkIHNldExlbmd0
aFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9y
dGFudCwgYm9vbCBtdWx0aUxlbmd0aCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldFN0cmluZ1Byb3Bl
cnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsgLy8gcGFyc2VkIHN0cmluZyB2
YWx1ZQotICAgIHZvaWQgc2V0SW1hZ2VQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3Ry
aW5nJiBVUkwsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwotIAotICAgIC8vIFRoZSBmb2xsb3dp
bmcgcGFyc2VzIGFuIGVudGlyZSBuZXcgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgdm9pZCBwYXJz
ZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbik7Ci0KLSAgICAvLyBC
ZXNpZGVzIGFkZGluZyB0aGUgcHJvcGVydGllcywgdGhpcyBhbHNvIHJlbW92ZXMgYW55IGV4aXN0
aW5nIHByb3BlcnRpZXMgd2l0aCB0aGVzZSBJRHMuCi0gICAgLy8gSXQgZG9lcyBubyBub3RpZmlj
YXRpb24gc2luY2UgaXQncyBjYWxsZWQgYnkgdGhlIHBhcnNlci4KLSAgICB2b2lkIGFkZFBhcnNl
ZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJvcGVydGll
cyk7Ci0gCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUJs
b2NrUHJvcGVydGllcygpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
Ci0gICAgdm9pZCByZW1vdmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJlbW92
ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IHZvaWQgbWVyZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBib29sIGFyZ092ZXJyaWRl
c09uQ29uZmxpY3QgPSB0cnVlKTsKLSAKLXByaXZhdGU6Ci0gICAgU3RyaW5nIGdldFNob3J0SGFu
ZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bWJlcikgY29uc3Q7Ci0gICAgU3Ry
aW5nIGdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0aWVzKSBjb25zdDsKLSAKLSAgICBEZXBy
ZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBtX3ZhbHVlczsKLSAgICBOb2RlKiBtX25vZGU7
Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGNzcy9DU1NQcm9wZXJ0eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY3NzL0NTU1Byb3BlcnR5LmNwcAkocmV2aXNpb24gMTQ0MDApCisr
KyBjc3MvQ1NTUHJvcGVydHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMzMyICsxOSwxNyBA
QAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKLQotI2luY2x1ZGUg
IkNhY2hlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgImNzc3BhcnNlci5oIgotI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNp
bmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgotCi0jaWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRl
ICJrc3ZnY3NzcHJvcGVydGllcy5oIgotI2VuZGlmCisjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIK
IAogLy8gTm90IGluIGFueSBoZWFkZXIsIHNvIGp1c3QgZGVjbGFyZSBpdCBoZXJlIGZvciBub3cu
CiBXZWJDb3JlOjpTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2lnbmVkIHNob3J0IGlkKTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBEZWZpbmVkIGluIENTU0dyYW1tYXIueSwgYnV0IG5v
dCBpbiBhbnkgaGVhZGVyLCBzbyBqdXN0IGRlY2xhcmUgaXQgaGVyZSBmb3Igbm93LgotaW50IGdl
dFByb3BlcnR5SUQoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLQotc3RhdGljIGludCBwcm9w
ZXJ0eUlEKGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBjaGFyIGJ1ZmZlclttYXhDU1NQcm9wZXJ0
eU5hbWVMZW5ndGhdOwotCi0gICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKLSAgICBpZiAo
bGVuID4gbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9
IHNbaV07Ci0gICAgICAgIGlmIChjID09IDAgfHwgYyA+PSAweDdGKQotICAgICAgICAgICAgcmV0
dXJuIDA7IC8vIGlsbGVnYWwgY2hhcmFjdGVyCi0gICAgICAgIGJ1ZmZlcltpXSA9IGM7Ci0gICAg
fQotCi0gICAgaW50IGlkID0gZ2V0UHJvcGVydHlJRChidWZmZXIsIGxlbik7Ci0jaWYgU1ZHX1NV
UFBPUlQKLSAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgaWQgPSBTVkc6OmdldFNWR0NTU1Byb3Bl
cnR5SUQoYnVmZmVyLCBsZW4pOwotI2VuZGlmCi0gICAgcmV0dXJuIGlkOwotfQotCi0KLS8vIFF1
b3RlcyB0aGUgc3RyaW5nIGlmIGl0IG5lZWRzIHF1b3RpbmcuCi0vLyBXZSB1c2Ugc2luZ2xlIHF1
b3RlcyBmb3Igbm93IGJlYXVzZSBtYXJrdXAuY3BwIHVzZXMgZG91YmxlIHF1b3Rlcy4KLXN0YXRp
YyBTdHJpbmcgcXVvdGVTdHJpbmdJZk5lZWRlZChjb25zdCBTdHJpbmcgJnN0cmluZykKLXsKLSAg
ICAvLyBGb3Igbm93LCBqdXN0IGRvIHRoaXMgZm9yIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoICIj
IiB0byBmaXggS29yZWFuIGZvbnQgbmFtZXMgdGhhdCBzdGFydCB3aXRoICIjIi4KLSAgICAvLyBQ
b3N0LVRpZ2VyLCB3ZSBzaG91bGQgaXNMZWdhbElkZW50aWZpZXIgaW5zdGVhZCBhZnRlciB3b3Jr
aW5nIG91dCBhbGwgdGhlIGFuY2lsbGFyeSBpc3N1ZXMuCi0gICAgaWYgKHN0cmluZ1swXSAhPSAn
IycpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KLSAgICAvLyBGSVhNRTogQWxzbyBuZWVkIHRv
IHRyYW5zZm9ybSBjb250cm9sIGNoYXJhY3RlcnMgaW50byBcIHNlcXVlbmNlcy4KLSAgICBTdHJp
bmcgcyA9IHN0cmluZzsKLSAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKLSAgICBzLnJlcGxh
Y2UoJ1wnJywgIlxcJyIpOwotICAgIHJldHVybiAiJyIgKyBzICsgIiciOwotfQotCi1DU1NTdHls
ZURlY2xhcmF0aW9uOjpDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6
IFN0eWxlQmFzZShwYXJlbnQpCi17Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNT
dHlsZURlY2xhcmF0aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9w
ZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsK
LSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJv
cElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFs
dWUocHJvcElEKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
UHJpb3JpdHkoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9
IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BJRCkgPyAi
aW1wb3J0YW50IiA6ICIiOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHBy
b3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIGludCBzaG9ydGhhbmRJRCA9IGdldFByb3BlcnR5U2hv
cnRoYW5kKHByb3BJRCk7Ci0gICAgaWYgKCFzaG9ydGhhbmRJRCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc2hvcnRoYW5kSUQpOwotfQotCi1i
b29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcg
JnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5h
bWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IGlzUHJvcGVydHlJbXBsaWNpdChwcm9wSUQpOwotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElE
KSAvLyBzZXQgZXhjZXB0aW9uPwotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQg
PSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gLTE7Ci0gICAgc2V0UHJv
cGVydHkocHJvcElELCB2YWx1ZSwgaW1wb3J0YW50LCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NTdHls
ZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVy
dHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wSUQsIGVjKTsKLX0KLQotYm9vbCBDU1NTdHlsZURl
Y2xhcmF0aW9uOjppc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsK
LSAgICByZXR1cm4gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24oKQotICAgIDogbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpw
YXJlbnQpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQotewot
fQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oQ1NTUnVsZSAqcGFyZW50LCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5
PiAmdmFsdWVzKQotICAgIDogQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXJlbnQpLCBtX3ZhbHVlcyh2
YWx1ZXMpLCBtX25vZGUoMCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRl
IHByb3BlcnRpZXMuCi19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQsIGNvbnN0IENTU1Byb3BlcnR5ICogY29u
c3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQotICAgIDogQ1NTU3R5bGVEZWNsYXJh
dGlvbihwYXJlbnQpLCBtX25vZGUoMCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsK
LSAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRlIHByb3BlcnRpZXMuCi19Ci0KLUNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6b3Bl
cmF0b3I9KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBvKQotewotICAgIC8vIGRv
bid0IGF0dGFjaCBpdCB0byB0aGUgc2FtZSBub2RlLCBqdXN0IGxlYXZlIHRoZSBjdXJyZW50IG1f
bm9kZSB2YWx1ZQotICAgIG1fdmFsdWVzID0gby5tX3ZhbHVlczsKLSAgICByZXR1cm4gKnRoaXM7
Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1
ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICBpZiAodmFsdWUpCi0gICAgICAg
IHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOwotCi0gICAgLy8gU2hvcnRoYW5kIGFuZCA0LXZhbHVl
cyBwcm9wZXJ0aWVzCi0gICAgc3dpdGNoICggcHJvcGVydHlJRCApIHsKLSAgICBjYXNlIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfUE9TSVRJT046Ci0gICAgewotICAgICAgICAvLyAjIyBJcyB0aGlzIGNv
cnJlY3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5nCi0gICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OX1gs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CQUNLR1JPVU5E
X1BPU0lUSU9OX1kgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0
aWVzLCAyICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORDoKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzVdID0geyBDU1NfUFJPUF9CQUNLR1JPVU5EX0lN
QUdFLCBDU1NfUFJPUF9CQUNLR1JPVU5EX1JFUEVBVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0JBQ0tHUk9VTkRfQVRUQUNITUVOVCwgQ1NTX1BST1BfQkFD
S0dST1VORF9QT1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZh
bHVlKCBwcm9wZXJ0aWVzLCA1ICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSOgot
ICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRF
Ul9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXRT
aG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9Q
X0JPUkRFUl9UT1A6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsg
Q1NTX1BST1BfQk9SREVSX1RPUF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9UT1BfQ09M
T1J9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsK
LSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfUklHSFQ6Ci0gICAgewotICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1dJRFRILCBD
U1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NfUFJPUF9CT1JERVJfUklHSFRfQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0
U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10g
PSB7IENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgsIENTU19QUk9QX0JPUkRFUl9CT1RUT01f
U1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JE
RVJfQk9UVE9NX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9w
ZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0xFRlQ6Ci0gICAg
ewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0xF
RlRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0xFRlRfQ09MT1J9OwotICAgICAgICBy
ZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NfUFJPUF9PVVRMSU5FOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
M10gPSB7IENTU19QUk9QX09VVExJTkVfV0lEVEgsIENTU19QUk9QX09VVExJTkVfU1RZTEUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9PVVRMSU5FX0NPTE9S
IH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwot
ICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9DT0xPUjoKLSAgICB7Ci0gICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX0NPTE9SLCBDU1Nf
UFJPUF9CT1JERVJfUklHSFRfQ09MT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX0NPTE9SLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9D
T0xPUiB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0K
LSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9XSURUSDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfUFJPUF9C
T1JERVJfUklHSFRfV0lEVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCB9
OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBj
YXNlIENTU19QUk9QX0JPUkRFUl9TVFlMRToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCBDU1NfUFJPUF9CT1JERVJf
UklHSFRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSB9OwotICAg
ICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENT
U19QUk9QX01BUkdJTjoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0g
eyBDU1NfUFJPUF9NQVJHSU5fVE9QLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBDU1NfUFJP
UF9NQVJHSU5fTEVGVCB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyAp
OwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX1BBRERJTkc6Ci0gICAgewotICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BST1BfUEFERElOR19UT1AsIENTU19QUk9QX1BB
RERJTkdfUklHSFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9QQURESU5HX0JPVFRPTSwgQ1NTX1BST1BfUEFERElOR19MRUZUIH07Ci0gICAgICAgIHJldHVy
biBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTElT
VF9TVFlMRToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1Nf
UFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19QUk9QX0xJU1RfU1RZTEVfUE9TSVRJT04sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9MSVNUX1NUWUxFX0lNQUdF
IH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwot
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmdldDRWYWx1ZXMoIGNvbnN0IGludCogcHJvcGVydGllcyApIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkg
ewotICAgICAgICBpZiAoIWlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkgewotICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydGllc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKSAvLyBhcHBhcmVudGx5IGFsbCA0
IHByb3BlcnRpZXMgbXVzdCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAg
cmVzICs9ICIgIjsKLSAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0U2hvcnRIYW5kVmFsdWUoIGNvbnN0IGludCogcHJvcGVydGllcywgaW50
IG51bWJlciApIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlcjsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3Bl
cnRpZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgeyAv
LyBUT0RPIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZSBpZiAhdmFsdWUKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlcy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAg
ICAgICAgICAgICByZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVy
dHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuZnJvbUxhc3QoKTsgaXQgIT0gZW5kOyAtLWl0KQot
ICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5tX2lkKQotICAgICAgICAgICAgcmV0dXJu
ICgqaXQpLnZhbHVlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5
Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotCi0gICAgU3RyaW5n
IHZhbHVlOwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBl
bmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0
ID0gbV92YWx1ZXMuZnJvbUxhc3QoKTsgaXQgIT0gZW5kOyAtLWl0KQotICAgICAgICBpZiAocHJv
cGVydHlJRCA9PSAoKml0KS5tX2lkKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9ICgqaXQpLnZhbHVl
KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlbW92ZShpdCk7Ci0gICAgICAg
ICAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjbGVhcigpCi17Ci0gICAgbV92YWx1ZXMu
Y2xlYXIoKTsKLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnNldENoYW5nZWQoKQotewotICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgbV9u
b2RlLT5zZXRDaGFuZ2VkKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB0aGlzIHNob3Vs
ZCBiZSBmYWN0b3JlZCBiZXR0ZXIgYW5kIHRoZXJlCi0gICAgICAgIC8vIHNob3VsZCBiZSBhIHN1
YmNsYXNzIG9mIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uIGp1c3QKLSAgICAgICAgLy8gZm9y
IGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMgdGhhdCBoYW5kbGVzIHRoaXMKLSAgICAgICAgaWYg
KG1fbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkgJiYgdGhpcyA9PSBzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50ICo+KG1fbm9kZSktPmlubGluZVN0eWxlRGVjbCgpKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCAqPihtX25vZGUpLT5pbnZhbGlkYXRlU3R5bGVBdHRyaWJ1dGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vICMjIyBxdWljayZkaXJ0eSBoYWNr
IGZvciBLREUgMy4wLi4uIG1ha2UgdGhpcyBNVUNIIGJldHRlciEgKERpcmspCi0gICAgU3R5bGVC
YXNlICpyb290ID0gdGhpczsKLSAgICB3aGlsZSAoU3R5bGVCYXNlICpwYXJlbnQgPSByb290LT5w
YXJlbnQoKSkKLSAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNDU1NTdHls
ZVNoZWV0KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9j
KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAg
ICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAg
IGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0g
bV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJ
RCA9PSAoKml0KS5pZCgpKQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmlzSW1wb3J0YW50KCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChE
ZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgq
aXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuc2hvcnRoYW5kSUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzUHJv
cGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRl
ZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5pZCgp
KQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmlzSW1wbGljaXQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9y
dGFudCwgdHJ1ZSwgZWMpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgdHJ1ZSwgZWMpOwotfQotCi1ib29s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nICZ2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotCi0gICAgcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCk7Ci0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2VyLnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwg
dmFsdWUsIGltcG9ydGFudCk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKLSAgICB9IGVsc2UgaWYgKG5vdGlmeUNoYW5nZWQpCi0gICAgICAgIHNldENoYW5n
ZWQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlEKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSwgaW1wb3J0YW50KSk7Ci0gICAgaWYgKG5vdGlmeUNoYW5n
ZWQpCi0gICAgICAgIHNldENoYW5nZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0U3RyaW5nUHJvcGVydHkoaW50IHByb3BlcnR5
SWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlw
ZSwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0g
ICAgbV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZSwgdHlwZSksIGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0SW1hZ2VQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZVUkwsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SWQpOwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQcm9wZXJ0
eShwcm9wZXJ0eUlkLCBuZXcgQ1NTSW1hZ2VWYWx1ZShVUkwsIHRoaXMpLCBpbXBvcnRhbnQpKTsK
LSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nICZzdHlsZURlY2xhcmF0aW9uKQotewotICAg
IG1fdmFsdWVzLmNsZWFyKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5n
KCkpOwotICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHN0eWxlRGVjbGFyYXRpb24p
OwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICpwcm9wZXJ0
aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkgewotICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLT5p
ZCgpLCBmYWxzZSk7Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7Ci0g
ICAgfQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBz
ZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRk
Ci0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9s
bG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLX0KLQotdm9p
ZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0TGVuZ3RoUHJvcGVydHkoaW50IGlkLCBj
b25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCAvKiBtdWx0aUxlbmd0aCov
KQotewotICAgIGJvb2wgcGFyc2VNb2RlID0gdXNlU3RyaWN0UGFyc2luZygpOwotICAgIHNldFN0
cmljdFBhcnNpbmcoZmFsc2UpOwotICAgIHNldFByb3BlcnR5KGlkLCB2YWx1ZSwgaW1wb3J0YW50
KTsKLSAgICBzZXRTdHJpY3RQYXJzaW5nKHBhcnNlTW9kZSk7Ci19Ci0KLXVuc2lnbmVkIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zh
bHVlcy5jb3VudCgpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0
ZW0odW5zaWduZWQgaSkgY29uc3QKLXsKLSAgICBpZiAoaSA+PSBtX3ZhbHVlcy5jb3VudCgpKQot
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKG1fdmFs
dWVzW2ldLmlkKCkpOwotfQotCi1DU1NSdWxlICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRS
dWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUo
KSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLVN0cmluZyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5n
IHJlc3VsdCA9ICIiOwotICAgIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y
PENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHJlc3VsdCArPSAoKml0KS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIG1f
dmFsdWVzLmNsZWFyKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkp
OwotICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHRleHQpOwotICAgIC8vIEZJWE1F
OiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWVyZ2UoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24gKm90aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi17Ci0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBm
b3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG90
aGVyLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
Q1NTUHJvcGVydHkgJnByb3BlcnR5ID0gKml0OwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgaWYgKHZh
bHVlKSB7Ci0gICAgICAgICAgICBpZiAoIWFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS5p
ZCgpKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZhbHVlcy5hcHBlbmQocHJvcGVydHkpOwotICAg
IH0KLSAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0
Q2hhbmdlZCgpIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAot
ICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxv
dyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCi19Ci0KLXZvaWQg
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5
bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGVw
cmVjYXRlZFZhbHVlTGlzdDxpbnQ+IHByb3BlcnRpZXM7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdChzdHlsZS0+dmFsdWVzSXRlcmF0b3Io
KSk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVy
dHkgPSAqaXQ7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNT
U1ZhbHVlKHByb3BlcnR5LmlkKCkpOwotICAgICAgICBpZiAodmFsdWUgJiYgKHZhbHVlLT5jc3NU
ZXh0KCkgPT0gcHJvcGVydHkudmFsdWUoKS0+Y3NzVGV4dCgpKSkKLSAgICAgICAgICAgIHByb3Bl
cnRpZXMuYXBwZW5kKHByb3BlcnR5LmlkKCkpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKERlcHJl
Y2F0ZWRWYWx1ZUxpc3RJdGVyYXRvcjxpbnQ+IGl0KHByb3BlcnRpZXMuYmVnaW4oKSk7IGl0ICE9
IHByb3BlcnRpZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eSgq
aXQpOwotfQotCi0vLyBUaGlzIGlzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBj
b3B5IGluIHRoZSBjb3B5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKCkgZnVuY3Rpb24uCi0vLyBJdCBp
cyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIGluaGVyaXRlZCBDU1MgcHJvcGVydGll
cyBhbmQgdGhlCi0vLyBwcm9wZXJ0aWVzIGZvciB3aGljaCB3ZSBoYXZlIGEgY29tcHV0ZWQgaW1w
bGVtZW50YXRpb24gaW4gdGhpcyBmaWxlLgotY29uc3QgaW50IGluaGVyaXRhYmxlUHJvcGVydGll
c1tdID0gewotICAgIENTU19QUk9QX0JPUkRFUl9DT0xMQVBTRSwKLSAgICBDU1NfUFJPUF9CT1JE
RVJfU1BBQ0lORywKLSAgICBDU1NfUFJPUF9DT0xPUiwKLSAgICBDU1NfUFJPUF9GT05UX0ZBTUlM
WSwKLSAgICBDU1NfUFJPUF9GT05UX1NJWkUsCi0gICAgQ1NTX1BST1BfRk9OVF9TVFlMRSwKLSAg
ICBDU1NfUFJPUF9GT05UX1ZBUklBTlQsCi0gICAgQ1NTX1BST1BfRk9OVF9XRUlHSFQsCi0gICAg
Q1NTX1BST1BfTEVUVEVSX1NQQUNJTkcsCi0gICAgQ1NTX1BST1BfTElORV9IRUlHSFQsCi0gICAg
Q1NTX1BST1BfVEVYVF9BTElHTiwKLSAgICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfREVDT1JBVElP
TlNfSU5fRUZGRUNULAotICAgIENTU19QUk9QX1RFWFRfSU5ERU5ULAotICAgIENTU19QUk9QX19X
RUJLSVRfVEVYVF9TSVpFX0FESlVTVCwKLSAgICBDU1NfUFJPUF9URVhUX1RSQU5TRk9STSwKLSAg
ICBDU1NfUFJPUF9PUlBIQU5TLAotICAgIENTU19QUk9QX1dISVRFX1NQQUNFLAotICAgIENTU19Q
Uk9QX1dJRE9XUywKLSAgICBDU1NfUFJPUF9XT1JEX1NQQUNJTkcsCi19OwotCi1jb25zdCB1bnNp
Z25lZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXMgPSBzaXplb2YoaW5oZXJpdGFibGVQcm9wZXJ0
aWVzKSAvIHNpemVvZihpbmhlcml0YWJsZVByb3BlcnRpZXNbMF0pOwotCi0vLyBUaGlzIGlzIHRo
ZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRoZSBjb3B5QmxvY2tQcm9w
ZXJ0aWVzKCkgZnVuY3Rpb24uCi0vLyBJdCBpcyB0aGUgbGlzdCBvZiBDU1MgcHJvcGVydGllcyB0
aGF0IGFwcGx5IHNwZWNpYWxseSB0byBibG9jay1sZXZlbCBlbGVtZW50cy4KLXN0YXRpYyBjb25z
dCBpbnQgYmxvY2tQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfT1JQSEFOUywKLSAgICBD
U1NfUFJPUF9PVkVSRkxPVywgLy8gVGhpcyBjYW4gYmUgYWxzbyBiZSBhcHBsaWVkIHRvIHJlcGxh
Y2VkIGVsZW1lbnRzCi0gICAgQ1NTX1BST1BfUEFHRV9CUkVBS19BRlRFUiwKLSAgICBDU1NfUFJP
UF9QQUdFX0JSRUFLX0JFRk9SRSwKLSAgICBDU1NfUFJPUF9QQUdFX0JSRUFLX0lOU0lERSwKLSAg
ICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAgIENTU19QUk9QX1RFWFRfSU5ERU5ULAotICAgIENT
U19QUk9QX1dJRE9XUwotfTsKLQotY29uc3QgdW5zaWduZWQgbnVtQmxvY2tQcm9wZXJ0aWVzID0g
c2l6ZW9mKGJsb2NrUHJvcGVydGllcykgLyBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzWzBdKTsKLQot
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5
UHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9j
a1Byb3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1v
dmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChp
bmhlcml0YWJsZVByb3BlcnRpZXMsIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyk7Ci19Ci0KLVBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU1N0eWxlRGVjbGFyYXRpb246
OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBsaXN0OwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVl
LnJlbGVhc2UoKSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbigwLCBsaXN0KTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCAqc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICAgICAgbV92YWx1ZXMucmVtb3ZlKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgp
LCBmYWxzZSkpOwotICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKGNoYW5nZWQpCi0gICAgICAgIHNldENoYW5nZWQoKTsKLX0KLQotUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
Om1ha2VNdXRhYmxlKCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHko
KSBjb25zdAotewotICAgIHJldHVybiBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwg
bV92YWx1ZXMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi11bnNp
Z25lZCBzaG9ydCBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ1NTX0lOSEVSSVQ7Ci19Ci0KLVN0cmluZyBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3Nz
VGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJpbmhlcml0IjsKLX0KLQotdW5zaWduZWQgc2hv
cnQgQ1NTSW5pdGlhbFZhbHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAoteyAKLSAgICByZXR1cm4g
Q1NTX0lOSVRJQUw7IAotfQotCi1TdHJpbmcgQ1NTSW5pdGlhbFZhbHVlOjpjc3NUZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gImluaXRpYWwiOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUNTU1ZhbHVlTGlzdDo6fkNTU1ZhbHVlTGlzdCgpCi17Ci0gICAgZm9y
IChDU1NWYWx1ZSAqdmFsID0gbV92YWx1ZXMuZmlyc3QoKTsgdmFsOyB2YWwgPSBtX3ZhbHVlcy5u
ZXh0KCkpCi0gICAgICAgIHZhbC0+ZGVyZWYoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgQ1NTVmFs
dWVMaXN0Ojpjc3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfVkFMVUVfTElT
VDsKLX0KLQotdm9pZCBDU1NWYWx1ZUxpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPiB2
YWwpCi17Ci0gICAgbV92YWx1ZXMuYXBwZW5kKHZhbC5yZWxlYXNlKCkpOwotfQotCi1TdHJpbmcg
Q1NTVmFsdWVMaXN0Ojpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7
Ci0KLSAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Q1NTVmFsdWU+IGl0ZXJhdG9y
KG1fdmFsdWVzKTsgaXRlcmF0b3IuY3VycmVudCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGlm
ICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiLCAiOwotICAgICAg
ICByZXN1bHQgKz0gaXRlcmF0b3IuY3VycmVudCgpLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKCkKLXsKLSAgICBtX3R5cGUg
PSAwOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoaW50IGlkZW50
KQotewotICAgIG1fdmFsdWUuaWRlbnQgPSBpZGVudDsKLSAgICBtX3R5cGUgPSBDU1NfSURFTlQ7
Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShkb3VibGUgbnVtLCBV
bml0VHlwZXMgdHlwZSkKLXsKLSAgICBtX3ZhbHVlLm51bSA9IG51bTsKLSAgICBtX3R5cGUgPSB0
eXBlOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU3Ry
aW5nJiBzdHIsIFVuaXRUeXBlcyB0eXBlKQotewotICAgIGlmICgobV92YWx1ZS5zdHJpbmcgPSBz
dHIuaW1wbCgpKSkKLSAgICAgICAgbV92YWx1ZS5zdHJpbmctPnJlZigpOwotICAgIG1fdHlwZSA9
IHR5cGU7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVm
UHRyPENvdW50ZXI+IGMpCi17Ci0gICAgbV92YWx1ZS5jb3VudGVyID0gYy5yZWxlYXNlKCk7Ci0g
ICAgbV90eXBlID0gQ1NTX0NPVU5URVI7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShQYXNzUmVmUHRyPFJlY3RJbXBsPiByKQotewotICAgIG1fdmFsdWUucmVjdCA9
IHIucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19SRUNUOwotfQotCi0jaWYgX19BUFBMRV9f
Ci1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxEYXNoYm9h
cmRSZWdpb24+IHIpCi17Ci0gICAgbV92YWx1ZS5yZWdpb24gPSByLnJlbGVhc2UoKTsKLSAgICBt
X3R5cGUgPSBDU1NfREFTSEJPQVJEX1JFR0lPTjsKLX0KLSNlbmRpZgotCi1DU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUkdCQTMyIGNvbG9yKQotewotICAgIG1fdmFsdWUucmdi
Y29sb3IgPSBjb2xvcjsKLSAgICBtX3R5cGUgPSBDU1NfUkdCQ09MT1I7Ci19Ci0KLUNTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFBhaXI+IHApCi17Ci0gICAg
bV92YWx1ZS5wYWlyID0gcC5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NTX1BBSVI7Ci19Ci0K
LUNTU1ByaW1pdGl2ZVZhbHVlOjp+Q1NTUHJpbWl0aXZlVmFsdWUoKQotewotICAgIGNsZWFudXAo
KTsKLX0KLQotdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6Y2xlYW51cCgpCi17Ci0gICAgc3dpdGNo
KG1fdHlwZSkgewotICAgIGNhc2UgQ1NTX1NUUklORzoKLSAgICBjYXNlIENTU19VUkk6Ci0gICAg
Y2FzZSBDU1NfQVRUUjoKLSAgICAgICAgaWYgKG1fdmFsdWUuc3RyaW5nKQotICAgICAgICAgICAg
bV92YWx1ZS5zdHJpbmctPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0NP
VU5URVI6Ci0gICAgICAgIG1fdmFsdWUuY291bnRlci0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NfUkVDVDoKLSAgICAgICAgbV92YWx1ZS5yZWN0LT5kZXJlZigpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU19QQUlSOgotICAgICAgICBtX3ZhbHVlLnBhaXItPmRl
cmVmKCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIF9fQVBQTEVfXwotICAgIGNhc2UgQ1NTX0RBU0hC
T0FSRF9SRUdJT046Ci0gICAgICAgIGlmIChtX3ZhbHVlLnJlZ2lvbikKLSAgICAgICAgICAgIG1f
dmFsdWUucmVnaW9uLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIG1fdHlwZSA9IDA7Ci19Ci0KLWludCBD
U1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSAqc3R5bGUpCi17
Ci0gICAgZG91YmxlIHJlc3VsdCA9IGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0g
ICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZh
bHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5k
IHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgot
ICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAo
cmVzdWx0ID4gSU5UX01BWCB8fCByZXN1bHQgPCBJTlRfTUlOKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gKGludClyZXN1bHQ7ICAgIAotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikK
LXsKLSAgICBkb3VibGUgcmVzdWx0ID0gbXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhGbG9hdChz
dHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4g
cmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQg
dG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBp
bnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsK
LSAgICAKLSAgICBpZiAocmVzdWx0ID4gSU5UX01BWCB8fCByZXN1bHQgPCBJTlRfTUlOKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKGludClyZXN1bHQ7ICAKLX0KLQotY29uc3QgaW50
IGludE1heEZvckxlbmd0aCA9IDB4N2ZmZmZmZjsgLy8gbWF4IHZhbHVlIGZvciBhIDI4LWJpdCBp
bnQKLWNvbnN0IGludCBpbnRNaW5Gb3JMZW5ndGggPSAoLTB4N2ZmZmZmZi0xKTsgLy8gbWluIHZh
bHVlIGZvciBhIDI4LWJpdCBpbnQKLQotLy8gTGVuZ3RocyBleHBlY3QgYW4gaW50IHRoYXQgaXMg
b25seSAyOC1iaXRzLCBzbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhIGRpZmZlcmVudCBvdmVyZmxv
dy4KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5k
ZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGNvbXB1dGVMZW5ndGhGbG9h
dChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0
ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5l
ZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4
dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4w
MTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4gaW50TWF4Rm9yTGVuZ3RoIHx8IHJlc3VsdCA8IGlu
dE1pbkZvckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0
OyAgICAKLX0KLQotLy8gTGVuZ3RocyBleHBlY3QgYW4gaW50IHRoYXQgaXMgb25seSAyOC1iaXRz
LCBzbyB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhIGRpZmZlcmVudCBvdmVyZmxvdy4KLWludCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSAqc3R5
bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBtdWx0aXBsaWVy
ICogY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNp
b24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45
OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVh
bGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3Vs
dCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBpbnRNYXhGb3JM
ZW5ndGggfHwgcmVzdWx0IDwgaW50TWluRm9yTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gKGludClyZXN1bHQ7ICAKLX0KLQotc2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNv
bXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgZG91YmxlIHJlc3Vs
dCA9IGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJz
aW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQu
OTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJl
YWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1
bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4gU0hSVF9NQVgg
fHwgcmVzdWx0IDwgU0hSVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoc2hv
cnQpcmVzdWx0OyAgICAKLX0KLQotc2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5n
dGhTaG9ydChSZW5kZXJTdHlsZSAqc3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGRv
dWJsZSByZXN1bHQgPSBtdWx0aXBsaWVyICogY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAg
ICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcg
aW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVh
ZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFs
dWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAg
IGlmIChyZXN1bHQgPiBTSFJUX01BWCB8fCByZXN1bHQgPCBTSFJUX01JTikKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIChzaG9ydClyZXN1bHQ7ICAKLX0KLQotZG91YmxlIENTU1ByaW1p
dGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUgKnN0eWxlLCBib29sIGFw
cGx5Wm9vbUZhY3RvcikKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCB0eXBlID0gcHJpbWl0aXZlVHlw
ZSgpOwotCi0gICAgLy8gV2UgYWx3YXlzIGFzc3VtZSA5NiBDU1MgcGl4ZWxzIGluIGEgQ1NTIGlu
Y2guIFRoaXMgaXMgdGhlIGNvbGQgaGFyZCB0cnV0aCBvZiB0aGUgV2ViLgotICAgIC8vIEF0IGhp
Z2ggRFBJLCB3ZSBtYXkgc2NhbGUgYSBDU1MgcGl4ZWwsIGJ1dCB0aGUgcmF0aW8gb2YgdGhlIENT
UyBwaXhlbCB0byB0aGUgc28tY2FsbGVkCi0gICAgLy8gImFic29sdXRlIiBDU1MgbGVuZ3RoIHVu
aXRzIGxpa2UgaW5jaCBhbmQgcHQgaXMgYWx3YXlzIGZpeGVkIGFuZCBuZXZlciBjaGFuZ2VzLgot
ICAgIGRvdWJsZSBjc3NQaXhlbHNQZXJJbmNoID0gOTYuOwotCi0gICAgZG91YmxlIGZhY3RvciA9
IDEuOwotICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBDU1NfRU1TOgotICAgICAgICBmYWN0
b3IgPSBhcHBseVpvb21GYWN0b3IgPwotICAgICAgICAgIHN0eWxlLT5mb250RGVzY3JpcHRpb24o
KS5jb21wdXRlZFNpemUoKSA6Ci0gICAgICAgICAgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNw
ZWNpZmllZFNpemUoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfRVhTOiB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBXZSBoYXZlIGEgYnVnIHJpZ2h0IG5vdyB3aGVyZSB0aGUgem9vbSB3aWxs
IGJlIGFwcGxpZWQgbXVsdGlwbGUgdGltZXMgdG8gRVggdW5pdHMuCi0gICAgICAgIC8vIFdlIHJl
YWxseSBuZWVkIHRvIGNvbXB1dGUgRVggdXNpbmcgZm9udE1ldHJpY3MgZm9yIHRoZSBvcmlnaW5h
bCBzcGVjaWZpZWRTaXplIGFuZCBub3QgdXNlCi0gICAgICAgIC8vIG91ciBhY3R1YWwgY29uc3Ry
dWN0ZWQgcmVuZGVyaW5nIGZvbnQuCi0gICAgICAgIGZhY3RvciA9IHN0eWxlLT5mb250KCkueEhl
aWdodCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFg6Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJ
bmNoLzIuNTQ7IC8vICgyLjU0IGNtL2luKQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19N
TToKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC8yNS40OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU19JTjoKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfUFQ6Ci0gICAgICAgIGZhY3RvciA9IGNzc1Bp
eGVsc1BlckluY2gvNzIuOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19QQzoKLSAgICAg
ICAgLy8gMSBwYyA9PSAxMiBwdAotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoKjEy
Li83Mi47Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZ2V0RmxvYXRWYWx1ZSgpICogZmFjdG9yOwotfQotCi12b2lk
IENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRGbG9hdFZhbHVlKCB1bnNpZ25lZCBzaG9ydCB1bml0VHlw
ZSwgZG91YmxlIGZsb2F0VmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsK
LSAgICBjbGVhbnVwKCk7Ci0gICAgLy8gIyMjIGNoZWNrIGlmIHByb3BlcnR5IHN1cHBvcnRzIHRo
aXMgdHlwZQotICAgIGlmIChtX3R5cGUgPiBDU1NfRElNRU5TSU9OKSB7Ci0gICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvL2lmKG1fdHlwZSA+IENT
U19ESU1FTlNJT04pIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElEX0FDQ0VTU19FUlIpOwotICAg
IG1fdmFsdWUubnVtID0gZmxvYXRWYWx1ZTsKLSAgICBtX3R5cGUgPSB1bml0VHlwZTsKLX0KLQot
ZG91YmxlIHNjYWxlRmFjdG9yRm9yQ29udmVyc2lvbih1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkK
LXsKLSAgICBkb3VibGUgY3NzUGl4ZWxzUGVySW5jaCA9IDk2LjA7Ci0gICAgZG91YmxlIGZhY3Rv
ciA9IDEuMDsKLSAgICAKLSAgICBzd2l0Y2godW5pdFR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BYOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DTToKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVs
c1BlckluY2ggLyAyLjU0OyAvLyAoMi41NCBjbS9pbikKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06Ci0gICAgICAgICAgICBmYWN0b3Ig
PSBjc3NQaXhlbHNQZXJJbmNoIC8gMjUuNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSU46Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQ
aXhlbHNQZXJJbmNoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QVDoKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gg
LyA3Mi4wOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QQzoKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggKiAxMi4w
IC8gNzIuMDsgLy8gMSBwYyA9PSAxMiBwdAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhY3Rv
cjsKLX0KLQotZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRGbG9hdFZhbHVlKHVuc2lnbmVk
IHNob3J0IHVuaXRUeXBlKQotewotICAgIGlmICh1bml0VHlwZSA9PSBtX3R5cGUgfHwgdW5pdFR5
cGUgPCBDU1NfUFggfHwgdW5pdFR5cGUgPiBDU1NfUEMpCi0gICAgICAgIHJldHVybiBtX3ZhbHVl
Lm51bTsKLSAgICAKLSAgICBkb3VibGUgY29udmVydGVkVmFsdWUgPSBtX3ZhbHVlLm51bTsKLSAg
ICAKLSAgICAvLyBGaXJzdCBjb252ZXJ0IHRoZSB2YWx1ZSBmcm9tIG1fdHlwZSBpbnRvIENTU1Bp
eGVscwotICAgIGRvdWJsZSBmYWN0b3IgPSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24obV90eXBl
KTsKLSAgICBjb252ZXJ0ZWRWYWx1ZSAqPSBmYWN0b3I7Ci0gICAgCi0gICAgLy8gTm93IGNvbnZl
cnQgZnJvbSBDU1NQaXhlbHMgdG8gdGhlIHNwZWNpZmllZCB1bml0VHlwZQotICAgIGZhY3RvciA9
IHNjYWxlRmFjdG9yRm9yQ29udmVyc2lvbih1bml0VHlwZSk7Ci0gICAgY29udmVydGVkVmFsdWUg
Lz0gZmFjdG9yOwotICAgIAotICAgIHJldHVybiBjb252ZXJ0ZWRWYWx1ZTsKLX0KLQotdm9pZCBD
U1NQcmltaXRpdmVWYWx1ZTo6c2V0U3RyaW5nVmFsdWUoIHVuc2lnbmVkIHNob3J0IHN0cmluZ1R5
cGUsIGNvbnN0IFN0cmluZyAmc3RyaW5nVmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGVjID0gMDsKLSAgICBjbGVhbnVwKCk7Ci0gICAgLy9pZihtX3R5cGUgPCBDU1NfU1RSSU5HKSB0
aHJvdyBET01FeGNlcHRpb24oSU5WQUxJRF9BQ0NFU1NfRVJSKTsKLSAgICAvL2lmKG1fdHlwZSA+
IENTU19BVFRSKSB0aHJvdyBET01FeGNlcHRpb24oSU5WQUxJRF9BQ0NFU1NfRVJSKTsKLSAgICBp
ZiAobV90eXBlIDwgQ1NTX1NUUklORyB8fCBtX3R5cGUgPiBDU1NfQVRUUikgewotICAgICAgICBl
YyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHN0cmluZ1R5
cGUgIT0gQ1NTX0lERU5UKSB7Ci0gICAgICAgIG1fdmFsdWUuc3RyaW5nID0gc3RyaW5nVmFsdWUu
aW1wbCgpOwotICAgICAgICBtX3ZhbHVlLnN0cmluZy0+cmVmKCk7Ci0gICAgICAgIG1fdHlwZSA9
IHN0cmluZ1R5cGU7Ci0gICAgfQotICAgIC8vICMjIyBwYXJzZSBpZGVudAotfQotCi1TdHJpbmcg
Q1NTUHJpbWl0aXZlVmFsdWU6OmdldFN0cmluZ1ZhbHVlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgICAgICBjYXNlIENTU19TVFJJTkc6Ci0gICAgICAgIGNhc2UgQ1NTX0FU
VFI6Ci0gICAgICAgIGNhc2UgQ1NTX1VSSToKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLnN0
cmluZzsKLSAgICAgICAgY2FzZSBDU1NfSURFTlQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0VmFs
dWVOYW1lKG1fdmFsdWUuaWRlbnQpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8g
RklYTUU6IFRoZSBDU1MgMi4xIHNwZWMgc2F5cyB5b3Ugc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlv
biBoZXJlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1ZhbHVlVHlw
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENTU19QUklNSVRJVkVfVkFMVUU7Ci19Ci0KLWJvb2wg
Q1NTUHJpbWl0aXZlVmFsdWU6OnBhcnNlU3RyaW5nKCBjb25zdCBTdHJpbmcgJi8qc3RyaW5nKi8s
IGJvb2wgKQotewotICAgIC8vICMjIwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IENTU1By
aW1pdGl2ZVZhbHVlOjpnZXRJZGVudCgpCi17Ci0gICAgaWYobV90eXBlICE9IENTU19JREVOVCkg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fdmFsdWUuaWRlbnQ7Ci19Ci0KLVN0cmluZyBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjIHJldHVybiB0aGUgb3Jp
Z2luYWwgdmFsdWUgaW5zdGVhZCBvZiBhIGdlbmVyYXRlZCBvbmUgKGUuZy4gY29sb3IKLSAgICAv
LyBuYW1lIGlmIGl0IHdhcyBzcGVjaWZpZWQpIC0gY2hlY2sgd2hhdCBzcGVjIHNheXMgYWJvdXQg
dGhpcwotICAgIFN0cmluZyB0ZXh0OwotICAgIHN3aXRjaCAoIG1fdHlwZSApIHsKLSAgICAgICAg
Y2FzZSBDU1NfVU5LTk9XTjoKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTX05VTUJFUjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51
bWJlcihtX3ZhbHVlLm51bSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1Nf
UEVSQ0VOVEFHRToKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51
bSkgKyAiJSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfRU1TOgotICAg
ICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJlbSI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfRVhTOgotICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJleCI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NfUFg6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIo
bV92YWx1ZS5udW0pICsgInB4IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U19DTToKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAi
Y20iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX01NOgotICAgICAgICAg
ICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtbSI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSU46Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgImluIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19QVDoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVl
Lm51bSkgKyAicHQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BDOgot
ICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwYyI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfREVHOgotICAgICAgICAgICAgdGV4
dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJkZWciOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX1JBRDoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51
bWJlcihtX3ZhbHVlLm51bSkgKyAicmFkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU19HUkFEOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUu
bnVtKSArICJncmFkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19NUzoK
LSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibXMiOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1M6Ci0gICAgICAgICAgICB0ZXh0
ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInMiOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTX0haOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVy
KG1fdmFsdWUubnVtKSArICJoeiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NfS0haOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSAr
ICJraHoiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0RJTUVOU0lPTjoK
LSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
X1NUUklORzoKLSAgICAgICAgICAgIHRleHQgPSBxdW90ZVN0cmluZ0lmTmVlZGVkKG1fdmFsdWUu
c3RyaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19VUkk6Ci0gICAg
ICAgICAgICB0ZXh0ID0gInVybCgiICsgU3RyaW5nKG1fdmFsdWUuc3RyaW5nKSArICIpIjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19JREVOVDoKLSAgICAgICAgICAgIHRl
eHQgPSBnZXRWYWx1ZU5hbWUobV92YWx1ZS5pZGVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NfQVRUUjoKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX0NPVU5URVI6Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19SRUNUOiB7Ci0gICAgICAgICAgICBSZWN0
SW1wbCogcmVjdFZhbCA9IGdldFJlY3RWYWx1ZSgpOwotICAgICAgICAgICAgdGV4dCA9ICJyZWN0
KCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RWYWwtPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7
Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RWYWwtPnJpZ2h0KCktPmNzc1RleHQoKSArICIgIjsK
LSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZhbC0+Ym90dG9tKCktPmNzc1RleHQoKSArICIgIjsK
LSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZhbC0+bGVmdCgpLT5jc3NUZXh0KCkgKyAiKSI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU19SR0JDT0xPUjog
ewotICAgICAgICAgICAgQ29sb3IgY29sb3IobV92YWx1ZS5yZ2Jjb2xvcik7Ci0gICAgICAgICAg
ICBpZiAoY29sb3IuYWxwaGEoKSA8IDB4RkYpCi0gICAgICAgICAgICAgICAgdGV4dCA9ICJyZ2Jh
KCI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGV4dCA9ICJyZ2IoIjsKLSAg
ICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IucmVkKCkpICsgIiwgIjsKLSAg
ICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IuZ3JlZW4oKSkgKyAiLCAiOwot
ICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xvci5ibHVlKCkpOwotICAgICAg
ICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPCAweEZGKQotICAgICAgICAgICAgICAgIHRleHQgKz0g
IiwgIiArIFN0cmluZzo6bnVtYmVyKChmbG9hdCljb2xvci5hbHBoYSgpIC8gMHhGRik7Ci0gICAg
ICAgICAgICB0ZXh0ICs9ICIpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ1NTX1BBSVI6Ci0gICAgICAgICAgICB0ZXh0ID0gbV92YWx1ZS5wYWlyLT5maXJz
dCgpLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICB0ZXh0ICs9ICIgIjsKLSAgICAgICAgICAgIHRl
eHQgKz0gbV92YWx1ZS5wYWlyLT5zZWNvbmQoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0jaWYgX19BUFBMRV9fCi0gICAgICAgIGNhc2UgQ1NTX0RBU0hCT0FSRF9SRUdJT046Ci0g
ICAgICAgICAgICBmb3IgKERhc2hib2FyZFJlZ2lvbiogcmVnaW9uID0gZ2V0RGFzaGJvYXJkUmVn
aW9uVmFsdWUoKTsgcmVnaW9uOyByZWdpb24gPSByZWdpb24tPm1fbmV4dC5nZXQoKSkgewotICAg
ICAgICAgICAgICAgIHRleHQgPSAiZGFzaGJvYXJkLXJlZ2lvbigiOwotICAgICAgICAgICAgICAg
IHRleHQgKz0gcmVnaW9uLT5tX2xhYmVsOwotICAgICAgICAgICAgICAgIGlmIChyZWdpb24tPm1f
aXNDaXJjbGUpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIiBjaXJjbGUgIjsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUpCi0gICAgICAgICAgICAg
ICAgICAgIHRleHQgKz0gIiByZWN0YW5nbGUgIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT50
b3AoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5y
aWdodCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24t
PmJvdHRvbSgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdp
b24tPmxlZnQoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgICAgIHRleHQgKz0gIikiOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJu
IHRleHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlY3RJbXBsOjp+UmVjdEltcGwoKQotewotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1QYWlyOjp+UGFpcigpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNT
U0ltYWdlVmFsdWU6OkNTU0ltYWdlVmFsdWUoY29uc3QgU3RyaW5nJiB1cmwsIFN0eWxlQmFzZSAq
c3R5bGUpCi0gICAgOiBDU1NQcmltaXRpdmVWYWx1ZSh1cmwsIENTU19VUkkpLCBtX2ltYWdlKDAp
LCBtX2FjY2Vzc2VkSW1hZ2UoZmFsc2UpCi17Ci19Ci0KLUNTU0ltYWdlVmFsdWU6OkNTU0ltYWdl
VmFsdWUoKQotICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTX1ZBTF9OT05FKSwgbV9pbWFnZSgw
KSwgbV9hY2Nlc3NlZEltYWdlKHRydWUpCi17Ci19Ci0KLUNTU0ltYWdlVmFsdWU6On5DU1NJbWFn
ZVZhbHVlKCkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+ZGVyZWYodGhp
cyk7Ci19Ci0KLUNhY2hlZEltYWdlKiBDU1NJbWFnZVZhbHVlOjppbWFnZShEb2NMb2FkZXIqIGxv
YWRlcikKLXsKLSAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgewotICAgICAgICBtX2FjY2Vzc2Vk
SW1hZ2UgPSB0cnVlOwotCi0gICAgICAgIGlmIChsb2FkZXIpCi0gICAgICAgICAgICBtX2ltYWdl
ID0gbG9hZGVyLT5yZXF1ZXN0SW1hZ2UoZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1faW1hZ2UgPSBDYWNoZTo6cmVxdWVzdEltYWdlKDAsIGdldFN0cmluZ1Zh
bHVlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgICAgICBtX2lt
YWdlLT5yZWYodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtX2ltYWdlOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Q1NTQm9yZGVySW1hZ2VW
YWx1ZShQYXNzUmVmUHRyPENTU0ltYWdlVmFsdWU+IGltYWdlLAotICAgIFBhc3NSZWZQdHI8UmVj
dEltcGw+IGltYWdlUmVjdCwgaW50IGhvcml6b250YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKQot
ICAgIDogbV9pbWFnZShpbWFnZSksIG1faW1hZ2VTbGljZVJlY3QoaW1hZ2VSZWN0KQotICAgICwg
bV9ob3Jpem9udGFsU2l6ZVJ1bGUoaG9yaXpvbnRhbFJ1bGUpLCBtX3ZlcnRpY2FsU2l6ZVJ1bGUo
dmVydGljYWxSdWxlKQotewotfQotCi1TdHJpbmcgQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Y3NzVGV4
dCgpIGNvbnN0Ci17Ci0gICAgLy8gSW1hZ2UgZmlyc3QuCi0gICAgU3RyaW5nIHRleHQobV9pbWFn
ZS0+Y3NzVGV4dCgpKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICAKLSAgICAvLyBOb3cgdGhlIHJl
Y3QsIGJ1dCBpdCBpc24ndCByZWFsbHkgYSByZWN0LCBzbyB3ZSBkdW1wIG1hbnVhbGx5Ci0gICAg
dGV4dCArPSBtX2ltYWdlU2xpY2VSZWN0LT50b3AoKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0g
IiAiOwotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+cmlnaHQoKS0+Y3NzVGV4dCgpOwot
ICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+Ym90dG9tKCkt
PmNzc1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJl
Y3QtPmxlZnQoKS0+Y3NzVGV4dCgpOwotICAgIAotICAgIC8vIE5vdyB0aGUga2V5d29yZHMuCi0g
ICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX2hvcml6b250
YWxTaXplUnVsZSkuY3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gQ1NT
UHJpbWl0aXZlVmFsdWUobV92ZXJ0aWNhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1
cm4gdGV4dDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZvbnRGYW1pbHlWYWx1ZTo6Rm9u
dEZhbWlseVZhbHVlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKLSAgICA6IENTU1By
aW1pdGl2ZVZhbHVlKFN0cmluZygpLCBDU1NfU1RSSU5HKQotewotICAgIHN0YXRpYyBjb25zdCBS
ZWd1bGFyRXhwcmVzc2lvbiBwYXJlblJlZygiIFxcKC4qXFwpJCIpOwotICAgIHN0YXRpYyBjb25z
dCBSZWd1bGFyRXhwcmVzc2lvbiBicmFjZVJlZygiIFxcWy4qXFxdJCIpOwotCi0gICAgcGFyc2Vk
Rm9udE5hbWUgPSBzdHJpbmc7Ci0gICAgLy8gYSBsYW5ndWFnZSB0YWcgaXMgb2Z0ZW4gYWRkZWQg
aW4gYnJhY2VzIGF0IHRoZSBlbmQuIFJlbW92ZSBpdC4KLSAgICBwYXJzZWRGb250TmFtZS5yZXBs
YWNlKHBhcmVuUmVnLCAiIik7Ci0gICAgLy8gcmVtb3ZlIFtYZnRdIHF1YWxpZmllcnMKLSAgICBw
YXJzZWRGb250TmFtZS5yZXBsYWNlKGJyYWNlUmVnLCAiIik7Ci19Ci0KLVN0cmluZyBGb250RmFt
aWx5VmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVybiBxdW90ZVN0cmluZ0lmTmVl
ZGVkKHBhcnNlZEZvbnROYW1lKTsKLX0KLQotU3RyaW5nIEZvbnRWYWx1ZTo6Y3NzVGV4dCgpIGNv
bnN0Ci17Ci0gICAgLy8gZm9udCB2YXJpYW50IHdlaWdodCBzaXplIC8gbGluZS1oZWlnaHQgZmFt
aWx5IAotCi0gICAgU3RyaW5nIHJlc3VsdCgiIik7Ci0KLSAgICBpZiAoc3R5bGUpIHsKLSAgICAg
ICAgcmVzdWx0ICs9IHN0eWxlLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh2YXJpYW50KSB7
Ci0gICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAi
ICI7Ci0gICAgICAgIHJlc3VsdCArPSB2YXJpYW50LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlm
ICh3ZWlnaHQpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
cmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IHdlaWdodC0+Y3NzVGV4dCgpOwotICAg
IH0KLSAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gc2l6ZS0+Y3NzVGV4dCgp
OwotICAgIH0KLSAgICBpZiAobGluZUhlaWdodCkgewotICAgICAgICBpZiAoIXNpemUpCi0gICAg
ICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gIi8iOwotICAgICAgICBy
ZXN1bHQgKz0gbGluZUhlaWdodC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoZmFtaWx5KSB7
Ci0gICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAi
ICI7Ci0gICAgICAgIHJlc3VsdCArPSBmYW1pbHktPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotICAgIAotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94
LXNoYWRvdwotU2hhZG93VmFsdWU6OlNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IF94LAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF95LAotICAgIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF9ibHVyLAotICAgIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IF9jb2xvcikKLSAgICA6IHgoX3gpLCB5KF95KSwgYmx1cihfYmx1ciksIGNv
bG9yKF9jb2xvcikKLXsKLX0KLQotU3RyaW5nIFNoYWRvd1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QK
LXsKLSAgICBTdHJpbmcgdGV4dCgiIik7Ci0KLSAgICBpZiAoY29sb3IpCi0gICAgICAgIHRleHQg
Kz0gY29sb3ItPmNzc1RleHQoKTsKLSAgICBpZiAoeCkgewotICAgICAgICBpZiAoIXRleHQuaXNF
bXB0eSgpKQotICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geC0+Y3Nz
VGV4dCgpOwotICAgIH0KLSAgICBpZiAoeSkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geS0+Y3NzVGV4dCgp
OwotICAgIH0KLSAgICBpZiAoYmx1cikgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0gYmx1ci0+Y3NzVGV4dCgp
OwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0OwotfQotCiBTdHJpbmcgQ1NTUHJvcGVydHk6OmNz
c1RleHQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoaWQoKSkgKyAiOiAi
ICsgbV92YWx1ZS0+Y3NzVGV4dCgpCi0gICAgICAgICsgKGlzSW1wb3J0YW50KCkgPyAiICFpbXBv
cnRhbnQiIDogIiIpICsgIjsgIjsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKGlkKCkpICsg
IjogIiArIG1fdmFsdWUtPmNzc1RleHQoKSArIChpc0ltcG9ydGFudCgpID8gIiAhaW1wb3J0YW50
IiA6ICIiKSArICI7ICI7CiB9CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAm
YSwgY29uc3QgQ1NTUHJvcGVydHkgJmIpCkluZGV4OiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAko
cmV2aXNpb24gMTQ0MDApCisrKyBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjAsNDY4ICsyMCwxNiBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NfY3NzX3ZhbHVlaW1wbF9oXwotI2RlZmluZSBDU1Nf
Y3NzX3ZhbHVlaW1wbF9oXworI2lmbmRlZiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbl9ICisj
ZGVmaW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uX0gKIAotI2luY2x1ZGUgIkNhY2hlZE9i
amVjdENsaWVudC5oIgotI2luY2x1ZGUgImNzc19iYXNlLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRl
ZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiIC8vIGZv
ciBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVl
TGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLWNsYXNzIFFQYWludERldmlj
ZU1ldHJpY3M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb247Ci1jbGFzcyBDYWNoZWRJbWFnZTsKLWNsYXNzIENvdW50ZXI7Ci1jbGFzcyBE
b2NMb2FkZXI7CiBjbGFzcyBOb2RlOwotY2xhc3MgUGFpcjsKLWNsYXNzIFJlY3RJbXBsOwotY2xh
c3MgUmVuZGVyU3R5bGU7Ci0KLSNpZiBfX0FQUExFX18KLWNsYXNzIERhc2hib2FyZFJlZ2lvbjsK
LSNlbmRpZgotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1leHRlcm4gY29uc3QgaW50
IGluaGVyaXRhYmxlUHJvcGVydGllc1tdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIG51bUluaGVy
aXRhYmxlUHJvcGVydGllczsKLQotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBT
dHlsZUJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlRGVjbGFyYXRpb24o
KTsKLQotICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lKTsKLQotICAgIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1Rl
eHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0ID0gMDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3Bl
cnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQ
cm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0
UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5n
IGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBi
b29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAg
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlW
YWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9w
ZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQg
Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0K
LSAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlk
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOwotIAotICAgIHZv
aWQgZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwotCi0gICAgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25z
dCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENT
U1N0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSA9IDApOwotCi1wcml2YXRlOgot
ICAgIENTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlv
biAmKTsKLX07Ci0KLWNsYXNzIENTU1ZhbHVlIDogcHVibGljIFN0eWxlQmFzZQotewotcHVibGlj
OgotICAgIGVudW0gVW5pdFR5cGVzIHsKLSAgICAgICAgQ1NTX0lOSEVSSVQgPSAwLAotICAgICAg
ICBDU1NfUFJJTUlUSVZFX1ZBTFVFID0gMSwKLSAgICAgICAgQ1NTX1ZBTFVFX0xJU1QgPSAyLAot
ICAgICAgICBDU1NfQ1VTVE9NID0gMywKLSAgICAgICAgQ1NTX0lOSVRJQUwgPSA0Ci0gICAgfTsK
LQotICAgIENTU1ZhbHVlKCkgOiBTdHlsZUJhc2UoMCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENTU19DVVNUT007IH0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZvaWQgc2V0Q3NzVGV4
dChjb25zdCBTdHJpbmcmKSB7IH0gLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLQotICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0ZvbnRWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi1jbGFzcyBDU1NJbmhlcml0ZWRW
YWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQg
c2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgp
IGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTSW5pdGlhbFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci19OwotCi1jbGFzcyBDU1NW
YWx1ZUxpc3QgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DU1NW
YWx1ZUxpc3QoKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLmNvdW50KCk7IH0KLSAgICBDU1NWYWx1ZSogaXRlbSAodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIG1fdmFsdWVzLmF0KGluZGV4KTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0
KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1
ZVR5cGUoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsK
LSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBE
ZXByZWNhdGVkUHRyTGlzdDxDU1NWYWx1ZT4gbV92YWx1ZXM7Ci19OwotCi0KLWNsYXNzIENTU1By
aW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBVbml0
VHlwZXMgewotICAgICAgICBDU1NfVU5LTk9XTiA9IDAsCi0gICAgICAgIENTU19OVU1CRVIgPSAx
LAotICAgICAgICBDU1NfUEVSQ0VOVEFHRSA9IDIsCi0gICAgICAgIENTU19FTVMgPSAzLAotICAg
ICAgICBDU1NfRVhTID0gNCwKLSAgICAgICAgQ1NTX1BYID0gNSwKLSAgICAgICAgQ1NTX0NNID0g
NiwKLSAgICAgICAgQ1NTX01NID0gNywKLSAgICAgICAgQ1NTX0lOID0gOCwKLSAgICAgICAgQ1NT
X1BUID0gOSwKLSAgICAgICAgQ1NTX1BDID0gMTAsCi0gICAgICAgIENTU19ERUcgPSAxMSwKLSAg
ICAgICAgQ1NTX1JBRCA9IDEyLAotICAgICAgICBDU1NfR1JBRCA9IDEzLAotICAgICAgICBDU1Nf
TVMgPSAxNCwKLSAgICAgICAgQ1NTX1MgPSAxNSwKLSAgICAgICAgQ1NTX0haID0gMTYsCi0gICAg
ICAgIENTU19LSFogPSAxNywKLSAgICAgICAgQ1NTX0RJTUVOU0lPTiA9IDE4LAotICAgICAgICBD
U1NfU1RSSU5HID0gMTksCi0gICAgICAgIENTU19VUkkgPSAyMCwKLSAgICAgICAgQ1NTX0lERU5U
ID0gMjEsCi0gICAgICAgIENTU19BVFRSID0gMjIsCi0gICAgICAgIENTU19DT1VOVEVSID0gMjMs
Ci0gICAgICAgIENTU19SRUNUID0gMjQsCi0gICAgICAgIENTU19SR0JDT0xPUiA9IDI1LAotICAg
ICAgICBDU1NfUEFJUiA9IDEwMCwgLy8gV2UgZW52aXNpb24gdGhpcyBiZWluZyBleHBvc2VkIGFz
IGEgbWVhbnMgb2YgZ2V0dGluZyBjb21wdXRlZCBzdHlsZSB2YWx1ZXMgZm9yIHBhaXJzIChib3Jk
ZXItc3BhY2luZy9yYWRpdXMsIGJhY2tncm91bmQtcG9zaXRpb24sIGV0Yy4pCi0gICAgICAgIENT
U19EQVNIQk9BUkRfUkVHSU9OID0gMTAxIC8vIEZJWE1FOiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMg
ZG9pbmcgYXMgYSBwcmltaXRpdmUgdmFsdWU/IEl0IHNob3VsZCBub3QgYmUhCi0gICAgfTsKLQot
ICAgIC8vIEZJWE1FOiBpbnQgdnMuIHVuc2lnbmVkIG92ZXJsb2FkaW5nIGlzIHRvbyB0cmlja3kg
Zm9yIGNvbG9yIHZzLiBpZGVudAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUoaW50IGlkZW50KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShkb3VibGUsIFVu
aXRUeXBlcyk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU3RyaW5nJiwgVW5pdFR5cGVz
KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPENvdW50ZXI+KTsKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFJlY3RJbXBsPik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUodW5zaWduZWQgY29sb3IpOyAvLyBSR0IgdmFsdWUKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQ
YXNzUmVmUHRyPFBhaXI+KTsKLQotI2lmIF9fQVBQTEVfXwotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KFBhc3NSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPik7IC8vIEZJWE1FOiBXaHkgaXMgZGFzaGJvYXJk
IHJlZ2lvbiBhIHByaW1pdGl2ZSB2YWx1ZT8gVGhpcyBtYWtlcyBubyBzZW5zZS4KLSNlbmRpZgot
Ci0gICAgdmlydHVhbCB+Q1NTUHJpbWl0aXZlVmFsdWUoKTsKLQotICAgIHZvaWQgY2xlYW51cCgp
OwotCi0gICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQotCi0gICAgLyoKLSAgICAgKiBjb21wdXRlcyBhIGxlbmd0aCBpbiBwaXhlbHMgb3V0
IG9mIHRoZSBnaXZlbiBDU1NWYWx1ZS4gTmVlZCB0aGUgUmVuZGVyU3R5bGUgdG8gZ2V0Ci0gICAg
ICogdGhlIGZvbnRpbmZvIGluIGNhc2UgdmFsIGlzIGRlZmluZWQgaW4gZW0gb3IgZXguCi0gICAg
ICoKLSAgICAgKiBUaGUgbWV0cmljcyBoYXZlIHRvIGJlIGEgYml0IGRpZmZlcmVudCBmb3Igc2Ny
ZWVuIGFuZCBwcmludGVyIG91dHB1dC4KLSAgICAgKiBGb3Igc2NyZWVuIG91dHB1dCB3ZSBhc3N1
bWUgMSBpbmNoID09IDcyIHB4LCBmb3IgcHJpbnRlciB3ZSBhc3N1bWUgMzAwIGRwaQotICAgICAq
Ci0gICAgICogdGhpcyBpcyBzY3JlZW4vcHJpbnRlciBkZXBlbmRlbnQsIHNvIHdlIHByb2JhYmx5
IG5lZWQgYSBjb25maWcgb3B0aW9uIGZvciB0aGlzLAotICAgICAqIGFuZCBzb21lIHRvb2wgdG8g
Y2FsaWJyYXRlLgotICAgICAqLwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxl
Kik7Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlw
bGllcik7Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqKTsK
LSAgICBpbnQgY29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSosIGRvdWJsZSBt
dWx0aXBsaWVyKTsKLSAgICBzaG9ydCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqKTsK
LSAgICBzaG9ydCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlw
bGllcik7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhGbG9hdChSZW5kZXJTdHlsZSosIGJvb2wg
YXBwbHlab29tRmFjdG9yID0gdHJ1ZSk7Ci0KLSAgICAvLyB1c2Ugd2l0aCBjYXJlISEhCi0gICAg
dm9pZCBzZXRQcmltaXRpdmVUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpIHsgbV90eXBlID0gdHlw
ZTsgfQotICAgIHZvaWQgc2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZG91
YmxlIGZsb2F0VmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1
ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSk7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUoKSB7
IHJldHVybiBtX3ZhbHVlLm51bTsgfQotCi0gICAgdm9pZCBzZXRTdHJpbmdWYWx1ZSh1bnNpZ25l
ZCBzaG9ydCBzdHJpbmdUeXBlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0gICAgCi0gICAgQ291
bnRlciogZ2V0Q291bnRlclZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAh
PSBDU1NfQ09VTlRFUiA/IDAgOiBtX3ZhbHVlLmNvdW50ZXI7Ci0gICAgfQotCi0gICAgUmVjdElt
cGwqIGdldFJlY3RWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NT
X1JFQ1QgPyAwIDogbV92YWx1ZS5yZWN0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGdldFJHQkNv
bG9yVmFsdWUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1JHQkNPTE9S
ID8gMCA6IG1fdmFsdWUucmdiY29sb3I7Ci0gICAgfQotCi0gICAgUGFpciogZ2V0UGFpclZhbHVl
KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19QQUlSID8gMCA6IG1fdmFs
dWUucGFpcjsKLSAgICB9Ci0KLSNpZiBfX0FQUExFX18KLSAgICBEYXNoYm9hcmRSZWdpb24gKmdl
dERhc2hib2FyZFJlZ2lvblZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAh
PSBDU1NfREFTSEJPQVJEX1JFR0lPTiA/IDAgOiBtX3ZhbHVlLnJlZ2lvbjsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIHZpcnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7
Ci0KLSAgICBpbnQgZ2V0SWRlbnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhj
b25zdCBTdHJpbmcmLCBib29sID0gZmFsc2UpOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiBmYWxz
ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgaW50IG1fdHlwZTsKLSAgICB1bmlvbiB7Ci0gICAgICAg
IGludCBpZGVudDsKLSAgICAgICAgZG91YmxlIG51bTsKLSAgICAgICAgU3RyaW5nSW1wbCogc3Ry
aW5nOwotICAgICAgICBDb3VudGVyKiBjb3VudGVyOwotICAgICAgICBSZWN0SW1wbCogcmVjdDsK
LSAgICAgICAgdW5zaWduZWQgcmdiY29sb3I7Ci0gICAgICAgIFBhaXIqIHBhaXI7Ci0jaWYgX19B
UFBMRV9fCi0gICAgICAgIERhc2hib2FyZFJlZ2lvbiogcmVnaW9uOwotI2VuZGlmCi0gICAgfSBt
X3ZhbHVlOwotfTsKLQotLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGhhbmRsZSBxdWlya3kgbWFy
Z2lucyBpbiByZWZsb3cgcm9vdHMgKGJvZHksIHRkLCBhbmQgdGgpIGxpa2UgV2luSUUuCi0vLyBU
aGUgYmFzaWMgaWRlYSBpcyB0aGF0IGEgc3R5bGVzaGVldCBjYW4gdXNlIHRoZSB2YWx1ZSBfX3Fl
bSAoZm9yIHF1aXJreSBlbSkgaW5zdGVhZCBvZiBlbQotLy8gaW4gYSBzdHlsZXNoZWV0LiAgV2hl
biB0aGUgcXVpcmt5IHZhbHVlIGlzIHVzZWQsIGlmIHlvdSdyZSBpbiBxdWlya3MgbW9kZSwgdGhl
IG1hcmdpbiB3aWxsCi0vLyBjb2xsYXBzZSBhd2F5IGluc2lkZSBhIHRhYmxlIGNlbGwuCi1jbGFz
cyBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1w
dWJsaWM6Ci0gICAgQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZShkb3VibGUgbnVtLCBVbml0VHlwZXMg
dHlwZSkKLSAgICAgICAgOiBDU1NQcmltaXRpdmVWYWx1ZShudW0sIHR5cGUpIHt9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotY2xhc3Mg
Q291bnRlciA6IHB1YmxpYyBTaGFyZWQ8Q291bnRlcj4gewotcHVibGljOgotICAgIFN0cmluZyBp
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgU3RyaW5nIGxp
c3RTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFN0eWxlOyB9Ci0gICAgU3RyaW5nIHNlcGFy
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VwYXJhdG9yOyB9Ci0KLSAgICBTdHJpbmcgbV9pZGVu
dGlmaWVyOwotICAgIFN0cmluZyBtX2xpc3RTdHlsZTsKLSAgICBTdHJpbmcgbV9zZXBhcmF0b3I7
Ci19OwotCi1jbGFzcyBSZWN0SW1wbCA6IHB1YmxpYyBTaGFyZWQ8UmVjdEltcGw+IHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5SZWN0SW1wbCgpOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbS5nZXQoKTsgfQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0LmdldCgpOyB9Ci0K
LSAgICB2b2lkIHNldFRvcChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3ApIHsgbV90
b3AgPSB0b3A7IH0KLSAgICB2b2lkIHNldFJpZ2h0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHJpZ2h0KSB7IG1fcmlnaHQgPSByaWdodDsgfQotICAgIHZvaWQgc2V0Qm90dG9tKFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvdHRvbSkgeyBtX2JvdHRvbSA9IGJvdHRvbTsgfQot
ICAgIHZvaWQgc2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0KSB7IG1f
bGVmdCA9IGxlZnQ7IH0KLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV90b3A7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0OwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBtX2xlZnQ7Ci19OwotCi0vLyBBIHByaW1pdGl2ZSB2YWx1ZSByZXByZXNlbnRpbmcg
YSBwYWlyLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHByb3BlcnRpZXMgbGlrZSBib3JkZXItcmFkaXVz
LCBiYWNrZ3JvdW5kLXNpemUvcG9zaXRpb24sCi0vLyBhbmQgYm9yZGVyLXNwYWNpbmcgKGFsbCBv
ZiB3aGljaCBhcmUgc3BhY2Utc2VwYXJhdGVkIHNldHMgb2YgdHdvIHZhbHVlcykuICBBdCB0aGUg
bW9tZW50IHdlIGFyZSBvbmx5IHVzaW5nIGl0IGZvcgotLy8gYm9yZGVyLXJhZGl1cyBhbmQgYmFj
a2dyb3VuZC1zaXplLCBidXQgKEZJWE1FKSBib3JkZXItc3BhY2luZyBhbmQgYmFja2dyb3VuZC1w
b3NpdGlvbiBjb3VsZCBiZSBjb252ZXJ0ZWQgb3ZlciB0byB1c2UKLS8vIGl0IChlbGltaW5hdGlu
ZyBzb21lIGV4dHJhIC13ZWJraXQtIGludGVybmFsIHByb3BlcnRpZXMpLgotY2xhc3MgUGFpciA6
IHB1YmxpYyBTaGFyZWQ8UGFpcj4gewotcHVibGljOgotICAgIFBhaXIoKSA6IG1fZmlyc3QoMCks
IG1fc2Vjb25kKDApIHsgfQotICAgIFBhaXIoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Zmlyc3QsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkKLSAgICAgICAgOiBt
X2ZpcnN0KGZpcnN0KSwgbV9zZWNvbmQoc2Vjb25kKSB7IH0KLSAgICB2aXJ0dWFsIH5QYWlyKCk7
Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0
LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Vjb25kLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldEZpcnN0KFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGZpcnN0KSB7IG1fZmlyc3QgPSBmaXJzdDsgfQotICAgIHZvaWQgc2V0U2Vj
b25kKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkgeyBtX3NlY29uZCA9IHNl
Y29uZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2Zp
cnN0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmQ7Ci19OwotCi1jbGFz
cyBEYXNoYm9hcmRSZWdpb24gOiBwdWJsaWMgUmVjdEltcGwgewotcHVibGljOgotICAgIERhc2hi
b2FyZFJlZ2lvbigpIDogbV9pc0NpcmNsZSgwKSwgbV9pc1JlY3RhbmdsZSgwKSB7IH0KLQotICAg
IFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IG1fbmV4dDsKLSAgICBTdHJpbmcgbV9sYWJlbDsKLSAg
ICBTdHJpbmcgbV9nZW9tZXRyeVR5cGU7Ci0gICAgYm9vbCBtX2lzQ2lyY2xlIDogMTsKLSAgICBi
b29sIG1faXNSZWN0YW5nbGUgOiAxOwotfTsKLQotY2xhc3MgQ1NTSW1hZ2VWYWx1ZSA6IHB1Ymxp
YyBDU1NQcmltaXRpdmVWYWx1ZSwgcHVibGljIENhY2hlZE9iamVjdENsaWVudAotewotcHVibGlj
OgotICAgIENTU0ltYWdlVmFsdWUoKTsKLSAgICBDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYg
dXJsLCBTdHlsZUJhc2UqKTsKLSAgICB2aXJ0dWFsIH5DU1NJbWFnZVZhbHVlKCk7Ci0KLSAgICBD
YWNoZWRJbWFnZSogaW1hZ2UoRG9jTG9hZGVyKik7Ci0KLXByb3RlY3RlZDoKLSAgICBDYWNoZWRJ
bWFnZSogbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKLX07Ci0KLWNsYXNzIENT
U0JvcmRlckltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBDU1NC
b3JkZXJJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVmUHRyPENT
U0ltYWdlVmFsdWU+LAotICAgICAgICBQYXNzUmVmUHRyPFJlY3RJbXBsPiwgaW50IGhvcml6b250
YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLQotcHVibGljOgotICAgIC8vIFRoZSBib3JkZXIgaW1hZ2UuCi0gICAgUmVmUHRy
PENTU0ltYWdlVmFsdWU+IG1faW1hZ2U7Ci0KLSAgICAvLyBUaGVzZSBmb3VyIHZhbHVlcyBhcmUg
dXNlZCB0byBtYWtlICJjdXRzIiBpbiB0aGUgaW1hZ2UuICBUaGV5IGNhbiBiZSBudW1iZXJzCi0g
ICAgLy8gb3IgcGVyY2VudGFnZXMuCi0gICAgUmVmUHRyPFJlY3RJbXBsPiBtX2ltYWdlU2xpY2VS
ZWN0OwotICAgIAotICAgIC8vIFZhbHVlcyBmb3IgaG93IHRvIGhhbmRsZSB0aGUgc2NhbGluZy9z
dHJldGNoaW5nL3RpbGluZyBvZiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgIGludCBtX2hvcml6b250
YWxTaXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgd2lkdGhzIG9mIHRoZSB0
b3AvbWlkZGxlL2JvdHRvbQotICAgIGludCBtX3ZlcnRpY2FsU2l6ZVJ1bGU7IC8vIFJ1bGUgZm9y
IGhvdyB0byBhZGp1c3QgdGhlIGhlaWdodHMgb2YgdGhlIGxlZnQvbWlkZGxlL3JpZ2h0Ci19Owot
Ci1jbGFzcyBGb250RmFtaWx5VmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUKLXsKLXB1
YmxpYzoKLSAgICBGb250RmFtaWx5VmFsdWUoIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmlu
Zyk7Ci0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZm9udE5hbWUoKSBjb25zdCB7IHJldHVy
biBwYXJzZWRGb250TmFtZTsgfQotICAgIGludCBnZW5lcmljRmFtaWx5VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIF9nZW5lcmljRmFtaWx5VHlwZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0OwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXJzZWRGb250TmFtZTsKLXByaXZh
dGU6Ci0gICAgaW50IF9nZW5lcmljRmFtaWx5VHlwZTsKLX07Ci0KLWNsYXNzIEZvbnRWYWx1ZSA6
IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxlOwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFyaWFudDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHdlaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemU7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lSGVpZ2h0OwotICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGZhbWlseTsKLX07Ci0KLS8vIFVzZWQgZm9yIHRleHQtc2hhZG93IGFuZCBib3gtc2hhZG93
Ci1jbGFzcyBTaGFkb3dWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIFNo
YWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHgsCi0gICAgICAgIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHksCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGJsdXIsCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNv
bG9yKTsKLSAgICAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHg7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB5OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbG9yOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LS8vIGFub3RoZXIgaGVscGVyIGNsYXNzCi1jbGFzcyBDU1NQcm9wZXJ0eQotewotcHVibGljOgot
ICAgIENTU1Byb3BlcnR5KGludCBwcm9wSUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBi
b29sIGltcG9ydGFudCA9IGZhbHNlLCBpbnQgc2hvcnRoYW5kSUQgPSAwLCBib29sIGltcGxpY2l0
ID0gZmFsc2UpCi0gICAgICAgIDogbV9pZChwcm9wSUQpLCBtX3Nob3J0aGFuZElEKHNob3J0aGFu
ZElEKSwgbV9pbXBvcnRhbnQoaW1wb3J0YW50KSwgbV9pbXBsaWNpdChpbXBsaWNpdCksIG1fdmFs
dWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDU1NQcm9wZXJ0eSAmb3BlcmF0b3I9
KGNvbnN0IENTU1Byb3BlcnR5JiBvKQotICAgIHsKLSAgICAgICAgbV9pZCA9IG8ubV9pZDsKLSAg
ICAgICAgbV9zaG9ydGhhbmRJRCA9IG8ubV9zaG9ydGhhbmRJRDsKLSAgICAgICAgbV9pbXBvcnRh
bnQgPSBvLm1faW1wb3J0YW50OwotICAgICAgICBtX3ZhbHVlID0gby5tX3ZhbHVlOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KLSAgICBpbnQgc2hvcnRoYW5kSUQoKSBjb25zdCB7IHJldHVybiBtX3Nob3J0aGFu
ZElEOyB9Ci0gICAgCi0gICAgYm9vbCBpc0ltcG9ydGFudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
b3J0YW50OyB9Ci0gICAgYm9vbCBpc0ltcGxpY2l0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsaWNp
dDsgfQotCi0gICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQo
KTsgfQotICAgIAotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICAvLyBtYWtlIHN1
cmUgdGhlIGZvbGxvd2luZyBmaXRzIGluIDQgYnl0ZXMuCi0gICAgaW50IG1faWQ7Ci0gICAgaW50
IG1fc2hvcnRoYW5kSUQ7ICAvLyBJZiB0aGlzIHByb3BlcnR5IHdhcyBzZXQgYXMgcGFydCBvZiBh
IHNob3J0aGFuZCwgZ2l2ZXMgdGhlIHNob3J0aGFuZC4KLSAgICBib29sIG1faW1wb3J0YW50IDog
MTsKLSAgICBib29sIG1faW1wbGljaXQgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVy
dHkgd2FzIHNldCBpbXBsaWNpdGx5IGFzIHRoZSByZXN1bHQgb2YgYSBzaG9ydGhhbmQuCi0KLSAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5ICYsIGNvbnN0IENTU1By
b3BlcnR5ICYpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtX3ZhbHVlOwotfTsKIAogY2xhc3Mg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbgog
ewpJbmRleDogY3NzL0ZvbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0ZvbnRWYWx1ZS5j
cHAJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0ZvbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5LDEyNjMgKzE5LDIyIEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiY3NzX3ZhbHVl
aW1wbC5oIgotCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgot
I2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiY3Nz
cGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgImNzc3N0
eWxlc2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiRm9udFZhbHVlLmgiCiAKLSNpZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgImtzdmdjc3Nwcm9w
ZXJ0aWVzLmgiCi0jZW5kaWYKLQotLy8gTm90IGluIGFueSBoZWFkZXIsIHNvIGp1c3QgZGVjbGFy
ZSBpdCBoZXJlIGZvciBub3cuCi1XZWJDb3JlOjpTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2ln
bmVkIHNob3J0IGlkKTsKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIERlZmluZWQgaW4g
Q1NTR3JhbW1hci55LCBidXQgbm90IGluIGFueSBoZWFkZXIsIHNvIGp1c3QgZGVjbGFyZSBpdCBo
ZXJlIGZvciBub3cuCi1pbnQgZ2V0UHJvcGVydHlJRChjb25zdCBjaGFyKiBzdHIsIGludCBsZW4p
OwotCi1zdGF0aWMgaW50IHByb3BlcnR5SUQoY29uc3QgU3RyaW5nJiBzKQotewotICAgIGNoYXIg
YnVmZmVyW21heENTU1Byb3BlcnR5TmFtZUxlbmd0aF07Ci0KLSAgICB1bnNpZ25lZCBsZW4gPSBz
Lmxlbmd0aCgpOwotICAgIGlmIChsZW4gPiBtYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGgpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW47ICsraSkg
ewotICAgICAgICBVQ2hhciBjID0gc1tpXTsKLSAgICAgICAgaWYgKGMgPT0gMCB8fCBjID49IDB4
N0YpCi0gICAgICAgICAgICByZXR1cm4gMDsgLy8gaWxsZWdhbCBjaGFyYWN0ZXIKLSAgICAgICAg
YnVmZmVyW2ldID0gYzsKLSAgICB9Ci0KLSAgICBpbnQgaWQgPSBnZXRQcm9wZXJ0eUlEKGJ1ZmZl
ciwgbGVuKTsKLSNpZiBTVkdfU1VQUE9SVAotICAgIGlmIChpZCA9PSAwKQotICAgICAgICBpZCA9
IFNWRzo6Z2V0U1ZHQ1NTUHJvcGVydHlJRChidWZmZXIsIGxlbik7Ci0jZW5kaWYKLSAgICByZXR1
cm4gaWQ7Ci19Ci0KLQotLy8gUXVvdGVzIHRoZSBzdHJpbmcgaWYgaXQgbmVlZHMgcXVvdGluZy4K
LS8vIFdlIHVzZSBzaW5nbGUgcXVvdGVzIGZvciBub3cgYmVhdXNlIG1hcmt1cC5jcHAgdXNlcyBk
b3VibGUgcXVvdGVzLgotc3RhdGljIFN0cmluZyBxdW90ZVN0cmluZ0lmTmVlZGVkKGNvbnN0IFN0
cmluZyAmc3RyaW5nKQotewotICAgIC8vIEZvciBub3csIGp1c3QgZG8gdGhpcyBmb3Igc3RyaW5n
cyB0aGF0IHN0YXJ0IHdpdGggIiMiIHRvIGZpeCBLb3JlYW4gZm9udCBuYW1lcyB0aGF0IHN0YXJ0
IHdpdGggIiMiLgotICAgIC8vIFBvc3QtVGlnZXIsIHdlIHNob3VsZCBpc0xlZ2FsSWRlbnRpZmll
ciBpbnN0ZWFkIGFmdGVyIHdvcmtpbmcgb3V0IGFsbCB0aGUgYW5jaWxsYXJ5IGlzc3Vlcy4KLSAg
ICBpZiAoc3RyaW5nWzBdICE9ICcjJykKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQotICAgIC8v
IEZJWE1FOiBBbHNvIG5lZWQgdG8gdHJhbnNmb3JtIGNvbnRyb2wgY2hhcmFjdGVycyBpbnRvIFwg
c2VxdWVuY2VzLgotICAgIFN0cmluZyBzID0gc3RyaW5nOwotICAgIHMucmVwbGFjZSgnXFwnLCAi
XFxcXCIpOwotICAgIHMucmVwbGFjZSgnXCcnLCAiXFwnIik7Ci0gICAgcmV0dXJuICInIiArIHMg
KyAiJyI7Ci19Ci0KLUNTU1N0eWxlRGVjbGFyYXRpb246OkNTU1N0eWxlRGVjbGFyYXRpb24oQ1NT
UnVsZSAqcGFyZW50KQotICAgIDogU3R5bGVCYXNlKHBhcmVudCkKLXsKLX0KLQotYm9vbCBDU1NT
dHlsZURlY2xhcmF0aW9uOjppc1N0eWxlRGVjbGFyYXRpb24oKQotewotICAgIHJldHVybiB0cnVl
OwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9w
SUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJRCk7Ci19Ci0K
LVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmlu
ZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5
TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkK
LXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICgh
cHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5
UHJpb3JpdHkocHJvcElEKSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0KLVN0cmluZyBDU1NTdHls
ZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcgJnByb3BlcnR5
TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAg
IGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaW50IHNob3J0aGFu
ZElEID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAgICBpZiAoIXNob3J0aGFuZElE
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShz
aG9ydGhhbmRJRCk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUlt
cGxpY2l0KGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBw
cm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BJRCk7Ci19Ci0KLXZv
aWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFt
ZSk7Ci0gICAgaWYgKCFwcm9wSUQpIC8vIHNldCBleGNlcHRpb24/Ci0gICAgICAgIHJldHVybjsK
LSAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNl
KSAhPSAtMTsKLSAgICBzZXRQcm9wZXJ0eShwcm9wSUQsIHZhbHVlLCBpbXBvcnRhbnQsIGVjKTsK
LX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQgcHJvcElE
ID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BJRCwgZWMpOwot
fQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlOYW1lKGNvbnN0IFN0cmlu
ZyAmcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpCi0gICAgOiBtX25vZGUo
MCkKLXsKLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFy
ZW50KSwgbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQsIGNvbnN0IERlcHJlY2F0ZWRW
YWx1ZUxpc3Q8Q1NTUHJvcGVydHk+ICZ2YWx1ZXMpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9u
KHBhcmVudCksIG1fdmFsdWVzKHZhbHVlcyksIG1fbm9kZSgwKQotewotICAgIC8vIEZJWE1FOiBU
aGlzIGFsbG93cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCwgY29u
c3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCi0g
ICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQotewotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQotICAgICAgICBtX3ZhbHVlcy5hcHBl
bmQoKnByb3BlcnRpZXNbaV0pOwotICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyBkdXBsaWNhdGUg
cHJvcGVydGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24mIG8pCi17Ci0gICAgLy8gZG9uJ3QgYXR0YWNoIGl0IHRvIHRoZSBzYW1lIG5vZGUsIGp1c3Qg
bGVhdmUgdGhlIGN1cnJlbnQgbV9ub2RlIHZhbHVlCi0gICAgbV92YWx1ZXMgPSBvLm1fdmFsdWVz
OwotICAgIHJldHVybiAqdGhpczsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAg
IGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7Ci0KLSAgICAvLyBT
aG9ydGhhbmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKLSAgICBzd2l0Y2ggKCBwcm9wZXJ0eUlE
ICkgewotICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTjoKLSAgICB7Ci0gICAg
ICAgIC8vICMjIElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4gY3NzcGFyc2VyLmNwcCBpcyBj
b25mdXNpbmcKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU19QUk9QX0JB
Q0tHUk9VTkRfUE9TSVRJT05fWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWSB9OwotICAgICAgICByZXR1cm4gZ2V0U2hv
cnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDIgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9C
QUNLR1JPVU5EOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNV0gPSB7IENT
U19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIENTU19QUk9QX0JBQ0tHUk9VTkRfUkVQRUFULAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9BVFRB
Q0hNRU5ULCBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiB9OwotICAgICAgICBy
ZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDUgKTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NfUFJPUF9CT1JERVI6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1sz
XSA9IHsgQ1NTX1BST1BfQk9SREVSX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfU1RZTEUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfQ09MT1IgfTsK
LSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAg
fQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1RPUDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfUFJPUF9C
T1JERVJfVE9QX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
X1BST1BfQk9SREVSX1RPUF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1
ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9SSUdI
VDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9C
T1JERVJfUklHSFRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9SSUdIVF9DT0xPUn07
Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAg
IH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9CT1RUT006Ci0gICAgewotICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURUSCwgQ1NT
X1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0
U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJP
UF9CT1JERVJfTEVGVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0g
eyBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfTEVG
VF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywg
MyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX09VVExJTkU6Ci0gICAgewotICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfT1VUTElORV9XSURUSCwgQ1NTX1BS
T1BfT1VUTElORV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U19QUk9QX09VVExJTkVfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVl
KCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0NPTE9S
OgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JP
UkRFUl9UT1BfQ09MT1IsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9DT0xPUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09MT1IsIENT
U19QUk9QX0JPUkRFUl9MRUZUX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBw
cm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1dJRFRIOgotICAg
IHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JPUkRFUl9U
T1BfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgsIENTU19QUk9Q
X0JPUkRFUl9MRUZUX1dJRFRIIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0
aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1NUWUxFOgotICAgIHsKLSAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JPUkRFUl9UT1BfU1RZ
TEUsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19QUk9QX0JPUkRF
Ul9MRUZUX1NUWUxFIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7
Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTUFSR0lOOgotICAgIHsKLSAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX01BUkdJTl9UT1AsIENTU19QUk9QX01BUkdJ
Tl9SSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX01B
UkdJTl9CT1RUT00sIENTU19QUk9QX01BUkdJTl9MRUZUIH07Ci0gICAgICAgIHJldHVybiBnZXQ0
VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfUEFERElORzoK
LSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9QQURE
SU5HX1RPUCwgQ1NTX1BST1BfUEFERElOR19SSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX1BBRERJTkdfQk9UVE9NLCBDU1NfUFJPUF9QQURESU5HX0xF
RlQgfTsKLSAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0g
ICAgY2FzZSBDU1NfUFJPUF9MSVNUX1NUWUxFOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHBy
b3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1BST1BfTElTVF9T
VFlMRV9QT1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19Q
Uk9QX0xJU1RfU1RZTEVfSU1BR0UgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVl
KCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0NFZhbHVlcyggY29uc3Qg
aW50KiBwcm9wZXJ0aWVzICkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHBy
b3BlcnRpZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0
UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUp
IC8vIGFwcGFyZW50bHkgYWxsIDQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZC4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIXJlcy5pc051bGwo
KSkKLSAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgcmVzICs9IHZhbHVl
LT5jc3NUZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotU3Ry
aW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRTaG9ydEhhbmRWYWx1ZSggY29uc3Qg
aW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyICkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc1By
b3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwotICAgICAg
ICAgICAgaWYgKHZhbHVlKSB7IC8vIFRPRE8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlIGlmICF2YWx1
ZQotICAgICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAg
ICByZXMgKz0gIiAiOwotICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLVBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgp
OyBpdCAhPSBlbmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1faWQp
Ci0gICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
U3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJv
cGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBl
YyA9IDA7Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SXRl
cmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgpOyBpdCAhPSBlbmQ7IC0t
aXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1faWQpIHsKLSAgICAgICAgICAg
IHZhbHVlID0gKCppdCkudmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgbV92YWx1ZXMu
cmVtb3ZlKGl0KTsKLSAgICAgICAgICAgIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICAgICAg
ICAgIHNldENoYW5nZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBy
ZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNsZWFy
KCkKLXsKLSAgICBtX3ZhbHVlcy5jbGVhcigpOwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9p
ZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q2hhbmdlZCgpCi17Ci0gICAgaWYgKG1f
bm9kZSkgewotICAgICAgICBtX25vZGUtPnNldENoYW5nZWQoKTsKLSAgICAgICAgLy8gRklYTUU6
IElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRlciBhbmQgdGhlcmUKLSAgICAg
ICAgLy8gc2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24g
anVzdAotICAgICAgICAvLyBmb3IgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9ucyB0aGF0IGhhbmRs
ZXMgdGhpcwotICAgICAgICBpZiAobV9ub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSAmJiB0aGlzID09
IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQgKj4obV9ub2RlKS0+aW5saW5lU3R5bGVEZWNsKCkp
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50ICo+KG1fbm9kZSktPmludmFs
aWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
IyMjIHF1aWNrJmRpcnR5IGhhY2sgZm9yIEtERSAzLjAuLi4gbWFrZSB0aGlzIE1VQ0ggYmV0dGVy
ISAoRGlyaykKLSAgICBTdHlsZUJhc2UgKnJvb3QgPSB0aGlzOwotICAgIHdoaWxlIChTdHlsZUJh
c2UgKnBhcmVudCA9IHJvb3QtPnBhcmVudCgpKQotICAgICAgICByb290ID0gcGFyZW50OwotICAg
IGlmIChyb290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldCo+KHJvb3QpLT5kb2MoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotfQotCi1ib29s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9w
ZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENT
U1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRv
cjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4g
KCppdCkuaXNJbXBvcnRhbnQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQp
IGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVy
dHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1By
b3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aWYgKHByb3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS5z
aG9ydGhhbmRJRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdAot
ewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7
Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4g
aXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmIChwcm9w
ZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuaXNJbXBsaWNp
dCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIGJv
b2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRQcm9wZXJ0eShwcm9w
ZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlLCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCB0
cnVlLCBlYyk7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwg
Ym9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0K
LSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLQotICAgIENTU1BhcnNlciBwYXJzZXIo
dXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZXIucGFyc2VWYWx1
ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICBpZiAoIXN1Y2Nlc3Mp
IHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIH0gZWxzZSBpZiAobm90aWZ5Q2hhbmdl
ZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
aW50IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQotewotICAgIHJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQcm9wZXJ0
eShwcm9wZXJ0eUlELCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLCBpbXBvcnRhbnQpKTsK
LSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRTdHJpbmdQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGltcG9ydGFudCkKLXsKLSAgICByZW1vdmVQcm9w
ZXJ0eShwcm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVy
dHlJZCwgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSwgaW1wb3J0YW50KSk7Ci0g
ICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpz
ZXRJbWFnZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcgJlVSTCwgYm9vbCBp
bXBvcnRhbnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0gICAgbV92YWx1
ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NJbWFnZVZhbHVlKFVSTCwg
dGhpcyksIGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcgJnN0eWxl
RGVjbGFyYXRpb24pCi17Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFy
c2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhp
cywgc3R5bGVEZWNsYXJhdGlvbik7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3Bl
cnR5ICogY29uc3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQotewotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnRpZXNbaV0tPmlkKCksIGZhbHNlKTsKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5k
KCpwcm9wZXJ0aWVzW2ldKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hv
dWxkIGhhdmUgYSBjYWxsIHRvIHNldENoYW5nZWQoKSBpZiBzb21ldGhpbmcgY2hhbmdlZC4gV2Ug
bWF5IGFsc28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJndW1lbnQgdG8g
dGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0aW9ucyBpbiB0
aGlzIGNsYXNzLgotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRMZW5n
dGhQcm9wZXJ0eShpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBi
b29sIC8qIG11bHRpTGVuZ3RoKi8pCi17Ci0gICAgYm9vbCBwYXJzZU1vZGUgPSB1c2VTdHJpY3RQ
YXJzaW5nKCk7Ci0gICAgc2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7Ci0gICAgc2V0UHJvcGVydHko
aWQsIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgIHNldFN0cmljdFBhcnNpbmcocGFyc2VNb2RlKTsK
LX0KLQotdW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWVzLmNvdW50KCk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAotewotICAgIGlmIChpID49
IG1fdmFsdWVzLmNvdW50KCkpCi0gICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBn
ZXRQcm9wZXJ0eU5hbWUobV92YWx1ZXNbaV0uaWQoKSk7Ci19Ci0KLUNTU1J1bGUgKkNTU1N0eWxl
RGVjbGFyYXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiAocGFyZW50KCkg
JiYgcGFyZW50KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENTU1J1bGUgKj4ocGFyZW50KCkp
IDogMDsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkg
Y29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAgCi0gICAgRGVwcmVjYXRlZFZh
bHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0
ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0ICs9ICgqaXQpLmNzc1RleHQoKTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBlYyA9IDA7Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFyc2Vy
KHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywg
dGV4dCk7Ci0gICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCi0g
ICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpt
ZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVz
T25Db25mbGljdCkKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGl0ID0gb3RoZXItPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5Lmlk
KCkpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIGlmICghYXJnT3ZlcnJpZGVz
T25Db25mbGljdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlbW92
ZVByb3BlcnR5KHByb3BlcnR5LmlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVzLmFw
cGVuZChwcm9wZXJ0eSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3Vs
ZCBoYXZlIGEgY2FsbCB0byBzZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1h
eSBhbHNvIHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRo
aXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhp
cyBjbGFzcy4KLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWZmKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uICpzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0eWxlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PGludD4gcHJvcGVydGllczsKLSAg
ICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAg
IGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0KHN0
eWxlLT52YWx1ZXNJdGVyYXRvcigpKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0
IENTU1Byb3BlcnR5ICZwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7Ci0gICAgICAgIGlmICh2
YWx1ZSAmJiAodmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCkp
KQotICAgICAgICAgICAgcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkuaWQoKSk7Ci0gICAgfQot
ICAgIAotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPGludD4gaXQocHJvcGVy
dGllcy5iZWdpbigpKTsgaXQgIT0gcHJvcGVydGllcy5lbmQoKTsgKytpdCkKLSAgICAgICAgc3R5
bGUtPnJlbW92ZVByb3BlcnR5KCppdCk7Ci19Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJv
cGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMo
KSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpc3Qgb2YgaW5o
ZXJpdGVkIENTUyBwcm9wZXJ0aWVzIGFuZCB0aGUKLS8vIHByb3BlcnRpZXMgZm9yIHdoaWNoIHdl
IGhhdmUgYSBjb21wdXRlZCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGZpbGUuCi1jb25zdCBpbnQg
aW5oZXJpdGFibGVQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfQk9SREVSX0NPTExBUFNF
LAotICAgIENTU19QUk9QX0JPUkRFUl9TUEFDSU5HLAotICAgIENTU19QUk9QX0NPTE9SLAotICAg
IENTU19QUk9QX0ZPTlRfRkFNSUxZLAotICAgIENTU19QUk9QX0ZPTlRfU0laRSwKLSAgICBDU1Nf
UFJPUF9GT05UX1NUWUxFLAotICAgIENTU19QUk9QX0ZPTlRfVkFSSUFOVCwKLSAgICBDU1NfUFJP
UF9GT05UX1dFSUdIVCwKLSAgICBDU1NfUFJPUF9MRVRURVJfU1BBQ0lORywKLSAgICBDU1NfUFJP
UF9MSU5FX0hFSUdIVCwKLSAgICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAgIENTU19QUk9QX19X
RUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsCi0gICAgQ1NTX1BST1BfVEVYVF9JTkRF
TlQsCi0gICAgQ1NTX1BST1BfX1dFQktJVF9URVhUX1NJWkVfQURKVVNULAotICAgIENTU19QUk9Q
X1RFWFRfVFJBTlNGT1JNLAotICAgIENTU19QUk9QX09SUEhBTlMsCi0gICAgQ1NTX1BST1BfV0hJ
VEVfU1BBQ0UsCi0gICAgQ1NTX1BST1BfV0lET1dTLAotICAgIENTU19QUk9QX1dPUkRfU1BBQ0lO
RywKLX07Ci0KLWNvbnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyA9IHNpemVv
Zihpbmhlcml0YWJsZVByb3BlcnRpZXMpIC8gc2l6ZW9mKGluaGVyaXRhYmxlUHJvcGVydGllc1sw
XSk7Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkg
aW4gdGhlIGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBsaXN0
IG9mIENTUyBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxldmVsIGVs
ZW1lbnRzLgotc3RhdGljIGNvbnN0IGludCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKLSAgICBDU1Nf
UFJPUF9PUlBIQU5TLAotICAgIENTU19QUk9QX09WRVJGTE9XLCAvLyBUaGlzIGNhbiBiZSBhbHNv
IGJlIGFwcGxpZWQgdG8gcmVwbGFjZWQgZWxlbWVudHMKLSAgICBDU1NfUFJPUF9QQUdFX0JSRUFL
X0FGVEVSLAotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfQkVGT1JFLAotICAgIENTU19QUk9QX1BB
R0VfQlJFQUtfSU5TSURFLAotICAgIENTU19QUk9QX1RFWFRfQUxJR04sCi0gICAgQ1NTX1BST1Bf
VEVYVF9JTkRFTlQsCi0gICAgQ1NTX1BST1BfV0lET1dTCi19OwotCi1jb25zdCB1bnNpZ25lZCBu
dW1CbG9ja1Byb3BlcnRpZXMgPSBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzKSAvIHNpemVvZihibG9j
a1Byb3BlcnRpZXNbMF0pOwotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1C
bG9ja1Byb3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpy
ZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9j
a1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OnJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygpCi17Ci0gICAgcmVt
b3ZlUHJvcGVydGllc0luU2V0KGluaGVyaXRhYmxlUHJvcGVydGllcywgbnVtSW5oZXJpdGFibGVQ
cm9wZXJ0aWVzKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQgKnNldCwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJv
cGVydHk+IGxpc3Q7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNl
dFtpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1By
b3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwotICAgIH0KLSAgICByZXR1
cm4gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIGxpc3QpOwotfQotCi12b2lkIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50
ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKLSAgICAgICAg
aWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZW1vdmUoQ1NTUHJvcGVydHkoc2V0
W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdl
ZCgpOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQotewotICAgIHJldHVybiB0aGlzOwot
fQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5ldyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbigwLCBtX3ZhbHVlcyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLXVuc2lnbmVkIHNob3J0IENTU0luaGVyaXRlZFZhbHVlOjpjc3NWYWx1
ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfSU5IRVJJVDsKLX0KLQotU3RyaW5nIENT
U0luaGVyaXRlZFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gImluaGVyaXQi
OwotfQotCi11bnNpZ25lZCBzaG9ydCBDU1NJbml0aWFsVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNv
bnN0Ci17IAotICAgIHJldHVybiBDU1NfSU5JVElBTDsgCi19Ci0KLVN0cmluZyBDU1NJbml0aWFs
VmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVybiAiaW5pdGlhbCI7Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTVmFsdWVMaXN0Ojp+Q1NTVmFs
dWVMaXN0KCkKLXsKLSAgICBmb3IgKENTU1ZhbHVlICp2YWwgPSBtX3ZhbHVlcy5maXJzdCgpOyB2
YWw7IHZhbCA9IG1fdmFsdWVzLm5leHQoKSkKLSAgICAgICAgdmFsLT5kZXJlZigpOwotfQotCi11
bnNpZ25lZCBzaG9ydCBDU1NWYWx1ZUxpc3Q6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIENTU19WQUxVRV9MSVNUOwotfQotCi12b2lkIENTU1ZhbHVlTGlzdDo6YXBwZW5kKFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IHZhbCkKLXsKLSAgICBtX3ZhbHVlcy5hcHBlbmQodmFsLnJlbGVh
c2UoKSk7Ci19Ci0KLVN0cmluZyBDU1NWYWx1ZUxpc3Q6OmNzc1RleHQoKSBjb25zdAotewotICAg
IFN0cmluZyByZXN1bHQgPSAiIjsKLQotICAgIGZvciAoRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRv
cjxDU1NWYWx1ZT4gaXRlcmF0b3IobV92YWx1ZXMpOyBpdGVyYXRvci5jdXJyZW50KCk7ICsraXRl
cmF0b3IpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVz
dWx0ICs9ICIsICI7Ci0gICAgICAgIHJlc3VsdCArPSBpdGVyYXRvci5jdXJyZW50KCktPmNzc1Rl
eHQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUoKQotewotICAgIG1fdHlwZSA9IDA7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShpbnQgaWRlbnQpCi17Ci0gICAgbV92YWx1ZS5pZGVudCA9IGlkZW50OwotICAg
IG1fdHlwZSA9IENTU19JREVOVDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2
ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotewotICAgIG1fdmFsdWUubnVtID0g
bnVtOwotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmIHN0ciwgVW5pdFR5cGVzIHR5cGUpCi17Ci0gICAgaWYg
KChtX3ZhbHVlLnN0cmluZyA9IHN0ci5pbXBsKCkpKQotICAgICAgICBtX3ZhbHVlLnN0cmluZy0+
cmVmKCk7Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4gYykKLXsKLSAgICBtX3ZhbHVlLmNvdW50
ZXIgPSBjLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfQ09VTlRFUjsKLX0KLQotQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdEltcGw+IHIpCi17
Ci0gICAgbV92YWx1ZS5yZWN0ID0gci5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NTX1JFQ1Q7
Ci19Ci0KLSNpZiBfX0FQUExFX18KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1
ZShQYXNzUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gcikKLXsKLSAgICBtX3ZhbHVlLnJlZ2lvbiA9
IHIucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19EQVNIQk9BUkRfUkVHSU9OOwotfQotI2Vu
ZGlmCi0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShSR0JBMzIgY29sb3Ip
Ci17Ci0gICAgbV92YWx1ZS5yZ2Jjb2xvciA9IGNvbG9yOwotICAgIG1fdHlwZSA9IENTU19SR0JD
T0xPUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQ
dHI8UGFpcj4gcCkKLXsKLSAgICBtX3ZhbHVlLnBhaXIgPSBwLnJlbGVhc2UoKTsKLSAgICBtX3R5
cGUgPSBDU1NfUEFJUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6On5DU1NQcmltaXRpdmVWYWx1
ZSgpCi17Ci0gICAgY2xlYW51cCgpOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpjbGVh
bnVwKCkKLXsKLSAgICBzd2l0Y2gobV90eXBlKSB7Ci0gICAgY2FzZSBDU1NfU1RSSU5HOgotICAg
IGNhc2UgQ1NTX1VSSToKLSAgICBjYXNlIENTU19BVFRSOgotICAgICAgICBpZiAobV92YWx1ZS5z
dHJpbmcpCi0gICAgICAgICAgICBtX3ZhbHVlLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NfQ09VTlRFUjoKLSAgICAgICAgbV92YWx1ZS5jb3VudGVyLT5kZXJl
ZigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19SRUNUOgotICAgICAgICBtX3ZhbHVl
LnJlY3QtPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1BBSVI6Ci0gICAg
ICAgIG1fdmFsdWUucGFpci0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgX19BUFBMRV9f
Ci0gICAgY2FzZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgaWYgKG1fdmFsdWUucmVn
aW9uKQotICAgICAgICAgICAgbV92YWx1ZS5yZWdpb24tPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV90
eXBlID0gMDsKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50KFJl
bmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZs
b2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBv
ZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8g
bmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBu
ZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICsw
LjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFYIHx8IHJlc3VsdCA8IElOVF9NSU4p
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgICAgCi19Ci0KLWlu
dCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSAqc3R5bGUs
IGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBtdWx0aXBsaWVyICog
Y29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24g
aXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5
OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5
IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8
IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFYIHx8IHJl
c3VsdCA8IElOVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3Vs
dDsgIAotfQotCi1jb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZmZmZmOyAvLyBtYXgg
dmFsdWUgZm9yIGEgMjgtYml0IGludAotY29uc3QgaW50IGludE1pbkZvckxlbmd0aCA9ICgtMHg3
ZmZmZmZmLTEpOyAvLyBtaW4gdmFsdWUgZm9yIGEgMjgtYml0IGludAotCi0vLyBMZW5ndGhzIGV4
cGVjdCBhbiBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9y
IGEgZGlmZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0
ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNp
b24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45
OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVh
bGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3Vs
dCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBpbnRNYXhGb3JM
ZW5ndGggfHwgcmVzdWx0IDwgaW50TWluRm9yTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gKGludClyZXN1bHQ7ICAgIAotfQotCi0vLyBMZW5ndGhzIGV4cGVjdCBhbiBpbnQg
dGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGEgZGlmZmVyZW50
IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50Rm9yTGVu
Z3RoKFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91Ymxl
IHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAot
ICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2
YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFu
ZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4K
LSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYg
KHJlc3VsdCA+IGludE1heEZvckxlbmd0aCB8fCByZXN1bHQgPCBpbnRNaW5Gb3JMZW5ndGgpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgIAotfQotCi1zaG9ydCBD
U1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpzdHlsZSkK
LXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAK
LSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4g
dmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBh
bmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUu
Ci0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlm
IChyZXN1bHQgPiBTSFJUX01BWCB8fCByZXN1bHQgPCBTSFJUX01JTikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIChzaG9ydClyZXN1bHQ7ICAgIAotfQotCi1zaG9ydCBDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11
bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVu
Z3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNp
c2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAg
ICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8g
dGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAx
IDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IFNIUlRfTUFYIHx8IHJlc3VsdCA8IFNI
UlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKHNob3J0KXJlc3VsdDsgIAot
fQotCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhGbG9hdChSZW5kZXJT
dHlsZSAqc3R5bGUsIGJvb2wgYXBwbHlab29tRmFjdG9yKQotewotICAgIHVuc2lnbmVkIHNob3J0
IHR5cGUgPSBwcmltaXRpdmVUeXBlKCk7Ci0KLSAgICAvLyBXZSBhbHdheXMgYXNzdW1lIDk2IENT
UyBwaXhlbHMgaW4gYSBDU1MgaW5jaC4gVGhpcyBpcyB0aGUgY29sZCBoYXJkIHRydXRoIG9mIHRo
ZSBXZWIuCi0gICAgLy8gQXQgaGlnaCBEUEksIHdlIG1heSBzY2FsZSBhIENTUyBwaXhlbCwgYnV0
IHRoZSByYXRpbyBvZiB0aGUgQ1NTIHBpeGVsIHRvIHRoZSBzby1jYWxsZWQKLSAgICAvLyAiYWJz
b2x1dGUiIENTUyBsZW5ndGggdW5pdHMgbGlrZSBpbmNoIGFuZCBwdCBpcyBhbHdheXMgZml4ZWQg
YW5kIG5ldmVyIGNoYW5nZXMuCi0gICAgZG91YmxlIGNzc1BpeGVsc1BlckluY2ggPSA5Ni47Ci0K
LSAgICBkb3VibGUgZmFjdG9yID0gMS47Ci0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIENT
U19FTVM6Ci0gICAgICAgIGZhY3RvciA9IGFwcGx5Wm9vbUZhY3RvciA/Ci0gICAgICAgICAgc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIDoKLSAgICAgICAgICBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU19FWFM6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBidWcgcmlnaHQgbm93
IHdoZXJlIHRoZSB6b29tIHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lcyB0byBFWCB1bml0
cy4KLSAgICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgdG8gY29tcHV0ZSBFWCB1c2luZyBmb250TWV0
cmljcyBmb3IgdGhlIG9yaWdpbmFsIHNwZWNpZmllZFNpemUgYW5kIG5vdCB1c2UKLSAgICAgICAg
Ly8gb3VyIGFjdHVhbCBjb25zdHJ1Y3RlZCByZW5kZXJpbmcgZm9udC4KLSAgICAgICAgZmFjdG9y
ID0gc3R5bGUtPmZvbnQoKS54SGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIENTU19QWDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ006Ci0gICAgICAgIGZh
Y3RvciA9IGNzc1BpeGVsc1BlckluY2gvMi41NDsgLy8gKDIuNTQgY20vaW4pCi0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTX01NOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNo
LzI1LjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICBmYWN0b3Ig
PSBjc3NQaXhlbHNQZXJJbmNoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19QVDoKLSAg
ICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC83Mi47Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTX1BDOgotICAgICAgICAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAgIGZhY3RvciA9
IGNzc1BpeGVsc1BlckluY2gqMTIuLzcyLjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiBnZXRGbG9hdFZhbHVlKCkg
KiBmYWN0b3I7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldEZsb2F0VmFsdWUoIHVu
c2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAvLyAjIyMgY2hlY2sgaWYg
cHJvcGVydHkgc3VwcG9ydHMgdGhpcyB0eXBlCi0gICAgaWYgKG1fdHlwZSA+IENTU19ESU1FTlNJ
T04pIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIC8vaWYobV90eXBlID4gQ1NTX0RJTUVOU0lPTikgdGhyb3cgRE9NRXhjZXB0aW9uKElOVkFM
SURfQUNDRVNTX0VSUik7Ci0gICAgbV92YWx1ZS5udW0gPSBmbG9hdFZhbHVlOwotICAgIG1fdHlw
ZSA9IHVuaXRUeXBlOwotfQotCi1kb3VibGUgc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuc2ln
bmVkIHNob3J0IHVuaXRUeXBlKQotewotICAgIGRvdWJsZSBjc3NQaXhlbHNQZXJJbmNoID0gOTYu
MDsKLSAgICBkb3VibGUgZmFjdG9yID0gMS4wOwotICAgIAotICAgIHN3aXRjaCh1bml0VHlwZSkg
ewotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAgICAgICAg
ICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDIuNTQ7IC8vICgyLjU0IGNtL2luKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTToK
LSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyAyNS40OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTjoKLSAgICAg
ICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgICAgICAgICAgZmFjdG9y
ID0gY3NzUGl4ZWxzUGVySW5jaCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDOgotICAgICAgICAgICAgZmFjdG9yID0gY3Nz
UGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOyAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gZmFjdG9yOwotfQotCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6Omdl
dEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCi17Ci0gICAgaWYgKHVuaXRUeXBl
ID09IG1fdHlwZSB8fCB1bml0VHlwZSA8IENTU19QWCB8fCB1bml0VHlwZSA+IENTU19QQykKLSAg
ICAgICAgcmV0dXJuIG1fdmFsdWUubnVtOwotICAgIAotICAgIGRvdWJsZSBjb252ZXJ0ZWRWYWx1
ZSA9IG1fdmFsdWUubnVtOwotICAgIAotICAgIC8vIEZpcnN0IGNvbnZlcnQgdGhlIHZhbHVlIGZy
b20gbV90eXBlIGludG8gQ1NTUGl4ZWxzCi0gICAgZG91YmxlIGZhY3RvciA9IHNjYWxlRmFjdG9y
Rm9yQ29udmVyc2lvbihtX3R5cGUpOwotICAgIGNvbnZlcnRlZFZhbHVlICo9IGZhY3RvcjsKLSAg
ICAKLSAgICAvLyBOb3cgY29udmVydCBmcm9tIENTU1BpeGVscyB0byB0aGUgc3BlY2lmaWVkIHVu
aXRUeXBlCi0gICAgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuaXRUeXBlKTsK
LSAgICBjb252ZXJ0ZWRWYWx1ZSAvPSBmYWN0b3I7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnZlcnRl
ZFZhbHVlOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRTdHJpbmdWYWx1ZSggdW5z
aWduZWQgc2hvcnQgc3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nICZzdHJpbmdWYWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAvL2lmKG1f
dHlwZSA8IENTU19TVFJJTkcpIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElEX0FDQ0VTU19FUlIp
OwotICAgIC8vaWYobV90eXBlID4gQ1NTX0FUVFIpIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElE
X0FDQ0VTU19FUlIpOwotICAgIGlmIChtX3R5cGUgPCBDU1NfU1RSSU5HIHx8IG1fdHlwZSA+IENT
U19BVFRSKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoc3RyaW5nVHlwZSAhPSBDU1NfSURFTlQpIHsKLSAgICAgICAgbV92YWx1ZS5z
dHJpbmcgPSBzdHJpbmdWYWx1ZS5pbXBsKCk7Ci0gICAgICAgIG1fdmFsdWUuc3RyaW5nLT5yZWYo
KTsKLSAgICAgICAgbV90eXBlID0gc3RyaW5nVHlwZTsKLSAgICB9Ci0gICAgLy8gIyMjIHBhcnNl
IGlkZW50Ci19Ci0KLVN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0U3RyaW5nVmFsdWUoKSBj
b25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTX1NUUklORzoK
LSAgICAgICAgY2FzZSBDU1NfQVRUUjoKLSAgICAgICAgY2FzZSBDU1NfVVJJOgotICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWUuc3RyaW5nOwotICAgICAgICBjYXNlIENTU19JREVOVDoKLSAgICAg
ICAgICAgIHJldHVybiBnZXRWYWx1ZU5hbWUobV92YWx1ZS5pZGVudCk7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIENTUyAyLjEgc3BlYyBzYXlzIHlvdSBzaG91
bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi11bnNpZ25lZCBzaG9ydCBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NTX1BSSU1JVElW
RV9WQUxVRTsKLX0KLQotYm9vbCBDU1NQcmltaXRpdmVWYWx1ZTo6cGFyc2VTdHJpbmcoIGNvbnN0
IFN0cmluZyAmLypzdHJpbmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElkZW50KCkKLXsKLSAgICBpZiht
X3R5cGUgIT0gQ1NTX0lERU5UKSByZXR1cm4gMDsKLSAgICByZXR1cm4gbV92YWx1ZS5pZGVudDsK
LX0KLQotU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAv
LyAjIyMgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbnN0ZWFkIG9mIGEgZ2VuZXJhdGVkIG9u
ZSAoZS5nLiBjb2xvcgotICAgIC8vIG5hbWUgaWYgaXQgd2FzIHNwZWNpZmllZCkgLSBjaGVjayB3
aGF0IHNwZWMgc2F5cyBhYm91dCB0aGlzCi0gICAgU3RyaW5nIHRleHQ7Ci0gICAgc3dpdGNoICgg
bV90eXBlICkgewotICAgICAgICBjYXNlIENTU19VTktOT1dOOgotICAgICAgICAgICAgLy8gIyMj
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfTlVNQkVSOgotICAgICAgICAg
ICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICIlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19FTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgImVtIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19FWFM6
Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImV4IjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QWDoKLSAgICAgICAgICAgIHRl
eHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHgiOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUubnVtKSArICJjbSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NfTU06Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgIm1tIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19JTjoKLSAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaW4iOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICAgICAgdGV4dCA9IFN0
cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwdCI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NfUEM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92
YWx1ZS5udW0pICsgInBjIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19E
RUc6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImRl
ZyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUkFEOgotICAgICAgICAg
ICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gU3Ry
aW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImdyYWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTX01TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1f
dmFsdWUubnVtKSArICJtcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1Nf
UzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicyI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSFo6Ci0gICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImh6IjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU19LSFo6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpu
dW1iZXIobV92YWx1ZS5udW0pICsgImtoeiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NfRElNRU5TSU9OOgotICAgICAgICAgICAgLy8gIyMjCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAgICAgICAgICAgdGV4dCA9IHF1b3RlU3Ry
aW5nSWZOZWVkZWQobV92YWx1ZS5zdHJpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTX1VSSToKLSAgICAgICAgICAgIHRleHQgPSAidXJsKCIgKyBTdHJpbmcobV92YWx1
ZS5zdHJpbmcpICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0lE
RU5UOgotICAgICAgICAgICAgdGV4dCA9IGdldFZhbHVlTmFtZShtX3ZhbHVlLmlkZW50KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19BVFRSOgotICAgICAgICAgICAgLy8g
IyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQ09VTlRFUjoKLSAgICAg
ICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1JFQ1Q6
IHsKLSAgICAgICAgICAgIFJlY3RJbXBsKiByZWN0VmFsID0gZ2V0UmVjdFZhbHVlKCk7Ci0gICAg
ICAgICAgICB0ZXh0ID0gInJlY3QoIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZhbC0+dG9w
KCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZhbC0+cmlnaHQo
KS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5ib3R0b20o
KS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5sZWZ0KCkt
PmNzc1RleHQoKSArICIpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ1NTX1JHQkNPTE9SOiB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcihtX3ZhbHVlLnJn
YmNvbG9yKTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwgMHhGRikKLSAgICAgICAg
ICAgICAgICB0ZXh0ID0gInJnYmEoIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB0ZXh0ID0gInJnYigiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xv
ci5yZWQoKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xv
ci5ncmVlbigpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNv
bG9yLmJsdWUoKSk7Ci0gICAgICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA8IDB4RkYpCi0gICAg
ICAgICAgICAgICAgdGV4dCArPSAiLCAiICsgU3RyaW5nOjpudW1iZXIoKGZsb2F0KWNvbG9yLmFs
cGhhKCkgLyAweEZGKTsKLSAgICAgICAgICAgIHRleHQgKz0gIikiOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NfUEFJUjoKLSAgICAgICAgICAgIHRleHQg
PSBtX3ZhbHVlLnBhaXItPmZpcnN0KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIHRleHQgKz0g
IiAiOwotICAgICAgICAgICAgdGV4dCArPSBtX3ZhbHVlLnBhaXItPnNlY29uZCgpLT5jc3NUZXh0
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAgICAgICAgY2FzZSBDU1Nf
REFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgICAgIGZvciAoRGFzaGJvYXJkUmVnaW9uKiByZWdp
b24gPSBnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+
bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICJkYXNoYm9hcmQtcmVnaW9u
KCI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fbGFiZWw7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCAr
PSAiIGNpcmNsZSAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3Rh
bmdsZSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIHJlY3RhbmdsZSAiOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgdGV4dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICAg
ICAgdGV4dCArPSByZWdpb24tPnJpZ2h0KCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAg
ICAgICB0ZXh0ICs9IHJlZ2lvbi0+Ym90dG9tKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAg
ICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICAg
ICAgdGV4dCArPSAiKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRp
ZgotICAgIH0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVjdEltcGw6
On5SZWN0SW1wbCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhaXI6On5QYWlyKCkKLXsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJp
bmcmIHVybCwgU3R5bGVCYXNlICpzdHlsZSkKLSAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKHVybCwg
Q1NTX1VSSSksIG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKLXsKLX0KLQotQ1NT
SW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1ZSgpCi0gICAgOiBDU1NQcmltaXRpdmVWYWx1ZShDU1Nf
VkFMX05PTkUpLCBtX2ltYWdlKDApLCBtX2FjY2Vzc2VkSW1hZ2UodHJ1ZSkKLXsKLX0KLQotQ1NT
SW1hZ2VWYWx1ZTo6fkNTU0ltYWdlVmFsdWUoKQotewotICAgIGlmIChtX2ltYWdlKQotICAgICAg
ICBtX2ltYWdlLT5kZXJlZih0aGlzKTsKLX0KLQotQ2FjaGVkSW1hZ2UqIENTU0ltYWdlVmFsdWU6
OmltYWdlKERvY0xvYWRlciogbG9hZGVyKQotewotICAgIGlmICghbV9hY2Nlc3NlZEltYWdlKSB7
Ci0gICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGxvYWRlcikK
LSAgICAgICAgICAgIG1faW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZShnZXRTdHJpbmdWYWx1
ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pbWFnZSA9IENhY2hlOjpyZXF1ZXN0
SW1hZ2UoMCwgZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9pbWFn
ZSkKLSAgICAgICAgICAgIG1faW1hZ2UtPnJlZih0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG1faW1hZ2U7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NCb3JkZXJJbWFnZVZh
bHVlOjpDU1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4gaW1hZ2Us
Ci0gICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4gaW1hZ2VSZWN0LCBpbnQgaG9yaXpvbnRhbFJ1bGUs
IGludCB2ZXJ0aWNhbFJ1bGUpCi0gICAgOiBtX2ltYWdlKGltYWdlKSwgbV9pbWFnZVNsaWNlUmVj
dChpbWFnZVJlY3QpCi0gICAgLCBtX2hvcml6b250YWxTaXplUnVsZShob3Jpem9udGFsUnVsZSks
IG1fdmVydGljYWxTaXplUnVsZSh2ZXJ0aWNhbFJ1bGUpCi17Ci19Ci0KLVN0cmluZyBDU1NCb3Jk
ZXJJbWFnZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAvLyBJbWFnZSBmaXJzdC4KLSAg
ICBTdHJpbmcgdGV4dChtX2ltYWdlLT5jc3NUZXh0KCkpOwotICAgIHRleHQgKz0gIiAiOwotICAg
IAotICAgIC8vIE5vdyB0aGUgcmVjdCwgYnV0IGl0IGlzbid0IHJlYWxseSBhIHJlY3QsIHNvIHdl
IGR1bXAgbWFudWFsbHkKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPnRvcCgpLT5jc3NU
ZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2ltYWdlU2xpY2VSZWN0LT5y
aWdodCgpLT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2ltYWdl
U2xpY2VSZWN0LT5ib3R0b20oKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAgIHRl
eHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0gICAgCi0gICAgLy8g
Tm93IHRoZSBrZXl3b3Jkcy4KLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IENTU1ByaW1p
dGl2ZVZhbHVlKG1faG9yaXpvbnRhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAi
ICI7Ci0gICAgdGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX3ZlcnRpY2FsU2l6ZVJ1bGUpLmNz
c1RleHQoKTsKLQotICAgIHJldHVybiB0ZXh0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
Rm9udEZhbWlseVZhbHVlOjpGb250RmFtaWx5VmFsdWUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYg
c3RyaW5nKQotICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUoU3RyaW5nKCksIENTU19TVFJJTkcpCi17
Ci0gICAgc3RhdGljIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uIHBhcmVuUmVnKCIgXFwoLipcXCkk
Iik7Ci0gICAgc3RhdGljIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uIGJyYWNlUmVnKCIgXFxbLipc
XF0kIik7Ci0KLSAgICBwYXJzZWRGb250TmFtZSA9IHN0cmluZzsKLSAgICAvLyBhIGxhbmd1YWdl
IHRhZyBpcyBvZnRlbiBhZGRlZCBpbiBicmFjZXMgYXQgdGhlIGVuZC4gUmVtb3ZlIGl0LgotICAg
IHBhcnNlZEZvbnROYW1lLnJlcGxhY2UocGFyZW5SZWcsICIiKTsKLSAgICAvLyByZW1vdmUgW1hm
dF0gcXVhbGlmaWVycwotICAgIHBhcnNlZEZvbnROYW1lLnJlcGxhY2UoYnJhY2VSZWcsICIiKTsK
LX0KLQotU3RyaW5nIEZvbnRGYW1pbHlWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHF1b3RlU3RyaW5nSWZOZWVkZWQocGFyc2VkRm9udE5hbWUpOwotfQotCiBTdHJpbmcgRm9u
dFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICAvLyBmb250IHZhcmlhbnQgd2VpZ2h0IHNp
emUgLyBsaW5lLWhlaWdodCBmYW1pbHkgCiAKICAgICBTdHJpbmcgcmVzdWx0KCIiKTsKIAotICAg
IGlmIChzdHlsZSkgeworICAgIGlmIChzdHlsZSkKICAgICAgICAgcmVzdWx0ICs9IHN0eWxlLT5j
c3NUZXh0KCk7Ci0gICAgfQogICAgIGlmICh2YXJpYW50KSB7CiAgICAgICAgIGlmICghcmVzdWx0
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc3VsdCArPSAiICI7CkBAIC0xMzA2LDUwICs2NSw0
IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLQotLy8gVXNlZCBmb3IgdGV4dC1zaGFk
b3cgYW5kIGJveC1zaGFkb3cKLVNoYWRvd1ZhbHVlOjpTaGFkb3dWYWx1ZShQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBfeCwKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBf
eSwKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfYmx1ciwKLSAgICBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfY29sb3IpCi0gICAgOiB4KF94KSwgeShfeSksIGJsdXIo
X2JsdXIpLCBjb2xvcihfY29sb3IpCi17Ci19Ci0KLVN0cmluZyBTaGFkb3dWYWx1ZTo6Y3NzVGV4
dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHRleHQoIiIpOwotCi0gICAgaWYgKGNvbG9yKQotICAg
ICAgICB0ZXh0ICs9IGNvbG9yLT5jc3NUZXh0KCk7Ci0gICAgaWYgKHgpIHsKLSAgICAgICAgaWYg
KCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0
ICs9IHgtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHkpIHsKLSAgICAgICAgaWYgKCF0ZXh0
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9IHkt
PmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKGJsdXIpIHsKLSAgICAgICAgaWYgKCF0ZXh0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9IGJsdXIt
PmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotU3RyaW5nIENTU1By
b3BlcnR5Ojpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKGlk
KCkpICsgIjogIiArIG1fdmFsdWUtPmNzc1RleHQoKQotICAgICAgICArIChpc0ltcG9ydGFudCgp
ID8gIiAhaW1wb3J0YW50IiA6ICIiKSArICI7ICI7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25z
dCBDU1NQcm9wZXJ0eSAmYSwgY29uc3QgQ1NTUHJvcGVydHkgJmIpCi17Ci0gICAgcmV0dXJuIGEu
bV9pZCA9PSBiLm1faWQgJiYgYS5tX2ltcG9ydGFudCA9PSBiLm1faW1wb3J0YW50ICYmIGEubV92
YWx1ZSA9PSBiLm1fdmFsdWU7Ci19Ci0KIH0KSW5kZXg6IGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJKHJldmlzaW9uIDE0NDA2
KQorKysgY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCAr
MjQsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9y
LmgiCiAKKyNpbmNsdWRlICJDU1NCb3JkZXJJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1h
Z2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NNZWRp
YVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKKyNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKKyNpbmNsdWRlICJGb250RmFtaWx5VmFs
dWUuaCIKKyNpbmNsdWRlICJGb250VmFsdWUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCkBAIC0zNiwxMCAr
NDcsMTMgQEAKICNpbmNsdWRlICJIaXN0b3J5LmgiCiAjaW5jbHVkZSAiS1dRS0hUTUxTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRl
ICJSZWN0SW1wbC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU3R5bGVT
aGVldExpc3QuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogI2luY2x1ZGUg
ImxvYWRlci5oIgorI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKQEAgLTIzMDksOSArMjMyMyw5IEBACiAgICAgY2FzZSBDU1NfUFJPUF9MSVNUX1NUWUxF
X0lNQUdFOgogICAgIHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGlzdFN0
eWxlSW1hZ2UsIExpc3RTdHlsZUltYWdlKQotICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKSBy
ZXR1cm47Ci0gICAgICAgIHN0eWxlLT5zZXRMaXN0U3R5bGVJbWFnZShzdGF0aWNfY2FzdDxDU1NJ
bWFnZVZhbHVlICo+KHByaW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLT5pbWFnZShlbGVtZW50LT5kb2N1bWVudCgpLT5kb2NMb2FkZXIoKSkpOworICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdHls
ZS0+c2V0TGlzdFN0eWxlSW1hZ2Uoc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHByaW1pdGl2
ZVZhbHVlKS0+aW1hZ2UoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBjc3MvQ1NTUGFnZVJ1bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGNzcy9DU1NQYWdlUnVsZS5jcHAJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU1BhZ2VS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjQ1ICsyMCwxMyBAQAogICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAog
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgImNzc19ydWxlaW1wbC5oIgorI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCiAK
LSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKLSNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVk
ZSAiTWVkaWFMaXN0LmgiCi0jaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0jaW5jbHVkZSA8S1VSTC5o
PgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotQ1NTU3R5bGVTaGVldCogQ1NTUnVsZTo6cGFyZW50U3R5bGVTaGVldCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNDU1NTdHlsZVNoZWV0
KCkpID8gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLUNT
U1J1bGUqIENTU1J1bGU6OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiAocGFyZW50
KCkgJiYgcGFyZW50KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENTU1J1bGUqPihwYXJlbnQo
KSkgOiAwOwotfQotCi1TdHJpbmcgQ1NTUnVsZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8g
IyMjCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIENTU1J1bGU6OnNldENzc1RleHQo
U3RyaW5nIC8qc3RyKi8pCi17Ci0gICAgLy8gIyMjCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1DU1NGb250RmFjZVJ1bGU6OkNTU0ZvbnRGYWNlUnVsZShTdHlsZUJhc2UgKnBhcmVudCkK
LSAgICA6IENTU1J1bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9IEZPTlRfRkFDRV9SVUxFOwot
fQotCi1DU1NGb250RmFjZVJ1bGU6On5DU1NGb250RmFjZVJ1bGUoKQotewotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1DU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSog
cGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlzdCogbWVkaWEpCi0gICAgOiBDU1NS
dWxlKHBhcmVudCkKLSAgICAsIG1fc3RySHJlZihocmVmKQotICAgICwgbV9sc3RNZWRpYShtZWRp
YSkKLSAgICAsIG1fY2FjaGVkU2hlZXQoMCkKLSAgICAsIG1fbG9hZGluZyhmYWxzZSkKLXsKLSAg
ICBtX3R5cGUgPSBJTVBPUlRfUlVMRTsKLQotICAgIGlmIChtX2xzdE1lZGlhKQotICAgICAgICBt
X2xzdE1lZGlhLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBtX2xzdE1lZGlh
ID0gbmV3IE1lZGlhTGlzdCh0aGlzLCBTdHJpbmcoKSk7Ci19Ci0KLUNTU0ltcG9ydFJ1bGU6On5D
U1NJbXBvcnRSdWxlKCkKLXsKLSAgICBpZiAobV9sc3RNZWRpYSkKLSAgICAgICAgbV9sc3RNZWRp
YS0+c2V0UGFyZW50KDApOwotICAgIGlmIChtX3N0eWxlU2hlZXQpCi0gICAgICAgIG1fc3R5bGVT
aGVldC0+c2V0UGFyZW50KDApOwotICAgIGlmIChtX2NhY2hlZFNoZWV0KQotICAgICAgICBtX2Nh
Y2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKLX0KLQotdm9pZCBDU1NJbXBvcnRSdWxlOjpzZXRTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyAmdXJsLCBjb25zdCBTdHJpbmcgJnNoZWV0KQotewotICAgIGlm
IChtX3N0eWxlU2hlZXQpCi0gICAgICAgIG1fc3R5bGVTaGVldC0+c2V0UGFyZW50KDApOwotICAg
IG1fc3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIHVybCk7Ci0KLSAgICBDU1NT
dHlsZVNoZWV0ICpwYXJlbnQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgbV9zdHlsZVNoZWV0
LT5wYXJzZVN0cmluZyhzaGVldCwgIXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBhcnNpbmco
KSk7Ci0gICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0KLSAgICBjaGVja0xvYWRlZCgpOwotfQotCi1i
b29sIENTU0ltcG9ydFJ1bGU6OmlzTG9hZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbG9h
ZGluZyB8fCAobV9zdHlsZVNoZWV0ICYmIG1fc3R5bGVTaGVldC0+aXNMb2FkaW5nKCkpOwotfQot
Ci12b2lkIENTU0ltcG9ydFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCgpCi17Ci0gICAgU3R5bGVC
YXNlKiByb290ID0gdGhpczsKLSAgICBTdHlsZUJhc2UqIHBhcmVudDsKLSAgICB3aGlsZSAoKHBh
cmVudCA9IHJvb3QtPnBhcmVudCgpKSkKLSAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAo
IXJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jTG9hZGVy
KiBkb2NMb2FkZXIgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvY0xvYWRl
cigpOwotICAgIGlmICghZG9jTG9hZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcg
YWJzSHJlZiA9IG1fc3RySHJlZjsKLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBh
cmVudFN0eWxlU2hlZXQoKTsKLSAgICBpZiAoIXBhcmVudFNoZWV0LT5ocmVmKCkuaXNOdWxsKCkp
Ci0gICAgICAgIC8vIHVzZSBwYXJlbnQgc3R5bGVoZWV0J3MgVVJMIGFzIHRoZSBiYXNlIFVSTAot
ICAgICAgICBhYnNIcmVmID0gS1VSTChwYXJlbnRTaGVldC0+aHJlZigpLmRlcHJlY2F0ZWRTdHJp
bmcoKSwgbV9zdHJIcmVmLmRlcHJlY2F0ZWRTdHJpbmcoKSkudXJsKCk7Ci0KLSAgICAvLyBDaGVj
ayBmb3IgYSBjeWNsZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5
bGVzaGVldAotICAgIC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRo
ZW4ganVzdCBiYWlsLgotICAgIGZvciAocGFyZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVCYXNlKj4o
dGhpcyktPnBhcmVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpCi0gICAg
ICAgIGlmIChhYnNIcmVmID09IHBhcmVudC0+YmFzZVVSTCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIC8vICMjIyBwYXNzIGNvcnJlY3QgY2hhcnNldCBoZXJlISEKLSAgICBtX2Nh
Y2hlZFNoZWV0ID0gZG9jTG9hZGVyLT5yZXF1ZXN0U3R5bGVTaGVldChhYnNIcmVmLCBEZXByZWNh
dGVkU3RyaW5nOjpudWxsKTsKLSAgICBpZiAobV9jYWNoZWRTaGVldCkgewotICAgICAgICBtX2xv
YWRpbmcgPSB0cnVlOwotICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7Ci0gICAgfQot
fQotCi1TdHJpbmcgQ1NTSW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5n
IHJlc3VsdCA9ICJAaW1wb3J0IHVybChcIiI7Ci0gICAgcmVzdWx0ICs9IG1fc3RySHJlZjsKLSAg
ICByZXN1bHQgKz0gIlwiKSI7Ci0KLSAgICBpZiAobV9sc3RNZWRpYSkgewotICAgICAgICByZXN1
bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gbV9sc3RNZWRpYS0+bWVkaWFUZXh0KCk7Ci0g
ICAgfQotICAgIHJlc3VsdCArPSAiOyI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotQ1NTTWVkaWFSdWxlOjpDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAq
cGFyZW50LCBNZWRpYUxpc3QgKm1lZGlhTGlzdCwgQ1NTUnVsZUxpc3QgKnJ1bGVMaXN0ICkKLSAg
ICA6ICAgQ1NTUnVsZSggcGFyZW50ICkKLXsKLSAgICBtX3R5cGUgPSBNRURJQV9SVUxFOwotICAg
IG1fbHN0TWVkaWEgPSBtZWRpYUxpc3Q7Ci0gICAgbV9sc3RDU1NSdWxlcyA9IHJ1bGVMaXN0Owot
fQotCi1DU1NNZWRpYVJ1bGU6OkNTU01lZGlhUnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICA6
ICAgQ1NTUnVsZSggcGFyZW50ICkKLXsKLSAgICBtX3R5cGUgPSBNRURJQV9SVUxFOwotICAgIG1f
bHN0TWVkaWEgPSAwOwotICAgIG1fbHN0Q1NTUnVsZXMgPSBuZXcgQ1NTUnVsZUxpc3QoKTsKLX0K
LQotQ1NTTWVkaWFSdWxlOjpDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50LCBjb25zdCBT
dHJpbmcgJm1lZGlhICkKLTogICBDU1NSdWxlKCBwYXJlbnQgKQotewotICAgIG1fdHlwZSA9IE1F
RElBX1JVTEU7Ci0gICAgbV9sc3RNZWRpYSA9IG5ldyBNZWRpYUxpc3QoIHRoaXMsIG1lZGlhICk7
Ci0gICAgbV9sc3RDU1NSdWxlcyA9IG5ldyBDU1NSdWxlTGlzdCgpOwotfQotCi1DU1NNZWRpYVJ1
bGU6On5DU1NNZWRpYVJ1bGUoKQotewotICAgIGlmKG1fbHN0TWVkaWEpCi0gICAgICAgIG1fbHN0
TWVkaWEtPnNldFBhcmVudCgwKTsKLQotICAgIGludCBsZW5ndGggPSBtX2xzdENTU1J1bGVzLT5s
ZW5ndGgoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICBt
X2xzdENTU1J1bGVzLT5pdGVtKGkpLT5zZXRQYXJlbnQoMCk7Ci19Ci0KLXVuc2lnbmVkIENTU01l
ZGlhUnVsZTo6YXBwZW5kKCBDU1NSdWxlICpydWxlICkKLXsKLSAgICBpZiAoIXJ1bGUpIHsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcnVsZS0+c2V0UGFyZW50KHRoaXMpOwotICAg
IHJldHVybiBtX2xzdENTU1J1bGVzLT5pbnNlcnRSdWxlKCBydWxlLCBtX2xzdENTU1J1bGVzLT5s
ZW5ndGgoKSApOwotfQotCi11bnNpZ25lZCBDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUoY29uc3Qg
U3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBDU1NQYXJzZXIgcCh1c2VTdHJp
Y3RQYXJzaW5nKCkpOwotICAgIFJlZlB0cjxDU1NSdWxlPiBuZXdSdWxlID0gcC5wYXJzZVJ1bGUo
cGFyZW50U3R5bGVTaGVldCgpLCBydWxlKTsKLSAgICBpZiAoIW5ld1J1bGUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIG5ld1J1bGUtPnNldFBhcmVudCh0aGlzKTsKLSAgICByZXR1cm4gbV9sc3RD
U1NSdWxlcy0+aW5zZXJ0UnVsZShuZXdSdWxlLmdldCgpLCBpbmRleCk7Ci19Ci0KLVN0cmluZyBD
U1NNZWRpYVJ1bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiQG1l
ZGlhICI7Ci0gICAgaWYgKG1fbHN0TWVkaWEpIHsKLSAgICAgICAgcmVzdWx0ICs9IG1fbHN0TWVk
aWEtPm1lZGlhVGV4dCgpOwotICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgIH0KLSAgICByZXN1
bHQgKz0gInsgXG4iOwotICAgIAotICAgIGlmIChtX2xzdENTU1J1bGVzKSB7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbiA9IG1fbHN0Q1NTUnVsZXMtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICAiOwot
ICAgICAgICAgICAgcmVzdWx0ICs9IG1fbHN0Q1NTUnVsZXMtPml0ZW0oaSktPmNzc1RleHQoKTsK
LSAgICAgICAgICAgIHJlc3VsdCArPSAiXG4iOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IHJlc3VsdCArPSAifSI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLUNTU1J1bGVMaXN0OjpDU1NSdWxlTGlzdChTdHlsZUxpc3QgKmxzdCkKLXsKLSAg
ICBpZiAobHN0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbiA9IGxzdC0+bGVuZ3RoKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgU3R5
bGVCYXNlICpzdHlsZSA9IGxzdC0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+aXNS
dWxlKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHls
ZSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1DU1NSdWxlTGlzdDo6fkNTU1J1bGVMaXN0KCkK
LXsKLSAgICBDU1NSdWxlKiBydWxlOwotICAgIHdoaWxlICggIW1fbHN0Q1NTUnVsZXMuaXNFbXB0
eSgpICYmICggcnVsZSA9IG1fbHN0Q1NTUnVsZXMudGFrZSggMCApICkgKQotICAgICAgICBydWxl
LT5kZXJlZigpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ1NTUGFnZVJ1bGU6OkNT
U1BhZ2VSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQogICAgIDogQ1NTUnVsZShwYXJlbnQpCiB7CkBA
IC0yODAsODcgKzQ4LDQgQEAKICAgICAvLyAjIyMKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotQ1NTU3R5bGVSdWxlOjpDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiBD
U1NSdWxlKHBhcmVudCkKLXsKLSAgICBtX3R5cGUgPSBTVFlMRV9SVUxFOwotICAgIG1fc2VsZWN0
b3IgPSAwOwotfQotCi1DU1NTdHlsZVJ1bGU6On5DU1NTdHlsZVJ1bGUoKQotewotICAgIGlmICht
X3N0eWxlKQotICAgICAgICBtX3N0eWxlLT5zZXRQYXJlbnQoMCk7Ci0gICAgZGVsZXRlIG1fc2Vs
ZWN0b3I7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZVJ1bGU6OnNlbGVjdG9yVGV4dCgpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fc2VsZWN0b3IpIHsKLSAgICAgICAgU3RyaW5nIHN0cjsKLSAgICAgICAgZm9y
IChDU1NTZWxlY3RvciAqcyA9IG1fc2VsZWN0b3I7IHM7IHMgPSBzLT5uZXh0KCkpIHsKLSAgICAg
ICAgICAgIGlmIChzICE9IG1fc2VsZWN0b3IpCi0gICAgICAgICAgICAgICAgc3RyICs9ICIsICI7
Ci0gICAgICAgICAgICBzdHIgKz0gcy0+c2VsZWN0b3JUZXh0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHN0cjsKLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIENT
U1N0eWxlUnVsZTo6c2V0U2VsZWN0b3JUZXh0KFN0cmluZyAvKnN0ciovKQotewotICAgIC8vICMj
IwotfQotCi1TdHJpbmcgQ1NTU3R5bGVSdWxlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJp
bmcgcmVzdWx0ID0gc2VsZWN0b3JUZXh0KCk7Ci0gICAgCi0gICAgcmVzdWx0ICs9ICIgeyAiOwot
ICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7Ci0gICAgcmVzdWx0ICs9ICJ9IjsKLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIENTU1N0eWxlUnVsZTo6cGFyc2VTdHJp
bmcoIGNvbnN0IFN0cmluZyAmLypzdHJpbmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENTU1N0eWxlUnVsZTo6c2V0RGVjbGFyYXRpb24oUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUpCi17Ci0gICAgbV9zdHls
ZSA9IHN0eWxlOwotfQotCi12b2lkIENTU1J1bGVMaXN0OjpkZWxldGVSdWxlICggdW5zaWduZWQg
aW5kZXggKQotewotICAgIENTU1J1bGUgKnJ1bGUgPSBtX2xzdENTU1J1bGVzLnRha2UoIGluZGV4
ICk7Ci0gICAgaWYoIHJ1bGUgKQotICAgICAgICBydWxlLT5kZXJlZigpOwotICAgIGVsc2UKLSAg
ICAgICAgOyAvLyAjIyMgVGhyb3cgSU5ERVhfU0laRV9FUlIgZXhjZXB0aW9uIGhlcmUgKFRPRE8p
Ci19Ci0KLXZvaWQgQ1NTUnVsZUxpc3Q6OmFwcGVuZCggQ1NTUnVsZSAqcnVsZSApCi17Ci0gICAg
aW5zZXJ0UnVsZSggcnVsZSwgbV9sc3RDU1NSdWxlcy5jb3VudCgpICkgOwotfQotCi11bnNpZ25l
ZCBDU1NSdWxlTGlzdDo6aW5zZXJ0UnVsZSggQ1NTUnVsZSAqcnVsZSwgdW5zaWduZWQgaW5kZXgg
KQotewotICAgIGlmKCBydWxlICYmIG1fbHN0Q1NTUnVsZXMuaW5zZXJ0KCBpbmRleCwgcnVsZSAp
ICkKLSAgICB7Ci0gICAgICAgIHJ1bGUtPnJlZigpOwotICAgICAgICByZXR1cm4gaW5kZXg7Ci0g
ICAgfQotCi0gICAgLy8gIyMjIFNob3VsZCB0aHJvdyBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24g
aW5zdGVhZCEgKFRPRE8pCi0gICAgcmV0dXJuIDA7Ci19Ci0KIH0KSW5kZXg6IGNzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAko
cmV2aXNpb24gMTQ0MDApCisrKyBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOSw1OSArMTksMTkgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJjc3NfdmFs
dWVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKIAotI2luY2x1ZGUgIkNh
Y2hlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgImNzc3BhcnNlci5oIgotI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVk
ZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ291bnRl
ci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJSZWd1bGFyRXhw
cmVzc2lvbi5oIgotCi0jaWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJrc3ZnY3NzcHJvcGVydGll
cy5oIgotI2VuZGlmCi0KLS8vIE5vdCBpbiBhbnkgaGVhZGVyLCBzbyBqdXN0IGRlY2xhcmUgaXQg
aGVyZSBmb3Igbm93LgotV2ViQ29yZTo6U3RyaW5nIGdldFByb3BlcnR5TmFtZSh1bnNpZ25lZCBz
aG9ydCBpZCk7CisjaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJyZW5kZXJfc3R5bGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBEZWZpbmVkIGluIENTU0dyYW1tYXIueSwgYnV0
IG5vdCBpbiBhbnkgaGVhZGVyLCBzbyBqdXN0IGRlY2xhcmUgaXQgaGVyZSBmb3Igbm93LgotaW50
IGdldFByb3BlcnR5SUQoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLQotc3RhdGljIGludCBw
cm9wZXJ0eUlEKGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBjaGFyIGJ1ZmZlclttYXhDU1NQcm9w
ZXJ0eU5hbWVMZW5ndGhdOwotCi0gICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKLSAgICBp
ZiAobGVuID4gbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
YyA9IHNbaV07Ci0gICAgICAgIGlmIChjID09IDAgfHwgYyA+PSAweDdGKQotICAgICAgICAgICAg
cmV0dXJuIDA7IC8vIGlsbGVnYWwgY2hhcmFjdGVyCi0gICAgICAgIGJ1ZmZlcltpXSA9IGM7Ci0g
ICAgfQotCi0gICAgaW50IGlkID0gZ2V0UHJvcGVydHlJRChidWZmZXIsIGxlbik7Ci0jaWYgU1ZH
X1NVUFBPUlQKLSAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgaWQgPSBTVkc6OmdldFNWR0NTU1By
b3BlcnR5SUQoYnVmZmVyLCBsZW4pOwotI2VuZGlmCi0gICAgcmV0dXJuIGlkOwotfQotCi0KIC8v
IFF1b3RlcyB0aGUgc3RyaW5nIGlmIGl0IG5lZWRzIHF1b3RpbmcuCiAvLyBXZSB1c2Ugc2luZ2xl
IHF1b3RlcyBmb3Igbm93IGJlYXVzZSBtYXJrdXAuY3BwIHVzZXMgZG91YmxlIHF1b3Rlcy4KIHN0
YXRpYyBTdHJpbmcgcXVvdGVTdHJpbmdJZk5lZWRlZChjb25zdCBTdHJpbmcgJnN0cmluZykKQEAg
LTg4LDYxOSArNDgsNiBAQAogICAgIHJldHVybiAiJyIgKyBzICsgIiciOwogfQogCi1DU1NTdHls
ZURlY2xhcmF0aW9uOjpDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6
IFN0eWxlQmFzZShwYXJlbnQpCi17Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNT
dHlsZURlY2xhcmF0aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9w
ZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsK
LSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJv
cElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFs
dWUocHJvcElEKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
UHJpb3JpdHkoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9
IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BJRCkgPyAi
aW1wb3J0YW50IiA6ICIiOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHBy
b3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIGludCBzaG9ydGhhbmRJRCA9IGdldFByb3BlcnR5U2hv
cnRoYW5kKHByb3BJRCk7Ci0gICAgaWYgKCFzaG9ydGhhbmRJRCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc2hvcnRoYW5kSUQpOwotfQotCi1i
b29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcg
JnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5h
bWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IGlzUHJvcGVydHlJbXBsaWNpdChwcm9wSUQpOwotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElE
KSAvLyBzZXQgZXhjZXB0aW9uPwotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQg
PSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gLTE7Ci0gICAgc2V0UHJv
cGVydHkocHJvcElELCB2YWx1ZSwgaW1wb3J0YW50LCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NTdHls
ZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVy
dHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wSUQsIGVjKTsKLX0KLQotYm9vbCBDU1NTdHlsZURl
Y2xhcmF0aW9uOjppc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsK
LSAgICByZXR1cm4gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24oKQotICAgIDogbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpw
YXJlbnQpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQotewot
fQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oQ1NTUnVsZSAqcGFyZW50LCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5
PiAmdmFsdWVzKQotICAgIDogQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXJlbnQpLCBtX3ZhbHVlcyh2
YWx1ZXMpLCBtX25vZGUoMCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRl
IHByb3BlcnRpZXMuCi19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQsIGNvbnN0IENTU1Byb3BlcnR5ICogY29u
c3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQotICAgIDogQ1NTU3R5bGVEZWNsYXJh
dGlvbihwYXJlbnQpLCBtX25vZGUoMCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsK
LSAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRlIHByb3BlcnRpZXMuCi19Ci0KLUNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6b3Bl
cmF0b3I9KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBvKQotewotICAgIC8vIGRv
bid0IGF0dGFjaCBpdCB0byB0aGUgc2FtZSBub2RlLCBqdXN0IGxlYXZlIHRoZSBjdXJyZW50IG1f
bm9kZSB2YWx1ZQotICAgIG1fdmFsdWVzID0gby5tX3ZhbHVlczsKLSAgICByZXR1cm4gKnRoaXM7
Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1
ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICBpZiAodmFsdWUpCi0gICAgICAg
IHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOwotCi0gICAgLy8gU2hvcnRoYW5kIGFuZCA0LXZhbHVl
cyBwcm9wZXJ0aWVzCi0gICAgc3dpdGNoICggcHJvcGVydHlJRCApIHsKLSAgICBjYXNlIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfUE9TSVRJT046Ci0gICAgewotICAgICAgICAvLyAjIyBJcyB0aGlzIGNv
cnJlY3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5nCi0gICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OX1gs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CQUNLR1JPVU5E
X1BPU0lUSU9OX1kgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0
aWVzLCAyICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORDoKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzVdID0geyBDU1NfUFJPUF9CQUNLR1JPVU5EX0lN
QUdFLCBDU1NfUFJPUF9CQUNLR1JPVU5EX1JFUEVBVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0JBQ0tHUk9VTkRfQVRUQUNITUVOVCwgQ1NTX1BST1BfQkFD
S0dST1VORF9QT1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZh
bHVlKCBwcm9wZXJ0aWVzLCA1ICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSOgot
ICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRF
Ul9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXRT
aG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9Q
X0JPUkRFUl9UT1A6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsg
Q1NTX1BST1BfQk9SREVSX1RPUF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9UT1BfQ09M
T1J9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsK
LSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfUklHSFQ6Ci0gICAgewotICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1dJRFRILCBD
U1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NfUFJPUF9CT1JERVJfUklHSFRfQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0
U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10g
PSB7IENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgsIENTU19QUk9QX0JPUkRFUl9CT1RUT01f
U1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JE
RVJfQk9UVE9NX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9w
ZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0xFRlQ6Ci0gICAg
ewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0xF
RlRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0xFRlRfQ09MT1J9OwotICAgICAgICBy
ZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NfUFJPUF9PVVRMSU5FOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
M10gPSB7IENTU19QUk9QX09VVExJTkVfV0lEVEgsIENTU19QUk9QX09VVExJTkVfU1RZTEUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9PVVRMSU5FX0NPTE9S
IH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwot
ICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9DT0xPUjoKLSAgICB7Ci0gICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX0NPTE9SLCBDU1Nf
UFJPUF9CT1JERVJfUklHSFRfQ09MT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX0NPTE9SLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9D
T0xPUiB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0K
LSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9XSURUSDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfUFJPUF9C
T1JERVJfUklHSFRfV0lEVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCB9
OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBj
YXNlIENTU19QUk9QX0JPUkRFUl9TVFlMRToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCBDU1NfUFJPUF9CT1JERVJf
UklHSFRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSB9OwotICAg
ICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENT
U19QUk9QX01BUkdJTjoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0g
eyBDU1NfUFJPUF9NQVJHSU5fVE9QLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBDU1NfUFJP
UF9NQVJHSU5fTEVGVCB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyAp
OwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX1BBRERJTkc6Ci0gICAgewotICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BST1BfUEFERElOR19UT1AsIENTU19QUk9QX1BB
RERJTkdfUklHSFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9QQURESU5HX0JPVFRPTSwgQ1NTX1BST1BfUEFERElOR19MRUZUIH07Ci0gICAgICAgIHJldHVy
biBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTElT
VF9TVFlMRToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1Nf
UFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19QUk9QX0xJU1RfU1RZTEVfUE9TSVRJT04sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9MSVNUX1NUWUxFX0lNQUdF
IH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwot
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmdldDRWYWx1ZXMoIGNvbnN0IGludCogcHJvcGVydGllcyApIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkg
ewotICAgICAgICBpZiAoIWlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkgewotICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydGllc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKSAvLyBhcHBhcmVudGx5IGFsbCA0
IHByb3BlcnRpZXMgbXVzdCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAg
cmVzICs9ICIgIjsKLSAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0U2hvcnRIYW5kVmFsdWUoIGNvbnN0IGludCogcHJvcGVydGllcywgaW50
IG51bWJlciApIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlcjsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3Bl
cnRpZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgeyAv
LyBUT0RPIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZSBpZiAhdmFsdWUKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlcy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAg
ICAgICAgICAgICByZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVy
dHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuZnJvbUxhc3QoKTsgaXQgIT0gZW5kOyAtLWl0KQot
ICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5tX2lkKQotICAgICAgICAgICAgcmV0dXJu
ICgqaXQpLnZhbHVlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5
Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotCi0gICAgU3RyaW5n
IHZhbHVlOwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBl
bmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0
ID0gbV92YWx1ZXMuZnJvbUxhc3QoKTsgaXQgIT0gZW5kOyAtLWl0KQotICAgICAgICBpZiAocHJv
cGVydHlJRCA9PSAoKml0KS5tX2lkKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9ICgqaXQpLnZhbHVl
KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlbW92ZShpdCk7Ci0gICAgICAg
ICAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjbGVhcigpCi17Ci0gICAgbV92YWx1ZXMu
Y2xlYXIoKTsKLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnNldENoYW5nZWQoKQotewotICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgbV9u
b2RlLT5zZXRDaGFuZ2VkKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB0aGlzIHNob3Vs
ZCBiZSBmYWN0b3JlZCBiZXR0ZXIgYW5kIHRoZXJlCi0gICAgICAgIC8vIHNob3VsZCBiZSBhIHN1
YmNsYXNzIG9mIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uIGp1c3QKLSAgICAgICAgLy8gZm9y
IGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMgdGhhdCBoYW5kbGVzIHRoaXMKLSAgICAgICAgaWYg
KG1fbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkgJiYgdGhpcyA9PSBzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50ICo+KG1fbm9kZSktPmlubGluZVN0eWxlRGVjbCgpKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCAqPihtX25vZGUpLT5pbnZhbGlkYXRlU3R5bGVBdHRyaWJ1dGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vICMjIyBxdWljayZkaXJ0eSBoYWNr
IGZvciBLREUgMy4wLi4uIG1ha2UgdGhpcyBNVUNIIGJldHRlciEgKERpcmspCi0gICAgU3R5bGVC
YXNlICpyb290ID0gdGhpczsKLSAgICB3aGlsZSAoU3R5bGVCYXNlICpwYXJlbnQgPSByb290LT5w
YXJlbnQoKSkKLSAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNDU1NTdHls
ZVNoZWV0KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9j
KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAg
ICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAg
IGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0g
bV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJ
RCA9PSAoKml0KS5pZCgpKQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmlzSW1wb3J0YW50KCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChE
ZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgq
aXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuc2hvcnRoYW5kSUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzUHJv
cGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRl
ZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5pZCgp
KQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmlzSW1wbGljaXQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9y
dGFudCwgdHJ1ZSwgZWMpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgdHJ1ZSwgZWMpOwotfQotCi1ib29s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nICZ2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotCi0gICAgcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCk7Ci0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2VyLnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwg
dmFsdWUsIGltcG9ydGFudCk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKLSAgICB9IGVsc2UgaWYgKG5vdGlmeUNoYW5nZWQpCi0gICAgICAgIHNldENoYW5n
ZWQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlEKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSwgaW1wb3J0YW50KSk7Ci0gICAgaWYgKG5vdGlmeUNoYW5n
ZWQpCi0gICAgICAgIHNldENoYW5nZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0U3RyaW5nUHJvcGVydHkoaW50IHByb3BlcnR5
SWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlw
ZSwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0g
ICAgbV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZSwgdHlwZSksIGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0SW1hZ2VQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZVUkwsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SWQpOwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQcm9wZXJ0
eShwcm9wZXJ0eUlkLCBuZXcgQ1NTSW1hZ2VWYWx1ZShVUkwsIHRoaXMpLCBpbXBvcnRhbnQpKTsK
LSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nICZzdHlsZURlY2xhcmF0aW9uKQotewotICAg
IG1fdmFsdWVzLmNsZWFyKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5n
KCkpOwotICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHN0eWxlRGVjbGFyYXRpb24p
OwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICpwcm9wZXJ0
aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkgewotICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLT5p
ZCgpLCBmYWxzZSk7Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7Ci0g
ICAgfQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBz
ZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRk
Ci0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9s
bG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLX0KLQotdm9p
ZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0TGVuZ3RoUHJvcGVydHkoaW50IGlkLCBj
b25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCAvKiBtdWx0aUxlbmd0aCov
KQotewotICAgIGJvb2wgcGFyc2VNb2RlID0gdXNlU3RyaWN0UGFyc2luZygpOwotICAgIHNldFN0
cmljdFBhcnNpbmcoZmFsc2UpOwotICAgIHNldFByb3BlcnR5KGlkLCB2YWx1ZSwgaW1wb3J0YW50
KTsKLSAgICBzZXRTdHJpY3RQYXJzaW5nKHBhcnNlTW9kZSk7Ci19Ci0KLXVuc2lnbmVkIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zh
bHVlcy5jb3VudCgpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0
ZW0odW5zaWduZWQgaSkgY29uc3QKLXsKLSAgICBpZiAoaSA+PSBtX3ZhbHVlcy5jb3VudCgpKQot
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKG1fdmFs
dWVzW2ldLmlkKCkpOwotfQotCi1DU1NSdWxlICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRS
dWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUo
KSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLVN0cmluZyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5n
IHJlc3VsdCA9ICIiOwotICAgIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y
PENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHJlc3VsdCArPSAoKml0KS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIG1f
dmFsdWVzLmNsZWFyKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkp
OwotICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHRleHQpOwotICAgIC8vIEZJWE1F
OiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWVyZ2UoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24gKm90aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi17Ci0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBm
b3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG90
aGVyLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
Q1NTUHJvcGVydHkgJnByb3BlcnR5ID0gKml0OwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgaWYgKHZh
bHVlKSB7Ci0gICAgICAgICAgICBpZiAoIWFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS5p
ZCgpKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZhbHVlcy5hcHBlbmQocHJvcGVydHkpOwotICAg
IH0KLSAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0
Q2hhbmdlZCgpIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAot
ICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxv
dyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCi19Ci0KLXZvaWQg
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5
bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGVw
cmVjYXRlZFZhbHVlTGlzdDxpbnQ+IHByb3BlcnRpZXM7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdChzdHlsZS0+dmFsdWVzSXRlcmF0b3Io
KSk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVy
dHkgPSAqaXQ7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNT
U1ZhbHVlKHByb3BlcnR5LmlkKCkpOwotICAgICAgICBpZiAodmFsdWUgJiYgKHZhbHVlLT5jc3NU
ZXh0KCkgPT0gcHJvcGVydHkudmFsdWUoKS0+Y3NzVGV4dCgpKSkKLSAgICAgICAgICAgIHByb3Bl
cnRpZXMuYXBwZW5kKHByb3BlcnR5LmlkKCkpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKERlcHJl
Y2F0ZWRWYWx1ZUxpc3RJdGVyYXRvcjxpbnQ+IGl0KHByb3BlcnRpZXMuYmVnaW4oKSk7IGl0ICE9
IHByb3BlcnRpZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eSgq
aXQpOwotfQotCi0vLyBUaGlzIGlzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBj
b3B5IGluIHRoZSBjb3B5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKCkgZnVuY3Rpb24uCi0vLyBJdCBp
cyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIGluaGVyaXRlZCBDU1MgcHJvcGVydGll
cyBhbmQgdGhlCi0vLyBwcm9wZXJ0aWVzIGZvciB3aGljaCB3ZSBoYXZlIGEgY29tcHV0ZWQgaW1w
bGVtZW50YXRpb24gaW4gdGhpcyBmaWxlLgotY29uc3QgaW50IGluaGVyaXRhYmxlUHJvcGVydGll
c1tdID0gewotICAgIENTU19QUk9QX0JPUkRFUl9DT0xMQVBTRSwKLSAgICBDU1NfUFJPUF9CT1JE
RVJfU1BBQ0lORywKLSAgICBDU1NfUFJPUF9DT0xPUiwKLSAgICBDU1NfUFJPUF9GT05UX0ZBTUlM
WSwKLSAgICBDU1NfUFJPUF9GT05UX1NJWkUsCi0gICAgQ1NTX1BST1BfRk9OVF9TVFlMRSwKLSAg
ICBDU1NfUFJPUF9GT05UX1ZBUklBTlQsCi0gICAgQ1NTX1BST1BfRk9OVF9XRUlHSFQsCi0gICAg
Q1NTX1BST1BfTEVUVEVSX1NQQUNJTkcsCi0gICAgQ1NTX1BST1BfTElORV9IRUlHSFQsCi0gICAg
Q1NTX1BST1BfVEVYVF9BTElHTiwKLSAgICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfREVDT1JBVElP
TlNfSU5fRUZGRUNULAotICAgIENTU19QUk9QX1RFWFRfSU5ERU5ULAotICAgIENTU19QUk9QX19X
RUJLSVRfVEVYVF9TSVpFX0FESlVTVCwKLSAgICBDU1NfUFJPUF9URVhUX1RSQU5TRk9STSwKLSAg
ICBDU1NfUFJPUF9PUlBIQU5TLAotICAgIENTU19QUk9QX1dISVRFX1NQQUNFLAotICAgIENTU19Q
Uk9QX1dJRE9XUywKLSAgICBDU1NfUFJPUF9XT1JEX1NQQUNJTkcsCi19OwotCi1jb25zdCB1bnNp
Z25lZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXMgPSBzaXplb2YoaW5oZXJpdGFibGVQcm9wZXJ0
aWVzKSAvIHNpemVvZihpbmhlcml0YWJsZVByb3BlcnRpZXNbMF0pOwotCi0vLyBUaGlzIGlzIHRo
ZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRoZSBjb3B5QmxvY2tQcm9w
ZXJ0aWVzKCkgZnVuY3Rpb24uCi0vLyBJdCBpcyB0aGUgbGlzdCBvZiBDU1MgcHJvcGVydGllcyB0
aGF0IGFwcGx5IHNwZWNpYWxseSB0byBibG9jay1sZXZlbCBlbGVtZW50cy4KLXN0YXRpYyBjb25z
dCBpbnQgYmxvY2tQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfT1JQSEFOUywKLSAgICBD
U1NfUFJPUF9PVkVSRkxPVywgLy8gVGhpcyBjYW4gYmUgYWxzbyBiZSBhcHBsaWVkIHRvIHJlcGxh
Y2VkIGVsZW1lbnRzCi0gICAgQ1NTX1BST1BfUEFHRV9CUkVBS19BRlRFUiwKLSAgICBDU1NfUFJP
UF9QQUdFX0JSRUFLX0JFRk9SRSwKLSAgICBDU1NfUFJPUF9QQUdFX0JSRUFLX0lOU0lERSwKLSAg
ICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAgIENTU19QUk9QX1RFWFRfSU5ERU5ULAotICAgIENT
U19QUk9QX1dJRE9XUwotfTsKLQotY29uc3QgdW5zaWduZWQgbnVtQmxvY2tQcm9wZXJ0aWVzID0g
c2l6ZW9mKGJsb2NrUHJvcGVydGllcykgLyBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzWzBdKTsKLQot
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5
UHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9j
a1Byb3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1v
dmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChp
bmhlcml0YWJsZVByb3BlcnRpZXMsIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyk7Ci19Ci0KLVBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU1N0eWxlRGVjbGFyYXRpb246
OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBsaXN0OwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVl
LnJlbGVhc2UoKSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbigwLCBsaXN0KTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCAqc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICAgICAgbV92YWx1ZXMucmVtb3ZlKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgp
LCBmYWxzZSkpOwotICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKGNoYW5nZWQpCi0gICAgICAgIHNldENoYW5nZWQoKTsKLX0KLQotUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
Om1ha2VNdXRhYmxlKCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHko
KSBjb25zdAotewotICAgIHJldHVybiBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwg
bV92YWx1ZXMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi11bnNp
Z25lZCBzaG9ydCBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ1NTX0lOSEVSSVQ7Ci19Ci0KLVN0cmluZyBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3Nz
VGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJpbmhlcml0IjsKLX0KLQotdW5zaWduZWQgc2hv
cnQgQ1NTSW5pdGlhbFZhbHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAoteyAKLSAgICByZXR1cm4g
Q1NTX0lOSVRJQUw7IAotfQotCi1TdHJpbmcgQ1NTSW5pdGlhbFZhbHVlOjpjc3NUZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gImluaXRpYWwiOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUNTU1ZhbHVlTGlzdDo6fkNTU1ZhbHVlTGlzdCgpCi17Ci0gICAgZm9y
IChDU1NWYWx1ZSAqdmFsID0gbV92YWx1ZXMuZmlyc3QoKTsgdmFsOyB2YWwgPSBtX3ZhbHVlcy5u
ZXh0KCkpCi0gICAgICAgIHZhbC0+ZGVyZWYoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgQ1NTVmFs
dWVMaXN0Ojpjc3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfVkFMVUVfTElT
VDsKLX0KLQotdm9pZCBDU1NWYWx1ZUxpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPiB2
YWwpCi17Ci0gICAgbV92YWx1ZXMuYXBwZW5kKHZhbC5yZWxlYXNlKCkpOwotfQotCi1TdHJpbmcg
Q1NTVmFsdWVMaXN0Ojpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7
Ci0KLSAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Q1NTVmFsdWU+IGl0ZXJhdG9y
KG1fdmFsdWVzKTsgaXRlcmF0b3IuY3VycmVudCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGlm
ICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiLCAiOwotICAgICAg
ICByZXN1bHQgKz0gaXRlcmF0b3IuY3VycmVudCgpLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKCkKIHsKICAgICBtX3R5cGUg
PSAwOwpAQCAtMTE2NywxODkgKzUxNCw0IEBACiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLVJlY3RJbXBsOjp+UmVjdEltcGwoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Q
YWlyOjp+UGFpcigpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU0ltYWdlVmFsdWU6OkNTU0lt
YWdlVmFsdWUoY29uc3QgU3RyaW5nJiB1cmwsIFN0eWxlQmFzZSAqc3R5bGUpCi0gICAgOiBDU1NQ
cmltaXRpdmVWYWx1ZSh1cmwsIENTU19VUkkpLCBtX2ltYWdlKDApLCBtX2FjY2Vzc2VkSW1hZ2Uo
ZmFsc2UpCi17Ci19Ci0KLUNTU0ltYWdlVmFsdWU6OkNTU0ltYWdlVmFsdWUoKQotICAgIDogQ1NT
UHJpbWl0aXZlVmFsdWUoQ1NTX1ZBTF9OT05FKSwgbV9pbWFnZSgwKSwgbV9hY2Nlc3NlZEltYWdl
KHRydWUpCi17Ci19Ci0KLUNTU0ltYWdlVmFsdWU6On5DU1NJbWFnZVZhbHVlKCkKLXsKLSAgICBp
ZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+ZGVyZWYodGhpcyk7Ci19Ci0KLUNhY2hlZElt
YWdlKiBDU1NJbWFnZVZhbHVlOjppbWFnZShEb2NMb2FkZXIqIGxvYWRlcikKLXsKLSAgICBpZiAo
IW1fYWNjZXNzZWRJbWFnZSkgewotICAgICAgICBtX2FjY2Vzc2VkSW1hZ2UgPSB0cnVlOwotCi0g
ICAgICAgIGlmIChsb2FkZXIpCi0gICAgICAgICAgICBtX2ltYWdlID0gbG9hZGVyLT5yZXF1ZXN0
SW1hZ2UoZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faW1h
Z2UgPSBDYWNoZTo6cmVxdWVzdEltYWdlKDAsIGdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAK
LSAgICAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgICAgICBtX2ltYWdlLT5yZWYodGhpcyk7Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBtX2ltYWdlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Q1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVmUHRyPENT
U0ltYWdlVmFsdWU+IGltYWdlLAotICAgIFBhc3NSZWZQdHI8UmVjdEltcGw+IGltYWdlUmVjdCwg
aW50IGhvcml6b250YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKQotICAgIDogbV9pbWFnZShpbWFn
ZSksIG1faW1hZ2VTbGljZVJlY3QoaW1hZ2VSZWN0KQotICAgICwgbV9ob3Jpem9udGFsU2l6ZVJ1
bGUoaG9yaXpvbnRhbFJ1bGUpLCBtX3ZlcnRpY2FsU2l6ZVJ1bGUodmVydGljYWxSdWxlKQotewot
fQotCi1TdHJpbmcgQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAg
Ly8gSW1hZ2UgZmlyc3QuCi0gICAgU3RyaW5nIHRleHQobV9pbWFnZS0+Y3NzVGV4dCgpKTsKLSAg
ICB0ZXh0ICs9ICIgIjsKLSAgICAKLSAgICAvLyBOb3cgdGhlIHJlY3QsIGJ1dCBpdCBpc24ndCBy
ZWFsbHkgYSByZWN0LCBzbyB3ZSBkdW1wIG1hbnVhbGx5Ci0gICAgdGV4dCArPSBtX2ltYWdlU2xp
Y2VSZWN0LT50b3AoKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0g
bV9pbWFnZVNsaWNlUmVjdC0+cmlnaHQoKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwot
ICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+Ym90dG9tKCktPmNzc1RleHQoKTsKLSAgICB0
ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPmxlZnQoKS0+Y3NzVGV4
dCgpOwotICAgIAotICAgIC8vIE5vdyB0aGUga2V5d29yZHMuCi0gICAgdGV4dCArPSAiICI7Ci0g
ICAgdGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX2hvcml6b250YWxTaXplUnVsZSkuY3NzVGV4
dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gQ1NTUHJpbWl0aXZlVmFsdWUobV92
ZXJ0aWNhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUZvbnRGYW1pbHlWYWx1ZTo6Rm9udEZhbWlseVZhbHVlKGNvbnN0
IERlcHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKLSAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKFN0cmlu
ZygpLCBDU1NfU1RSSU5HKQotewotICAgIHN0YXRpYyBjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiBw
YXJlblJlZygiIFxcKC4qXFwpJCIpOwotICAgIHN0YXRpYyBjb25zdCBSZWd1bGFyRXhwcmVzc2lv
biBicmFjZVJlZygiIFxcWy4qXFxdJCIpOwotCi0gICAgcGFyc2VkRm9udE5hbWUgPSBzdHJpbmc7
Ci0gICAgLy8gYSBsYW5ndWFnZSB0YWcgaXMgb2Z0ZW4gYWRkZWQgaW4gYnJhY2VzIGF0IHRoZSBl
bmQuIFJlbW92ZSBpdC4KLSAgICBwYXJzZWRGb250TmFtZS5yZXBsYWNlKHBhcmVuUmVnLCAiIik7
Ci0gICAgLy8gcmVtb3ZlIFtYZnRdIHF1YWxpZmllcnMKLSAgICBwYXJzZWRGb250TmFtZS5yZXBs
YWNlKGJyYWNlUmVnLCAiIik7Ci19Ci0KLVN0cmluZyBGb250RmFtaWx5VmFsdWU6OmNzc1RleHQo
KSBjb25zdAotewotICAgIHJldHVybiBxdW90ZVN0cmluZ0lmTmVlZGVkKHBhcnNlZEZvbnROYW1l
KTsKLX0KLQotU3RyaW5nIEZvbnRWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gZm9u
dCB2YXJpYW50IHdlaWdodCBzaXplIC8gbGluZS1oZWlnaHQgZmFtaWx5IAotCi0gICAgU3RyaW5n
IHJlc3VsdCgiIik7Ci0KLSAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgcmVzdWx0ICs9IHN0eWxl
LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh2YXJpYW50KSB7Ci0gICAgICAgIGlmICghcmVz
dWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAgICAgIHJlc3Vs
dCArPSB2YXJpYW50LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh3ZWlnaHQpIHsKLSAgICAg
ICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAg
ICAgICAgcmVzdWx0ICs9IHdlaWdodC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoc2l6ZSkg
ewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0g
IiAiOwotICAgICAgICByZXN1bHQgKz0gc2l6ZS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAo
bGluZUhlaWdodCkgewotICAgICAgICBpZiAoIXNpemUpCi0gICAgICAgICAgICByZXN1bHQgKz0g
IiAiOwotICAgICAgICByZXN1bHQgKz0gIi8iOwotICAgICAgICByZXN1bHQgKz0gbGluZUhlaWdo
dC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoZmFtaWx5KSB7Ci0gICAgICAgIGlmICghcmVz
dWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAgICAgIHJlc3Vs
dCArPSBmYW1pbHktPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
ICAgIAotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotU2hhZG93VmFs
dWU6OlNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF94LAotICAgIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF95LAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IF9ibHVyLAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF9jb2xv
cikKLSAgICA6IHgoX3gpLCB5KF95KSwgYmx1cihfYmx1ciksIGNvbG9yKF9jb2xvcikKLXsKLX0K
LQotU3RyaW5nIFNoYWRvd1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgdGV4
dCgiIik7Ci0KLSAgICBpZiAoY29sb3IpCi0gICAgICAgIHRleHQgKz0gY29sb3ItPmNzc1RleHQo
KTsKLSAgICBpZiAoeCkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geC0+Y3NzVGV4dCgpOwotICAgIH0KLSAg
ICBpZiAoeSkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgdGV4
dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAo
Ymx1cikgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgdGV4dCAr
PSAiICI7Ci0gICAgICAgIHRleHQgKz0gYmx1ci0+Y3NzVGV4dCgpOwotICAgIH0KLQotICAgIHJl
dHVybiB0ZXh0OwotfQotCi1TdHJpbmcgQ1NTUHJvcGVydHk6OmNzc1RleHQoKSBjb25zdAotewot
ICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoaWQoKSkgKyAiOiAiICsgbV92YWx1ZS0+Y3NzVGV4
dCgpCi0gICAgICAgICsgKGlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsg
IjsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5ICZhLCBjb25zdCBDU1NQ
cm9wZXJ0eSAmYikKLXsKLSAgICByZXR1cm4gYS5tX2lkID09IGIubV9pZCAmJiBhLm1faW1wb3J0
YW50ID09IGIubV9pbXBvcnRhbnQgJiYgYS5tX3ZhbHVlID09IGIubV92YWx1ZTsKLX0KLQogfQpJ
bmRleDogY3NzL0NTU0luaGVyaXRlZFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTSW5o
ZXJpdGVkVmFsdWUuY3BwCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9DU1NJbmhlcml0ZWRWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYzNSArMTksMTEgQEAKICAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCi0KLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJjc3NwYXJzZXIuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hl
ZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiUmVndWxhckV4
cHJlc3Npb24uaCIKLQotI2lmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRp
ZXMuaCIKLSNlbmRpZgotCi0vLyBOb3QgaW4gYW55IGhlYWRlciwgc28ganVzdCBkZWNsYXJlIGl0
IGhlcmUgZm9yIG5vdy4KLVdlYkNvcmU6OlN0cmluZyBnZXRQcm9wZXJ0eU5hbWUodW5zaWduZWQg
c2hvcnQgaWQpOworI2luY2x1ZGUgIkNTU0luaGVyaXRlZFZhbHVlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gRGVmaW5lZCBpbiBDU1NHcmFtbWFyLnksIGJ1dCBub3QgaW4gYW55IGhl
YWRlciwgc28ganVzdCBkZWNsYXJlIGl0IGhlcmUgZm9yIG5vdy4KLWludCBnZXRQcm9wZXJ0eUlE
KGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0KLXN0YXRpYyBpbnQgcHJvcGVydHlJRChjb25z
dCBTdHJpbmcmIHMpCi17Ci0gICAgY2hhciBidWZmZXJbbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3Ro
XTsKLQotICAgIHVuc2lnbmVkIGxlbiA9IHMubGVuZ3RoKCk7Ci0gICAgaWYgKGxlbiA+IG1heENT
U1Byb3BlcnR5TmFtZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpICE9IGxlbjsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzW2ldOwotICAg
ICAgICBpZiAoYyA9PSAwIHx8IGMgPj0gMHg3RikKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyBp
bGxlZ2FsIGNoYXJhY3RlcgotICAgICAgICBidWZmZXJbaV0gPSBjOwotICAgIH0KLQotICAgIGlu
dCBpZCA9IGdldFByb3BlcnR5SUQoYnVmZmVyLCBsZW4pOwotI2lmIFNWR19TVVBQT1JUCi0gICAg
aWYgKGlkID09IDApCi0gICAgICAgIGlkID0gU1ZHOjpnZXRTVkdDU1NQcm9wZXJ0eUlEKGJ1ZmZl
ciwgbGVuKTsKLSNlbmRpZgotICAgIHJldHVybiBpZDsKLX0KLQotCi0vLyBRdW90ZXMgdGhlIHN0
cmluZyBpZiBpdCBuZWVkcyBxdW90aW5nLgotLy8gV2UgdXNlIHNpbmdsZSBxdW90ZXMgZm9yIG5v
dyBiZWF1c2UgbWFya3VwLmNwcCB1c2VzIGRvdWJsZSBxdW90ZXMuCi1zdGF0aWMgU3RyaW5nIHF1
b3RlU3RyaW5nSWZOZWVkZWQoY29uc3QgU3RyaW5nICZzdHJpbmcpCi17Ci0gICAgLy8gRm9yIG5v
dywganVzdCBkbyB0aGlzIGZvciBzdHJpbmdzIHRoYXQgc3RhcnQgd2l0aCAiIyIgdG8gZml4IEtv
cmVhbiBmb250IG5hbWVzIHRoYXQgc3RhcnQgd2l0aCAiIyIuCi0gICAgLy8gUG9zdC1UaWdlciwg
d2Ugc2hvdWxkIGlzTGVnYWxJZGVudGlmaWVyIGluc3RlYWQgYWZ0ZXIgd29ya2luZyBvdXQgYWxs
IHRoZSBhbmNpbGxhcnkgaXNzdWVzLgotICAgIGlmIChzdHJpbmdbMF0gIT0gJyMnKQotICAgICAg
ICByZXR1cm4gc3RyaW5nOwotCi0gICAgLy8gRklYTUU6IEFsc28gbmVlZCB0byB0cmFuc2Zvcm0g
Y29udHJvbCBjaGFyYWN0ZXJzIGludG8gXCBzZXF1ZW5jZXMuCi0gICAgU3RyaW5nIHMgPSBzdHJp
bmc7Ci0gICAgcy5yZXBsYWNlKCdcXCcsICJcXFxcIik7Ci0gICAgcy5yZXBsYWNlKCdcJycsICJc
XCciKTsKLSAgICByZXR1cm4gIiciICsgcyArICInIjsKLX0KLQotQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6Q1NTU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQpCi0gICAgOiBTdHlsZUJhc2Uo
cGFyZW50KQotewotfQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzU3R5bGVEZWNsYXJh
dGlvbigpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsK
LSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcElEKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246Omdl
dFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHBy
b3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHByb3BJRCk7
Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNv
bnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlE
KHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wSUQpID8gImltcG9ydGFudCIg
OiAiIjsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRo
YW5kKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9w
ZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICBpbnQgc2hvcnRoYW5kSUQgPSBnZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9w
SUQpOwotICAgIGlmICghc2hvcnRoYW5kSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKHNob3J0aGFuZElEKTsKLX0KLQotYm9vbCBDU1NTdHls
ZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBp
ZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1Byb3BlcnR5
SW1wbGljaXQocHJvcElEKTsKLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaW50IHByb3BJ
RCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkgLy8gc2V0IGV4
Y2VwdGlvbj8KLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3JpdHku
ZmluZCgiaW1wb3J0YW50IiwgMCwgZmFsc2UpICE9IC0xOwotICAgIHNldFByb3BlcnR5KHByb3BJ
RCwgdmFsdWUsIGltcG9ydGFudCwgZWMpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6cmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmVt
b3ZlUHJvcGVydHkocHJvcElELCBlYyk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
aXNQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJu
IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKCkKLSAgICA6IG1fbm9kZSgwKQotewotfQotCi1DU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSAqcGFyZW50KQotICAg
IDogQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXJlbnQpLCBtX25vZGUoMCkKLXsKLX0KLQotQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUg
KnBhcmVudCwgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gJnZhbHVlcykK
LSAgICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KSwgbV92YWx1ZXModmFsdWVzKSwgbV9u
b2RlKDApCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgYWxsb3dzIGR1cGxpY2F0ZSBwcm9wZXJ0aWVz
LgotfQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24oQ1NTUnVsZSAqcGFyZW50LCBjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICpwcm9wZXJ0
aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLSAgICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50
KSwgbV9ub2RlKDApCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyAr
K2kpCi0gICAgICAgIG1fdmFsdWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7Ci0gICAgLy8gRklY
TUU6IFRoaXMgYWxsb3dzIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLgotfQotCi1DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om9wZXJhdG9yPShjb25z
dCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYgbykKLXsKLSAgICAvLyBkb24ndCBhdHRhY2gg
aXQgdG8gdGhlIHNhbWUgbm9kZSwganVzdCBsZWF2ZSB0aGUgY3VycmVudCBtX25vZGUgdmFsdWUK
LSAgICBtX3ZhbHVlcyA9IG8ubV92YWx1ZXM7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1TdHJp
bmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoaW50IHByb3Bl
cnR5SUQpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydHlJRCk7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICByZXR1cm4gdmFs
dWUtPmNzc1RleHQoKTsKLQotICAgIC8vIFNob3J0aGFuZCBhbmQgNC12YWx1ZXMgcHJvcGVydGll
cwotICAgIHN3aXRjaCAoIHByb3BlcnR5SUQgKSB7Ci0gICAgY2FzZSBDU1NfUFJPUF9CQUNLR1JP
VU5EX1BPU0lUSU9OOgotICAgIHsKLSAgICAgICAgLy8gIyMgSXMgdGhpcyBjb3JyZWN0PyBUaGUg
Y29kZSBpbiBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2luZwotICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1syXSA9IHsgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTl9YLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTl9Z
IH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMiApOwot
ICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JBQ0tHUk9VTkQ6Ci0gICAgewotICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1s1XSA9IHsgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgQ1NTX1BS
T1BfQkFDS0dST1VORF9SRVBFQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NfUFJPUF9CQUNLR1JPVU5EX0FUVEFDSE1FTlQsIENTU19QUk9QX0JBQ0tHUk9VTkRfUE9T
SVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CQUNL
R1JPVU5EX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVy
dGllcywgNSApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUjoKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfV0lEVEgsIENT
U19QUk9QX0JPUkRFUl9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU19QUk9QX0JPUkRFUl9DT0xPUiB9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFs
dWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfVE9Q
OgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JP
UkRFUl9UT1BfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfVE9QX0NPTE9SfTsKLSAgICAg
ICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAg
IGNhc2UgQ1NTX1BST1BfQk9SREVSX1JJR0hUOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHBy
b3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwgQ1NTX1BST1BfQk9S
REVSX1JJR0hUX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
X1BST1BfQk9SREVSX1JJR0hUX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZh
bHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0JP
VFRPTToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9D
T0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyAp
OwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9MRUZUOgotICAgIHsKLSAgICAgICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRFUl9MRUZUX1dJRFRILCBD
U1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU19QUk9QX0JPUkRFUl9MRUZUX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNo
b3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1Bf
T1VUTElORToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1Nf
UFJPUF9PVVRMSU5FX1dJRFRILCBDU1NfUFJPUF9PVVRMSU5FX1NUWUxFLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfT1VUTElORV9DT0xPUiB9OwotICAgICAg
ICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAg
Y2FzZSBDU1NfUFJPUF9CT1JERVJfQ09MT1I6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1s0XSA9IHsgQ1NTX1BST1BfQk9SREVSX1RPUF9DT0xPUiwgQ1NTX1BST1BfQk9SREVS
X1JJR0hUX0NPTE9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BS
T1BfQk9SREVSX0JPVFRPTV9DT0xPUiwgQ1NTX1BST1BfQk9SREVSX0xFRlRfQ09MT1IgfTsKLSAg
ICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBD
U1NfUFJPUF9CT1JERVJfV0lEVEg6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGll
c1s0XSA9IHsgQ1NTX1BST1BfQk9SREVSX1RPUF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1JJR0hU
X1dJRFRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9S
REVSX0JPVFRPTV9XSURUSCwgQ1NTX1BST1BfQk9SREVSX0xFRlRfV0lEVEggfTsKLSAgICAgICAg
cmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJP
UF9CT1JERVJfU1RZTEU6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9
IHsgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0JP
VFRPTV9TVFlMRSwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUgfTsKLSAgICAgICAgcmV0dXJu
IGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9NQVJH
SU46Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BST1Bf
TUFSR0lOX1RPUCwgQ1NTX1BST1BfTUFSR0lOX1JJR0hULAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTX1BST1BfTUFSR0lOX0JPVFRPTSwgQ1NTX1BST1BfTUFSR0lOX0xF
RlQgfTsKLSAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0g
ICAgY2FzZSBDU1NfUFJPUF9QQURESU5HOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbNF0gPSB7IENTU19QUk9QX1BBRERJTkdfVE9QLCBDU1NfUFJPUF9QQURESU5HX1JJR0hU
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfUEFERElOR19C
T1RUT00sIENTU19QUk9QX1BBRERJTkdfTEVGVCB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVl
cyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0xJU1RfU1RZTEU6Ci0g
ICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfTElTVF9T
VFlMRV9UWVBFLCBDU1NfUFJPUF9MSVNUX1NUWUxFX1BPU0lUSU9OLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfTElTVF9TVFlMRV9JTUFHRSB9OwotICAgICAg
ICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAg
fQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpnZXQ0VmFsdWVzKCBjb25zdCBpbnQqIHByb3BlcnRpZXMgKSBjb25zdAotewotICAg
IFN0cmluZyByZXM7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAg
aWYgKCFpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0p
OwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkgLy8gYXBwYXJlbnRseSBhbGwgNCBwcm9wZXJ0aWVz
IG11c3QgYmUgc3BlY2lmaWVkLgotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJlcyArPSAiICI7
Ci0gICAgICAgICAgICByZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gcmVzOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFNob3J0SGFuZFZhbHVlKCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1iZXIgKSBj
b25zdAotewotICAgIFN0cmluZyByZXM7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXI7
ICsraSkgewotICAgICAgICBpZiAoIWlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkg
ewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFs
dWUocHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsgLy8gVE9ETyBwcm92
aWRlIGRlZmF1bHQgdmFsdWUgaWYgIXZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKCFyZXMuaXNO
dWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlcyArPSAiICI7Ci0gICAgICAgICAgICAgICAg
cmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0
Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVu
ZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5
PiBpdCA9IG1fdmFsdWVzLmZyb21MYXN0KCk7IGl0ICE9IGVuZDsgLS1pdCkKLSAgICAgICAgaWYg
KHByb3BlcnR5SUQgPT0gKCppdCkubV9pZCkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS52YWx1
ZSgpOwotICAgIHJldHVybiAwOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLQotICAgIFN0cmluZyB2YWx1ZTsKLQot
ICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZv
ciAoRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVz
LmZyb21MYXN0KCk7IGl0ICE9IGVuZDsgLS1pdCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0g
KCppdCkubV9pZCkgewotICAgICAgICAgICAgdmFsdWUgPSAoKml0KS52YWx1ZSgpLT5jc3NUZXh0
KCk7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZW1vdmUoaXQpOwotICAgICAgICAgICAgaWYgKG5v
dGlmeUNoYW5nZWQpCi0gICAgICAgICAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y2xlYXIoKQotewotICAgIG1fdmFsdWVzLmNsZWFyKCk7Ci0g
ICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpz
ZXRDaGFuZ2VkKCkKLXsKLSAgICBpZiAobV9ub2RlKSB7Ci0gICAgICAgIG1fbm9kZS0+c2V0Q2hh
bmdlZCgpOwotICAgICAgICAvLyBGSVhNRTogSWRlYWxseSwgdGhpcyBzaG91bGQgYmUgZmFjdG9y
ZWQgYmV0dGVyIGFuZCB0aGVyZQotICAgICAgICAvLyBzaG91bGQgYmUgYSBzdWJjbGFzcyBvZiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiBqdXN0Ci0gICAgICAgIC8vIGZvciBpbmxpbmUgc3R5
bGUgZGVjbGFyYXRpb25zIHRoYXQgaGFuZGxlcyB0aGlzCi0gICAgICAgIGlmIChtX25vZGUtPmlz
U3R5bGVkRWxlbWVudCgpICYmIHRoaXMgPT0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCAqPiht
X25vZGUpLT5pbmxpbmVTdHlsZURlY2woKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnQgKj4obV9ub2RlKS0+aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyAjIyMgcXVpY2smZGlydHkgaGFjayBmb3IgS0RFIDMu
MC4uLiBtYWtlIHRoaXMgTVVDSCBiZXR0ZXIhIChEaXJrKQotICAgIFN0eWxlQmFzZSAqcm9vdCA9
IHRoaXM7Ci0gICAgd2hpbGUgKFN0eWxlQmFzZSAqcGFyZW50ID0gcm9vdC0+cGFyZW50KCkpCi0g
ICAgICAgIHJvb3QgPSBwYXJlbnQ7Ci0gICAgaWYgKHJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpKQot
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvYygpLT51cGRhdGVT
dHlsZVNlbGVjdG9yKCk7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omdl
dFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRl
ZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJl
Y2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCku
aWQoKSkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS5pc0ltcG9ydGFudCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotaW50IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVM
aXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZh
bHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5pZCgpKQot
ICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNob3J0aGFuZElEKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGlj
aXQoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiAoKml0KS5pc0ltcGxpY2l0KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUs
IGVjKTsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIHJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIGVjKTsKLX0KLQotYm9vbCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyAmdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIGVjID0gMDsKLQotICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQp
OwotCi0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIGJvb2wg
c3VjY2VzcyA9IHBhcnNlci5wYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBv
cnRhbnQpOwotICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0g
ICAgfSBlbHNlIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0gICAg
cmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNl
dFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29s
IG5vdGlmeUNoYW5nZWQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7Ci0gICAg
bV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SUQsIG5ldyBDU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSksIGltcG9ydGFudCkpOwotICAgIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAg
ICBzZXRDaGFuZ2VkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OnNldFN0cmluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcgJnZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUsIGJvb2wgaW1w
b3J0YW50KQotewotICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SWQpOwotICAgIG1fdmFsdWVz
LmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUsIHR5cGUpLCBpbXBvcnRhbnQpKTsKLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldEltYWdlUHJvcGVydHkoaW50IHByb3BlcnR5SWQs
IGNvbnN0IFN0cmluZyAmVVJMLCBib29sIGltcG9ydGFudCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0
eShwcm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJ
ZCwgbmV3IENTU0ltYWdlVmFsdWUoVVJMLCB0aGlzKSwgaW1wb3J0YW50KSk7Ci0gICAgc2V0Q2hh
bmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpwYXJzZURlY2xh
cmF0aW9uKGNvbnN0IFN0cmluZyAmc3R5bGVEZWNsYXJhdGlvbikKLXsKLSAgICBtX3ZhbHVlcy5j
bGVhcigpOwotICAgIENTU1BhcnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBw
YXJzZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCBzdHlsZURlY2xhcmF0aW9uKTsKLSAgICBzZXRD
aGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFkZFBhcnNl
ZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqcHJvcGVydGllcywgaW50IG51
bVByb3BlcnRpZXMpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyAr
K2kpIHsKLSAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1tpXS0+aWQoKSwgZmFsc2Up
OwotICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoKnByb3BlcnRpZXNbaV0pOwotICAgIH0KLSAgICAv
LyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0Q2hhbmdlZCgp
IGlmIHNvbWV0aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAotICAgIC8vIGEg
bm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9k
ZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCi19Ci0KLXZvaWQgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnNldExlbmd0aFByb3BlcnR5KGludCBpZCwgY29uc3QgU3RyaW5n
ICZ2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgLyogbXVsdGlMZW5ndGgqLykKLXsKLSAgICBi
b29sIHBhcnNlTW9kZSA9IHVzZVN0cmljdFBhcnNpbmcoKTsKLSAgICBzZXRTdHJpY3RQYXJzaW5n
KGZhbHNlKTsKLSAgICBzZXRQcm9wZXJ0eShpZCwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgc2V0
U3RyaWN0UGFyc2luZyhwYXJzZU1vZGUpOwotfQotCi11bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92YWx1ZXMuY291bnQo
KTsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppdGVtKHVuc2lnbmVk
IGkpIGNvbnN0Ci17Ci0gICAgaWYgKGkgPj0gbV92YWx1ZXMuY291bnQoKSkKLSAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShtX3ZhbHVlc1tpXS5pZCgp
KTsKLX0KLQotQ1NTUnVsZSAqQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50UnVsZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSdWxlKCkpID8gc3RhdGlj
X2Nhc3Q8Q1NTUnVsZSAqPihwYXJlbnQoKSkgOiAwOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAi
IjsKLSAgICAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0
eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJv
cGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBy
ZXN1bHQgKz0gKCppdCkuY3NzVGV4dCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9p
ZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBtX3ZhbHVlcy5jbGVh
cigpOwotICAgIENTU1BhcnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBwYXJz
ZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCB0ZXh0KTsKLSAgICAvLyBGSVhNRTogRGV0ZWN0IHN5
bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om1lcmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
ICpvdGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0KQotewotICAgIERlcHJlY2F0ZWRW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNh
dGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBvdGhlci0+dmFsdWVz
SXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5
ICZwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICAgICAgaWYgKCFhcmdPdmVycmlkZXNPbkNvbmZsaWN0KQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHkuaWQoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHByb3BlcnR5KTsKLSAgICB9Ci0gICAgLy8g
RklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGhhdmUgYSBjYWxsIHRvIHNldENoYW5nZWQoKSBp
ZiBzb21ldGhpbmcgY2hhbmdlZC4gV2UgbWF5IGFsc28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5v
dGlmeUNoYW5nZWQgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVs
IG9mIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGNsYXNzLgotfQotCi12b2lkIENTU1N0eWxlRGVj
bGFyYXRpb246OmRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKSBjb25zdAot
ewotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIERlcHJlY2F0ZWRWYWx1
ZUxpc3Q8aW50PiBwcm9wZXJ0aWVzOwotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJ
dGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQoc3R5bGUtPnZhbHVlc0l0ZXJhdG9yKCkpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkgJnByb3BlcnR5ID0gKml0Owot
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9w
ZXJ0eS5pZCgpKTsKLSAgICAgICAgaWYgKHZhbHVlICYmICh2YWx1ZS0+Y3NzVGV4dCgpID09IHBy
b3BlcnR5LnZhbHVlKCktPmNzc1RleHQoKSkpCi0gICAgICAgICAgICBwcm9wZXJ0aWVzLmFwcGVu
ZChwcm9wZXJ0eS5pZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVM
aXN0SXRlcmF0b3I8aW50PiBpdChwcm9wZXJ0aWVzLmJlZ2luKCkpOyBpdCAhPSBwcm9wZXJ0aWVz
LmVuZCgpOyArK2l0KQotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoKml0KTsKLX0KLQot
Ly8gVGhpcyBpcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHdlIHdhbnQgdG8gY29weSBpbiB0aGUg
Y29weUluaGVyaXRhYmxlUHJvcGVydGllcygpIGZ1bmN0aW9uLgotLy8gSXQgaXMgdGhlIGludGVy
c2VjdGlvbiBvZiB0aGUgbGlzdCBvZiBpbmhlcml0ZWQgQ1NTIHByb3BlcnRpZXMgYW5kIHRoZQot
Ly8gcHJvcGVydGllcyBmb3Igd2hpY2ggd2UgaGF2ZSBhIGNvbXB1dGVkIGltcGxlbWVudGF0aW9u
IGluIHRoaXMgZmlsZS4KLWNvbnN0IGludCBpbmhlcml0YWJsZVByb3BlcnRpZXNbXSA9IHsKLSAg
ICBDU1NfUFJPUF9CT1JERVJfQ09MTEFQU0UsCi0gICAgQ1NTX1BST1BfQk9SREVSX1NQQUNJTkcs
Ci0gICAgQ1NTX1BST1BfQ09MT1IsCi0gICAgQ1NTX1BST1BfRk9OVF9GQU1JTFksCi0gICAgQ1NT
X1BST1BfRk9OVF9TSVpFLAotICAgIENTU19QUk9QX0ZPTlRfU1RZTEUsCi0gICAgQ1NTX1BST1Bf
Rk9OVF9WQVJJQU5ULAotICAgIENTU19QUk9QX0ZPTlRfV0VJR0hULAotICAgIENTU19QUk9QX0xF
VFRFUl9TUEFDSU5HLAotICAgIENTU19QUk9QX0xJTkVfSEVJR0hULAotICAgIENTU19QUk9QX1RF
WFRfQUxJR04sCi0gICAgQ1NTX1BST1BfX1dFQktJVF9URVhUX0RFQ09SQVRJT05TX0lOX0VGRkVD
VCwKLSAgICBDU1NfUFJPUF9URVhUX0lOREVOVCwKLSAgICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRf
U0laRV9BREpVU1QsCi0gICAgQ1NTX1BST1BfVEVYVF9UUkFOU0ZPUk0sCi0gICAgQ1NTX1BST1Bf
T1JQSEFOUywKLSAgICBDU1NfUFJPUF9XSElURV9TUEFDRSwKLSAgICBDU1NfUFJPUF9XSURPV1Ms
Ci0gICAgQ1NTX1BST1BfV09SRF9TUEFDSU5HLAotfTsKLQotY29uc3QgdW5zaWduZWQgbnVtSW5o
ZXJpdGFibGVQcm9wZXJ0aWVzID0gc2l6ZW9mKGluaGVyaXRhYmxlUHJvcGVydGllcykgLyBzaXpl
b2YoaW5oZXJpdGFibGVQcm9wZXJ0aWVzWzBdKTsKLQotLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBw
cm9wZXJ0aWVzIHdlIHdhbnQgdG8gY29weSBpbiB0aGUgY29weUJsb2NrUHJvcGVydGllcygpIGZ1
bmN0aW9uLgotLy8gSXQgaXMgdGhlIGxpc3Qgb2YgQ1NTIHByb3BlcnRpZXMgdGhhdCBhcHBseSBz
cGVjaWFsbHkgdG8gYmxvY2stbGV2ZWwgZWxlbWVudHMuCi1zdGF0aWMgY29uc3QgaW50IGJsb2Nr
UHJvcGVydGllc1tdID0gewotICAgIENTU19QUk9QX09SUEhBTlMsCi0gICAgQ1NTX1BST1BfT1ZF
UkZMT1csIC8vIFRoaXMgY2FuIGJlIGFsc28gYmUgYXBwbGllZCB0byByZXBsYWNlZCBlbGVtZW50
cwotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfQUZURVIsCi0gICAgQ1NTX1BST1BfUEFHRV9CUkVB
S19CRUZPUkUsCi0gICAgQ1NTX1BST1BfUEFHRV9CUkVBS19JTlNJREUsCi0gICAgQ1NTX1BST1Bf
VEVYVF9BTElHTiwKLSAgICBDU1NfUFJPUF9URVhUX0lOREVOVCwKLSAgICBDU1NfUFJPUF9XSURP
V1MKLX07Ci0KLWNvbnN0IHVuc2lnbmVkIG51bUJsb2NrUHJvcGVydGllcyA9IHNpemVvZihibG9j
a1Byb3BlcnRpZXMpIC8gc2l6ZW9mKGJsb2NrUHJvcGVydGllc1swXSk7Ci0KLVBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
b3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVByb3BlcnRpZXNJ
blNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0KLXZvaWQgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUJsb2NrUHJvcGVydGllcygpCi17Ci0gICAg
cmVtb3ZlUHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVz
KTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlSW5oZXJpdGFi
bGVQcm9wZXJ0aWVzKCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoaW5oZXJpdGFibGVQ
cm9wZXJ0aWVzLCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXMpOwotfQotCi1QYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVy
dGllc0luU2V0KGNvbnN0IGludCAqc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gbGlzdDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAg
ICAgICAgICAgbGlzdC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCks
IGZhbHNlKSk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oMCwgbGlzdCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92
ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQgKnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlD
U1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIG1fdmFs
dWVzLnJlbW92ZShDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsK
LSAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChj
aGFuZ2VkKQotICAgICAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJs
ZSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIG1fdmFsdWVzKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogdW5zaWduZWQgc2hvcnQg
Q1NTSW5oZXJpdGVkVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENT
U19JTkhFUklUOwpAQCAtNjU4LDY5OCArMzQsNCBAQAogICAgIHJldHVybiAiaW5oZXJpdCI7CiB9
CiAKLXVuc2lnbmVkIHNob3J0IENTU0luaXRpYWxWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QK
LXsgCi0gICAgcmV0dXJuIENTU19JTklUSUFMOyAKLX0KLQotU3RyaW5nIENTU0luaXRpYWxWYWx1
ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJpbml0aWFsIjsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NWYWx1ZUxpc3Q6On5DU1NWYWx1ZUxp
c3QoKQotewotICAgIGZvciAoQ1NTVmFsdWUgKnZhbCA9IG1fdmFsdWVzLmZpcnN0KCk7IHZhbDsg
dmFsID0gbV92YWx1ZXMubmV4dCgpKQotICAgICAgICB2YWwtPmRlcmVmKCk7Ci19Ci0KLXVuc2ln
bmVkIHNob3J0IENTU1ZhbHVlTGlzdDo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gQ1NTX1ZBTFVFX0xJU1Q7Ci19Ci0KLXZvaWQgQ1NTVmFsdWVMaXN0OjphcHBlbmQoUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gdmFsKQotewotICAgIG1fdmFsdWVzLmFwcGVuZCh2YWwucmVsZWFzZSgp
KTsKLX0KLQotU3RyaW5nIENTU1ZhbHVlTGlzdDo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3Ry
aW5nIHJlc3VsdCA9ICIiOwotCi0gICAgZm9yIChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPENT
U1ZhbHVlPiBpdGVyYXRvcihtX3ZhbHVlcyk7IGl0ZXJhdG9yLmN1cnJlbnQoKTsgKytpdGVyYXRv
cikgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQg
Kz0gIiwgIjsKLSAgICAgICAgcmVzdWx0ICs9IGl0ZXJhdG9yLmN1cnJlbnQoKS0+Y3NzVGV4dCgp
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZSgp
Ci17Ci0gICAgbV90eXBlID0gMDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2
ZVZhbHVlKGludCBpZGVudCkKLXsKLSAgICBtX3ZhbHVlLmlkZW50ID0gaWRlbnQ7Ci0gICAgbV90
eXBlID0gQ1NTX0lERU5UOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi17Ci0gICAgbV92YWx1ZS5udW0gPSBudW07
Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2
ZVZhbHVlKGNvbnN0IFN0cmluZyYgc3RyLCBVbml0VHlwZXMgdHlwZSkKLXsKLSAgICBpZiAoKG1f
dmFsdWUuc3RyaW5nID0gc3RyLmltcGwoKSkpCi0gICAgICAgIG1fdmFsdWUuc3RyaW5nLT5yZWYo
KTsKLSAgICBtX3R5cGUgPSB0eXBlOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPiBjKQotewotICAgIG1fdmFsdWUuY291bnRlciA9
IGMucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19DT1VOVEVSOwotfQotCi1DU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxSZWN0SW1wbD4gcikKLXsKLSAg
ICBtX3ZhbHVlLnJlY3QgPSByLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfUkVDVDsKLX0K
LQotI2lmIF9fQVBQTEVfXwotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBh
c3NSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiByKQotewotICAgIG1fdmFsdWUucmVnaW9uID0gci5y
ZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NTX0RBU0hCT0FSRF9SRUdJT047Ci19Ci0jZW5kaWYK
LQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFJHQkEzMiBjb2xvcikKLXsK
LSAgICBtX3ZhbHVlLnJnYmNvbG9yID0gY29sb3I7Ci0gICAgbV90eXBlID0gQ1NTX1JHQkNPTE9S
OwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxQ
YWlyPiBwKQotewotICAgIG1fdmFsdWUucGFpciA9IHAucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9
IENTU19QQUlSOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6fkNTU1ByaW1pdGl2ZVZhbHVlKCkK
LXsKLSAgICBjbGVhbnVwKCk7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNsZWFudXAo
KQotewotICAgIHN3aXRjaChtX3R5cGUpIHsKLSAgICBjYXNlIENTU19TVFJJTkc6Ci0gICAgY2Fz
ZSBDU1NfVVJJOgotICAgIGNhc2UgQ1NTX0FUVFI6Ci0gICAgICAgIGlmIChtX3ZhbHVlLnN0cmlu
ZykKLSAgICAgICAgICAgIG1fdmFsdWUuc3RyaW5nLT5kZXJlZigpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU19DT1VOVEVSOgotICAgICAgICBtX3ZhbHVlLmNvdW50ZXItPmRlcmVmKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1JFQ1Q6Ci0gICAgICAgIG1fdmFsdWUucmVj
dC0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfUEFJUjoKLSAgICAgICAg
bV92YWx1ZS5wYWlyLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAg
ICBjYXNlIENTU19EQVNIQk9BUkRfUkVHSU9OOgotICAgICAgICBpZiAobV92YWx1ZS5yZWdpb24p
Ci0gICAgICAgICAgICBtX3ZhbHVlLnJlZ2lvbi0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3R5cGUg
PSAwOwotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnQoUmVuZGVy
U3R5bGUgKnN0eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQo
c3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVu
IHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVk
IHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQg
aW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7
Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IElOVF9NQVggfHwgcmVzdWx0IDwgSU5UX01JTikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgICAKLX0KLQotaW50IENT
U1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlICpzdHlsZSwgZG91
YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21w
dXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBp
bXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAg
V2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xv
c2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/
IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IElOVF9NQVggfHwgcmVzdWx0
IDwgSU5UX01JTikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAg
Ci19Ci0KLWNvbnN0IGludCBpbnRNYXhGb3JMZW5ndGggPSAweDdmZmZmZmY7IC8vIG1heCB2YWx1
ZSBmb3IgYSAyOC1iaXQgaW50Ci1jb25zdCBpbnQgaW50TWluRm9yTGVuZ3RoID0gKC0weDdmZmZm
ZmYtMSk7IC8vIG1pbiB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50Ci0KLS8vIExlbmd0aHMgZXhwZWN0
IGFuIGludCB0aGF0IGlzIG9ubHkgMjgtYml0cywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3IgYSBk
aWZmZXJlbnQgb3ZlcmZsb3cuCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJ
bnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBj
b21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBp
cyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4
LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkg
Y2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwg
MCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IGludE1heEZvckxlbmd0
aCB8fCByZXN1bHQgPCBpbnRNaW5Gb3JMZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiAoaW50KXJlc3VsdDsgICAgCi19Ci0KLS8vIExlbmd0aHMgZXhwZWN0IGFuIGludCB0aGF0
IGlzIG9ubHkgMjgtYml0cywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3IgYSBkaWZmZXJlbnQgb3Zl
cmZsb3cuCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgo
UmVuZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICBkb3VibGUgcmVz
dWx0ID0gbXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAg
Ly8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVl
cyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJv
dW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAg
IHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVz
dWx0ID4gaW50TWF4Rm9yTGVuZ3RoIHx8IHJlc3VsdCA8IGludE1pbkZvckxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgCi19Ci0KLXNob3J0IENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewot
ICAgIGRvdWJsZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAg
IC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1
ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCBy
b3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAg
ICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJl
c3VsdCA+IFNIUlRfTUFYIHx8IHJlc3VsdCA8IFNIUlRfTUlOKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gKHNob3J0KXJlc3VsdDsgICAgCi19Ci0KLXNob3J0IENTU1ByaW1pdGl2ZVZh
bHVlOjpjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlw
bGllcikKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gbXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhG
bG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwg
b2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8v
IG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUg
bmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiAr
MC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4gU0hSVF9NQVggfHwgcmVzdWx0IDwgU0hSVF9N
SU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoc2hvcnQpcmVzdWx0OyAgCi19Ci0K
LWRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxl
ICpzdHlsZSwgYm9vbCBhcHBseVpvb21GYWN0b3IpCi17Ci0gICAgdW5zaWduZWQgc2hvcnQgdHlw
ZSA9IHByaW1pdGl2ZVR5cGUoKTsKLQotICAgIC8vIFdlIGFsd2F5cyBhc3N1bWUgOTYgQ1NTIHBp
eGVscyBpbiBhIENTUyBpbmNoLiBUaGlzIGlzIHRoZSBjb2xkIGhhcmQgdHJ1dGggb2YgdGhlIFdl
Yi4KLSAgICAvLyBBdCBoaWdoIERQSSwgd2UgbWF5IHNjYWxlIGEgQ1NTIHBpeGVsLCBidXQgdGhl
IHJhdGlvIG9mIHRoZSBDU1MgcGl4ZWwgdG8gdGhlIHNvLWNhbGxlZAotICAgIC8vICJhYnNvbHV0
ZSIgQ1NTIGxlbmd0aCB1bml0cyBsaWtlIGluY2ggYW5kIHB0IGlzIGFsd2F5cyBmaXhlZCBhbmQg
bmV2ZXIgY2hhbmdlcy4KLSAgICBkb3VibGUgY3NzUGl4ZWxzUGVySW5jaCA9IDk2LjsKLQotICAg
IGRvdWJsZSBmYWN0b3IgPSAxLjsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgQ1NTX0VN
UzoKLSAgICAgICAgZmFjdG9yID0gYXBwbHlab29tRmFjdG9yID8KLSAgICAgICAgICBzdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkgOgotICAgICAgICAgIHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTX0VYUzogewotICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBhIGJ1ZyByaWdodCBub3cgd2hl
cmUgdGhlIHpvb20gd2lsbCBiZSBhcHBsaWVkIG11bHRpcGxlIHRpbWVzIHRvIEVYIHVuaXRzLgot
ICAgICAgICAvLyBXZSByZWFsbHkgbmVlZCB0byBjb21wdXRlIEVYIHVzaW5nIGZvbnRNZXRyaWNz
IGZvciB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkU2l6ZSBhbmQgbm90IHVzZQotICAgICAgICAvLyBv
dXIgYWN0dWFsIGNvbnN0cnVjdGVkIHJlbmRlcmluZyBmb250LgotICAgICAgICBmYWN0b3IgPSBz
dHlsZS0+Zm9udCgpLnhIZWlnaHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
Q1NTX1BYOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19DTToKLSAgICAgICAgZmFjdG9y
ID0gY3NzUGl4ZWxzUGVySW5jaC8yLjU0OyAvLyAoMi41NCBjbS9pbikKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NfTU06Ci0gICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gvMjUu
NDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfSU46Ci0gICAgICAgIGZhY3RvciA9IGNz
c1BpeGVsc1BlckluY2g7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1BUOgotICAgICAg
ICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoLzcyLjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NfUEM6Ci0gICAgICAgIC8vIDEgcGMgPT0gMTIgcHQKLSAgICAgICAgZmFjdG9yID0gY3Nz
UGl4ZWxzUGVySW5jaCoxMi4vNzIuOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldEZsb2F0VmFsdWUoKSAqIGZh
Y3RvcjsKLX0KLQotdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0RmxvYXRWYWx1ZSggdW5zaWdu
ZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9hdFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0gICAgY2xlYW51cCgpOwotICAgIC8vICMjIyBjaGVjayBpZiBwcm9w
ZXJ0eSBzdXBwb3J0cyB0aGlzIHR5cGUKLSAgICBpZiAobV90eXBlID4gQ1NTX0RJTUVOU0lPTikg
ewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly9pZihtX3R5cGUgPiBDU1NfRElNRU5TSU9OKSB0aHJvdyBET01FeGNlcHRpb24oSU5WQUxJRF9B
Q0NFU1NfRVJSKTsKLSAgICBtX3ZhbHVlLm51bSA9IGZsb2F0VmFsdWU7Ci0gICAgbV90eXBlID0g
dW5pdFR5cGU7Ci19Ci0KLWRvdWJsZSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24odW5zaWduZWQg
c2hvcnQgdW5pdFR5cGUpCi17Ci0gICAgZG91YmxlIGNzc1BpeGVsc1BlckluY2ggPSA5Ni4wOwot
ICAgIGRvdWJsZSBmYWN0b3IgPSAxLjA7Ci0gICAgCi0gICAgc3dpdGNoKHVuaXRUeXBlKSB7Ci0g
ICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ006Ci0gICAgICAgICAgICBm
YWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoIC8gMi41NDsgLy8gKDIuNTQgY20vaW4pCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NOgotICAg
ICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgotICAgICAgICAg
ICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFQ6Ci0gICAgICAgICAgICBmYWN0b3IgPSBj
c3NQaXhlbHNQZXJJbmNoIC8gNzIuMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhl
bHNQZXJJbmNoICogMTIuMCAvIDcyLjA7IC8vIDEgcGMgPT0gMTIgcHQKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBmYWN0b3I7Ci19Ci0KLWRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0Rmxv
YXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkKLXsKLSAgICBpZiAodW5pdFR5cGUgPT0g
bV90eXBlIHx8IHVuaXRUeXBlIDwgQ1NTX1BYIHx8IHVuaXRUeXBlID4gQ1NTX1BDKQotICAgICAg
ICByZXR1cm4gbV92YWx1ZS5udW07Ci0gICAgCi0gICAgZG91YmxlIGNvbnZlcnRlZFZhbHVlID0g
bV92YWx1ZS5udW07Ci0gICAgCi0gICAgLy8gRmlyc3QgY29udmVydCB0aGUgdmFsdWUgZnJvbSBt
X3R5cGUgaW50byBDU1NQaXhlbHMKLSAgICBkb3VibGUgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JD
b252ZXJzaW9uKG1fdHlwZSk7Ci0gICAgY29udmVydGVkVmFsdWUgKj0gZmFjdG9yOwotICAgIAot
ICAgIC8vIE5vdyBjb252ZXJ0IGZyb20gQ1NTUGl4ZWxzIHRvIHRoZSBzcGVjaWZpZWQgdW5pdFR5
cGUKLSAgICBmYWN0b3IgPSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24odW5pdFR5cGUpOwotICAg
IGNvbnZlcnRlZFZhbHVlIC89IGZhY3RvcjsKLSAgICAKLSAgICByZXR1cm4gY29udmVydGVkVmFs
dWU7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldFN0cmluZ1ZhbHVlKCB1bnNpZ25l
ZCBzaG9ydCBzdHJpbmdUeXBlLCBjb25zdCBTdHJpbmcgJnN0cmluZ1ZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgY2xlYW51cCgpOwotICAgIC8vaWYobV90eXBl
IDwgQ1NTX1NUUklORykgdGhyb3cgRE9NRXhjZXB0aW9uKElOVkFMSURfQUNDRVNTX0VSUik7Ci0g
ICAgLy9pZihtX3R5cGUgPiBDU1NfQVRUUikgdGhyb3cgRE9NRXhjZXB0aW9uKElOVkFMSURfQUND
RVNTX0VSUik7Ci0gICAgaWYgKG1fdHlwZSA8IENTU19TVFJJTkcgfHwgbV90eXBlID4gQ1NTX0FU
VFIpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChzdHJpbmdUeXBlICE9IENTU19JREVOVCkgewotICAgICAgICBtX3ZhbHVlLnN0cmlu
ZyA9IHN0cmluZ1ZhbHVlLmltcGwoKTsKLSAgICAgICAgbV92YWx1ZS5zdHJpbmctPnJlZigpOwot
ICAgICAgICBtX3R5cGUgPSBzdHJpbmdUeXBlOwotICAgIH0KLSAgICAvLyAjIyMgcGFyc2UgaWRl
bnQKLX0KLQotU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0
Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAg
ICAgICBjYXNlIENTU19BVFRSOgotICAgICAgICBjYXNlIENTU19VUkk6Ci0gICAgICAgICAgICBy
ZXR1cm4gbV92YWx1ZS5zdHJpbmc7Ci0gICAgICAgIGNhc2UgQ1NTX0lERU5UOgotICAgICAgICAg
ICAgcmV0dXJuIGdldFZhbHVlTmFtZShtX3ZhbHVlLmlkZW50KTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgQ1NTIDIuMSBzcGVjIHNheXMgeW91IHNob3VsZCB0
aHJvdyBhbiBleGNlcHRpb24gaGVyZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IENTU1ByaW1pdGl2ZVZh
bHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfUFJJTUlUSVZFX1ZB
TFVFOwotfQotCi1ib29sIENTU1ByaW1pdGl2ZVZhbHVlOjpwYXJzZVN0cmluZyggY29uc3QgU3Ry
aW5nICYvKnN0cmluZyovLCBib29sICkKLXsKLSAgICAvLyAjIyMKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SWRlbnQoKQotewotICAgIGlmKG1fdHlw
ZSAhPSBDU1NfSURFTlQpIHJldHVybiAwOwotICAgIHJldHVybiBtX3ZhbHVlLmlkZW50OwotfQot
Ci1TdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vICMj
IyByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlIGluc3RlYWQgb2YgYSBnZW5lcmF0ZWQgb25lIChl
LmcuIGNvbG9yCi0gICAgLy8gbmFtZSBpZiBpdCB3YXMgc3BlY2lmaWVkKSAtIGNoZWNrIHdoYXQg
c3BlYyBzYXlzIGFib3V0IHRoaXMKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBzd2l0Y2ggKCBtX3R5
cGUgKSB7Ci0gICAgICAgIGNhc2UgQ1NTX1VOS05PV046Ci0gICAgICAgICAgICAvLyAjIyMKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19OVU1CRVI6Ci0gICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpu
dW1iZXIobV92YWx1ZS5udW0pICsgIiUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ1NTX0VNUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51
bSkgKyAiZW0iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0VYUzoKLSAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZXgiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BYOgotICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJweCI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NfQ006Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIo
bV92YWx1ZS5udW0pICsgImNtIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U19NTToKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAi
bW0iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICAg
ICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJpbiI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUFQ6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgInB0IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19QQzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVl
Lm51bSkgKyAicGMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0RFRzoK
LSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19SQUQ6Ci0gICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInJhZCI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NfR1JBRDoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZ3JhZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NfTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgIm1zIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19TOgot
ICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJzIjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19IWjoKLSAgICAgICAgICAgIHRleHQg
PSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaHoiOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTX0tIWjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJl
cihtX3ZhbHVlLm51bSkgKyAia2h6IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU19ESU1FTlNJT046Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU19TVFJJTkc6Ci0gICAgICAgICAgICB0ZXh0ID0gcXVvdGVTdHJpbmdJ
Zk5lZWRlZChtX3ZhbHVlLnN0cmluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NfVVJJOgotICAgICAgICAgICAgdGV4dCA9ICJ1cmwoIiArIFN0cmluZyhtX3ZhbHVlLnN0
cmluZykgKyAiKSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSURFTlQ6
Ci0gICAgICAgICAgICB0ZXh0ID0gZ2V0VmFsdWVOYW1lKG1fdmFsdWUuaWRlbnQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0FUVFI6Ci0gICAgICAgICAgICAvLyAjIyMK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19DT1VOVEVSOgotICAgICAgICAg
ICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUkVDVDogewot
ICAgICAgICAgICAgUmVjdEltcGwqIHJlY3RWYWwgPSBnZXRSZWN0VmFsdWUoKTsKLSAgICAgICAg
ICAgIHRleHQgPSAicmVjdCgiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT50b3AoKS0+
Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5yaWdodCgpLT5j
c3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RWYWwtPmJvdHRvbSgpLT5j
c3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RWYWwtPmxlZnQoKS0+Y3Nz
VGV4dCgpICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBDU1NfUkdCQ09MT1I6IHsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yKG1fdmFsdWUucmdiY29s
b3IpOwotICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPCAweEZGKQotICAgICAgICAgICAg
ICAgIHRleHQgPSAicmdiYSgiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRl
eHQgPSAicmdiKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLnJl
ZCgpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLmdy
ZWVuKCkpICsgIiwgIjsKLSAgICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3Iu
Ymx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwgMHhGRikKLSAgICAgICAg
ICAgICAgICB0ZXh0ICs9ICIsICIgKyBTdHJpbmc6Om51bWJlcigoZmxvYXQpY29sb3IuYWxwaGEo
KSAvIDB4RkYpOwotICAgICAgICAgICAgdGV4dCArPSAiKSI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENTU19QQUlSOgotICAgICAgICAgICAgdGV4dCA9IG1f
dmFsdWUucGFpci0+Zmlyc3QoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgdGV4dCArPSAiICI7
Ci0gICAgICAgICAgICB0ZXh0ICs9IG1fdmFsdWUucGFpci0+c2Vjb25kKCktPmNzc1RleHQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotI2lmIF9fQVBQTEVfXwotICAgICAgICBjYXNlIENTU19EQVNI
Qk9BUkRfUkVHSU9OOgotICAgICAgICAgICAgZm9yIChEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9
IGdldERhc2hib2FyZFJlZ2lvblZhbHVlKCk7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25l
eHQuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICB0ZXh0ID0gImRhc2hib2FyZC1yZWdpb24oIjsK
LSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bV9sYWJlbDsKLSAgICAgICAgICAgICAg
ICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICIg
Y2lyY2xlICI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xl
KQotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICIgcmVjdGFuZ2xlICI7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB0
ZXh0ICs9IHJlZ2lvbi0+dG9wKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgICAgICB0
ZXh0ICs9IHJlZ2lvbi0+cmlnaHQoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgICAg
IHRleHQgKz0gcmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAg
ICAgIHRleHQgKz0gcmVnaW9uLT5sZWZ0KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgICAgICB0
ZXh0ICs9ICIpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0g
ICAgfQotICAgIHJldHVybiB0ZXh0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWN0SW1wbDo6flJl
Y3RJbXBsKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFpcjo6flBhaXIoKQotewotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1DU1NJbWFnZVZhbHVlOjpDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYg
dXJsLCBTdHlsZUJhc2UgKnN0eWxlKQotICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUodXJsLCBDU1Nf
VVJJKSwgbV9pbWFnZSgwKSwgbV9hY2Nlc3NlZEltYWdlKGZhbHNlKQotewotfQotCi1DU1NJbWFn
ZVZhbHVlOjpDU1NJbWFnZVZhbHVlKCkKLSAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKENTU19WQUxf
Tk9ORSksIG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZSh0cnVlKQotewotfQotCi1DU1NJbWFn
ZVZhbHVlOjp+Q1NTSW1hZ2VWYWx1ZSgpCi17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIG1f
aW1hZ2UtPmRlcmVmKHRoaXMpOwotfQotCi1DYWNoZWRJbWFnZSogQ1NTSW1hZ2VWYWx1ZTo6aW1h
Z2UoRG9jTG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgaWYgKCFtX2FjY2Vzc2VkSW1hZ2UpIHsKLSAg
ICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsKLQotICAgICAgICBpZiAobG9hZGVyKQotICAg
ICAgICAgICAgbV9pbWFnZSA9IGxvYWRlci0+cmVxdWVzdEltYWdlKGdldFN0cmluZ1ZhbHVlKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ltYWdlID0gQ2FjaGU6OnJlcXVlc3RJbWFn
ZSgwLCBnZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2ltYWdlKQot
ICAgICAgICAgICAgbV9pbWFnZS0+cmVmKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
bV9pbWFnZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU0JvcmRlckltYWdlVmFsdWU6
OkNTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiBpbWFnZSwKLSAg
ICBQYXNzUmVmUHRyPFJlY3RJbXBsPiBpbWFnZVJlY3QsIGludCBob3Jpem9udGFsUnVsZSwgaW50
IHZlcnRpY2FsUnVsZSkKLSAgICA6IG1faW1hZ2UoaW1hZ2UpLCBtX2ltYWdlU2xpY2VSZWN0KGlt
YWdlUmVjdCkKLSAgICAsIG1faG9yaXpvbnRhbFNpemVSdWxlKGhvcml6b250YWxSdWxlKSwgbV92
ZXJ0aWNhbFNpemVSdWxlKHZlcnRpY2FsUnVsZSkKLXsKLX0KLQotU3RyaW5nIENTU0JvcmRlcklt
YWdlVmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vIEltYWdlIGZpcnN0LgotICAgIFN0
cmluZyB0ZXh0KG1faW1hZ2UtPmNzc1RleHQoKSk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgCi0g
ICAgLy8gTm93IHRoZSByZWN0LCBidXQgaXQgaXNuJ3QgcmVhbGx5IGEgcmVjdCwgc28gd2UgZHVt
cCBtYW51YWxseQotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+dG9wKCktPmNzc1RleHQo
KTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPnJpZ2h0
KCktPmNzc1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGlj
ZVJlY3QtPmJvdHRvbSgpLT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCAr
PSBtX2ltYWdlU2xpY2VSZWN0LT5sZWZ0KCktPmNzc1RleHQoKTsKLSAgICAKLSAgICAvLyBOb3cg
dGhlIGtleXdvcmRzLgotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gQ1NTUHJpbWl0aXZl
VmFsdWUobV9ob3Jpem9udGFsU2l6ZVJ1bGUpLmNzc1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsK
LSAgICB0ZXh0ICs9IENTU1ByaW1pdGl2ZVZhbHVlKG1fdmVydGljYWxTaXplUnVsZSkuY3NzVGV4
dCgpOwotCi0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Gb250
RmFtaWx5VmFsdWU6OkZvbnRGYW1pbHlWYWx1ZShjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHJp
bmcpCi0gICAgOiBDU1NQcmltaXRpdmVWYWx1ZShTdHJpbmcoKSwgQ1NTX1NUUklORykKLXsKLSAg
ICBzdGF0aWMgY29uc3QgUmVndWxhckV4cHJlc3Npb24gcGFyZW5SZWcoIiBcXCguKlxcKSQiKTsK
LSAgICBzdGF0aWMgY29uc3QgUmVndWxhckV4cHJlc3Npb24gYnJhY2VSZWcoIiBcXFsuKlxcXSQi
KTsKLQotICAgIHBhcnNlZEZvbnROYW1lID0gc3RyaW5nOwotICAgIC8vIGEgbGFuZ3VhZ2UgdGFn
IGlzIG9mdGVuIGFkZGVkIGluIGJyYWNlcyBhdCB0aGUgZW5kLiBSZW1vdmUgaXQuCi0gICAgcGFy
c2VkRm9udE5hbWUucmVwbGFjZShwYXJlblJlZywgIiIpOwotICAgIC8vIHJlbW92ZSBbWGZ0XSBx
dWFsaWZpZXJzCi0gICAgcGFyc2VkRm9udE5hbWUucmVwbGFjZShicmFjZVJlZywgIiIpOwotfQot
Ci1TdHJpbmcgRm9udEZhbWlseVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cXVvdGVTdHJpbmdJZk5lZWRlZChwYXJzZWRGb250TmFtZSk7Ci19Ci0KLVN0cmluZyBGb250VmFs
dWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vIGZvbnQgdmFyaWFudCB3ZWlnaHQgc2l6ZSAv
IGxpbmUtaGVpZ2h0IGZhbWlseSAKLQotICAgIFN0cmluZyByZXN1bHQoIiIpOwotCi0gICAgaWYg
KHN0eWxlKSB7Ci0gICAgICAgIHJlc3VsdCArPSBzdHlsZS0+Y3NzVGV4dCgpOwotICAgIH0KLSAg
ICBpZiAodmFyaWFudCkgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gdmFyaWFudC0+Y3NzVGV4dCgp
OwotICAgIH0KLSAgICBpZiAod2VpZ2h0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAgICAgIHJlc3VsdCArPSB3ZWlnaHQt
PmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9
IHNpemUtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKGxpbmVIZWlnaHQpIHsKLSAgICAgICAg
aWYgKCFzaXplKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9
ICIvIjsKLSAgICAgICAgcmVzdWx0ICs9IGxpbmVIZWlnaHQtPmNzc1RleHQoKTsKLSAgICB9Ci0g
ICAgaWYgKGZhbWlseSkgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gZmFtaWx5LT5jc3NUZXh0KCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLQotLy8gVXNlZCBmb3IgdGV4
dC1zaGFkb3cgYW5kIGJveC1zaGFkb3cKLVNoYWRvd1ZhbHVlOjpTaGFkb3dWYWx1ZShQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfeCwKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBfeSwKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfYmx1ciwKLSAgICBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfY29sb3IpCi0gICAgOiB4KF94KSwgeShfeSks
IGJsdXIoX2JsdXIpLCBjb2xvcihfY29sb3IpCi17Ci19Ci0KLVN0cmluZyBTaGFkb3dWYWx1ZTo6
Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHRleHQoIiIpOwotCi0gICAgaWYgKGNvbG9y
KQotICAgICAgICB0ZXh0ICs9IGNvbG9yLT5jc3NUZXh0KCk7Ci0gICAgaWYgKHgpIHsKLSAgICAg
ICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAg
ICB0ZXh0ICs9IHgtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHkpIHsKLSAgICAgICAgaWYg
KCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0
ICs9IHktPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKGJsdXIpIHsKLSAgICAgICAgaWYgKCF0
ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9
IGJsdXItPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotU3RyaW5n
IENTU1Byb3BlcnR5Ojpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlO
YW1lKGlkKCkpICsgIjogIiArIG1fdmFsdWUtPmNzc1RleHQoKQotICAgICAgICArIChpc0ltcG9y
dGFudCgpID8gIiAhaW1wb3J0YW50IiA6ICIiKSArICI7ICI7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9
PShjb25zdCBDU1NQcm9wZXJ0eSAmYSwgY29uc3QgQ1NTUHJvcGVydHkgJmIpCi17Ci0gICAgcmV0
dXJuIGEubV9pZCA9PSBiLm1faWQgJiYgYS5tX2ltcG9ydGFudCA9PSBiLm1faW1wb3J0YW50ICYm
IGEubV92YWx1ZSA9PSBiLm1fdmFsdWU7Ci19Ci0KIH0KSW5kZXg6IGNzcy9TaGFkb3dWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY3NzL1NoYWRvd1ZhbHVlLmNwcAkocmV2aXNpb24gMTQ0MDApCisr
KyBjc3MvU2hhZG93VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMzAwICsxOSwyMiBA
QAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKLQotI2luY2x1ZGUg
IkNhY2hlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgImNzc3BhcnNlci5oIgotI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNp
bmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgiCiAK
LSNpZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUgImtzdmdjc3Nwcm9wZXJ0aWVzLmgiCi0jZW5kaWYK
LQotLy8gTm90IGluIGFueSBoZWFkZXIsIHNvIGp1c3QgZGVjbGFyZSBpdCBoZXJlIGZvciBub3cu
Ci1XZWJDb3JlOjpTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2lnbmVkIHNob3J0IGlkKTsKKyNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IERlZmluZWQgaW4gQ1NTR3JhbW1hci55LCBidXQgbm90IGluIGFueSBoZWFkZXIsIHNvIGp1c3Qg
ZGVjbGFyZSBpdCBoZXJlIGZvciBub3cuCi1pbnQgZ2V0UHJvcGVydHlJRChjb25zdCBjaGFyKiBz
dHIsIGludCBsZW4pOwotCi1zdGF0aWMgaW50IHByb3BlcnR5SUQoY29uc3QgU3RyaW5nJiBzKQot
ewotICAgIGNoYXIgYnVmZmVyW21heENTU1Byb3BlcnR5TmFtZUxlbmd0aF07Ci0KLSAgICB1bnNp
Z25lZCBsZW4gPSBzLmxlbmd0aCgpOwotICAgIGlmIChsZW4gPiBtYXhDU1NQcm9wZXJ0eU5hbWVM
ZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAh
PSBsZW47ICsraSkgewotICAgICAgICBVQ2hhciBjID0gc1tpXTsKLSAgICAgICAgaWYgKGMgPT0g
MCB8fCBjID49IDB4N0YpCi0gICAgICAgICAgICByZXR1cm4gMDsgLy8gaWxsZWdhbCBjaGFyYWN0
ZXIKLSAgICAgICAgYnVmZmVyW2ldID0gYzsKLSAgICB9Ci0KLSAgICBpbnQgaWQgPSBnZXRQcm9w
ZXJ0eUlEKGJ1ZmZlciwgbGVuKTsKLSNpZiBTVkdfU1VQUE9SVAotICAgIGlmIChpZCA9PSAwKQot
ICAgICAgICBpZCA9IFNWRzo6Z2V0U1ZHQ1NTUHJvcGVydHlJRChidWZmZXIsIGxlbik7Ci0jZW5k
aWYKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLQotLy8gUXVvdGVzIHRoZSBzdHJpbmcgaWYgaXQgbmVl
ZHMgcXVvdGluZy4KLS8vIFdlIHVzZSBzaW5nbGUgcXVvdGVzIGZvciBub3cgYmVhdXNlIG1hcmt1
cC5jcHAgdXNlcyBkb3VibGUgcXVvdGVzLgotc3RhdGljIFN0cmluZyBxdW90ZVN0cmluZ0lmTmVl
ZGVkKGNvbnN0IFN0cmluZyAmc3RyaW5nKQotewotICAgIC8vIEZvciBub3csIGp1c3QgZG8gdGhp
cyBmb3Igc3RyaW5ncyB0aGF0IHN0YXJ0IHdpdGggIiMiIHRvIGZpeCBLb3JlYW4gZm9udCBuYW1l
cyB0aGF0IHN0YXJ0IHdpdGggIiMiLgotICAgIC8vIFBvc3QtVGlnZXIsIHdlIHNob3VsZCBpc0xl
Z2FsSWRlbnRpZmllciBpbnN0ZWFkIGFmdGVyIHdvcmtpbmcgb3V0IGFsbCB0aGUgYW5jaWxsYXJ5
IGlzc3Vlcy4KLSAgICBpZiAoc3RyaW5nWzBdICE9ICcjJykKLSAgICAgICAgcmV0dXJuIHN0cmlu
ZzsKLQotICAgIC8vIEZJWE1FOiBBbHNvIG5lZWQgdG8gdHJhbnNmb3JtIGNvbnRyb2wgY2hhcmFj
dGVycyBpbnRvIFwgc2VxdWVuY2VzLgotICAgIFN0cmluZyBzID0gc3RyaW5nOwotICAgIHMucmVw
bGFjZSgnXFwnLCAiXFxcXCIpOwotICAgIHMucmVwbGFjZSgnXCcnLCAiXFwnIik7Ci0gICAgcmV0
dXJuICInIiArIHMgKyAiJyI7Ci19Ci0KLUNTU1N0eWxlRGVjbGFyYXRpb246OkNTU1N0eWxlRGVj
bGFyYXRpb24oQ1NTUnVsZSAqcGFyZW50KQotICAgIDogU3R5bGVCYXNlKHBhcmVudCkKLXsKLX0K
LQotYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1N0eWxlRGVjbGFyYXRpb24oKQotewotICAg
IHJldHVybiB0cnVlOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewot
ICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9w
SUQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHBy
b3BJRCk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVl
KGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcg
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcgJnBy
b3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUp
OwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IGdldFByb3BlcnR5UHJpb3JpdHkocHJvcElEKSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0KLVN0
cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJp
bmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0
eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
aW50IHNob3J0aGFuZElEID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAgICBpZiAo
IXNob3J0aGFuZElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFBy
b3BlcnR5TmFtZShzaG9ydGhhbmRJRCk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGlu
dCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BJ
RCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJp
b3JpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlE
KHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpIC8vIHNldCBleGNlcHRpb24/Ci0gICAg
ICAgIHJldHVybjsKLSAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFu
dCIsIDAsIGZhbHNlKSAhPSAtMTsKLSAgICBzZXRQcm9wZXJ0eShwcm9wSUQsIHZhbHVlLCBpbXBv
cnRhbnQsIGVjKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElE
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHBy
b3BJRCwgZWMpOwotfQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlOYW1l
KGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBwcm9wZXJ0eUlEKHBy
b3BlcnR5TmFtZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpCi0g
ICAgOiBtX25vZGUoMCkKLXsKLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6IENTU1N0eWxlRGVj
bGFyYXRpb24ocGFyZW50KSwgbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQsIGNvbnN0
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+ICZ2YWx1ZXMpCi0gICAgOiBDU1NTdHls
ZURlY2xhcmF0aW9uKHBhcmVudCksIG1fdmFsdWVzKHZhbHVlcyksIG1fbm9kZSgwKQotewotICAg
IC8vIEZJWE1FOiBUaGlzIGFsbG93cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KLX0KLQotQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUg
KnBhcmVudCwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqcHJvcGVydGllcywgaW50IG51bVBy
b3BlcnRpZXMpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQot
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQotICAgICAgICBt
X3ZhbHVlcy5hcHBlbmQoKnByb3BlcnRpZXNbaV0pOwotICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93
cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24m
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24mIG8pCi17Ci0gICAgLy8gZG9uJ3QgYXR0YWNoIGl0IHRvIHRoZSBzYW1l
IG5vZGUsIGp1c3QgbGVhdmUgdGhlIGN1cnJlbnQgbV9ub2RlIHZhbHVlCi0gICAgbV92YWx1ZXMg
PSBvLm1fdmFsdWVzOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotU3RyaW5nIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAot
ewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnR5SUQpOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7
Ci0KLSAgICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKLSAgICBzd2l0Y2gg
KCBwcm9wZXJ0eUlEICkgewotICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTjoK
LSAgICB7Ci0gICAgICAgIC8vICMjIElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4gY3NzcGFy
c2VyLmNwcCBpcyBjb25mdXNpbmcKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7
IENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWSB9OwotICAgICAgICBy
ZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDIgKTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NfUFJPUF9CQUNLR1JPVU5EOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbNV0gPSB7IENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIENTU19QUk9QX0JBQ0tHUk9VTkRf
UkVQRUFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFD
S0dST1VORF9BVFRBQ0hNRU5ULCBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiB9
OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDUgKTsKLSAg
ICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVI6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX1dJRFRILCBDU1NfUFJPUF9CT1JERVJf
U1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JE
RVJfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVz
LCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1RPUDoKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRI
LCBDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTX1BST1BfQk9SREVSX1RPUF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRT
aG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9Q
X0JPUkRFUl9SSUdIVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0g
eyBDU1NfUFJPUF9CT1JERVJfUklHSFRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlM
RSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9S
SUdIVF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGll
cywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9CT1RUT006Ci0gICAgewot
ICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0JPVFRP
TV9XSURUSCwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09MT1J9OwotICAgICAg
ICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAg
Y2FzZSBDU1NfUFJPUF9CT1JERVJfTEVGVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCwgQ1NTX1BST1BfQk9SREVS
X0xFRlRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9CT1JERVJfTEVGVF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSgg
cHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX09VVExJTkU6Ci0gICAg
ewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfT1VUTElORV9X
SURUSCwgQ1NTX1BST1BfT1VUTElORV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU19QUk9QX09VVExJTkVfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNo
b3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1Bf
Qk9SREVSX0NPTE9SOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7
IENTU19QUk9QX0JPUkRFUl9UT1BfQ09MT1IsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9DT0xPUiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RU
T01fQ09MT1IsIENTU19QUk9QX0JPUkRFUl9MRUZUX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBn
ZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVS
X1dJRFRIOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19Q
Uk9QX0JPUkRFUl9UT1BfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lE
VEgsIENTU19QUk9QX0JPUkRFUl9MRUZUX1dJRFRIIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFs
dWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1NUWUxF
OgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JP
UkRFUl9UT1BfU1RZTEUsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENT
U19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBw
cm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTUFSR0lOOgotICAgIHsKLSAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX01BUkdJTl9UT1AsIENT
U19QUk9QX01BUkdJTl9SSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU19QUk9QX01BUkdJTl9CT1RUT00sIENTU19QUk9QX01BUkdJTl9MRUZUIH07Ci0gICAgICAg
IHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BS
T1BfUEFERElORzoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBD
U1NfUFJPUF9QQURESU5HX1RPUCwgQ1NTX1BST1BfUEFERElOR19SSUdIVCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX1BBRERJTkdfQk9UVE9NLCBDU1NfUFJP
UF9QQURESU5HX0xFRlQgfTsKLSAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMg
KTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9MSVNUX1NUWUxFOgotICAgIHsKLSAgICAgICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NT
X1BST1BfTElTVF9TVFlMRV9QT1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU19QUk9QX0xJU1RfU1RZTEVfSU1BR0UgfTsKLSAgICAgICAgcmV0dXJuIGdldFNo
b3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0NFZh
bHVlcyggY29uc3QgaW50KiBwcm9wZXJ0aWVzICkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQcm9wZXJ0
eUltcGxpY2l0KHByb3BlcnRpZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAg
IGlmICghdmFsdWUpIC8vIGFwcGFyZW50bHkgYWxsIDQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNp
ZmllZC4KLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAo
IXJlcy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAg
cmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJl
czsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRTaG9ydEhhbmRW
YWx1ZSggY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyICkgY29uc3QKLXsKLSAgICBT
dHJpbmcgcmVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpIHsKLSAgICAg
ICAgaWYgKCFpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNb
aV0pOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7IC8vIFRPRE8gcHJvdmlkZSBkZWZhdWx0IHZh
bHVlIGlmICF2YWx1ZQotICAgICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+
Y3NzVGV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChE
ZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVl
cy5mcm9tTGFzdCgpOyBpdCAhPSBlbmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09
ICgqaXQpLm1faWQpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWUoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBlYyA9IDA7Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBEZXByZWNhdGVk
VmFsdWVMaXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRW
YWx1ZUxpc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgpOyBp
dCAhPSBlbmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1faWQpIHsK
LSAgICAgICAgICAgIHZhbHVlID0gKCppdCkudmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgICAgICAg
ICAgbV92YWx1ZXMucmVtb3ZlKGl0KTsKLSAgICAgICAgICAgIGlmIChub3RpZnlDaGFuZ2VkKQot
ICAgICAgICAgICAgICAgIHNldENoYW5nZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OmNsZWFyKCkKLXsKLSAgICBtX3ZhbHVlcy5jbGVhcigpOwotICAgIHNldENoYW5nZWQo
KTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q2hhbmdlZCgpCi17
Ci0gICAgaWYgKG1fbm9kZSkgewotICAgICAgICBtX25vZGUtPnNldENoYW5nZWQoKTsKLSAgICAg
ICAgLy8gRklYTUU6IElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRlciBhbmQg
dGhlcmUKLSAgICAgICAgLy8gc2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24ganVzdAotICAgICAgICAvLyBmb3IgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9u
cyB0aGF0IGhhbmRsZXMgdGhpcwotICAgICAgICBpZiAobV9ub2RlLT5pc1N0eWxlZEVsZW1lbnQo
KSAmJiB0aGlzID09IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQgKj4obV9ub2RlKS0+aW5saW5l
U3R5bGVEZWNsKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50ICo+KG1f
bm9kZSktPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gIyMjIHF1aWNrJmRpcnR5IGhhY2sgZm9yIEtERSAzLjAuLi4gbWFrZSB0aGlz
IE1VQ0ggYmV0dGVyISAoRGlyaykKLSAgICBTdHlsZUJhc2UgKnJvb3QgPSB0aGlzOwotICAgIHdo
aWxlIChTdHlsZUJhc2UgKnBhcmVudCA9IHJvb3QtPnBhcmVudCgpKQotICAgICAgICByb290ID0g
cGFyZW50OwotICAgIGlmIChyb290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2MoKS0+dXBkYXRlU3R5bGVTZWxlY3Rvcigp
OwotfQotCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9y
aXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAg
ICAgICByZXR1cm4gKCppdCkuaXNJbXBvcnRhbnQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWludCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50
IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0
b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0
ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAgICAgIHJl
dHVybiAoKml0KS5zaG9ydGhhbmRJRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0
eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1By
b3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxD
U1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCpp
dCkuaXNJbXBsaWNpdCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyAmdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRQ
cm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlLCBlYyk7Ci19Ci0KLVN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eUlELCB0cnVlLCBlYyk7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29s
IGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBlYyA9IDA7Ci0KLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLQotICAgIENTU1Bh
cnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBwYXJz
ZXIucGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICBp
ZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIH0gZWxzZSBpZiAo
bm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIHJldHVybiBzdWNjZXNz
OwotfQotCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQg
cHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2Vk
KQotewotICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwotICAgIG1fdmFsdWVzLmFwcGVu
ZChDU1NQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLCBp
bXBvcnRhbnQpKTsKLSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpzZXRTdHJpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGltcG9ydGFudCkKLXsKLSAg
ICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJv
cGVydHkocHJvcGVydHlJZCwgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSwgaW1w
b3J0YW50KSk7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpzZXRJbWFnZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcg
JlVSTCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7
Ci0gICAgbV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NJbWFn
ZVZhbHVlKFVSTCwgdGhpcyksIGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0KLQot
dm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcgJnN0eWxlRGVjbGFyYXRpb24pCi17Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBD
U1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVj
bGFyYXRpb24odGhpcywgc3R5bGVEZWNsYXJhdGlvbik7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQot
Ci12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNv
bnN0IENTU1Byb3BlcnR5ICogY29uc3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQot
ewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAg
IHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0tPmlkKCksIGZhbHNlKTsKLSAgICAgICAgbV92
YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFRoaXMg
cHJvYmFibHkgc2hvdWxkIGhhdmUgYSBjYWxsIHRvIHNldENoYW5nZWQoKSBpZiBzb21ldGhpbmcg
Y2hhbmdlZC4gV2UgbWF5IGFsc28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5vdGlmeUNoYW5nZWQg
YXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1
bmN0aW9ucyBpbiB0aGlzIGNsYXNzLgotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpzZXRMZW5ndGhQcm9wZXJ0eShpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIGJvb2wg
aW1wb3J0YW50LCBib29sIC8qIG11bHRpTGVuZ3RoKi8pCi17Ci0gICAgYm9vbCBwYXJzZU1vZGUg
PSB1c2VTdHJpY3RQYXJzaW5nKCk7Ci0gICAgc2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7Ci0gICAg
c2V0UHJvcGVydHkoaWQsIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgIHNldFN0cmljdFBhcnNpbmco
cGFyc2VNb2RlKTsKLX0KLQotdW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxl
bmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWVzLmNvdW50KCk7Ci19Ci0KLVN0cmlu
ZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAotewot
ICAgIGlmIChpID49IG1fdmFsdWVzLmNvdW50KCkpCi0gICAgICAgcmV0dXJuIFN0cmluZygpOwot
ICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUobV92YWx1ZXNbaV0uaWQoKSk7Ci19Ci0KLUNTU1J1
bGUgKkNTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVy
biAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENTU1J1bGUg
Kj4ocGFyZW50KCkpIDogMDsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Ojpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAgCi0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBm
b3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1f
dmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0ICs9ICgqaXQp
LmNzc1RleHQoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQ
YXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFy
YXRpb24odGhpcywgdGV4dCk7Ci0gICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFu
ZCBzZXQgZWMuCi0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjptZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqb3RoZXIsIGJvb2wg
YXJnT3ZlcnJpZGVzT25Db25mbGljdCkKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJ
dGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENv
bnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gb3RoZXItPnZhbHVlc0l0ZXJhdG9yKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVydHkgPSAq
aXQ7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVl
KHByb3BlcnR5LmlkKCkpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIGlmICgh
YXJnT3ZlcnJpZGVzT25Db25mbGljdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LmlkKCkpOwotICAgICAgICB9Ci0gICAgICAg
IG1fdmFsdWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBUaGlzIHBy
b2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBzZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5nIGNo
YW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFy
Z3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5j
dGlvbnMgaW4gdGhpcyBjbGFzcy4KLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWZm
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0
eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PGludD4gcHJv
cGVydGllczsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0
eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJv
cGVydHk+IGl0KHN0eWxlLT52YWx1ZXNJdGVyYXRvcigpKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGNvbnN0IENTU1Byb3BlcnR5ICZwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7Ci0g
ICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS52YWx1ZSgp
LT5jc3NUZXh0KCkpKQotICAgICAgICAgICAgcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkuaWQo
KSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPGlu
dD4gaXQocHJvcGVydGllcy5iZWdpbigpKTsgaXQgIT0gcHJvcGVydGllcy5lbmQoKTsgKytpdCkK
LSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KCppdCk7Ci19Ci0KLS8vIFRoaXMgaXMgdGhl
IGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlJbmhlcml0YWJs
ZVByb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhl
IGxpc3Qgb2YgaW5oZXJpdGVkIENTUyBwcm9wZXJ0aWVzIGFuZCB0aGUKLS8vIHByb3BlcnRpZXMg
Zm9yIHdoaWNoIHdlIGhhdmUgYSBjb21wdXRlZCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGZpbGUu
Ci1jb25zdCBpbnQgaW5oZXJpdGFibGVQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfQk9S
REVSX0NPTExBUFNFLAotICAgIENTU19QUk9QX0JPUkRFUl9TUEFDSU5HLAotICAgIENTU19QUk9Q
X0NPTE9SLAotICAgIENTU19QUk9QX0ZPTlRfRkFNSUxZLAotICAgIENTU19QUk9QX0ZPTlRfU0la
RSwKLSAgICBDU1NfUFJPUF9GT05UX1NUWUxFLAotICAgIENTU19QUk9QX0ZPTlRfVkFSSUFOVCwK
LSAgICBDU1NfUFJPUF9GT05UX1dFSUdIVCwKLSAgICBDU1NfUFJPUF9MRVRURVJfU1BBQ0lORywK
LSAgICBDU1NfUFJPUF9MSU5FX0hFSUdIVCwKLSAgICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAg
IENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsCi0gICAgQ1NTX1BS
T1BfVEVYVF9JTkRFTlQsCi0gICAgQ1NTX1BST1BfX1dFQktJVF9URVhUX1NJWkVfQURKVVNULAot
ICAgIENTU19QUk9QX1RFWFRfVFJBTlNGT1JNLAotICAgIENTU19QUk9QX09SUEhBTlMsCi0gICAg
Q1NTX1BST1BfV0hJVEVfU1BBQ0UsCi0gICAgQ1NTX1BST1BfV0lET1dTLAotICAgIENTU19QUk9Q
X1dPUkRfU1BBQ0lORywKLX07Ci0KLWNvbnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVy
dGllcyA9IHNpemVvZihpbmhlcml0YWJsZVByb3BlcnRpZXMpIC8gc2l6ZW9mKGluaGVyaXRhYmxl
UHJvcGVydGllc1swXSk7Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3
YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0
IGlzIHRoZSBsaXN0IG9mIENTUyBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJs
b2NrLWxldmVsIGVsZW1lbnRzLgotc3RhdGljIGNvbnN0IGludCBibG9ja1Byb3BlcnRpZXNbXSA9
IHsKLSAgICBDU1NfUFJPUF9PUlBIQU5TLAotICAgIENTU19QUk9QX09WRVJGTE9XLCAvLyBUaGlz
IGNhbiBiZSBhbHNvIGJlIGFwcGxpZWQgdG8gcmVwbGFjZWQgZWxlbWVudHMKLSAgICBDU1NfUFJP
UF9QQUdFX0JSRUFLX0FGVEVSLAotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfQkVGT1JFLAotICAg
IENTU19QUk9QX1BBR0VfQlJFQUtfSU5TSURFLAotICAgIENTU19QUk9QX1RFWFRfQUxJR04sCi0g
ICAgQ1NTX1BST1BfVEVYVF9JTkRFTlQsCi0gICAgQ1NTX1BST1BfV0lET1dTCi19OwotCi1jb25z
dCB1bnNpZ25lZCBudW1CbG9ja1Byb3BlcnRpZXMgPSBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzKSAv
IHNpemVvZihibG9ja1Byb3BlcnRpZXNbMF0pOwotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weUJsb2NrUHJvcGVy
dGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9w
ZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRp
ZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0KLXZvaWQg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygp
Ci17Ci0gICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGluaGVyaXRhYmxlUHJvcGVydGllcywgbnVt
SW5oZXJpdGFibGVQcm9wZXJ0aWVzKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25z
dCBpbnQgKnNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1
ZUxpc3Q8Q1NTUHJvcGVydHk+IGxpc3Q7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKHNldFtpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwotICAg
IH0KLSAgICByZXR1cm4gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIGxpc3QpOwot
fQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0aWVzSW5T
ZXQoY29uc3QgaW50ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ld
KTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZW1vdmUoQ1NT
UHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2hhbmdlZCkKLSAgICAg
ICAgc2V0Q2hhbmdlZCgpOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQotewotICAgIHJl
dHVybiB0aGlzOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5l
dyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigwLCBtX3ZhbHVlcyk7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXVuc2lnbmVkIHNob3J0IENTU0luaGVyaXRlZFZh
bHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfSU5IRVJJVDsKLX0K
LQotU3RyaW5nIENTU0luaGVyaXRlZFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gImluaGVyaXQiOwotfQotCi11bnNpZ25lZCBzaG9ydCBDU1NJbml0aWFsVmFsdWU6OmNzc1Zh
bHVlVHlwZSgpIGNvbnN0Ci17IAotICAgIHJldHVybiBDU1NfSU5JVElBTDsgCi19Ci0KLVN0cmlu
ZyBDU1NJbml0aWFsVmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVybiAiaW5pdGlh
bCI7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTVmFsdWVM
aXN0Ojp+Q1NTVmFsdWVMaXN0KCkKLXsKLSAgICBmb3IgKENTU1ZhbHVlICp2YWwgPSBtX3ZhbHVl
cy5maXJzdCgpOyB2YWw7IHZhbCA9IG1fdmFsdWVzLm5leHQoKSkKLSAgICAgICAgdmFsLT5kZXJl
ZigpOwotfQotCi11bnNpZ25lZCBzaG9ydCBDU1NWYWx1ZUxpc3Q6OmNzc1ZhbHVlVHlwZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIENTU19WQUxVRV9MSVNUOwotfQotCi12b2lkIENTU1ZhbHVlTGlz
dDo6YXBwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbCkKLXsKLSAgICBtX3ZhbHVlcy5hcHBl
bmQodmFsLnJlbGVhc2UoKSk7Ci19Ci0KLVN0cmluZyBDU1NWYWx1ZUxpc3Q6OmNzc1RleHQoKSBj
b25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiIjsKLQotICAgIGZvciAoRGVwcmVjYXRlZFB0
ckxpc3RJdGVyYXRvcjxDU1NWYWx1ZT4gaXRlcmF0b3IobV92YWx1ZXMpOyBpdGVyYXRvci5jdXJy
ZW50KCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgIHJlc3VsdCArPSBpdGVyYXRvci5jdXJy
ZW50KCktPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
UHJpbWl0aXZlVmFsdWUoKQotewotICAgIG1fdHlwZSA9IDA7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShpbnQgaWRlbnQpCi17Ci0gICAgbV92YWx1ZS5pZGVudCA9
IGlkZW50OwotICAgIG1fdHlwZSA9IENTU19JREVOVDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotewotICAgIG1f
dmFsdWUubnVtID0gbnVtOwotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmIHN0ciwgVW5pdFR5cGVzIHR5cGUp
Ci17Ci0gICAgaWYgKChtX3ZhbHVlLnN0cmluZyA9IHN0ci5pbXBsKCkpKQotICAgICAgICBtX3Zh
bHVlLnN0cmluZy0+cmVmKCk7Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4gYykKLXsKLSAgICBt
X3ZhbHVlLmNvdW50ZXIgPSBjLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfQ09VTlRFUjsK
LX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVj
dEltcGw+IHIpCi17Ci0gICAgbV92YWx1ZS5yZWN0ID0gci5yZWxlYXNlKCk7Ci0gICAgbV90eXBl
ID0gQ1NTX1JFQ1Q7Ci19Ci0KLSNpZiBfX0FQUExFX18KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQ
cmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gcikKLXsKLSAgICBtX3Zh
bHVlLnJlZ2lvbiA9IHIucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19EQVNIQk9BUkRfUkVH
SU9OOwotfQotI2VuZGlmCi0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShS
R0JBMzIgY29sb3IpCi17Ci0gICAgbV92YWx1ZS5yZ2Jjb2xvciA9IGNvbG9yOwotICAgIG1fdHlw
ZSA9IENTU19SR0JDT0xPUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZh
bHVlKFBhc3NSZWZQdHI8UGFpcj4gcCkKLXsKLSAgICBtX3ZhbHVlLnBhaXIgPSBwLnJlbGVhc2Uo
KTsKLSAgICBtX3R5cGUgPSBDU1NfUEFJUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6On5DU1NQ
cmltaXRpdmVWYWx1ZSgpCi17Ci0gICAgY2xlYW51cCgpOwotfQotCi12b2lkIENTU1ByaW1pdGl2
ZVZhbHVlOjpjbGVhbnVwKCkKLXsKLSAgICBzd2l0Y2gobV90eXBlKSB7Ci0gICAgY2FzZSBDU1Nf
U1RSSU5HOgotICAgIGNhc2UgQ1NTX1VSSToKLSAgICBjYXNlIENTU19BVFRSOgotICAgICAgICBp
ZiAobV92YWx1ZS5zdHJpbmcpCi0gICAgICAgICAgICBtX3ZhbHVlLnN0cmluZy0+ZGVyZWYoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ09VTlRFUjoKLSAgICAgICAgbV92YWx1ZS5j
b3VudGVyLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19SRUNUOgotICAg
ICAgICBtX3ZhbHVlLnJlY3QtPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
X1BBSVI6Ci0gICAgICAgIG1fdmFsdWUucGFpci0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0j
aWYgX19BUFBMRV9fCi0gICAgY2FzZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgaWYg
KG1fdmFsdWUucmVnaW9uKQotICAgICAgICAgICAgbV92YWx1ZS5yZWdpb24tPmRlcmVmKCk7Ci0g
ICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgbV90eXBlID0gMDsKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRl
TGVuZ3RoSW50KFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29t
cHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMg
aW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4g
IFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNs
b3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAg
PyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFYIHx8IHJlc3Vs
dCA8IElOVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsg
ICAgCi19Ci0KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludChSZW5kZXJT
dHlsZSAqc3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBt
dWx0aXBsaWVyICogY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlz
IGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBl
LmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYg
d2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0
ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJ
TlRfTUFYIHx8IHJlc3VsdCA8IElOVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biAoaW50KXJlc3VsdDsgIAotfQotCi1jb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZm
ZmZmOyAvLyBtYXggdmFsdWUgZm9yIGEgMjgtYml0IGludAotY29uc3QgaW50IGludE1pbkZvckxl
bmd0aCA9ICgtMHg3ZmZmZmZmLTEpOyAvLyBtaW4gdmFsdWUgZm9yIGEgMjgtYml0IGludAotCi0v
LyBMZW5ndGhzIGV4cGVjdCBhbiBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUg
dG8gY2hlY2sgZm9yIGEgZGlmZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVl
Ojpjb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBk
b3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBU
aGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9m
LCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQg
aWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVz
dWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQg
PiBpbnRNYXhGb3JMZW5ndGggfHwgcmVzdWx0IDwgaW50TWluRm9yTGVuZ3RoKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gKGludClyZXN1bHQ7ICAgIAotfQotCi0vLyBMZW5ndGhzIGV4
cGVjdCBhbiBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9y
IGEgZGlmZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17
Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5
bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJl
c3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRv
IGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50
ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0g
ICAgCi0gICAgaWYgKHJlc3VsdCA+IGludE1heEZvckxlbmd0aCB8fCByZXN1bHQgPCBpbnRNaW5G
b3JMZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgIAot
fQotCi1zaG9ydCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0
eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0
eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiBy
ZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0
byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGlu
dGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwot
ICAgIAotICAgIGlmIChyZXN1bHQgPiBTSFJUX01BWCB8fCByZXN1bHQgPCBTSFJUX01JTikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChzaG9ydClyZXN1bHQ7ICAgIAotfQotCi1zaG9y
dCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpzdHls
ZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIg
KiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lv
biBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5
OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFs
bHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0
IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IFNIUlRfTUFYIHx8
IHJlc3VsdCA8IFNIUlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKHNob3J0
KXJlc3VsdDsgIAotfQotCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhG
bG9hdChSZW5kZXJTdHlsZSAqc3R5bGUsIGJvb2wgYXBwbHlab29tRmFjdG9yKQotewotICAgIHVu
c2lnbmVkIHNob3J0IHR5cGUgPSBwcmltaXRpdmVUeXBlKCk7Ci0KLSAgICAvLyBXZSBhbHdheXMg
YXNzdW1lIDk2IENTUyBwaXhlbHMgaW4gYSBDU1MgaW5jaC4gVGhpcyBpcyB0aGUgY29sZCBoYXJk
IHRydXRoIG9mIHRoZSBXZWIuCi0gICAgLy8gQXQgaGlnaCBEUEksIHdlIG1heSBzY2FsZSBhIENT
UyBwaXhlbCwgYnV0IHRoZSByYXRpbyBvZiB0aGUgQ1NTIHBpeGVsIHRvIHRoZSBzby1jYWxsZWQK
LSAgICAvLyAiYWJzb2x1dGUiIENTUyBsZW5ndGggdW5pdHMgbGlrZSBpbmNoIGFuZCBwdCBpcyBh
bHdheXMgZml4ZWQgYW5kIG5ldmVyIGNoYW5nZXMuCi0gICAgZG91YmxlIGNzc1BpeGVsc1Blcklu
Y2ggPSA5Ni47Ci0KLSAgICBkb3VibGUgZmFjdG9yID0gMS47Ci0gICAgc3dpdGNoKHR5cGUpIHsK
LSAgICBjYXNlIENTU19FTVM6Ci0gICAgICAgIGZhY3RvciA9IGFwcGx5Wm9vbUZhY3RvciA/Ci0g
ICAgICAgICAgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIDoKLSAgICAg
ICAgICBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU19FWFM6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBi
dWcgcmlnaHQgbm93IHdoZXJlIHRoZSB6b29tIHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1l
cyB0byBFWCB1bml0cy4KLSAgICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgdG8gY29tcHV0ZSBFWCB1
c2luZyBmb250TWV0cmljcyBmb3IgdGhlIG9yaWdpbmFsIHNwZWNpZmllZFNpemUgYW5kIG5vdCB1
c2UKLSAgICAgICAgLy8gb3VyIGFjdHVhbCBjb25zdHJ1Y3RlZCByZW5kZXJpbmcgZm9udC4KLSAg
ICAgICAgZmFjdG9yID0gc3R5bGUtPmZvbnQoKS54SGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIENTU19QWDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ006
Ci0gICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gvMi41NDsgLy8gKDIuNTQgY20vaW4p
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX01NOgotICAgICAgICBmYWN0b3IgPSBjc3NQ
aXhlbHNQZXJJbmNoLzI1LjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0lOOgotICAg
ICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU19QVDoKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC83Mi47Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTX1BDOgotICAgICAgICAvLyAxIHBjID09IDEyIHB0Ci0gICAg
ICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gqMTIuLzcyLjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiBnZXRG
bG9hdFZhbHVlKCkgKiBmYWN0b3I7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldEZs
b2F0VmFsdWUoIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAvLyAj
IyMgY2hlY2sgaWYgcHJvcGVydHkgc3VwcG9ydHMgdGhpcyB0eXBlCi0gICAgaWYgKG1fdHlwZSA+
IENTU19ESU1FTlNJT04pIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIC8vaWYobV90eXBlID4gQ1NTX0RJTUVOU0lPTikgdGhyb3cgRE9NRXhj
ZXB0aW9uKElOVkFMSURfQUNDRVNTX0VSUik7Ci0gICAgbV92YWx1ZS5udW0gPSBmbG9hdFZhbHVl
OwotICAgIG1fdHlwZSA9IHVuaXRUeXBlOwotfQotCi1kb3VibGUgc2NhbGVGYWN0b3JGb3JDb252
ZXJzaW9uKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQotewotICAgIGRvdWJsZSBjc3NQaXhlbHNQ
ZXJJbmNoID0gOTYuMDsKLSAgICBkb3VibGUgZmFjdG9yID0gMS4wOwotICAgIAotICAgIHN3aXRj
aCh1bml0VHlwZSkgewotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NN
OgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDIuNTQ7IC8vICgyLjU0
IGNtL2luKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19NTToKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyAyNS40
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JTjoKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgICAg
ICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDOgotICAgICAgICAgICAg
ZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOyAvLyAxIHBjID09IDEyIHB0
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFjdG9yOwotfQotCi1kb3VibGUgQ1NTUHJpbWl0
aXZlVmFsdWU6OmdldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCi17Ci0gICAg
aWYgKHVuaXRUeXBlID09IG1fdHlwZSB8fCB1bml0VHlwZSA8IENTU19QWCB8fCB1bml0VHlwZSA+
IENTU19QQykKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUubnVtOwotICAgIAotICAgIGRvdWJsZSBj
b252ZXJ0ZWRWYWx1ZSA9IG1fdmFsdWUubnVtOwotICAgIAotICAgIC8vIEZpcnN0IGNvbnZlcnQg
dGhlIHZhbHVlIGZyb20gbV90eXBlIGludG8gQ1NTUGl4ZWxzCi0gICAgZG91YmxlIGZhY3RvciA9
IHNjYWxlRmFjdG9yRm9yQ29udmVyc2lvbihtX3R5cGUpOwotICAgIGNvbnZlcnRlZFZhbHVlICo9
IGZhY3RvcjsKLSAgICAKLSAgICAvLyBOb3cgY29udmVydCBmcm9tIENTU1BpeGVscyB0byB0aGUg
c3BlY2lmaWVkIHVuaXRUeXBlCi0gICAgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9u
KHVuaXRUeXBlKTsKLSAgICBjb252ZXJ0ZWRWYWx1ZSAvPSBmYWN0b3I7Ci0gICAgCi0gICAgcmV0
dXJuIGNvbnZlcnRlZFZhbHVlOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRTdHJp
bmdWYWx1ZSggdW5zaWduZWQgc2hvcnQgc3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nICZzdHJpbmdW
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsK
LSAgICAvL2lmKG1fdHlwZSA8IENTU19TVFJJTkcpIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElE
X0FDQ0VTU19FUlIpOwotICAgIC8vaWYobV90eXBlID4gQ1NTX0FUVFIpIHRocm93IERPTUV4Y2Vw
dGlvbihJTlZBTElEX0FDQ0VTU19FUlIpOwotICAgIGlmIChtX3R5cGUgPCBDU1NfU1RSSU5HIHx8
IG1fdHlwZSA+IENTU19BVFRSKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAoc3RyaW5nVHlwZSAhPSBDU1NfSURFTlQpIHsKLSAgICAg
ICAgbV92YWx1ZS5zdHJpbmcgPSBzdHJpbmdWYWx1ZS5pbXBsKCk7Ci0gICAgICAgIG1fdmFsdWUu
c3RyaW5nLT5yZWYoKTsKLSAgICAgICAgbV90eXBlID0gc3RyaW5nVHlwZTsKLSAgICB9Ci0gICAg
Ly8gIyMjIHBhcnNlIGlkZW50Ci19Ci0KLVN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0U3Ry
aW5nVmFsdWUoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2Ug
Q1NTX1NUUklORzoKLSAgICAgICAgY2FzZSBDU1NfQVRUUjoKLSAgICAgICAgY2FzZSBDU1NfVVJJ
OgotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuc3RyaW5nOwotICAgICAgICBjYXNlIENTU19J
REVOVDoKLSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZU5hbWUobV92YWx1ZS5pZGVudCk7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIENTUyAyLjEgc3BlYyBz
YXlzIHlvdSBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi11bnNpZ25lZCBzaG9y
dCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q1NTX1BSSU1JVElWRV9WQUxVRTsKLX0KLQotYm9vbCBDU1NQcmltaXRpdmVWYWx1ZTo6cGFyc2VT
dHJpbmcoIGNvbnN0IFN0cmluZyAmLypzdHJpbmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElkZW50KCkK
LXsKLSAgICBpZihtX3R5cGUgIT0gQ1NTX0lERU5UKSByZXR1cm4gMDsKLSAgICByZXR1cm4gbV92
YWx1ZS5pZGVudDsKLX0KLQotU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29u
c3QKLXsKLSAgICAvLyAjIyMgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbnN0ZWFkIG9mIGEg
Z2VuZXJhdGVkIG9uZSAoZS5nLiBjb2xvcgotICAgIC8vIG5hbWUgaWYgaXQgd2FzIHNwZWNpZmll
ZCkgLSBjaGVjayB3aGF0IHNwZWMgc2F5cyBhYm91dCB0aGlzCi0gICAgU3RyaW5nIHRleHQ7Ci0g
ICAgc3dpdGNoICggbV90eXBlICkgewotICAgICAgICBjYXNlIENTU19VTktOT1dOOgotICAgICAg
ICAgICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfTlVNQkVS
OgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAg
dGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICIlIjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU19FTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpu
dW1iZXIobV92YWx1ZS5udW0pICsgImVtIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU19FWFM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5u
dW0pICsgImV4IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QWDoKLSAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHgiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJjbSI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NfTU06Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIo
bV92YWx1ZS5udW0pICsgIm1tIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U19JTjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAi
aW4iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICAg
ICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwdCI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUEM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgInBjIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19ERUc6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgImRlZyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUkFE
OgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImdyYWQiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX01TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJtcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NfUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVl
Lm51bSkgKyAicyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSFo6Ci0g
ICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImh6IjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19LSFo6Ci0gICAgICAgICAgICB0ZXh0
ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImtoeiI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NfRElNRU5TSU9OOgotICAgICAgICAgICAgLy8gIyMjCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAgICAgICAgICAgdGV4
dCA9IHF1b3RlU3RyaW5nSWZOZWVkZWQobV92YWx1ZS5zdHJpbmcpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX1VSSToKLSAgICAgICAgICAgIHRleHQgPSAidXJsKCIgKyBT
dHJpbmcobV92YWx1ZS5zdHJpbmcpICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTX0lERU5UOgotICAgICAgICAgICAgdGV4dCA9IGdldFZhbHVlTmFtZShtX3ZhbHVl
LmlkZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19BVFRSOgotICAg
ICAgICAgICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQ09V
TlRFUjoKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ1NTX1JFQ1Q6IHsKLSAgICAgICAgICAgIFJlY3RJbXBsKiByZWN0VmFsID0gZ2V0UmVjdFZh
bHVlKCk7Ci0gICAgICAgICAgICB0ZXh0ID0gInJlY3QoIjsKLSAgICAgICAgICAgIHRleHQgKz0g
cmVjdFZhbC0+dG9wKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVj
dFZhbC0+cmlnaHQoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0
VmFsLT5ib3R0b20oKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0
VmFsLT5sZWZ0KCktPmNzc1RleHQoKSArICIpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQ1NTX1JHQkNPTE9SOiB7Ci0gICAgICAgICAgICBDb2xvciBjb2xv
cihtX3ZhbHVlLnJnYmNvbG9yKTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwgMHhG
RikKLSAgICAgICAgICAgICAgICB0ZXh0ID0gInJnYmEoIjsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB0ZXh0ID0gInJnYigiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6
Om51bWJlcihjb2xvci5yZWQoKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6
Om51bWJlcihjb2xvci5ncmVlbigpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmlu
Zzo6bnVtYmVyKGNvbG9yLmJsdWUoKSk7Ci0gICAgICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA8
IDB4RkYpCi0gICAgICAgICAgICAgICAgdGV4dCArPSAiLCAiICsgU3RyaW5nOjpudW1iZXIoKGZs
b2F0KWNvbG9yLmFscGhhKCkgLyAweEZGKTsKLSAgICAgICAgICAgIHRleHQgKz0gIikiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NfUEFJUjoKLSAgICAg
ICAgICAgIHRleHQgPSBtX3ZhbHVlLnBhaXItPmZpcnN0KCktPmNzc1RleHQoKTsKLSAgICAgICAg
ICAgIHRleHQgKz0gIiAiOwotICAgICAgICAgICAgdGV4dCArPSBtX3ZhbHVlLnBhaXItPnNlY29u
ZCgpLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAgICAg
ICAgY2FzZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgICAgIGZvciAoRGFzaGJvYXJk
UmVnaW9uKiByZWdpb24gPSBnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOyByZWdpb247IHJlZ2lv
biA9IHJlZ2lvbi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICJkYXNo
Ym9hcmQtcmVnaW9uKCI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fbGFiZWw7
Ci0gICAgICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAgICAgICAgICAg
ICAgICAgdGV4dCArPSAiIGNpcmNsZSAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lv
bi0+bV9pc1JlY3RhbmdsZSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIHJlY3Rhbmds
ZSAiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0g
ICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPnJpZ2h0KCktPmNzc1RleHQoKSArICIgIjsK
LSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+Ym90dG9tKCktPmNzc1RleHQoKSArICIg
IjsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0g
ICAgICAgICAgICAgICAgdGV4dCArPSAiKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotUmVjdEltcGw6On5SZWN0SW1wbCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhaXI6On5Q
YWlyKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1
ZShjb25zdCBTdHJpbmcmIHVybCwgU3R5bGVCYXNlICpzdHlsZSkKLSAgICA6IENTU1ByaW1pdGl2
ZVZhbHVlKHVybCwgQ1NTX1VSSSksIG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZShmYWxzZSkK
LXsKLX0KLQotQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1ZSgpCi0gICAgOiBDU1NQcmltaXRp
dmVWYWx1ZShDU1NfVkFMX05PTkUpLCBtX2ltYWdlKDApLCBtX2FjY2Vzc2VkSW1hZ2UodHJ1ZSkK
LXsKLX0KLQotQ1NTSW1hZ2VWYWx1ZTo6fkNTU0ltYWdlVmFsdWUoKQotewotICAgIGlmIChtX2lt
YWdlKQotICAgICAgICBtX2ltYWdlLT5kZXJlZih0aGlzKTsKLX0KLQotQ2FjaGVkSW1hZ2UqIENT
U0ltYWdlVmFsdWU6OmltYWdlKERvY0xvYWRlciogbG9hZGVyKQotewotICAgIGlmICghbV9hY2Nl
c3NlZEltYWdlKSB7Ci0gICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKGxvYWRlcikKLSAgICAgICAgICAgIG1faW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZShn
ZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pbWFnZSA9IENh
Y2hlOjpyZXF1ZXN0SW1hZ2UoMCwgZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobV9pbWFnZSkKLSAgICAgICAgICAgIG1faW1hZ2UtPnJlZih0aGlzKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIG1faW1hZ2U7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NC
b3JkZXJJbWFnZVZhbHVlOjpDU1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VW
YWx1ZT4gaW1hZ2UsCi0gICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4gaW1hZ2VSZWN0LCBpbnQgaG9y
aXpvbnRhbFJ1bGUsIGludCB2ZXJ0aWNhbFJ1bGUpCi0gICAgOiBtX2ltYWdlKGltYWdlKSwgbV9p
bWFnZVNsaWNlUmVjdChpbWFnZVJlY3QpCi0gICAgLCBtX2hvcml6b250YWxTaXplUnVsZShob3Jp
em9udGFsUnVsZSksIG1fdmVydGljYWxTaXplUnVsZSh2ZXJ0aWNhbFJ1bGUpCi17Ci19Ci0KLVN0
cmluZyBDU1NCb3JkZXJJbWFnZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAvLyBJbWFn
ZSBmaXJzdC4KLSAgICBTdHJpbmcgdGV4dChtX2ltYWdlLT5jc3NUZXh0KCkpOwotICAgIHRleHQg
Kz0gIiAiOwotICAgIAotICAgIC8vIE5vdyB0aGUgcmVjdCwgYnV0IGl0IGlzbid0IHJlYWxseSBh
IHJlY3QsIHNvIHdlIGR1bXAgbWFudWFsbHkKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3Qt
PnRvcCgpLT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2ltYWdl
U2xpY2VSZWN0LT5yaWdodCgpLT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4
dCArPSBtX2ltYWdlU2xpY2VSZWN0LT5ib3R0b20oKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0g
IiAiOwotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0g
ICAgCi0gICAgLy8gTm93IHRoZSBrZXl3b3Jkcy4KLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0
ICs9IENTU1ByaW1pdGl2ZVZhbHVlKG1faG9yaXpvbnRhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0g
ICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX3ZlcnRpY2Fs
U2l6ZVJ1bGUpLmNzc1RleHQoKTsKLQotICAgIHJldHVybiB0ZXh0OwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotRm9udEZhbWlseVZhbHVlOjpGb250RmFtaWx5VmFsdWUoY29uc3QgRGVwcmVj
YXRlZFN0cmluZyYgc3RyaW5nKQotICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUoU3RyaW5nKCksIENT
U19TVFJJTkcpCi17Ci0gICAgc3RhdGljIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uIHBhcmVuUmVn
KCIgXFwoLipcXCkkIik7Ci0gICAgc3RhdGljIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uIGJyYWNl
UmVnKCIgXFxbLipcXF0kIik7Ci0KLSAgICBwYXJzZWRGb250TmFtZSA9IHN0cmluZzsKLSAgICAv
LyBhIGxhbmd1YWdlIHRhZyBpcyBvZnRlbiBhZGRlZCBpbiBicmFjZXMgYXQgdGhlIGVuZC4gUmVt
b3ZlIGl0LgotICAgIHBhcnNlZEZvbnROYW1lLnJlcGxhY2UocGFyZW5SZWcsICIiKTsKLSAgICAv
LyByZW1vdmUgW1hmdF0gcXVhbGlmaWVycwotICAgIHBhcnNlZEZvbnROYW1lLnJlcGxhY2UoYnJh
Y2VSZWcsICIiKTsKLX0KLQotU3RyaW5nIEZvbnRGYW1pbHlWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHF1b3RlU3RyaW5nSWZOZWVkZWQocGFyc2VkRm9udE5hbWUpOwotfQot
Ci1TdHJpbmcgRm9udFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAvLyBmb250IHZhcmlh
bnQgd2VpZ2h0IHNpemUgLyBsaW5lLWhlaWdodCBmYW1pbHkgCi0KLSAgICBTdHJpbmcgcmVzdWx0
KCIiKTsKLQotICAgIGlmIChzdHlsZSkgewotICAgICAgICByZXN1bHQgKz0gc3R5bGUtPmNzc1Rl
eHQoKTsKLSAgICB9Ci0gICAgaWYgKHZhcmlhbnQpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IHZh
cmlhbnQtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHdlaWdodCkgewotICAgICAgICBpZiAo
IXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICBy
ZXN1bHQgKz0gd2VpZ2h0LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmIChzaXplKSB7Ci0gICAg
ICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0g
ICAgICAgIHJlc3VsdCArPSBzaXplLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmIChsaW5lSGVp
Z2h0KSB7Ci0gICAgICAgIGlmICghc2l6ZSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0g
ICAgICAgIHJlc3VsdCArPSAiLyI7Ci0gICAgICAgIHJlc3VsdCArPSBsaW5lSGVpZ2h0LT5jc3NU
ZXh0KCk7Ci0gICAgfQotICAgIGlmIChmYW1pbHkpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IGZh
bWlseS0+Y3NzVGV4dCgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gICAgCi0K
IC8vIFVzZWQgZm9yIHRleHQtc2hhZG93IGFuZCBib3gtc2hhZG93CiBTaGFkb3dWYWx1ZTo6U2hh
ZG93VmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gX3gsCiAgICAgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gX3ksCiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gX2JsdXIsCiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gX2NvbG9yKQotICAg
IDogeChfeCksIHkoX3kpLCBibHVyKF9ibHVyKSwgY29sb3IoX2NvbG9yKQorICAgIDogeChfeCkK
KyAgICAsIHkoX3kpCisgICAgLCBibHVyKF9ibHVyKQorICAgICwgY29sb3IoX2NvbG9yKQogewog
fQogCkBAIC0xMzQxLDE1ICs2Myw0IEBACiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLVN0cmluZyBD
U1NQcm9wZXJ0eTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5TmFt
ZShpZCgpKSArICI6ICIgKyBtX3ZhbHVlLT5jc3NUZXh0KCkKLSAgICAgICAgKyAoaXNJbXBvcnRh
bnQoKSA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAiOyAiOwotfQotCi1ib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ1NTUHJvcGVydHkgJmEsIGNvbnN0IENTU1Byb3BlcnR5ICZiKQotewotICAgIHJldHVy
biBhLm1faWQgPT0gYi5tX2lkICYmIGEubV9pbXBvcnRhbnQgPT0gYi5tX2ltcG9ydGFudCAmJiBh
Lm1fdmFsdWUgPT0gYi5tX3ZhbHVlOwotfQotCiB9CkluZGV4OiBjc3MvQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9u
IDE0NDAwKQorKysgY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MjAsMzggKzIwLDE3IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0j
aWZuZGVmIENTU19jc3NfdmFsdWVpbXBsX2hfCi0jZGVmaW5lIENTU19jc3NfdmFsdWVpbXBsX2hf
CisjaWZuZGVmIENTU1N0eWxlRGVjbGFyYXRpb25fSAorI2RlZmluZSBDU1NTdHlsZURlY2xhcmF0
aW9uX0gKIAotI2luY2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudC5oIgotI2luY2x1ZGUgImNzc19i
YXNlLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNh
dGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLWNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CisjaW5jbHVk
ZSAiY3NzX2Jhc2UuaCIgLy8gZm9yIFN0eWxlQmFzZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1j
bGFzcyBDb3VudGVyOwotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgTm9kZTsKLWNsYXNzIFBhaXI7
Ci1jbGFzcyBSZWN0SW1wbDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0jaWYgX19BUFBMRV9fCi1j
bGFzcyBEYXNoYm9hcmRSZWdpb247Ci0jZW5kaWYKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKIAotZXh0ZXJuIGNvbnN0IGludCBpbmhlcml0YWJsZVByb3BlcnRpZXNbXTsKLWV4dGVybiBj
b25zdCB1bnNpZ25lZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXM7Ci0KIGNsYXNzIENTU1N0eWxl
RGVjbGFyYXRpb24gOiBwdWJsaWMgU3R5bGVCYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNTdHlsZURlY2xhcmF0aW9uKCk7CkBAIC05OCw0NjMgKzc3LDYgQEAKICAgICBDU1NTdHls
ZURlY2xhcmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKIH07
CiAKLWNsYXNzIENTU1ZhbHVlIDogcHVibGljIFN0eWxlQmFzZQotewotcHVibGljOgotICAgIGVu
dW0gVW5pdFR5cGVzIHsKLSAgICAgICAgQ1NTX0lOSEVSSVQgPSAwLAotICAgICAgICBDU1NfUFJJ
TUlUSVZFX1ZBTFVFID0gMSwKLSAgICAgICAgQ1NTX1ZBTFVFX0xJU1QgPSAyLAotICAgICAgICBD
U1NfQ1VTVE9NID0gMywKLSAgICAgICAgQ1NTX0lOSVRJQUwgPSA0Ci0gICAgfTsKLQotICAgIENT
U1ZhbHVlKCkgOiBTdHlsZUJhc2UoMCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0
IGNzc1ZhbHVlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENTU19DVVNUT007IH0KLSAgICB2aXJ0dWFs
IFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBT
dHJpbmcmKSB7IH0gLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLQotICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1
ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi1jbGFzcyBDU1NJbmhlcml0ZWRWYWx1ZSA6IHB1
YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3Nz
VmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owot
fTsKLQotY2xhc3MgQ1NTSW5pdGlhbFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci19OwotCi1jbGFzcyBDU1NWYWx1ZUxpc3Qg
OiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DU1NWYWx1ZUxpc3Qo
KTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmNvdW50
KCk7IH0KLSAgICBDU1NWYWx1ZSogaXRlbSAodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFs
dWVzLmF0KGluZGV4KTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBj
b25zdDsKLQotICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKLSAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBEZXByZWNhdGVk
UHRyTGlzdDxDU1NWYWx1ZT4gbV92YWx1ZXM7Ci19OwotCi0KLWNsYXNzIENTU1ByaW1pdGl2ZVZh
bHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBVbml0VHlwZXMgewot
ICAgICAgICBDU1NfVU5LTk9XTiA9IDAsCi0gICAgICAgIENTU19OVU1CRVIgPSAxLAotICAgICAg
ICBDU1NfUEVSQ0VOVEFHRSA9IDIsCi0gICAgICAgIENTU19FTVMgPSAzLAotICAgICAgICBDU1Nf
RVhTID0gNCwKLSAgICAgICAgQ1NTX1BYID0gNSwKLSAgICAgICAgQ1NTX0NNID0gNiwKLSAgICAg
ICAgQ1NTX01NID0gNywKLSAgICAgICAgQ1NTX0lOID0gOCwKLSAgICAgICAgQ1NTX1BUID0gOSwK
LSAgICAgICAgQ1NTX1BDID0gMTAsCi0gICAgICAgIENTU19ERUcgPSAxMSwKLSAgICAgICAgQ1NT
X1JBRCA9IDEyLAotICAgICAgICBDU1NfR1JBRCA9IDEzLAotICAgICAgICBDU1NfTVMgPSAxNCwK
LSAgICAgICAgQ1NTX1MgPSAxNSwKLSAgICAgICAgQ1NTX0haID0gMTYsCi0gICAgICAgIENTU19L
SFogPSAxNywKLSAgICAgICAgQ1NTX0RJTUVOU0lPTiA9IDE4LAotICAgICAgICBDU1NfU1RSSU5H
ID0gMTksCi0gICAgICAgIENTU19VUkkgPSAyMCwKLSAgICAgICAgQ1NTX0lERU5UID0gMjEsCi0g
ICAgICAgIENTU19BVFRSID0gMjIsCi0gICAgICAgIENTU19DT1VOVEVSID0gMjMsCi0gICAgICAg
IENTU19SRUNUID0gMjQsCi0gICAgICAgIENTU19SR0JDT0xPUiA9IDI1LAotICAgICAgICBDU1Nf
UEFJUiA9IDEwMCwgLy8gV2UgZW52aXNpb24gdGhpcyBiZWluZyBleHBvc2VkIGFzIGEgbWVhbnMg
b2YgZ2V0dGluZyBjb21wdXRlZCBzdHlsZSB2YWx1ZXMgZm9yIHBhaXJzIChib3JkZXItc3BhY2lu
Zy9yYWRpdXMsIGJhY2tncm91bmQtcG9zaXRpb24sIGV0Yy4pCi0gICAgICAgIENTU19EQVNIQk9B
UkRfUkVHSU9OID0gMTAxIC8vIEZJWE1FOiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMgZG9pbmcgYXMg
YSBwcmltaXRpdmUgdmFsdWU/IEl0IHNob3VsZCBub3QgYmUhCi0gICAgfTsKLQotICAgIC8vIEZJ
WE1FOiBpbnQgdnMuIHVuc2lnbmVkIG92ZXJsb2FkaW5nIGlzIHRvbyB0cmlja3kgZm9yIGNvbG9y
IHZzLiBpZGVudAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUoaW50IGlkZW50KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShkb3VibGUsIFVuaXRUeXBlcyk7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU3RyaW5nJiwgVW5pdFR5cGVzKTsKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPENvdW50ZXI+KTsKLSAgICBDU1NQcmltaXRpdmVW
YWx1ZShQYXNzUmVmUHRyPFJlY3RJbXBsPik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUodW5zaWdu
ZWQgY29sb3IpOyAvLyBSR0IgdmFsdWUKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRy
PFBhaXI+KTsKLQotI2lmIF9fQVBQTEVfXwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQ
dHI8RGFzaGJvYXJkUmVnaW9uPik7IC8vIEZJWE1FOiBXaHkgaXMgZGFzaGJvYXJkIHJlZ2lvbiBh
IHByaW1pdGl2ZSB2YWx1ZT8gVGhpcyBtYWtlcyBubyBzZW5zZS4KLSNlbmRpZgotCi0gICAgdmly
dHVhbCB+Q1NTUHJpbWl0aXZlVmFsdWUoKTsKLQotICAgIHZvaWQgY2xlYW51cCgpOwotCi0gICAg
dW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQot
Ci0gICAgLyoKLSAgICAgKiBjb21wdXRlcyBhIGxlbmd0aCBpbiBwaXhlbHMgb3V0IG9mIHRoZSBn
aXZlbiBDU1NWYWx1ZS4gTmVlZCB0aGUgUmVuZGVyU3R5bGUgdG8gZ2V0Ci0gICAgICogdGhlIGZv
bnRpbmZvIGluIGNhc2UgdmFsIGlzIGRlZmluZWQgaW4gZW0gb3IgZXguCi0gICAgICoKLSAgICAg
KiBUaGUgbWV0cmljcyBoYXZlIHRvIGJlIGEgYml0IGRpZmZlcmVudCBmb3Igc2NyZWVuIGFuZCBw
cmludGVyIG91dHB1dC4KLSAgICAgKiBGb3Igc2NyZWVuIG91dHB1dCB3ZSBhc3N1bWUgMSBpbmNo
ID09IDcyIHB4LCBmb3IgcHJpbnRlciB3ZSBhc3N1bWUgMzAwIGRwaQotICAgICAqCi0gICAgICog
dGhpcyBpcyBzY3JlZW4vcHJpbnRlciBkZXBlbmRlbnQsIHNvIHdlIHByb2JhYmx5IG5lZWQgYSBj
b25maWcgb3B0aW9uIGZvciB0aGlzLAotICAgICAqIGFuZCBzb21lIHRvb2wgdG8gY2FsaWJyYXRl
LgotICAgICAqLwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKik7Ci0gICAg
aW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0g
ICAgaW50IGNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqKTsKLSAgICBpbnQg
Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVy
KTsKLSAgICBzaG9ydCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqKTsKLSAgICBzaG9y
dCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0g
ICAgZG91YmxlIGNvbXB1dGVMZW5ndGhGbG9hdChSZW5kZXJTdHlsZSosIGJvb2wgYXBwbHlab29t
RmFjdG9yID0gdHJ1ZSk7Ci0KLSAgICAvLyB1c2Ugd2l0aCBjYXJlISEhCi0gICAgdm9pZCBzZXRQ
cmltaXRpdmVUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQotICAg
IHZvaWQgc2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZG91YmxlIGZsb2F0
VmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSh1bnNpZ25l
ZCBzaG9ydCB1bml0VHlwZSk7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUoKSB7IHJldHVybiBt
X3ZhbHVlLm51bTsgfQotCi0gICAgdm9pZCBzZXRTdHJpbmdWYWx1ZSh1bnNpZ25lZCBzaG9ydCBz
dHJpbmdUeXBlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0gICAgCi0gICAgQ291bnRlciogZ2V0
Q291bnRlclZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfQ09V
TlRFUiA/IDAgOiBtX3ZhbHVlLmNvdW50ZXI7Ci0gICAgfQotCi0gICAgUmVjdEltcGwqIGdldFJl
Y3RWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1JFQ1QgPyAw
IDogbV92YWx1ZS5yZWN0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGdldFJHQkNvbG9yVmFsdWUo
KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1JHQkNPTE9SID8gMCA6IG1f
dmFsdWUucmdiY29sb3I7Ci0gICAgfQotCi0gICAgUGFpciogZ2V0UGFpclZhbHVlKCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19QQUlSID8gMCA6IG1fdmFsdWUucGFpcjsK
LSAgICB9Ci0KLSNpZiBfX0FQUExFX18KLSAgICBEYXNoYm9hcmRSZWdpb24gKmdldERhc2hib2Fy
ZFJlZ2lvblZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfREFT
SEJPQVJEX1JFR0lPTiA/IDAgOiBtX3ZhbHVlLnJlZ2lvbjsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IHZpcnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0KLSAgICBp
bnQgZ2V0SWRlbnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJp
bmcmLCBib29sID0gZmFsc2UpOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgaW50IG1fdHlwZTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGludCBpZGVu
dDsKLSAgICAgICAgZG91YmxlIG51bTsKLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAg
ICAgICBDb3VudGVyKiBjb3VudGVyOwotICAgICAgICBSZWN0SW1wbCogcmVjdDsKLSAgICAgICAg
dW5zaWduZWQgcmdiY29sb3I7Ci0gICAgICAgIFBhaXIqIHBhaXI7Ci0jaWYgX19BUFBMRV9fCi0g
ICAgICAgIERhc2hib2FyZFJlZ2lvbiogcmVnaW9uOwotI2VuZGlmCi0gICAgfSBtX3ZhbHVlOwot
fTsKLQotLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGhhbmRsZSBxdWlya3kgbWFyZ2lucyBpbiBy
ZWZsb3cgcm9vdHMgKGJvZHksIHRkLCBhbmQgdGgpIGxpa2UgV2luSUUuCi0vLyBUaGUgYmFzaWMg
aWRlYSBpcyB0aGF0IGEgc3R5bGVzaGVldCBjYW4gdXNlIHRoZSB2YWx1ZSBfX3FlbSAoZm9yIHF1
aXJreSBlbSkgaW5zdGVhZCBvZiBlbQotLy8gaW4gYSBzdHlsZXNoZWV0LiAgV2hlbiB0aGUgcXVp
cmt5IHZhbHVlIGlzIHVzZWQsIGlmIHlvdSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlIG1hcmdpbiB3
aWxsCi0vLyBjb2xsYXBzZSBhd2F5IGluc2lkZSBhIHRhYmxlIGNlbGwuCi1jbGFzcyBDU1NRdWly
a1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0g
ICAgQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZShkb3VibGUgbnVtLCBVbml0VHlwZXMgdHlwZSkKLSAg
ICAgICAgOiBDU1NQcmltaXRpdmVWYWx1ZShudW0sIHR5cGUpIHt9Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotY2xhc3MgQ291bnRlciA6
IHB1YmxpYyBTaGFyZWQ8Q291bnRlcj4gewotcHVibGljOgotICAgIFN0cmluZyBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgU3RyaW5nIGxpc3RTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGlzdFN0eWxlOyB9Ci0gICAgU3RyaW5nIHNlcGFyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2VwYXJhdG9yOyB9Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwot
ICAgIFN0cmluZyBtX2xpc3RTdHlsZTsKLSAgICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci19OwotCi1j
bGFzcyBSZWN0SW1wbCA6IHB1YmxpYyBTaGFyZWQ8UmVjdEltcGw+IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5SZWN0SW1wbCgpOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0
IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9yaWdodC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBi
b3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbS5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0LmdldCgpOyB9Ci0KLSAgICB2b2lk
IHNldFRvcChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3ApIHsgbV90b3AgPSB0b3A7
IH0KLSAgICB2b2lkIHNldFJpZ2h0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJpZ2h0
KSB7IG1fcmlnaHQgPSByaWdodDsgfQotICAgIHZvaWQgc2V0Qm90dG9tKFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGJvdHRvbSkgeyBtX2JvdHRvbSA9IGJvdHRvbTsgfQotICAgIHZvaWQg
c2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0KSB7IG1fbGVmdCA9IGxl
ZnQ7IH0KLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV90b3A7
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0OwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbV9ib3R0b207Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBt
X2xlZnQ7Ci19OwotCi0vLyBBIHByaW1pdGl2ZSB2YWx1ZSByZXByZXNlbnRpbmcgYSBwYWlyLiAg
VGhpcyBpcyB1c2VmdWwgZm9yIHByb3BlcnRpZXMgbGlrZSBib3JkZXItcmFkaXVzLCBiYWNrZ3Jv
dW5kLXNpemUvcG9zaXRpb24sCi0vLyBhbmQgYm9yZGVyLXNwYWNpbmcgKGFsbCBvZiB3aGljaCBh
cmUgc3BhY2Utc2VwYXJhdGVkIHNldHMgb2YgdHdvIHZhbHVlcykuICBBdCB0aGUgbW9tZW50IHdl
IGFyZSBvbmx5IHVzaW5nIGl0IGZvcgotLy8gYm9yZGVyLXJhZGl1cyBhbmQgYmFja2dyb3VuZC1z
aXplLCBidXQgKEZJWE1FKSBib3JkZXItc3BhY2luZyBhbmQgYmFja2dyb3VuZC1wb3NpdGlvbiBj
b3VsZCBiZSBjb252ZXJ0ZWQgb3ZlciB0byB1c2UKLS8vIGl0IChlbGltaW5hdGluZyBzb21lIGV4
dHJhIC13ZWJraXQtIGludGVybmFsIHByb3BlcnRpZXMpLgotY2xhc3MgUGFpciA6IHB1YmxpYyBT
aGFyZWQ8UGFpcj4gewotcHVibGljOgotICAgIFBhaXIoKSA6IG1fZmlyc3QoMCksIG1fc2Vjb25k
KDApIHsgfQotICAgIFBhaXIoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmlyc3QsIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkKLSAgICAgICAgOiBtX2ZpcnN0KGZp
cnN0KSwgbV9zZWNvbmQoc2Vjb25kKSB7IH0KLSAgICB2aXJ0dWFsIH5QYWlyKCk7Ci0KLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0LmdldCgpOyB9
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25k
LmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldEZpcnN0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGZpcnN0KSB7IG1fZmlyc3QgPSBmaXJzdDsgfQotICAgIHZvaWQgc2V0U2Vjb25kKFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkgeyBtX3NlY29uZCA9IHNlY29uZDsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0OwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmQ7Ci19OwotCi1jbGFzcyBEYXNoYm9h
cmRSZWdpb24gOiBwdWJsaWMgUmVjdEltcGwgewotcHVibGljOgotICAgIERhc2hib2FyZFJlZ2lv
bigpIDogbV9pc0NpcmNsZSgwKSwgbV9pc1JlY3RhbmdsZSgwKSB7IH0KLQotICAgIFJlZlB0cjxE
YXNoYm9hcmRSZWdpb24+IG1fbmV4dDsKLSAgICBTdHJpbmcgbV9sYWJlbDsKLSAgICBTdHJpbmcg
bV9nZW9tZXRyeVR5cGU7Ci0gICAgYm9vbCBtX2lzQ2lyY2xlIDogMTsKLSAgICBib29sIG1faXNS
ZWN0YW5nbGUgOiAxOwotfTsKLQotY2xhc3MgQ1NTSW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NQcmlt
aXRpdmVWYWx1ZSwgcHVibGljIENhY2hlZE9iamVjdENsaWVudAotewotcHVibGljOgotICAgIENT
U0ltYWdlVmFsdWUoKTsKLSAgICBDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdXJsLCBTdHls
ZUJhc2UqKTsKLSAgICB2aXJ0dWFsIH5DU1NJbWFnZVZhbHVlKCk7Ci0KLSAgICBDYWNoZWRJbWFn
ZSogaW1hZ2UoRG9jTG9hZGVyKik7Ci0KLXByb3RlY3RlZDoKLSAgICBDYWNoZWRJbWFnZSogbV9p
bWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKLX07Ci0KLWNsYXNzIENTU0JvcmRlcklt
YWdlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBDU1NCb3JkZXJJbWFn
ZVZhbHVlKCk7Ci0gICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVmUHRyPENTU0ltYWdlVmFs
dWU+LAotICAgICAgICBQYXNzUmVmUHRyPFJlY3RJbXBsPiwgaW50IGhvcml6b250YWxSdWxlLCBp
bnQgdmVydGljYWxSdWxlKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LQotcHVibGljOgotICAgIC8vIFRoZSBib3JkZXIgaW1hZ2UuCi0gICAgUmVmUHRyPENTU0ltYWdl
VmFsdWU+IG1faW1hZ2U7Ci0KLSAgICAvLyBUaGVzZSBmb3VyIHZhbHVlcyBhcmUgdXNlZCB0byBt
YWtlICJjdXRzIiBpbiB0aGUgaW1hZ2UuICBUaGV5IGNhbiBiZSBudW1iZXJzCi0gICAgLy8gb3Ig
cGVyY2VudGFnZXMuCi0gICAgUmVmUHRyPFJlY3RJbXBsPiBtX2ltYWdlU2xpY2VSZWN0OwotICAg
IAotICAgIC8vIFZhbHVlcyBmb3IgaG93IHRvIGhhbmRsZSB0aGUgc2NhbGluZy9zdHJldGNoaW5n
L3RpbGluZyBvZiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgIGludCBtX2hvcml6b250YWxTaXplUnVs
ZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgd2lkdGhzIG9mIHRoZSB0b3AvbWlkZGxl
L2JvdHRvbQotICAgIGludCBtX3ZlcnRpY2FsU2l6ZVJ1bGU7IC8vIFJ1bGUgZm9yIGhvdyB0byBh
ZGp1c3QgdGhlIGhlaWdodHMgb2YgdGhlIGxlZnQvbWlkZGxlL3JpZ2h0Ci19OwotCi1jbGFzcyBG
b250RmFtaWx5VmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUKLXsKLXB1YmxpYzoKLSAg
ICBGb250RmFtaWx5VmFsdWUoIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmluZyk7Ci0gICAg
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZm9udE5hbWUoKSBjb25zdCB7IHJldHVybiBwYXJzZWRG
b250TmFtZTsgfQotICAgIGludCBnZW5lcmljRmFtaWx5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9n
ZW5lcmljRmFtaWx5VHlwZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXJzZWRGb250TmFtZTsKLXByaXZhdGU6Ci0gICAg
aW50IF9nZW5lcmljRmFtaWx5VHlwZTsKLX07Ci0KLWNsYXNzIEZvbnRWYWx1ZSA6IHB1YmxpYyBD
U1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJldHVybiB0cnVlOyB9Ci0K
LSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxlOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gdmFyaWFudDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHdlaWdo
dDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemU7Ci0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBsaW5lSGVpZ2h0OwotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZhbWls
eTsKLX07Ci0KLS8vIFVzZWQgZm9yIHRleHQtc2hhZG93IGFuZCBib3gtc2hhZG93Ci1jbGFzcyBT
aGFkb3dWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIFNoYWRvd1ZhbHVl
KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHgsCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHksCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGJsdXIsCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9yKTsKLSAg
ICAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHg7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5OwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbG9yOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIGFub3Ro
ZXIgaGVscGVyIGNsYXNzCi1jbGFzcyBDU1NQcm9wZXJ0eQotewotcHVibGljOgotICAgIENTU1By
b3BlcnR5KGludCBwcm9wSUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9y
dGFudCA9IGZhbHNlLCBpbnQgc2hvcnRoYW5kSUQgPSAwLCBib29sIGltcGxpY2l0ID0gZmFsc2Up
Ci0gICAgICAgIDogbV9pZChwcm9wSUQpLCBtX3Nob3J0aGFuZElEKHNob3J0aGFuZElEKSwgbV9p
bXBvcnRhbnQoaW1wb3J0YW50KSwgbV9pbXBsaWNpdChpbXBsaWNpdCksIG1fdmFsdWUodmFsdWUp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBDU1NQcm9wZXJ0eSAmb3BlcmF0b3I9KGNvbnN0IENT
U1Byb3BlcnR5JiBvKQotICAgIHsKLSAgICAgICAgbV9pZCA9IG8ubV9pZDsKLSAgICAgICAgbV9z
aG9ydGhhbmRJRCA9IG8ubV9zaG9ydGhhbmRJRDsKLSAgICAgICAgbV9pbXBvcnRhbnQgPSBvLm1f
aW1wb3J0YW50OwotICAgICAgICBtX3ZhbHVlID0gby5tX3ZhbHVlOwotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotICAgIAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0K
LSAgICBpbnQgc2hvcnRoYW5kSUQoKSBjb25zdCB7IHJldHVybiBtX3Nob3J0aGFuZElEOyB9Ci0g
ICAgCi0gICAgYm9vbCBpc0ltcG9ydGFudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0YW50OyB9
Ci0gICAgYm9vbCBpc0ltcGxpY2l0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsaWNpdDsgfQotCi0g
ICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQotICAg
IAotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICAvLyBtYWtlIHN1cmUgdGhlIGZv
bGxvd2luZyBmaXRzIGluIDQgYnl0ZXMuCi0gICAgaW50IG1faWQ7Ci0gICAgaW50IG1fc2hvcnRo
YW5kSUQ7ICAvLyBJZiB0aGlzIHByb3BlcnR5IHdhcyBzZXQgYXMgcGFydCBvZiBhIHNob3J0aGFu
ZCwgZ2l2ZXMgdGhlIHNob3J0aGFuZC4KLSAgICBib29sIG1faW1wb3J0YW50IDogMTsKLSAgICBi
b29sIG1faW1wbGljaXQgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgd2FzIHNl
dCBpbXBsaWNpdGx5IGFzIHRoZSByZXN1bHQgb2YgYSBzaG9ydGhhbmQuCi0KLSAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5ICYsIGNvbnN0IENTU1Byb3BlcnR5ICYp
OwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtX3ZhbHVlOwotfTsKLQotY2xhc3MgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbgotewotcHVibGlj
OgotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxD
U1NQcm9wZXJ0eT4gJik7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSog
cGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJvcGVydGll
cyk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmb3BlcmF0b3I9KGNvbnN0IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uICYpOwotCi0gICAgdm9pZCBzZXROb2RlKE5vZGUqIG5v
ZGUpIHsgbV9ub2RlID0gbm9kZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNv
bnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0
eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJv
cGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQg
cHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoaW50IHBy
b3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKLQotICAgIERlcHJlY2F0ZWRW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiB2YWx1ZXNJdGVyYXRvcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KLQotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3Rp
ZnlDaGFuZ2VkID0gdHJ1ZSk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNv
bnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hh
bmdlZCA9IHRydWUpCi0gICAgICAgIHsgRXhjZXB0aW9uQ29kZSBlYzsgcmV0dXJuIHNldFByb3Bl
cnR5KHByb3BlcnR5SWQsIHZhbHVlLCBpbXBvcnRhbnQsIG5vdGlmeUNoYW5nZWQsIGVjKTsgfQot
Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNo
YW5nZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHBy
b3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpCi0gICAgICAgIHsgRXhjZXB0aW9u
Q29kZSBlYzsgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQs
IGVjKTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgdm9pZCBzZXRDaGFuZ2VkKCk7Ci0g
Ci0gICAgLy8gc2V0TGVuZ3RoUHJvcGVydHkgdHJlYXRzIGludGVnZXJzIGFzIHBpeGVscyEgKE5l
ZWRlZCBmb3IgY29udmVyc2lvbiBvZiBIVE1MIGF0dHJpYnV0ZXMuKQotICAgIHZvaWQgc2V0TGVu
Z3RoUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBib29sIG11bHRpTGVuZ3RoID0gZmFsc2UpOwotICAgIHZvaWQgc2V0U3RyaW5nUHJv
cGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOyAvLyBwYXJzZWQgc3RyaW5n
IHZhbHVlCi0gICAgdm9pZCBzZXRJbWFnZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcmIFVSTCwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7Ci0gCi0gICAgLy8gVGhlIGZvbGxv
d2luZyBwYXJzZXMgYW4gZW50aXJlIG5ldyBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICB2b2lkIHBh
cnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uKTsKLQotICAgIC8v
IEJlc2lkZXMgYWRkaW5nIHRoZSBwcm9wZXJ0aWVzLCB0aGlzIGFsc28gcmVtb3ZlcyBhbnkgZXhp
c3RpbmcgcHJvcGVydGllcyB3aXRoIHRoZXNlIElEcy4KLSAgICAvLyBJdCBkb2VzIG5vIG5vdGlm
aWNhdGlvbiBzaW5jZSBpdCdzIGNhbGxlZCBieSB0aGUgcGFyc2VyLgotICAgIHZvaWQgYWRkUGFy
c2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0
aWVzKTsKLSAKLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5
QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVCbG9ja1Byb3BlcnRpZXMo
KTsKLSAgICB2b2lkIHJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygpOwotICAgIHZvaWQgcmVt
b3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgdm9pZCBtZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYXJnT3ZlcnJp
ZGVzT25Db25mbGljdCA9IHRydWUpOwotIAotcHJpdmF0ZToKLSAgICBTdHJpbmcgZ2V0U2hvcnRI
YW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyKSBjb25zdDsKLSAgICBT
dHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0OwotIAotICAgIERl
cHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IG1fdmFsdWVzOwotICAgIE5vZGUqIG1fbm9k
ZTsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogY3NzL0NvdW50ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjc3MvQ291bnRlci5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9Db3Vu
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDU0MSArMjAsMjYgQEAKICAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgQ1NTX2Nzc192YWx1ZWltcGxfaF8KLSNk
ZWZpbmUgQ1NTX2Nzc192YWx1ZWltcGxfaF8KKyNpZm5kZWYgQ291bnRlcl9ICisjZGVmaW5lIENv
dW50ZXJfSAogCi0jaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiY3Nz
X2Jhc2UuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCi0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKKyNpbmNs
dWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ2Fj
aGVkSW1hZ2U7Ci1jbGFzcyBDb3VudGVyOwotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgTm9kZTsK
LWNsYXNzIFBhaXI7Ci1jbGFzcyBSZWN0SW1wbDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0jaWYg
X19BUFBMRV9fCi1jbGFzcyBEYXNoYm9hcmRSZWdpb247Ci0jZW5kaWYKLQotdHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKLQotZXh0ZXJuIGNvbnN0IGludCBpbmhlcml0YWJsZVByb3BlcnRpZXNb
XTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXM7Ci0KLWNs
YXNzIENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgU3R5bGVCYXNlIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURlY2xhcmF0aW9uKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBp
c1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0KLSAgICBDU1NSdWxl
KiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7Ci0K
LSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQo
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVy
dHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBs
aWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBzZXRQcm9wZXJ0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3Ry
aW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0
eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcg
cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAKLSAgICB2b2lkIGRpZmYoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxl
bmd0aCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1
bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQotcHJpdmF0ZToKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYg
b3BlcmF0b3I9KGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci19OwotCi1jbGFzcyBDU1NW
YWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UKLXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7
Ci0gICAgICAgIENTU19JTkhFUklUID0gMCwKLSAgICAgICAgQ1NTX1BSSU1JVElWRV9WQUxVRSA9
IDEsCi0gICAgICAgIENTU19WQUxVRV9MSVNUID0gMiwKLSAgICAgICAgQ1NTX0NVU1RPTSA9IDMs
Ci0gICAgICAgIENTU19JTklUSUFMID0gNAotICAgIH07Ci0KLSAgICBDU1NWYWx1ZSgpIDogU3R5
bGVCYXNlKDApIHsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUo
KSBjb25zdCB7IHJldHVybiBDU1NfQ1VTVE9NOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJikgeyB9IC8v
IEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZSgpIHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJldHVybiBm
YWxzZTsgfQotfTsKLQotY2xhc3MgQ1NTSW5oZXJpdGVkVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUK
LXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLX07Ci0KLWNsYXNzIENT
U0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTVmFsdWVMaXN0IDogcHVibGljIENTU1Zh
bHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTVmFsdWVMaXN0KCk7Ci0KLSAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5jb3VudCgpOyB9Ci0gICAgQ1NT
VmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlcy5hdChpbmRleCk7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlTGlzdCgpIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8Q1NTVmFs
dWU+IG1fdmFsdWVzOwotfTsKLQotCi1jbGFzcyBDU1NQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBD
U1NWYWx1ZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5cGVzIHsKLSAgICAgICAgQ1NTX1VO
S05PV04gPSAwLAotICAgICAgICBDU1NfTlVNQkVSID0gMSwKLSAgICAgICAgQ1NTX1BFUkNFTlRB
R0UgPSAyLAotICAgICAgICBDU1NfRU1TID0gMywKLSAgICAgICAgQ1NTX0VYUyA9IDQsCi0gICAg
ICAgIENTU19QWCA9IDUsCi0gICAgICAgIENTU19DTSA9IDYsCi0gICAgICAgIENTU19NTSA9IDcs
Ci0gICAgICAgIENTU19JTiA9IDgsCi0gICAgICAgIENTU19QVCA9IDksCi0gICAgICAgIENTU19Q
QyA9IDEwLAotICAgICAgICBDU1NfREVHID0gMTEsCi0gICAgICAgIENTU19SQUQgPSAxMiwKLSAg
ICAgICAgQ1NTX0dSQUQgPSAxMywKLSAgICAgICAgQ1NTX01TID0gMTQsCi0gICAgICAgIENTU19T
ID0gMTUsCi0gICAgICAgIENTU19IWiA9IDE2LAotICAgICAgICBDU1NfS0haID0gMTcsCi0gICAg
ICAgIENTU19ESU1FTlNJT04gPSAxOCwKLSAgICAgICAgQ1NTX1NUUklORyA9IDE5LAotICAgICAg
ICBDU1NfVVJJID0gMjAsCi0gICAgICAgIENTU19JREVOVCA9IDIxLAotICAgICAgICBDU1NfQVRU
UiA9IDIyLAotICAgICAgICBDU1NfQ09VTlRFUiA9IDIzLAotICAgICAgICBDU1NfUkVDVCA9IDI0
LAotICAgICAgICBDU1NfUkdCQ09MT1IgPSAyNSwKLSAgICAgICAgQ1NTX1BBSVIgPSAxMDAsIC8v
IFdlIGVudmlzaW9uIHRoaXMgYmVpbmcgZXhwb3NlZCBhcyBhIG1lYW5zIG9mIGdldHRpbmcgY29t
cHV0ZWQgc3R5bGUgdmFsdWVzIGZvciBwYWlycyAoYm9yZGVyLXNwYWNpbmcvcmFkaXVzLCBiYWNr
Z3JvdW5kLXBvc2l0aW9uLCBldGMuKQotICAgICAgICBDU1NfREFTSEJPQVJEX1JFR0lPTiA9IDEw
MSAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0aGlzIGRvaW5nIGFzIGEgcHJpbWl0aXZlIHZh
bHVlPyBJdCBzaG91bGQgbm90IGJlIQotICAgIH07Ci0KLSAgICAvLyBGSVhNRTogaW50IHZzLiB1
bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0b28gdHJpY2t5IGZvciBjb2xvciB2cy4gaWRlbnQKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGludCBpZGVudCk7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlLCBVbml0VHlwZXMpOwotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYsIFVuaXRUeXBlcyk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0
cjxSZWN0SW1wbD4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKHVuc2lnbmVkIGNvbG9yKTsgLy8g
UkdCIHZhbHVlCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxQYWlyPik7Ci0KLSNp
ZiBfX0FQUExFX18KLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPERhc2hib2FyZFJl
Z2lvbj4pOyAvLyBGSVhNRTogV2h5IGlzIGRhc2hib2FyZCByZWdpb24gYSBwcmltaXRpdmUgdmFs
dWU/IFRoaXMgbWFrZXMgbm8gc2Vuc2UuCi0jZW5kaWYKLQotICAgIHZpcnR1YWwgfkNTU1ByaW1p
dGl2ZVZhbHVlKCk7Ci0KLSAgICB2b2lkIGNsZWFudXAoKTsKLQotICAgIHVuc2lnbmVkIHNob3J0
IHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIC8qCi0gICAg
ICogY29tcHV0ZXMgYSBsZW5ndGggaW4gcGl4ZWxzIG91dCBvZiB0aGUgZ2l2ZW4gQ1NTVmFsdWUu
IE5lZWQgdGhlIFJlbmRlclN0eWxlIHRvIGdldAotICAgICAqIHRoZSBmb250aW5mbyBpbiBjYXNl
IHZhbCBpcyBkZWZpbmVkIGluIGVtIG9yIGV4LgotICAgICAqCi0gICAgICogVGhlIG1ldHJpY3Mg
aGF2ZSB0byBiZSBhIGJpdCBkaWZmZXJlbnQgZm9yIHNjcmVlbiBhbmQgcHJpbnRlciBvdXRwdXQu
Ci0gICAgICogRm9yIHNjcmVlbiBvdXRwdXQgd2UgYXNzdW1lIDEgaW5jaCA9PSA3MiBweCwgZm9y
IHByaW50ZXIgd2UgYXNzdW1lIDMwMCBkcGkKLSAgICAgKgotICAgICAqIHRoaXMgaXMgc2NyZWVu
L3ByaW50ZXIgZGVwZW5kZW50LCBzbyB3ZSBwcm9iYWJseSBuZWVkIGEgY29uZmlnIG9wdGlvbiBm
b3IgdGhpcywKLSAgICAgKiBhbmQgc29tZSB0b29sIHRvIGNhbGlicmF0ZS4KLSAgICAgKi8KLSAg
ICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSopOwotICAgIGludCBjb21wdXRlTGVu
Z3RoSW50KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIGludCBjb21wdXRl
TGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKik7Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJ
bnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0gICAgc2hvcnQg
Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKik7Ci0gICAgc2hvcnQgY29tcHV0ZUxlbmd0
aFNob3J0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIGRvdWJsZSBjb21w
dXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqLCBib29sIGFwcGx5Wm9vbUZhY3RvciA9IHRydWUp
OwotCi0gICAgLy8gdXNlIHdpdGggY2FyZSEhIQotICAgIHZvaWQgc2V0UHJpbWl0aXZlVHlwZSh1
bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KLSAgICB2b2lkIHNldEZsb2F0
VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9hdFZhbHVlLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5
cGUpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZS5udW07IH0K
LQotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUodW5zaWduZWQgc2hvcnQgc3RyaW5nVHlwZSwgY29u
c3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRT
dHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIAotICAgIENvdW50ZXIqIGdldENvdW50ZXJWYWx1ZSAo
KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0NPVU5URVIgPyAwIDogbV92
YWx1ZS5jb3VudGVyOwotICAgIH0KLQotICAgIFJlY3RJbXBsKiBnZXRSZWN0VmFsdWUgKCkgY29u
c3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SRUNUID8gMCA6IG1fdmFsdWUucmVj
dDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRSR0JDb2xvclZhbHVlKCkgY29uc3QgewotICAg
ICAgICByZXR1cm4gbV90eXBlICE9IENTU19SR0JDT0xPUiA/IDAgOiBtX3ZhbHVlLnJnYmNvbG9y
OwotICAgIH0KLQotICAgIFBhaXIqIGdldFBhaXJWYWx1ZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0
dXJuIG1fdHlwZSAhPSBDU1NfUEFJUiA/IDAgOiBtX3ZhbHVlLnBhaXI7Ci0gICAgfQotCi0jaWYg
X19BUFBMRV9fCi0gICAgRGFzaGJvYXJkUmVnaW9uICpnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSAo
KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0RBU0hCT0FSRF9SRUdJT04g
PyAwIDogbV92YWx1ZS5yZWdpb247Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNQcmltaXRpdmVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAgaW50IGdldElkZW50KCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCA9IGZh
bHNlKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJvdGVjdGVkOgotICAg
IGludCBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBpbnQgaWRlbnQ7Ci0gICAgICAgIGRv
dWJsZSBudW07Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgQ291bnRlciog
Y291bnRlcjsKLSAgICAgICAgUmVjdEltcGwqIHJlY3Q7Ci0gICAgICAgIHVuc2lnbmVkIHJnYmNv
bG9yOwotICAgICAgICBQYWlyKiBwYWlyOwotI2lmIF9fQVBQTEVfXwotICAgICAgICBEYXNoYm9h
cmRSZWdpb24qIHJlZ2lvbjsKLSNlbmRpZgotICAgIH0gbV92YWx1ZTsKLX07Ci0KLS8vIFRoaXMg
dmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5IG1hcmdpbnMgaW4gcmVmbG93IHJvb3RzIChi
b2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgotLy8gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCBh
IHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0gKGZvciBxdWlya3kgZW0pIGluc3Rl
YWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4gIFdoZW4gdGhlIHF1aXJreSB2YWx1ZSBpcyB1
c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZSBtYXJnaW4gd2lsbAotLy8gY29sbGFw
c2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgotY2xhc3MgQ1NTUXVpcmtQcmltaXRpdmVWYWx1
ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgotICAgIENTU1F1aXJrUHJp
bWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi0gICAgICAgIDogQ1NTUHJp
bWl0aXZlVmFsdWUobnVtLCB0eXBlKSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzUXVpcmtWYWx1
ZSgpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KIGNsYXNzIENvdW50ZXIgOiBwdWJsaWMgU2hhcmVk
PENvdW50ZXI+IHsKIHB1YmxpYzoKICAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllcjsgfQogICAgIFN0cmluZyBsaXN0U3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX2xpc3RTdHlsZTsgfQogICAgIFN0cmluZyBzZXBhcmF0b3IoKSBjb25zdCB7IHJldHVybiBt
X3NlcGFyYXRvcjsgfQogCitwcml2YXRlOgogICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CiAgICAg
U3RyaW5nIG1fbGlzdFN0eWxlOwogICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKIH07CiAKLWNsYXNz
IFJlY3RJbXBsIDogcHVibGljIFNoYXJlZDxSZWN0SW1wbD4gewotcHVibGljOgotICAgIHZpcnR1
YWwgflJlY3RJbXBsKCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyBy
ZXR1cm4gbV90b3AuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmlnaHQoKSBjb25z
dCB7IHJldHVybiBtX3JpZ2h0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGJvdHRv
bSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0
VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsgfQot
ICAgIHZvaWQgc2V0UmlnaHQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmlnaHQpIHsg
bV9yaWdodCA9IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gYm90dG9tKSB7IG1fYm90dG9tID0gYm90dG9tOyB9Ci0gICAgdm9pZCBzZXRM
ZWZ0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3RvcDsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVm
dDsKLX07Ci0KLS8vIEEgcHJpbWl0aXZlIHZhbHVlIHJlcHJlc2VudGluZyBhIHBhaXIuICBUaGlz
IGlzIHVzZWZ1bCBmb3IgcHJvcGVydGllcyBsaWtlIGJvcmRlci1yYWRpdXMsIGJhY2tncm91bmQt
c2l6ZS9wb3NpdGlvbiwKLS8vIGFuZCBib3JkZXItc3BhY2luZyAoYWxsIG9mIHdoaWNoIGFyZSBz
cGFjZS1zZXBhcmF0ZWQgc2V0cyBvZiB0d28gdmFsdWVzKS4gIEF0IHRoZSBtb21lbnQgd2UgYXJl
IG9ubHkgdXNpbmcgaXQgZm9yCi0vLyBib3JkZXItcmFkaXVzIGFuZCBiYWNrZ3JvdW5kLXNpemUs
IGJ1dCAoRklYTUUpIGJvcmRlci1zcGFjaW5nIGFuZCBiYWNrZ3JvdW5kLXBvc2l0aW9uIGNvdWxk
IGJlIGNvbnZlcnRlZCBvdmVyIHRvIHVzZQotLy8gaXQgKGVsaW1pbmF0aW5nIHNvbWUgZXh0cmEg
LXdlYmtpdC0gaW50ZXJuYWwgcHJvcGVydGllcykuCi1jbGFzcyBQYWlyIDogcHVibGljIFNoYXJl
ZDxQYWlyPiB7Ci1wdWJsaWM6Ci0gICAgUGFpcigpIDogbV9maXJzdCgwKSwgbV9zZWNvbmQoMCkg
eyB9Ci0gICAgUGFpcihQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdCwgUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKQotICAgICAgICA6IG1fZmlyc3QoZmlyc3Qp
LCBtX3NlY29uZChzZWNvbmQpIHsgfQotICAgIHZpcnR1YWwgflBhaXIoKTsKLQotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3QuZ2V0KCk7IH0KLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV9zZWNvbmQuZ2V0
KCk7IH0KLQotICAgIHZvaWQgc2V0Rmlyc3QoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Zmlyc3QpIHsgbV9maXJzdCA9IGZpcnN0OyB9Ci0gICAgdm9pZCBzZXRTZWNvbmQoUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKSB7IG1fc2Vjb25kID0gc2Vjb25kOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3Q7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZDsKLX07Ci0KLWNsYXNzIERhc2hib2FyZFJl
Z2lvbiA6IHB1YmxpYyBSZWN0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgRGFzaGJvYXJkUmVnaW9uKCkg
OiBtX2lzQ2lyY2xlKDApLCBtX2lzUmVjdGFuZ2xlKDApIHsgfQotCi0gICAgUmVmUHRyPERhc2hi
b2FyZFJlZ2lvbj4gbV9uZXh0OwotICAgIFN0cmluZyBtX2xhYmVsOwotICAgIFN0cmluZyBtX2dl
b21ldHJ5VHlwZTsKLSAgICBib29sIG1faXNDaXJjbGUgOiAxOwotICAgIGJvb2wgbV9pc1JlY3Rh
bmdsZSA6IDE7Ci19OwotCi1jbGFzcyBDU1NJbWFnZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2
ZVZhbHVlLCBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTSW1h
Z2VWYWx1ZSgpOwotICAgIENTU0ltYWdlVmFsdWUoY29uc3QgU3RyaW5nJiB1cmwsIFN0eWxlQmFz
ZSopOwotICAgIHZpcnR1YWwgfkNTU0ltYWdlVmFsdWUoKTsKLQotICAgIENhY2hlZEltYWdlKiBp
bWFnZShEb2NMb2FkZXIqKTsKLQotcHJvdGVjdGVkOgotICAgIENhY2hlZEltYWdlKiBtX2ltYWdl
OwotICAgIGJvb2wgbV9hY2Nlc3NlZEltYWdlOwotfTsKLQotY2xhc3MgQ1NTQm9yZGVySW1hZ2VW
YWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIENTU0JvcmRlckltYWdlVmFs
dWUoKTsKLSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4s
Ci0gICAgICAgIFBhc3NSZWZQdHI8UmVjdEltcGw+LCBpbnQgaG9yaXpvbnRhbFJ1bGUsIGludCB2
ZXJ0aWNhbFJ1bGUpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1w
dWJsaWM6Ci0gICAgLy8gVGhlIGJvcmRlciBpbWFnZS4KLSAgICBSZWZQdHI8Q1NTSW1hZ2VWYWx1
ZT4gbV9pbWFnZTsKLQotICAgIC8vIFRoZXNlIGZvdXIgdmFsdWVzIGFyZSB1c2VkIHRvIG1ha2Ug
ImN1dHMiIGluIHRoZSBpbWFnZS4gIFRoZXkgY2FuIGJlIG51bWJlcnMKLSAgICAvLyBvciBwZXJj
ZW50YWdlcy4KLSAgICBSZWZQdHI8UmVjdEltcGw+IG1faW1hZ2VTbGljZVJlY3Q7Ci0gICAgCi0g
ICAgLy8gVmFsdWVzIGZvciBob3cgdG8gaGFuZGxlIHRoZSBzY2FsaW5nL3N0cmV0Y2hpbmcvdGls
aW5nIG9mIHRoZSBpbWFnZSBzbGljZXMuCi0gICAgaW50IG1faG9yaXpvbnRhbFNpemVSdWxlOyAv
LyBSdWxlIGZvciBob3cgdG8gYWRqdXN0IHRoZSB3aWR0aHMgb2YgdGhlIHRvcC9taWRkbGUvYm90
dG9tCi0gICAgaW50IG1fdmVydGljYWxTaXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVz
dCB0aGUgaGVpZ2h0cyBvZiB0aGUgbGVmdC9taWRkbGUvcmlnaHQKLX07Ci0KLWNsYXNzIEZvbnRG
YW1pbHlWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgotICAgIEZv
bnRGYW1pbHlWYWx1ZSggY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyaW5nKTsKLSAgICBjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiBmb250TmFtZSgpIGNvbnN0IHsgcmV0dXJuIHBhcnNlZEZvbnRO
YW1lOyB9Ci0gICAgaW50IGdlbmVyaWNGYW1pbHlUeXBlKCkgY29uc3QgeyByZXR1cm4gX2dlbmVy
aWNGYW1pbHlUeXBlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0K
LSAgICBEZXByZWNhdGVkU3RyaW5nIHBhcnNlZEZvbnROYW1lOwotcHJpdmF0ZToKLSAgICBpbnQg
X2dlbmVyaWNGYW1pbHlUeXBlOwotfTsKLQotY2xhc3MgRm9udFZhbHVlIDogcHVibGljIENTU1Zh
bHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAg
IAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB2YXJpYW50OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gd2VpZ2h0Owot
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGxpbmVIZWlnaHQ7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZmFtaWx5Owot
fTsKLQotLy8gVXNlZCBmb3IgdGV4dC1zaGFkb3cgYW5kIGJveC1zaGFkb3cKLWNsYXNzIFNoYWRv
d1ZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgU2hhZG93VmFsdWUoUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geCwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4geSwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1
ciwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3IpOwotICAgIAot
ICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4geDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHk7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBibHVyOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY29sb3I7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gYW5vdGhlciBo
ZWxwZXIgY2xhc3MKLWNsYXNzIENTU1Byb3BlcnR5Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTUHJvcGVy
dHkoaW50IHByb3BJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWUsIGJvb2wgaW1wb3J0YW50
ID0gZmFsc2UsIGludCBzaG9ydGhhbmRJRCA9IDAsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSkKLSAg
ICAgICAgOiBtX2lkKHByb3BJRCksIG1fc2hvcnRoYW5kSUQoc2hvcnRoYW5kSUQpLCBtX2ltcG9y
dGFudChpbXBvcnRhbnQpLCBtX2ltcGxpY2l0KGltcGxpY2l0KSwgbV92YWx1ZSh2YWx1ZSkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIENTU1Byb3BlcnR5ICZvcGVyYXRvcj0oY29uc3QgQ1NTUHJv
cGVydHkmIG8pCi0gICAgewotICAgICAgICBtX2lkID0gby5tX2lkOwotICAgICAgICBtX3Nob3J0
aGFuZElEID0gby5tX3Nob3J0aGFuZElEOwotICAgICAgICBtX2ltcG9ydGFudCA9IG8ubV9pbXBv
cnRhbnQ7Ci0gICAgICAgIG1fdmFsdWUgPSBvLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9Ci0gICAgCi0gICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAg
IGludCBzaG9ydGhhbmRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvcnRoYW5kSUQ7IH0KLSAgICAK
LSAgICBib29sIGlzSW1wb3J0YW50KCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhbnQ7IH0KLSAg
ICBib29sIGlzSW1wbGljaXQoKSBjb25zdCB7IHJldHVybiBtX2ltcGxpY2l0OyB9Ci0KLSAgICBD
U1NWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9Ci0gICAgCi0g
ICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIC8vIG1ha2Ugc3VyZSB0aGUgZm9sbG93
aW5nIGZpdHMgaW4gNCBieXRlcy4KLSAgICBpbnQgbV9pZDsKLSAgICBpbnQgbV9zaG9ydGhhbmRJ
RDsgIC8vIElmIHRoaXMgcHJvcGVydHkgd2FzIHNldCBhcyBwYXJ0IG9mIGEgc2hvcnRoYW5kLCBn
aXZlcyB0aGUgc2hvcnRoYW5kLgotICAgIGJvb2wgbV9pbXBvcnRhbnQgOiAxOwotICAgIGJvb2wg
bV9pbXBsaWNpdCA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSB3YXMgc2V0IGlt
cGxpY2l0bHkgYXMgdGhlIHJlc3VsdCBvZiBhIHNob3J0aGFuZC4KLQotICAgIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ1NTUHJvcGVydHkgJiwgY29uc3QgQ1NTUHJvcGVydHkgJik7Ci0K
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1fdmFsdWU7Ci19OwotCi1jbGFzcyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0g
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1By
b3BlcnR5PiAmKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJl
bnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsK
LQotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICZvcGVyYXRvcj0oY29uc3QgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24gJik7Ci0KLSAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkg
eyBtX25vZGUgPSBub2RlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0
eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9w
ZXJ0eUlEKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOwotCi0gICAgRGVwcmVjYXRlZFZhbHVl
TGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IHZhbHVlc0l0ZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQotCi0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJv
cGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNo
YW5nZWQgPSB0cnVlKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFuZ2Vk
ID0gdHJ1ZSkKLSAgICAgICAgeyBFeGNlcHRpb25Db2RlIGVjOyByZXR1cm4gc2V0UHJvcGVydHko
cHJvcGVydHlJZCwgdmFsdWUsIGltcG9ydGFudCwgbm90aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0KLSAg
ICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdl
ZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSkKLSAgICAgICAgeyBFeGNlcHRpb25Db2Rl
IGVjOyByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZWMp
OyB9Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICB2b2lkIHNldENoYW5nZWQoKTsKLSAKLSAg
ICAvLyBzZXRMZW5ndGhQcm9wZXJ0eSB0cmVhdHMgaW50ZWdlcnMgYXMgcGl4ZWxzISAoTmVlZGVk
IGZvciBjb252ZXJzaW9uIG9mIEhUTUwgYXR0cmlidXRlcy4pCi0gICAgdm9pZCBzZXRMZW5ndGhQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQsIGJvb2wgbXVsdGlMZW5ndGggPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0
eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcywgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7IC8vIHBhcnNlZCBzdHJpbmcgdmFs
dWUKLSAgICB2b2lkIHNldEltYWdlUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmlu
ZyYgVVJMLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKLSAKLSAgICAvLyBUaGUgZm9sbG93aW5n
IHBhcnNlcyBhbiBlbnRpcmUgbmV3IHN0eWxlIGRlY2xhcmF0aW9uLgotICAgIHZvaWQgcGFyc2VE
ZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRpb24pOwotCi0gICAgLy8gQmVz
aWRlcyBhZGRpbmcgdGhlIHByb3BlcnRpZXMsIHRoaXMgYWxzbyByZW1vdmVzIGFueSBleGlzdGlu
ZyBwcm9wZXJ0aWVzIHdpdGggdGhlc2UgSURzLgotICAgIC8vIEl0IGRvZXMgbm8gbm90aWZpY2F0
aW9uIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSBwYXJzZXIuCi0gICAgdm9pZCBhZGRQYXJzZWRQ
cm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMp
OwotIAotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlCbG9j
a1Byb3BlcnRpZXMoKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwot
ICAgIHZvaWQgcmVtb3ZlSW5oZXJpdGFibGVQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVQ
cm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2
b2lkIG1lcmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBhcmdPdmVycmlkZXNP
bkNvbmZsaWN0ID0gdHJ1ZSk7Ci0gCi1wcml2YXRlOgotICAgIFN0cmluZyBnZXRTaG9ydEhhbmRW
YWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1iZXIpIGNvbnN0OwotICAgIFN0cmlu
ZyBnZXQ0VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGllcykgY29uc3Q7Ci0gCi0gICAgRGVwcmVj
YXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gbV92YWx1ZXM7Ci0gICAgTm9kZSogbV9ub2RlOwot
fTsKLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBjc3MvQ1NTTWVkaWFSdWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gY3NzL0NTU01lZGlhUnVsZS5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNz
cy9DU1NNZWRpYVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMjA5ICsyMSw0MCBAQAogICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NfY3NzX3J1bGVp
bXBsX2hfCi0jZGVmaW5lIENTU19jc3NfcnVsZWltcGxfaF8KKyNpZm5kZWYgQ1NTTWVkaWFSdWxl
X0gKKyNkZWZpbmUgQ1NTTWVkaWFSdWxlX0gKIAotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIK
KyNpbmNsdWRlICJDU1NSdWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2Fj
aGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xh
c3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBNZWRpYUxpc3Q7
Ci0KLWNsYXNzIENTU1J1bGUgOiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51
bSBDU1NSdWxlVHlwZSB7IAotICAgICAgICBVTktOT1dOX1JVTEUsIAotICAgICAgICBTVFlMRV9S
VUxFLCAKLSAgICAgICAgQ0hBUlNFVF9SVUxFLCAKLSAgICAgICAgSU1QT1JUX1JVTEUsIAotICAg
ICAgICBNRURJQV9SVUxFLCAKLSAgICAgICAgRk9OVF9GQUNFX1JVTEUsIAotICAgICAgICBQQUdF
X1JVTEUgCi0gICAgfTsKLSAgICAKLSAgICBDU1NSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAg
ICAgICA6IFN0eWxlQmFzZShwYXJlbnQpLCBtX3R5cGUoVU5LTk9XTl9SVUxFKSB7fQotCi0gICAg
dmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB1bnNpZ25lZCBzaG9y
dCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICpw
YXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgQ1NTUnVsZSAqcGFyZW50UnVsZSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q3Nz
VGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsKLQotcHJvdGVjdGVkOgotICAgIENTU1J1bGVUeXBl
IG1fdHlwZTsKLX07Ci0KLQotY2xhc3MgQ1NTQ2hhcnNldFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQot
ewotcHVibGljOgotICAgIENTU0NoYXJzZXRSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAg
ICA6IENTU1J1bGUocGFyZW50KSB7IG1fdHlwZSA9IENIQVJTRVRfUlVMRTsgfQotCi0gICAgdmly
dHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmNvZGluZzsgfQotICAgIHZvaWQgc2V0RW5jb2RpbmcoU3RyaW5nIF9lbmNvZGlu
ZykgeyBtX2VuY29kaW5nID0gX2VuY29kaW5nOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcg
bV9lbmNvZGluZzsKLX07Ci0KLQotY2xhc3MgQ1NTRm9udEZhY2VSdWxlIDogcHVibGljIENTU1J1
bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NGb250RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpOwot
ICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24gKnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAg
dmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotfTsK
LQotCi1jbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVibGljIENhY2hlZE9iamVjdENsaWVudCwgcHVi
bGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSogcGFy
ZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlzdCopOwotICAgIHZpcnR1YWwgfkNTU0lt
cG9ydFJ1bGUoKTsKLQotICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVm
OyB9Ci0gICAgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0
KCk7IH0KLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZVNoZWV0LmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgCi0g
ICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLQotICAgIC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xp
ZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgc2hlZXQpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1BhcmVu
dCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fc3RySHJlZjsKLSAgICBSZWZQdHI8TWVk
aWFMaXN0PiBtX2xzdE1lZGlhOwotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hl
ZXQ7Ci0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogbV9jYWNoZWRTaGVldDsKLSAgICBib29sIG1f
bG9hZGluZzsKLX07Ci0KLWNsYXNzIE1lZGlhTGlzdDsKLQotY2xhc3MgQ1NTUnVsZUxpc3QgOiBw
dWJsaWMgU2hhcmVkPENTU1J1bGVMaXN0PgotewotcHVibGljOgotICAgIENTU1J1bGVMaXN0KCkg
eyB9Ci0gICAgQ1NTUnVsZUxpc3QoU3R5bGVMaXN0ICopOwotICAgIH5DU1NSdWxlTGlzdCgpOwot
Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5jb3Vu
dCgpOyB9Ci0gICAgQ1NTUnVsZSAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgeyByZXR1cm4gbV9s
c3RDU1NSdWxlcy5hdCggaW5kZXggKTsgfQotCi0gICAgLyogbm90IHBhcnQgb2YgdGhlIERPTSAq
LwotICAgIHVuc2lnbmVkIGluc2VydFJ1bGUgKCBDU1NSdWxlICpydWxlLCB1bnNpZ25lZCBpbmRl
eCApOwotICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVkIGluZGV4ICk7Ci0gICAgdm9pZCBh
cHBlbmQoIENTU1J1bGUgKnJ1bGUgKTsKLQotcHJvdGVjdGVkOgotICAgIERlcHJlY2F0ZWRQdHJM
aXN0PENTU1J1bGU+IG1fbHN0Q1NTUnVsZXM7Ci19OworY2xhc3MgQ1NTUnVsZUxpc3Q7CiAKIGNs
YXNzIENTU01lZGlhUnVsZSA6IHB1YmxpYyBDU1NSdWxlCiB7CiBwdWJsaWM6CiAgICAgQ1NTTWVk
aWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCApOwotICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNl
ICpwYXJlbnQsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyAmbWVkaWEgKTsKKyAgICBDU1NNZWRpYVJ1
bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyAmbWVkaWEpOwogICAgIENTU01lZGlh
UnVsZSggU3R5bGVCYXNlICpwYXJlbnQsIE1lZGlhTGlzdCAqbWVkaWFMaXN0LCBDU1NSdWxlTGlz
dCAqcnVsZUxpc3QgKTsKICAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGUoKTsKIAogICAgIE1lZGlh
TGlzdCAqbWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhLmdldCgpOyB9CiAgICAgQ1NT
UnVsZUxpc3QgKmNzc1J1bGVzKCkgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5nZXQoKTsgfQogCi0g
ICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IFdlYkNvcmU6OlN0cmluZyAmcnVsZSwgdW5z
aWduZWQgaW5kZXggKTsKLSAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBpbmRleCApIHsg
bV9sc3RDU1NSdWxlcy0+ZGVsZXRlUnVsZSggaW5kZXggKTsgfQorICAgIHVuc2lnbmVkIGluc2Vy
dFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCk7CisgICAgdm9pZCBkZWxl
dGVSdWxlKHVuc2lnbmVkIGluZGV4KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhUnVsZSgp
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAK
ICAgICAvKiBOb3QgcGFydCBvZiB0aGUgRE9NICovCiAgICAgdW5zaWduZWQgYXBwZW5kKCBDU1NS
dWxlICpydWxlICk7CisKIHByb3RlY3RlZDoKICAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1l
ZGlhOwogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9sc3RDU1NSdWxlczsKIH07CiAKLQotY2xh
c3MgQ1NTUGFnZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1BhZ2VS
dWxlKFN0eWxlQmFzZSAqcGFyZW50KTsKLSAgICB2aXJ0dWFsIH5DU1NQYWdlUnVsZSgpOwotCi0g
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgICBXZWJDb3JlOjpTdHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRTZWxlY3RvclRleHQoV2ViQ29yZTo6U3RyaW5nIHN0cik7Ci0KLXByb3RlY3RlZDoK
LSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fc3R5bGU7Ci19OwotCi1j
bGFzcyBDU1NJbXBvcnRhbnRSdWxlOwotCi1jbGFzcyBDU1NTdHlsZVJ1bGUgOiBwdWJsaWMgQ1NT
UnVsZQotewotcHVibGljOgotICAgIENTU1N0eWxlUnVsZShTdHlsZUJhc2UqIHBhcmVudCk7Ci0g
ICAgdmlydHVhbCB+Q1NTU3R5bGVSdWxlKCk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNTdHlsZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgV2ViQ29yZTo6U3RyaW5nIHNlbGVjdG9yVGV4dCgp
IGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KFdlYkNvcmU6OlN0cmluZyBzdHIpOwot
Ci0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKCBjb25zdCBTdHJpbmcgJnN0cmluZywgYm9v
bCA9IGZhbHNlICk7Ci0KLSAgICB2b2lkIHNldFNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikgeyBtX3NlbGVjdG9yID0gc2VsZWN0b3I7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKLQotICAgIENTU1NlbGVjdG9y
KiBzZWxlY3RvcigpIHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0KLSAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogZGVjbGFyYXRpb24oKSB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gCi1w
cm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxl
OwotICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOwotfTsKLQotY2xhc3MgQ1NTVW5rbm93blJ1
bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1Vua25vd25SdWxlKFN0eWxl
QmFzZSAqcGFyZW50KSA6IENTU1J1bGUocGFyZW50KSB7fQotCi0gICAgdmlydHVhbCBib29sIGlz
VW5rbm93blJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAj
ZW5kaWYKSW5kZXg6IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDE0NDA2KQor
KysgY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywxMCArMjMsMTIgQEAKICNpZm5kZWYgQ1NTX0NPTVBVVEVEU1RZTEVfSAogI2RlZmluZSBDU1Nf
Q09NUFVURURTVFlMRV9ICiAKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIk5vZGUuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1By
b3BlcnR5OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CkluZGV4OiBj
c3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDE0NDAw
KQorKysgY3NzL0NTU1J1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTggKzIxLDE0IEBACiAg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZuZGVmIENTU19jc3NfcnVs
ZWltcGxfaF8KLSNkZWZpbmUgQ1NTX2Nzc19ydWxlaW1wbF9oXworI2lmbmRlZiBDU1NSdWxlX0gK
KyNkZWZpbmUgQ1NTUnVsZV9ICiAKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVk
ZSAiY3NzX2Jhc2UuaCIgLy8gZm9yIFN0eWxlQmFzZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwotY2xhc3Mg
TWVkaWFMaXN0OwogCiBjbGFzcyBDU1NSdWxlIDogcHVibGljIFN0eWxlQmFzZQogewpAQCAtNDcs
OCArNDMsNyBAQAogICAgICAgICBQQUdFX1JVTEUgCiAgICAgfTsKICAgICAKLSAgICBDU1NSdWxl
KFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAgICA6IFN0eWxlQmFzZShwYXJlbnQpLCBtX3R5cGUo
VU5LTk9XTl9SVUxFKSB7fQorICAgIENTU1J1bGUoU3R5bGVCYXNlKiBwYXJlbnQpIDogU3R5bGVC
YXNlKHBhcmVudCksIG1fdHlwZShVTktOT1dOX1JVTEUpIHsgfQogCiAgICAgdmlydHVhbCBib29s
IGlzUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CkBAIC01NywxNzMgKzUyLDEyIEBACiAgICAgQ1NTUnVsZSAq
cGFyZW50UnVsZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0Q3NzVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsKKyAgICB2b2lkIHNl
dENzc1RleHQoU3RyaW5nIHN0cik7CiAKIHByb3RlY3RlZDoKICAgICBDU1NSdWxlVHlwZSBtX3R5
cGU7CiB9OwogCi0KLWNsYXNzIENTU0NoYXJzZXRSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1
YmxpYzoKLSAgICBDU1NDaGFyc2V0UnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICAgICAgOiBD
U1NSdWxlKHBhcmVudCkgeyBtX3R5cGUgPSBDSEFSU0VUX1JVTEU7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBpc0NoYXJzZXRSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLQotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fZW5jb2Rpbmc7IH0KLSAgICB2b2lkIHNldEVuY29kaW5nKFN0cmluZyBfZW5jb2RpbmcpIHsg
bV9lbmNvZGluZyA9IF9lbmNvZGluZzsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fZW5j
b2Rpbmc7Ci19OwotCi0KLWNsYXNzIENTU0ZvbnRGYWNlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17
Ci1wdWJsaWM6Ci0gICAgQ1NTRm9udEZhY2VSdWxlKFN0eWxlQmFzZSAqcGFyZW50KTsKLSAgICB2
aXJ0dWFsIH5DU1NGb250RmFjZVJ1bGUoKTsKLQotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBpc0ZvbnRGYWNlUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLQotcHJvdGVjdGVkOgot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKLX07Ci0KLQot
Y2xhc3MgQ1NTSW1wb3J0UnVsZSA6IHB1YmxpYyBDYWNoZWRPYmplY3RDbGllbnQsIHB1YmxpYyBD
U1NSdWxlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTSW1wb3J0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwg
Y29uc3QgU3RyaW5nJiBocmVmLCBNZWRpYUxpc3QqKTsKLSAgICB2aXJ0dWFsIH5DU1NJbXBvcnRS
dWxlKCk7Ci0KLSAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fc3RySHJlZjsgfQot
ICAgIE1lZGlhTGlzdCogbWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhLmdldCgpOyB9
Ci0gICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVT
aGVldC5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzSW1wb3J0UnVsZSgpIHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gIAotICAgIGJv
b2wgaXNMb2FkaW5nKCkgY29uc3Q7Ci0KLSAgICAvLyBmcm9tIENhY2hlZE9iamVjdENsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHNoZWV0KTsKLQotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9QYXJlbnQoKTsK
LQotcHJvdGVjdGVkOgotICAgIFN0cmluZyBtX3N0ckhyZWY7Ci0gICAgUmVmUHRyPE1lZGlhTGlz
dD4gbV9sc3RNZWRpYTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zdHlsZVNoZWV0Owot
ICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIG1fY2FjaGVkU2hlZXQ7Ci0gICAgYm9vbCBtX2xvYWRp
bmc7Ci19OwotCi1jbGFzcyBNZWRpYUxpc3Q7Ci0KLWNsYXNzIENTU1J1bGVMaXN0IDogcHVibGlj
IFNoYXJlZDxDU1NSdWxlTGlzdD4KLXsKLXB1YmxpYzoKLSAgICBDU1NSdWxlTGlzdCgpIHsgfQot
ICAgIENTU1J1bGVMaXN0KFN0eWxlTGlzdCAqKTsKLSAgICB+Q1NTUnVsZUxpc3QoKTsKLQotICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuY291bnQoKTsg
fQotICAgIENTU1J1bGUgKml0ZW0gKCB1bnNpZ25lZCBpbmRleCApIHsgcmV0dXJuIG1fbHN0Q1NT
UnVsZXMuYXQoIGluZGV4ICk7IH0KLQotICAgIC8qIG5vdCBwYXJ0IG9mIHRoZSBET00gKi8KLSAg
ICB1bnNpZ25lZCBpbnNlcnRSdWxlICggQ1NTUnVsZSAqcnVsZSwgdW5zaWduZWQgaW5kZXggKTsK
LSAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBpbmRleCApOwotICAgIHZvaWQgYXBwZW5k
KCBDU1NSdWxlICpydWxlICk7Ci0KLXByb3RlY3RlZDoKLSAgICBEZXByZWNhdGVkUHRyTGlzdDxD
U1NSdWxlPiBtX2xzdENTU1J1bGVzOwotfTsKLQotY2xhc3MgQ1NTTWVkaWFSdWxlIDogcHVibGlj
IENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50
ICk7Ci0gICAgQ1NTTWVkaWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgY29uc3QgV2ViQ29yZTo6
U3RyaW5nICZtZWRpYSApOwotICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQsIE1l
ZGlhTGlzdCAqbWVkaWFMaXN0LCBDU1NSdWxlTGlzdCAqcnVsZUxpc3QgKTsKLSAgICB2aXJ0dWFs
IH5DU1NNZWRpYVJ1bGUoKTsKLQotICAgIE1lZGlhTGlzdCAqbWVkaWEoKSBjb25zdCB7IHJldHVy
biBtX2xzdE1lZGlhLmdldCgpOyB9Ci0gICAgQ1NTUnVsZUxpc3QgKmNzc1J1bGVzKCkgeyByZXR1
cm4gbV9sc3RDU1NSdWxlcy5nZXQoKTsgfQotCi0gICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIGNv
bnN0IFdlYkNvcmU6OlN0cmluZyAmcnVsZSwgdW5zaWduZWQgaW5kZXggKTsKLSAgICB2b2lkIGRl
bGV0ZVJ1bGUgKCB1bnNpZ25lZCBpbmRleCApIHsgbV9sc3RDU1NSdWxlcy0+ZGVsZXRlUnVsZSgg
aW5kZXggKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIC8qIE5vdCBw
YXJ0IG9mIHRoZSBET00gKi8KLSAgICB1bnNpZ25lZCBhcHBlbmQoIENTU1J1bGUgKnJ1bGUgKTsK
LXByb3RlY3RlZDoKLSAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1lZGlhOwotICAgIFJlZlB0
cjxDU1NSdWxlTGlzdD4gbV9sc3RDU1NSdWxlczsKLX07Ci0KLQotY2xhc3MgQ1NTUGFnZVJ1bGUg
OiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1BhZ2VSdWxlKFN0eWxlQmFzZSAq
cGFyZW50KTsKLSAgICB2aXJ0dWFsIH5DU1NQYWdlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24gKnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQot
Ci0gICAgdmlydHVhbCBib29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBX
ZWJDb3JlOjpTdHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3Rv
clRleHQoV2ViQ29yZTo6U3RyaW5nIHN0cik7Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fc3R5bGU7Ci19OwotCi1jbGFzcyBDU1NJbXBvcnRh
bnRSdWxlOwotCi1jbGFzcyBDU1NTdHlsZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGlj
OgotICAgIENTU1N0eWxlUnVsZShTdHlsZUJhc2UqIHBhcmVudCk7Ci0gICAgdmlydHVhbCB+Q1NT
U3R5bGVSdWxlKCk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHls
ZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNv
bnN0OwotCi0gICAgV2ViQ29yZTo6U3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0U2VsZWN0b3JUZXh0KFdlYkNvcmU6OlN0cmluZyBzdHIpOwotCi0gICAgdmlydHVhbCBi
b29sIHBhcnNlU3RyaW5nKCBjb25zdCBTdHJpbmcgJnN0cmluZywgYm9vbCA9IGZhbHNlICk7Ci0K
LSAgICB2b2lkIHNldFNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvcikgeyBtX3NlbGVjdG9y
ID0gc2VsZWN0b3I7IH0KLSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKLQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIHsg
cmV0dXJuIG1fc2VsZWN0b3I7IH0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVj
bGFyYXRpb24oKSB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gCi1wcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotICAgIENTU1NlbGVj
dG9yKiBtX3NlbGVjdG9yOwotfTsKLQotY2xhc3MgQ1NTVW5rbm93blJ1bGUgOiBwdWJsaWMgQ1NT
UnVsZQotewotcHVibGljOgotICAgIENTU1Vua25vd25SdWxlKFN0eWxlQmFzZSAqcGFyZW50KSA6
IENTU1J1bGUocGFyZW50KSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzVW5rbm93blJ1bGUoKSB7
IHJldHVybiB0cnVlOyB9Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGNz
cy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTVmFsdWVMaXN0LmgJKHJldmlz
aW9uIDE0NDAwKQorKysgY3NzL0NTU1ZhbHVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwx
MTkgKzIwLDE0IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZu
ZGVmIENTU19jc3NfdmFsdWVpbXBsX2hfCi0jZGVmaW5lIENTU19jc3NfdmFsdWVpbXBsX2hfCisj
aWZuZGVmIENTU1ZhbHVlTGlzdF9ICisjZGVmaW5lIENTU1ZhbHVlTGlzdF9ICiAKLSNpbmNsdWRl
ICJDYWNoZWRPYmplY3RDbGllbnQuaCIKLSNpbmNsdWRlICJjc3NfYmFzZS5oIgorI2luY2x1ZGUg
IkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJE
ZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLWNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247
Ci1jbGFzcyBDYWNoZWRJbWFnZTsKLWNsYXNzIENvdW50ZXI7Ci1jbGFzcyBEb2NMb2FkZXI7Ci1j
bGFzcyBOb2RlOwotY2xhc3MgUGFpcjsKLWNsYXNzIFJlY3RJbXBsOwotY2xhc3MgUmVuZGVyU3R5
bGU7Ci0KLSNpZiBfX0FQUExFX18KLWNsYXNzIERhc2hib2FyZFJlZ2lvbjsKLSNlbmRpZgotCi10
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1leHRlcm4gY29uc3QgaW50IGluaGVyaXRhYmxl
UHJvcGVydGllc1tdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVy
dGllczsKLQotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBTdHlsZUJhc2Ugewot
cHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlRGVjbGFyYXRpb24oKTsKLQotICAgIHN0
YXRpYyBib29sIGlzUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLQot
ICAgIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNz
c1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3Ry
aW5nJiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNv
bnN0ID0gMDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUo
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVl
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlQcmlv
cml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5
U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGlzUHJvcGVy
dHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlE
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJv
cGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5
KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlT
aG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
cm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIHNl
dFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0
dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gY29weSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOwotIAotICAgIHZvaWQgZGlmZihDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENTU1N0eWxlRGVjbGFy
YXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSA9IDApOwotCi1wcml2YXRlOgotICAgIENTU1N0eWxl
RGVjbGFyYXRpb24oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKLSAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKLX07Ci0K
LWNsYXNzIENTU1ZhbHVlIDogcHVibGljIFN0eWxlQmFzZQotewotcHVibGljOgotICAgIGVudW0g
VW5pdFR5cGVzIHsKLSAgICAgICAgQ1NTX0lOSEVSSVQgPSAwLAotICAgICAgICBDU1NfUFJJTUlU
SVZFX1ZBTFVFID0gMSwKLSAgICAgICAgQ1NTX1ZBTFVFX0xJU1QgPSAyLAotICAgICAgICBDU1Nf
Q1VTVE9NID0gMywKLSAgICAgICAgQ1NTX0lOSVRJQUwgPSA0Ci0gICAgfTsKLQotICAgIENTU1Zh
bHVlKCkgOiBTdHlsZUJhc2UoMCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNz
c1ZhbHVlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIENTU19DVVNUT007IH0KLSAgICB2aXJ0dWFsIFN0
cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmKSB7IH0gLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLQotICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgp
IHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi1jbGFzcyBDU1NJbmhlcml0ZWRWYWx1ZSA6IHB1Ymxp
YyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFs
dWVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsK
LQotY2xhc3MgQ1NTSW5pdGlhbFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci19OwotCiBjbGFzcyBDU1NWYWx1ZUxpc3QgOiBw
dWJsaWMgQ1NTVmFsdWUKIHsKIHB1YmxpYzoKQEAgLTE1Miw0MDkgKzQ3LDYgQEAKICAgICBEZXBy
ZWNhdGVkUHRyTGlzdDxDU1NWYWx1ZT4gbV92YWx1ZXM7CiB9OwogCi0KLWNsYXNzIENTU1ByaW1p
dGl2ZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBVbml0VHlw
ZXMgewotICAgICAgICBDU1NfVU5LTk9XTiA9IDAsCi0gICAgICAgIENTU19OVU1CRVIgPSAxLAot
ICAgICAgICBDU1NfUEVSQ0VOVEFHRSA9IDIsCi0gICAgICAgIENTU19FTVMgPSAzLAotICAgICAg
ICBDU1NfRVhTID0gNCwKLSAgICAgICAgQ1NTX1BYID0gNSwKLSAgICAgICAgQ1NTX0NNID0gNiwK
LSAgICAgICAgQ1NTX01NID0gNywKLSAgICAgICAgQ1NTX0lOID0gOCwKLSAgICAgICAgQ1NTX1BU
ID0gOSwKLSAgICAgICAgQ1NTX1BDID0gMTAsCi0gICAgICAgIENTU19ERUcgPSAxMSwKLSAgICAg
ICAgQ1NTX1JBRCA9IDEyLAotICAgICAgICBDU1NfR1JBRCA9IDEzLAotICAgICAgICBDU1NfTVMg
PSAxNCwKLSAgICAgICAgQ1NTX1MgPSAxNSwKLSAgICAgICAgQ1NTX0haID0gMTYsCi0gICAgICAg
IENTU19LSFogPSAxNywKLSAgICAgICAgQ1NTX0RJTUVOU0lPTiA9IDE4LAotICAgICAgICBDU1Nf
U1RSSU5HID0gMTksCi0gICAgICAgIENTU19VUkkgPSAyMCwKLSAgICAgICAgQ1NTX0lERU5UID0g
MjEsCi0gICAgICAgIENTU19BVFRSID0gMjIsCi0gICAgICAgIENTU19DT1VOVEVSID0gMjMsCi0g
ICAgICAgIENTU19SRUNUID0gMjQsCi0gICAgICAgIENTU19SR0JDT0xPUiA9IDI1LAotICAgICAg
ICBDU1NfUEFJUiA9IDEwMCwgLy8gV2UgZW52aXNpb24gdGhpcyBiZWluZyBleHBvc2VkIGFzIGEg
bWVhbnMgb2YgZ2V0dGluZyBjb21wdXRlZCBzdHlsZSB2YWx1ZXMgZm9yIHBhaXJzIChib3JkZXIt
c3BhY2luZy9yYWRpdXMsIGJhY2tncm91bmQtcG9zaXRpb24sIGV0Yy4pCi0gICAgICAgIENTU19E
QVNIQk9BUkRfUkVHSU9OID0gMTAxIC8vIEZJWE1FOiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMgZG9p
bmcgYXMgYSBwcmltaXRpdmUgdmFsdWU/IEl0IHNob3VsZCBub3QgYmUhCi0gICAgfTsKLQotICAg
IC8vIEZJWE1FOiBpbnQgdnMuIHVuc2lnbmVkIG92ZXJsb2FkaW5nIGlzIHRvbyB0cmlja3kgZm9y
IGNvbG9yIHZzLiBpZGVudAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUoaW50IGlkZW50KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShkb3VibGUsIFVuaXRU
eXBlcyk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU3RyaW5nJiwgVW5pdFR5cGVzKTsK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPENvdW50ZXI+KTsKLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZShQYXNzUmVmUHRyPFJlY3RJbXBsPik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUo
dW5zaWduZWQgY29sb3IpOyAvLyBSR0IgdmFsdWUKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNz
UmVmUHRyPFBhaXI+KTsKLQotI2lmIF9fQVBQTEVfXwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBh
c3NSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPik7IC8vIEZJWE1FOiBXaHkgaXMgZGFzaGJvYXJkIHJl
Z2lvbiBhIHByaW1pdGl2ZSB2YWx1ZT8gVGhpcyBtYWtlcyBubyBzZW5zZS4KLSNlbmRpZgotCi0g
ICAgdmlydHVhbCB+Q1NTUHJpbWl0aXZlVmFsdWUoKTsKLQotICAgIHZvaWQgY2xlYW51cCgpOwot
Ci0gICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotCi0gICAgLyoKLSAgICAgKiBjb21wdXRlcyBhIGxlbmd0aCBpbiBwaXhlbHMgb3V0IG9m
IHRoZSBnaXZlbiBDU1NWYWx1ZS4gTmVlZCB0aGUgUmVuZGVyU3R5bGUgdG8gZ2V0Ci0gICAgICog
dGhlIGZvbnRpbmZvIGluIGNhc2UgdmFsIGlzIGRlZmluZWQgaW4gZW0gb3IgZXguCi0gICAgICoK
LSAgICAgKiBUaGUgbWV0cmljcyBoYXZlIHRvIGJlIGEgYml0IGRpZmZlcmVudCBmb3Igc2NyZWVu
IGFuZCBwcmludGVyIG91dHB1dC4KLSAgICAgKiBGb3Igc2NyZWVuIG91dHB1dCB3ZSBhc3N1bWUg
MSBpbmNoID09IDcyIHB4LCBmb3IgcHJpbnRlciB3ZSBhc3N1bWUgMzAwIGRwaQotICAgICAqCi0g
ICAgICogdGhpcyBpcyBzY3JlZW4vcHJpbnRlciBkZXBlbmRlbnQsIHNvIHdlIHByb2JhYmx5IG5l
ZWQgYSBjb25maWcgb3B0aW9uIGZvciB0aGlzLAotICAgICAqIGFuZCBzb21lIHRvb2wgdG8gY2Fs
aWJyYXRlLgotICAgICAqLwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKik7
Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGll
cik7Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqKTsKLSAg
ICBpbnQgY29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0
aXBsaWVyKTsKLSAgICBzaG9ydCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqKTsKLSAg
ICBzaG9ydCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGll
cik7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhGbG9hdChSZW5kZXJTdHlsZSosIGJvb2wgYXBw
bHlab29tRmFjdG9yID0gdHJ1ZSk7Ci0KLSAgICAvLyB1c2Ugd2l0aCBjYXJlISEhCi0gICAgdm9p
ZCBzZXRQcmltaXRpdmVUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpIHsgbV90eXBlID0gdHlwZTsg
fQotICAgIHZvaWQgc2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZG91Ymxl
IGZsb2F0VmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSh1
bnNpZ25lZCBzaG9ydCB1bml0VHlwZSk7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUoKSB7IHJl
dHVybiBtX3ZhbHVlLm51bTsgfQotCi0gICAgdm9pZCBzZXRTdHJpbmdWYWx1ZSh1bnNpZ25lZCBz
aG9ydCBzdHJpbmdUeXBlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0gICAgCi0gICAgQ291bnRl
ciogZ2V0Q291bnRlclZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBD
U1NfQ09VTlRFUiA/IDAgOiBtX3ZhbHVlLmNvdW50ZXI7Ci0gICAgfQotCi0gICAgUmVjdEltcGwq
IGdldFJlY3RWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1JF
Q1QgPyAwIDogbV92YWx1ZS5yZWN0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGdldFJHQkNvbG9y
VmFsdWUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1JHQkNPTE9SID8g
MCA6IG1fdmFsdWUucmdiY29sb3I7Ci0gICAgfQotCi0gICAgUGFpciogZ2V0UGFpclZhbHVlKCkg
Y29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19QQUlSID8gMCA6IG1fdmFsdWUu
cGFpcjsKLSAgICB9Ci0KLSNpZiBfX0FQUExFX18KLSAgICBEYXNoYm9hcmRSZWdpb24gKmdldERh
c2hib2FyZFJlZ2lvblZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBD
U1NfREFTSEJPQVJEX1JFR0lPTiA/IDAgOiBtX3ZhbHVlLnJlZ2lvbjsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIHZpcnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0K
LSAgICBpbnQgZ2V0SWRlbnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25z
dCBTdHJpbmcmLCBib29sID0gZmFsc2UpOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiBmYWxzZTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgaW50IG1fdHlwZTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGlu
dCBpZGVudDsKLSAgICAgICAgZG91YmxlIG51bTsKLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5n
OwotICAgICAgICBDb3VudGVyKiBjb3VudGVyOwotICAgICAgICBSZWN0SW1wbCogcmVjdDsKLSAg
ICAgICAgdW5zaWduZWQgcmdiY29sb3I7Ci0gICAgICAgIFBhaXIqIHBhaXI7Ci0jaWYgX19BUFBM
RV9fCi0gICAgICAgIERhc2hib2FyZFJlZ2lvbiogcmVnaW9uOwotI2VuZGlmCi0gICAgfSBtX3Zh
bHVlOwotfTsKLQotLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGhhbmRsZSBxdWlya3kgbWFyZ2lu
cyBpbiByZWZsb3cgcm9vdHMgKGJvZHksIHRkLCBhbmQgdGgpIGxpa2UgV2luSUUuCi0vLyBUaGUg
YmFzaWMgaWRlYSBpcyB0aGF0IGEgc3R5bGVzaGVldCBjYW4gdXNlIHRoZSB2YWx1ZSBfX3FlbSAo
Zm9yIHF1aXJreSBlbSkgaW5zdGVhZCBvZiBlbQotLy8gaW4gYSBzdHlsZXNoZWV0LiAgV2hlbiB0
aGUgcXVpcmt5IHZhbHVlIGlzIHVzZWQsIGlmIHlvdSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlIG1h
cmdpbiB3aWxsCi0vLyBjb2xsYXBzZSBhd2F5IGluc2lkZSBhIHRhYmxlIGNlbGwuCi1jbGFzcyBD
U1NRdWlya1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJs
aWM6Ci0gICAgQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZShkb3VibGUgbnVtLCBVbml0VHlwZXMgdHlw
ZSkKLSAgICAgICAgOiBDU1NQcmltaXRpdmVWYWx1ZShudW0sIHR5cGUpIHt9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotY2xhc3MgQ291
bnRlciA6IHB1YmxpYyBTaGFyZWQ8Q291bnRlcj4gewotcHVibGljOgotICAgIFN0cmluZyBpZGVu
dGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgU3RyaW5nIGxpc3RT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFN0eWxlOyB9Ci0gICAgU3RyaW5nIHNlcGFyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2VwYXJhdG9yOyB9Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlm
aWVyOwotICAgIFN0cmluZyBtX2xpc3RTdHlsZTsKLSAgICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci19
OwotCi1jbGFzcyBSZWN0SW1wbCA6IHB1YmxpYyBTaGFyZWQ8UmVjdEltcGw+IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5SZWN0SW1wbCgpOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgp
IGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbS5nZXQoKTsgfQotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0LmdldCgpOyB9Ci0KLSAg
ICB2b2lkIHNldFRvcChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3ApIHsgbV90b3Ag
PSB0b3A7IH0KLSAgICB2b2lkIHNldFJpZ2h0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHJpZ2h0KSB7IG1fcmlnaHQgPSByaWdodDsgfQotICAgIHZvaWQgc2V0Qm90dG9tKFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvdHRvbSkgeyBtX2JvdHRvbSA9IGJvdHRvbTsgfQotICAg
IHZvaWQgc2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0KSB7IG1fbGVm
dCA9IGxlZnQ7IH0KLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bV90b3A7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0OwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX2xlZnQ7Ci19OwotCi0vLyBBIHByaW1pdGl2ZSB2YWx1ZSByZXByZXNlbnRpbmcgYSBw
YWlyLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHByb3BlcnRpZXMgbGlrZSBib3JkZXItcmFkaXVzLCBi
YWNrZ3JvdW5kLXNpemUvcG9zaXRpb24sCi0vLyBhbmQgYm9yZGVyLXNwYWNpbmcgKGFsbCBvZiB3
aGljaCBhcmUgc3BhY2Utc2VwYXJhdGVkIHNldHMgb2YgdHdvIHZhbHVlcykuICBBdCB0aGUgbW9t
ZW50IHdlIGFyZSBvbmx5IHVzaW5nIGl0IGZvcgotLy8gYm9yZGVyLXJhZGl1cyBhbmQgYmFja2dy
b3VuZC1zaXplLCBidXQgKEZJWE1FKSBib3JkZXItc3BhY2luZyBhbmQgYmFja2dyb3VuZC1wb3Np
dGlvbiBjb3VsZCBiZSBjb252ZXJ0ZWQgb3ZlciB0byB1c2UKLS8vIGl0IChlbGltaW5hdGluZyBz
b21lIGV4dHJhIC13ZWJraXQtIGludGVybmFsIHByb3BlcnRpZXMpLgotY2xhc3MgUGFpciA6IHB1
YmxpYyBTaGFyZWQ8UGFpcj4gewotcHVibGljOgotICAgIFBhaXIoKSA6IG1fZmlyc3QoMCksIG1f
c2Vjb25kKDApIHsgfQotICAgIFBhaXIoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmly
c3QsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkKLSAgICAgICAgOiBtX2Zp
cnN0KGZpcnN0KSwgbV9zZWNvbmQoc2Vjb25kKSB7IH0KLSAgICB2aXJ0dWFsIH5QYWlyKCk7Ci0K
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Lmdl
dCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Vjb25kLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldEZpcnN0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGZpcnN0KSB7IG1fZmlyc3QgPSBmaXJzdDsgfQotICAgIHZvaWQgc2V0U2Vjb25k
KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkgeyBtX3NlY29uZCA9IHNlY29u
ZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmQ7Ci19OwotCi1jbGFzcyBE
YXNoYm9hcmRSZWdpb24gOiBwdWJsaWMgUmVjdEltcGwgewotcHVibGljOgotICAgIERhc2hib2Fy
ZFJlZ2lvbigpIDogbV9pc0NpcmNsZSgwKSwgbV9pc1JlY3RhbmdsZSgwKSB7IH0KLQotICAgIFJl
ZlB0cjxEYXNoYm9hcmRSZWdpb24+IG1fbmV4dDsKLSAgICBTdHJpbmcgbV9sYWJlbDsKLSAgICBT
dHJpbmcgbV9nZW9tZXRyeVR5cGU7Ci0gICAgYm9vbCBtX2lzQ2lyY2xlIDogMTsKLSAgICBib29s
IG1faXNSZWN0YW5nbGUgOiAxOwotfTsKLQotY2xhc3MgQ1NTSW1hZ2VWYWx1ZSA6IHB1YmxpYyBD
U1NQcmltaXRpdmVWYWx1ZSwgcHVibGljIENhY2hlZE9iamVjdENsaWVudAotewotcHVibGljOgot
ICAgIENTU0ltYWdlVmFsdWUoKTsKLSAgICBDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdXJs
LCBTdHlsZUJhc2UqKTsKLSAgICB2aXJ0dWFsIH5DU1NJbWFnZVZhbHVlKCk7Ci0KLSAgICBDYWNo
ZWRJbWFnZSogaW1hZ2UoRG9jTG9hZGVyKik7Ci0KLXByb3RlY3RlZDoKLSAgICBDYWNoZWRJbWFn
ZSogbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKLX07Ci0KLWNsYXNzIENTU0Jv
cmRlckltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBDU1NCb3Jk
ZXJJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVmUHRyPENTU0lt
YWdlVmFsdWU+LAotICAgICAgICBQYXNzUmVmUHRyPFJlY3RJbXBsPiwgaW50IGhvcml6b250YWxS
dWxlLCBpbnQgdmVydGljYWxSdWxlKTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLQotcHVibGljOgotICAgIC8vIFRoZSBib3JkZXIgaW1hZ2UuCi0gICAgUmVmUHRyPENT
U0ltYWdlVmFsdWU+IG1faW1hZ2U7Ci0KLSAgICAvLyBUaGVzZSBmb3VyIHZhbHVlcyBhcmUgdXNl
ZCB0byBtYWtlICJjdXRzIiBpbiB0aGUgaW1hZ2UuICBUaGV5IGNhbiBiZSBudW1iZXJzCi0gICAg
Ly8gb3IgcGVyY2VudGFnZXMuCi0gICAgUmVmUHRyPFJlY3RJbXBsPiBtX2ltYWdlU2xpY2VSZWN0
OwotICAgIAotICAgIC8vIFZhbHVlcyBmb3IgaG93IHRvIGhhbmRsZSB0aGUgc2NhbGluZy9zdHJl
dGNoaW5nL3RpbGluZyBvZiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgIGludCBtX2hvcml6b250YWxT
aXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgd2lkdGhzIG9mIHRoZSB0b3Av
bWlkZGxlL2JvdHRvbQotICAgIGludCBtX3ZlcnRpY2FsU2l6ZVJ1bGU7IC8vIFJ1bGUgZm9yIGhv
dyB0byBhZGp1c3QgdGhlIGhlaWdodHMgb2YgdGhlIGxlZnQvbWlkZGxlL3JpZ2h0Ci19OwotCi1j
bGFzcyBGb250RmFtaWx5VmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUKLXsKLXB1Ymxp
YzoKLSAgICBGb250RmFtaWx5VmFsdWUoIGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcgJnN0cmluZyk7
Ci0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZm9udE5hbWUoKSBjb25zdCB7IHJldHVybiBw
YXJzZWRGb250TmFtZTsgfQotICAgIGludCBnZW5lcmljRmFtaWx5VHlwZSgpIGNvbnN0IHsgcmV0
dXJuIF9nZW5lcmljRmFtaWx5VHlwZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgp
IGNvbnN0OwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXJzZWRGb250TmFtZTsKLXByaXZhdGU6
Ci0gICAgaW50IF9nZW5lcmljRmFtaWx5VHlwZTsKLX07Ci0KLWNsYXNzIEZvbnRWYWx1ZSA6IHB1
YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJldHVybiB0cnVl
OyB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxlOwotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gdmFyaWFudDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHdlaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemU7Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lSGVpZ2h0OwotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGZhbWlseTsKLX07Ci0KLS8vIFVzZWQgZm9yIHRleHQtc2hhZG93IGFuZCBib3gtc2hhZG93Ci1j
bGFzcyBTaGFkb3dWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIFNoYWRv
d1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHgsCi0gICAgICAgIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHksCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGJsdXIsCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9y
KTsKLSAgICAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHg7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNvbG9yOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8v
IGFub3RoZXIgaGVscGVyIGNsYXNzCi1jbGFzcyBDU1NQcm9wZXJ0eQotewotcHVibGljOgotICAg
IENTU1Byb3BlcnR5KGludCBwcm9wSUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29s
IGltcG9ydGFudCA9IGZhbHNlLCBpbnQgc2hvcnRoYW5kSUQgPSAwLCBib29sIGltcGxpY2l0ID0g
ZmFsc2UpCi0gICAgICAgIDogbV9pZChwcm9wSUQpLCBtX3Nob3J0aGFuZElEKHNob3J0aGFuZElE
KSwgbV9pbXBvcnRhbnQoaW1wb3J0YW50KSwgbV9pbXBsaWNpdChpbXBsaWNpdCksIG1fdmFsdWUo
dmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDU1NQcm9wZXJ0eSAmb3BlcmF0b3I9KGNv
bnN0IENTU1Byb3BlcnR5JiBvKQotICAgIHsKLSAgICAgICAgbV9pZCA9IG8ubV9pZDsKLSAgICAg
ICAgbV9zaG9ydGhhbmRJRCA9IG8ubV9zaG9ydGhhbmRJRDsKLSAgICAgICAgbV9pbXBvcnRhbnQg
PSBvLm1faW1wb3J0YW50OwotICAgICAgICBtX3ZhbHVlID0gby5tX3ZhbHVlOwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAotICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aWQ7IH0KLSAgICBpbnQgc2hvcnRoYW5kSUQoKSBjb25zdCB7IHJldHVybiBtX3Nob3J0aGFuZElE
OyB9Ci0gICAgCi0gICAgYm9vbCBpc0ltcG9ydGFudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wb3J0
YW50OyB9Ci0gICAgYm9vbCBpc0ltcGxpY2l0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsaWNpdDsg
fQotCi0gICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsg
fQotICAgIAotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICAvLyBtYWtlIHN1cmUg
dGhlIGZvbGxvd2luZyBmaXRzIGluIDQgYnl0ZXMuCi0gICAgaW50IG1faWQ7Ci0gICAgaW50IG1f
c2hvcnRoYW5kSUQ7ICAvLyBJZiB0aGlzIHByb3BlcnR5IHdhcyBzZXQgYXMgcGFydCBvZiBhIHNo
b3J0aGFuZCwgZ2l2ZXMgdGhlIHNob3J0aGFuZC4KLSAgICBib29sIG1faW1wb3J0YW50IDogMTsK
LSAgICBib29sIG1faW1wbGljaXQgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkg
d2FzIHNldCBpbXBsaWNpdGx5IGFzIHRoZSByZXN1bHQgb2YgYSBzaG9ydGhhbmQuCi0KLSAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5ICYsIGNvbnN0IENTU1Byb3Bl
cnR5ICYpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtX3ZhbHVlOwotfTsKLQotY2xhc3MgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbgotewot
cHVibGljOgotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSk7Ci0gICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgRGVwcmVjYXRlZFZhbHVl
TGlzdDxDU1NQcm9wZXJ0eT4gJik7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NT
UnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJv
cGVydGllcyk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmb3BlcmF0b3I9KGNv
bnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICYpOwotCi0gICAgdm9pZCBzZXROb2RlKE5v
ZGUqIG5vZGUpIHsgbV9ub2RlID0gbm9kZTsgfQotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5
SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3Bl
cnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBw
cm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChp
bnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNp
dChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHko
aW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKLQotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiB2YWx1ZXNJdGVyYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KLQotICAgIGJvb2wgc2V0UHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9v
bCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hh
bmdlZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5
SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90
aWZ5Q2hhbmdlZCA9IHRydWUpCi0gICAgICAgIHsgRXhjZXB0aW9uQ29kZSBlYzsgcmV0dXJuIHNl
dFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLCBpbXBvcnRhbnQsIG5vdGlmeUNoYW5nZWQsIGVj
KTsgfQotCi0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5v
dGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHko
aW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpCi0gICAgICAgIHsgRXhj
ZXB0aW9uQ29kZSBlYzsgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIG5vdGlmeUNo
YW5nZWQsIGVjKTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgdm9pZCBzZXRDaGFuZ2Vk
KCk7Ci0gCi0gICAgLy8gc2V0TGVuZ3RoUHJvcGVydHkgdHJlYXRzIGludGVnZXJzIGFzIHBpeGVs
cyEgKE5lZWRlZCBmb3IgY29udmVyc2lvbiBvZiBIVE1MIGF0dHJpYnV0ZXMuKQotICAgIHZvaWQg
c2V0TGVuZ3RoUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgaW1wb3J0YW50LCBib29sIG11bHRpTGVuZ3RoID0gZmFsc2UpOwotICAgIHZvaWQgc2V0U3Ry
aW5nUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOyAvLyBwYXJzZWQg
c3RyaW5nIHZhbHVlCi0gICAgdm9pZCBzZXRJbWFnZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIFVSTCwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7Ci0gCi0gICAgLy8gVGhl
IGZvbGxvd2luZyBwYXJzZXMgYW4gZW50aXJlIG5ldyBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICB2
b2lkIHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uKTsKLQot
ICAgIC8vIEJlc2lkZXMgYWRkaW5nIHRoZSBwcm9wZXJ0aWVzLCB0aGlzIGFsc28gcmVtb3ZlcyBh
bnkgZXhpc3RpbmcgcHJvcGVydGllcyB3aXRoIHRoZXNlIElEcy4KLSAgICAvLyBJdCBkb2VzIG5v
IG5vdGlmaWNhdGlvbiBzaW5jZSBpdCdzIGNhbGxlZCBieSB0aGUgcGFyc2VyLgotICAgIHZvaWQg
YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICosIGludCBudW1Q
cm9wZXJ0aWVzKTsKLSAKLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgdm9pZCByZW1vdmVCbG9ja1Byb3Bl
cnRpZXMoKTsKLSAgICB2b2lkIHJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygpOwotICAgIHZv
aWQgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgdm9pZCBtZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYXJn
T3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwotIAotcHJpdmF0ZToKLSAgICBTdHJpbmcgZ2V0
U2hvcnRIYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyKSBjb25zdDsK
LSAgICBTdHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0OwotIAot
ICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IG1fdmFsdWVzOwotICAgIE5vZGUq
IG1fbm9kZTsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogY3NzL0NTU0Zv
bnRGYWNlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHJl
dmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwLDQzICsyMCwxMyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImNzc19ydWxlaW1w
bC5oIgorI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIK
LSNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgotI2lu
Y2x1ZGUgImNzc3BhcnNlci5oIgotI2luY2x1ZGUgPEtVUkwuaD4KKyNpbmNsdWRlICJDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1N0eWxl
U2hlZXQqIENTU1J1bGU6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAotewotICAgIHJldHVybiAo
cGFyZW50KCkgJiYgcGFyZW50KCktPmlzQ1NTU3R5bGVTaGVldCgpKSA/IHN0YXRpY19jYXN0PENT
U1N0eWxlU2hlZXQqPihwYXJlbnQoKSkgOiAwOwotfQotCi1DU1NSdWxlKiBDU1NSdWxlOjpwYXJl
bnRSdWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1
bGUoKSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlKj4ocGFyZW50KCkpIDogMDsKLX0KLQotU3RyaW5n
IENTU1J1bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vICMjIwotICAgIHJldHVybiBTdHJp
bmcoKTsKLX0KLQotdm9pZCBDU1NSdWxlOjpzZXRDc3NUZXh0KFN0cmluZyAvKnN0ciovKQotewot
ICAgIC8vICMjIwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ1NTRm9udEZhY2VSdWxl
OjpDU1NGb250RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCiAgICAgOiBDU1NSdWxlKHBhcmVu
dCkKIHsKQEAgLTY3LDMwMCArMzcsNCBAQAogewogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1DU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBT
dHJpbmcmIGhyZWYsIE1lZGlhTGlzdCogbWVkaWEpCi0gICAgOiBDU1NSdWxlKHBhcmVudCkKLSAg
ICAsIG1fc3RySHJlZihocmVmKQotICAgICwgbV9sc3RNZWRpYShtZWRpYSkKLSAgICAsIG1fY2Fj
aGVkU2hlZXQoMCkKLSAgICAsIG1fbG9hZGluZyhmYWxzZSkKLXsKLSAgICBtX3R5cGUgPSBJTVBP
UlRfUlVMRTsKLQotICAgIGlmIChtX2xzdE1lZGlhKQotICAgICAgICBtX2xzdE1lZGlhLT5zZXRQ
YXJlbnQodGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlz
dCh0aGlzLCBTdHJpbmcoKSk7Ci19Ci0KLUNTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRSdWxlKCkK
LXsKLSAgICBpZiAobV9sc3RNZWRpYSkKLSAgICAgICAgbV9sc3RNZWRpYS0+c2V0UGFyZW50KDAp
OwotICAgIGlmIChtX3N0eWxlU2hlZXQpCi0gICAgICAgIG1fc3R5bGVTaGVldC0+c2V0UGFyZW50
KDApOwotICAgIGlmIChtX2NhY2hlZFNoZWV0KQotICAgICAgICBtX2NhY2hlZFNoZWV0LT5kZXJl
Zih0aGlzKTsKLX0KLQotdm9pZCBDU1NJbXBvcnRSdWxlOjpzZXRTdHlsZVNoZWV0KGNvbnN0IFN0
cmluZyAmdXJsLCBjb25zdCBTdHJpbmcgJnNoZWV0KQotewotICAgIGlmIChtX3N0eWxlU2hlZXQp
Ci0gICAgICAgIG1fc3R5bGVTaGVldC0+c2V0UGFyZW50KDApOwotICAgIG1fc3R5bGVTaGVldCA9
IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIHVybCk7Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICpwYXJl
bnQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgbV9zdHlsZVNoZWV0LT5wYXJzZVN0cmluZyhz
aGVldCwgIXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgbV9sb2Fk
aW5nID0gZmFsc2U7Ci0KLSAgICBjaGVja0xvYWRlZCgpOwotfQotCi1ib29sIENTU0ltcG9ydFJ1
bGU6OmlzTG9hZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbG9hZGluZyB8fCAobV9zdHls
ZVNoZWV0ICYmIG1fc3R5bGVTaGVldC0+aXNMb2FkaW5nKCkpOwotfQotCi12b2lkIENTU0ltcG9y
dFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCgpCi17Ci0gICAgU3R5bGVCYXNlKiByb290ID0gdGhp
czsKLSAgICBTdHlsZUJhc2UqIHBhcmVudDsKLSAgICB3aGlsZSAoKHBhcmVudCA9IHJvb3QtPnBh
cmVudCgpKSkKLSAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAoIXJvb3QtPmlzQ1NTU3R5
bGVTaGVldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSBz
dGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvY0xvYWRlcigpOwotICAgIGlmICgh
ZG9jTG9hZGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgYWJzSHJlZiA9IG1fc3Ry
SHJlZjsKLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQo
KTsKLSAgICBpZiAoIXBhcmVudFNoZWV0LT5ocmVmKCkuaXNOdWxsKCkpCi0gICAgICAgIC8vIHVz
ZSBwYXJlbnQgc3R5bGVoZWV0J3MgVVJMIGFzIHRoZSBiYXNlIFVSTAotICAgICAgICBhYnNIcmVm
ID0gS1VSTChwYXJlbnRTaGVldC0+aHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSwgbV9zdHJIcmVm
LmRlcHJlY2F0ZWRTdHJpbmcoKSkudXJsKCk7Ci0KLSAgICAvLyBDaGVjayBmb3IgYSBjeWNsZSBp
biBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAotICAgIC8v
IGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgot
ICAgIGZvciAocGFyZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVCYXNlKj4odGhpcyktPnBhcmVudCgp
OyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpCi0gICAgICAgIGlmIChhYnNIcmVm
ID09IHBhcmVudC0+YmFzZVVSTCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8v
ICMjIyBwYXNzIGNvcnJlY3QgY2hhcnNldCBoZXJlISEKLSAgICBtX2NhY2hlZFNoZWV0ID0gZG9j
TG9hZGVyLT5yZXF1ZXN0U3R5bGVTaGVldChhYnNIcmVmLCBEZXByZWNhdGVkU3RyaW5nOjpudWxs
KTsKLSAgICBpZiAobV9jYWNoZWRTaGVldCkgewotICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwot
ICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZWYodGhpcyk7Ci0gICAgfQotfQotCi1TdHJpbmcgQ1NT
SW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlc3VsdCA9ICJAaW1w
b3J0IHVybChcIiI7Ci0gICAgcmVzdWx0ICs9IG1fc3RySHJlZjsKLSAgICByZXN1bHQgKz0gIlwi
KSI7Ci0KLSAgICBpZiAobV9sc3RNZWRpYSkgewotICAgICAgICByZXN1bHQgKz0gIiAiOwotICAg
ICAgICByZXN1bHQgKz0gbV9sc3RNZWRpYS0+bWVkaWFUZXh0KCk7Ci0gICAgfQotICAgIHJlc3Vs
dCArPSAiOyI7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotQ1NTTWVkaWFSdWxlOjpDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50LCBNZWRpYUxp
c3QgKm1lZGlhTGlzdCwgQ1NTUnVsZUxpc3QgKnJ1bGVMaXN0ICkKLSAgICA6ICAgQ1NTUnVsZSgg
cGFyZW50ICkKLXsKLSAgICBtX3R5cGUgPSBNRURJQV9SVUxFOwotICAgIG1fbHN0TWVkaWEgPSBt
ZWRpYUxpc3Q7Ci0gICAgbV9sc3RDU1NSdWxlcyA9IHJ1bGVMaXN0OwotfQotCi1DU1NNZWRpYVJ1
bGU6OkNTU01lZGlhUnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICA6ICAgQ1NTUnVsZSggcGFy
ZW50ICkKLXsKLSAgICBtX3R5cGUgPSBNRURJQV9SVUxFOwotICAgIG1fbHN0TWVkaWEgPSAwOwot
ICAgIG1fbHN0Q1NTUnVsZXMgPSBuZXcgQ1NTUnVsZUxpc3QoKTsKLX0KLQotQ1NTTWVkaWFSdWxl
OjpDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50LCBjb25zdCBTdHJpbmcgJm1lZGlhICkK
LTogICBDU1NSdWxlKCBwYXJlbnQgKQotewotICAgIG1fdHlwZSA9IE1FRElBX1JVTEU7Ci0gICAg
bV9sc3RNZWRpYSA9IG5ldyBNZWRpYUxpc3QoIHRoaXMsIG1lZGlhICk7Ci0gICAgbV9sc3RDU1NS
dWxlcyA9IG5ldyBDU1NSdWxlTGlzdCgpOwotfQotCi1DU1NNZWRpYVJ1bGU6On5DU1NNZWRpYVJ1
bGUoKQotewotICAgIGlmKG1fbHN0TWVkaWEpCi0gICAgICAgIG1fbHN0TWVkaWEtPnNldFBhcmVu
dCgwKTsKLQotICAgIGludCBsZW5ndGggPSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICBtX2xzdENTU1J1bGVzLT5p
dGVtKGkpLT5zZXRQYXJlbnQoMCk7Ci19Ci0KLXVuc2lnbmVkIENTU01lZGlhUnVsZTo6YXBwZW5k
KCBDU1NSdWxlICpydWxlICkKLXsKLSAgICBpZiAoIXJ1bGUpIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgcnVsZS0+c2V0UGFyZW50KHRoaXMpOwotICAgIHJldHVybiBtX2xzdENT
U1J1bGVzLT5pbnNlcnRSdWxlKCBydWxlLCBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKSApOwotfQot
Ci11bnNpZ25lZCBDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICBDU1NQYXJzZXIgcCh1c2VTdHJpY3RQYXJzaW5nKCkpOwot
ICAgIFJlZlB0cjxDU1NSdWxlPiBuZXdSdWxlID0gcC5wYXJzZVJ1bGUocGFyZW50U3R5bGVTaGVl
dCgpLCBydWxlKTsKLSAgICBpZiAoIW5ld1J1bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIG5l
d1J1bGUtPnNldFBhcmVudCh0aGlzKTsKLSAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy0+aW5zZXJ0
UnVsZShuZXdSdWxlLmdldCgpLCBpbmRleCk7Ci19Ci0KLVN0cmluZyBDU1NNZWRpYVJ1bGU6OmNz
c1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiQG1lZGlhICI7Ci0gICAgaWYg
KG1fbHN0TWVkaWEpIHsKLSAgICAgICAgcmVzdWx0ICs9IG1fbHN0TWVkaWEtPm1lZGlhVGV4dCgp
OwotICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgIH0KLSAgICByZXN1bHQgKz0gInsgXG4iOwot
ICAgIAotICAgIGlmIChtX2xzdENTU1J1bGVzKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbiA9IG1f
bHN0Q1NTUnVsZXMtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuOyBpKyspIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICAiOwotICAgICAgICAgICAgcmVz
dWx0ICs9IG1fbHN0Q1NTUnVsZXMtPml0ZW0oaSktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIHJl
c3VsdCArPSAiXG4iOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJlc3VsdCArPSAifSI7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU1J1
bGVMaXN0OjpDU1NSdWxlTGlzdChTdHlsZUxpc3QgKmxzdCkKLXsKLSAgICBpZiAobHN0KSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGxlbiA9IGxzdC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgU3R5bGVCYXNlICpzdHlsZSA9
IGxzdC0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmIChzdHlsZS0+aXNSdWxlKCkpCi0gICAgICAg
ICAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHlsZSkpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi1DU1NSdWxlTGlzdDo6fkNTU1J1bGVMaXN0KCkKLXsKLSAgICBDU1NSdWxl
KiBydWxlOwotICAgIHdoaWxlICggIW1fbHN0Q1NTUnVsZXMuaXNFbXB0eSgpICYmICggcnVsZSA9
IG1fbHN0Q1NTUnVsZXMudGFrZSggMCApICkgKQotICAgICAgICBydWxlLT5kZXJlZigpOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTUGFnZVJ1bGU6OkNTU1BhZ2VSdWxlKFN0eWxl
QmFzZSAqcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQpCi17Ci0gICAgbV90eXBlID0gUEFH
RV9SVUxFOwotfQotCi1DU1NQYWdlUnVsZTo6fkNTU1BhZ2VSdWxlKCkKLXsKLX0KLQotU3RyaW5n
IENTU1BhZ2VSdWxlOjpzZWxlY3RvclRleHQoKSBjb25zdAotewotICAgIC8vICMjIwotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBDU1NQYWdlUnVsZTo6c2V0U2VsZWN0b3JUZXh0KFN0
cmluZyAvKnN0ciovKQotewotICAgIC8vICMjIwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1DU1NTdHlsZVJ1bGU6OkNTU1N0eWxlUnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICA6IENT
U1J1bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9IFNUWUxFX1JVTEU7Ci0gICAgbV9zZWxlY3Rv
ciA9IDA7Ci19Ci0KLUNTU1N0eWxlUnVsZTo6fkNTU1N0eWxlUnVsZSgpCi17Ci0gICAgaWYgKG1f
c3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPnNldFBhcmVudCgwKTsKLSAgICBkZWxldGUgbV9zZWxl
Y3RvcjsKLX0KLQotU3RyaW5nIENTU1N0eWxlUnVsZTo6c2VsZWN0b3JUZXh0KCkgY29uc3QKLXsK
LSAgICBpZiAobV9zZWxlY3RvcikgewotICAgICAgICBTdHJpbmcgc3RyOwotICAgICAgICBmb3Ig
KENTU1NlbGVjdG9yICpzID0gbV9zZWxlY3RvcjsgczsgcyA9IHMtPm5leHQoKSkgewotICAgICAg
ICAgICAgaWYgKHMgIT0gbV9zZWxlY3RvcikKLSAgICAgICAgICAgICAgICBzdHIgKz0gIiwgIjsK
LSAgICAgICAgICAgIHN0ciArPSBzLT5zZWxlY3RvclRleHQoKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gc3RyOwotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQ1NT
U3R5bGVSdWxlOjpzZXRTZWxlY3RvclRleHQoU3RyaW5nIC8qc3RyKi8pCi17Ci0gICAgLy8gIyMj
Ci19Ci0KLVN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmlu
ZyByZXN1bHQgPSBzZWxlY3RvclRleHQoKTsKLSAgICAKLSAgICByZXN1bHQgKz0gIiB7ICI7Ci0g
ICAgcmVzdWx0ICs9IG1fc3R5bGUtPmNzc1RleHQoKTsKLSAgICByZXN1bHQgKz0gIn0iOwotICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVSdWxlOjpwYXJzZVN0cmlu
ZyggY29uc3QgU3RyaW5nICYvKnN0cmluZyovLCBib29sICkKLXsKLSAgICAvLyAjIyMKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVSdWxlOjpzZXREZWNsYXJhdGlvbihQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkKLXsKLSAgICBtX3N0eWxl
ID0gc3R5bGU7Ci19Ci0KLXZvaWQgQ1NTUnVsZUxpc3Q6OmRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBp
bmRleCApCi17Ci0gICAgQ1NTUnVsZSAqcnVsZSA9IG1fbHN0Q1NTUnVsZXMudGFrZSggaW5kZXgg
KTsKLSAgICBpZiggcnVsZSApCi0gICAgICAgIHJ1bGUtPmRlcmVmKCk7Ci0gICAgZWxzZQotICAg
ICAgICA7IC8vICMjIyBUaHJvdyBJTkRFWF9TSVpFX0VSUiBleGNlcHRpb24gaGVyZSAoVE9ETykK
LX0KLQotdm9pZCBDU1NSdWxlTGlzdDo6YXBwZW5kKCBDU1NSdWxlICpydWxlICkKLXsKLSAgICBp
bnNlcnRSdWxlKCBydWxlLCBtX2xzdENTU1J1bGVzLmNvdW50KCkgKSA7Ci19Ci0KLXVuc2lnbmVk
IENTU1J1bGVMaXN0OjppbnNlcnRSdWxlKCBDU1NSdWxlICpydWxlLCB1bnNpZ25lZCBpbmRleCAp
Ci17Ci0gICAgaWYoIHJ1bGUgJiYgbV9sc3RDU1NSdWxlcy5pbnNlcnQoIGluZGV4LCBydWxlICkg
KQotICAgIHsKLSAgICAgICAgcnVsZS0+cmVmKCk7Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAg
ICB9Ci0KLSAgICAvLyAjIyMgU2hvdWxkIHRocm93IElOREVYX1NJWkVfRVJSIGV4Y2VwdGlvbiBp
bnN0ZWFkISAoVE9ETykKLSAgICByZXR1cm4gMDsKLX0KLQogfQpJbmRleDogY3NzL0NTU0JvcmRl
ckltYWdlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NCb3JkZXJJbWFnZVZhbHVlLmNw
cAkocmV2aXNpb24gMTQ0MDApCisrKyBjc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5LDEyMDcgKzE5LDIwIEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Y3NzX3ZhbHVlaW1wbC5oIgotCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgotI2luY2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5j
bHVkZSAiY3NzcGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1
ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2VWYWx1ZS5oIgogCi0jaWYgU1ZHX1NVUFBPUlQKLSNp
bmNsdWRlICJrc3ZnY3NzcHJvcGVydGllcy5oIgotI2VuZGlmCi0KLS8vIE5vdCBpbiBhbnkgaGVh
ZGVyLCBzbyBqdXN0IGRlY2xhcmUgaXQgaGVyZSBmb3Igbm93LgotV2ViQ29yZTo6U3RyaW5nIGdl
dFByb3BlcnR5TmFtZSh1bnNpZ25lZCBzaG9ydCBpZCk7CisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1
ZS5oIgorI2luY2x1ZGUgIlJlY3RJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8g
RGVmaW5lZCBpbiBDU1NHcmFtbWFyLnksIGJ1dCBub3QgaW4gYW55IGhlYWRlciwgc28ganVzdCBk
ZWNsYXJlIGl0IGhlcmUgZm9yIG5vdy4KLWludCBnZXRQcm9wZXJ0eUlEKGNvbnN0IGNoYXIqIHN0
ciwgaW50IGxlbik7Ci0KLXN0YXRpYyBpbnQgcHJvcGVydHlJRChjb25zdCBTdHJpbmcmIHMpCi17
Ci0gICAgY2hhciBidWZmZXJbbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3RoXTsKLQotICAgIHVuc2ln
bmVkIGxlbiA9IHMubGVuZ3RoKCk7Ci0gICAgaWYgKGxlbiA+IG1heENTU1Byb3BlcnR5TmFtZUxl
bmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9
IGxlbjsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSBzW2ldOwotICAgICAgICBpZiAoYyA9PSAw
IHx8IGMgPj0gMHg3RikKLSAgICAgICAgICAgIHJldHVybiAwOyAvLyBpbGxlZ2FsIGNoYXJhY3Rl
cgotICAgICAgICBidWZmZXJbaV0gPSBjOwotICAgIH0KLQotICAgIGludCBpZCA9IGdldFByb3Bl
cnR5SUQoYnVmZmVyLCBsZW4pOwotI2lmIFNWR19TVVBQT1JUCi0gICAgaWYgKGlkID09IDApCi0g
ICAgICAgIGlkID0gU1ZHOjpnZXRTVkdDU1NQcm9wZXJ0eUlEKGJ1ZmZlciwgbGVuKTsKLSNlbmRp
ZgotICAgIHJldHVybiBpZDsKLX0KLQotCi0vLyBRdW90ZXMgdGhlIHN0cmluZyBpZiBpdCBuZWVk
cyBxdW90aW5nLgotLy8gV2UgdXNlIHNpbmdsZSBxdW90ZXMgZm9yIG5vdyBiZWF1c2UgbWFya3Vw
LmNwcCB1c2VzIGRvdWJsZSBxdW90ZXMuCi1zdGF0aWMgU3RyaW5nIHF1b3RlU3RyaW5nSWZOZWVk
ZWQoY29uc3QgU3RyaW5nICZzdHJpbmcpCi17Ci0gICAgLy8gRm9yIG5vdywganVzdCBkbyB0aGlz
IGZvciBzdHJpbmdzIHRoYXQgc3RhcnQgd2l0aCAiIyIgdG8gZml4IEtvcmVhbiBmb250IG5hbWVz
IHRoYXQgc3RhcnQgd2l0aCAiIyIuCi0gICAgLy8gUG9zdC1UaWdlciwgd2Ugc2hvdWxkIGlzTGVn
YWxJZGVudGlmaWVyIGluc3RlYWQgYWZ0ZXIgd29ya2luZyBvdXQgYWxsIHRoZSBhbmNpbGxhcnkg
aXNzdWVzLgotICAgIGlmIChzdHJpbmdbMF0gIT0gJyMnKQotICAgICAgICByZXR1cm4gc3RyaW5n
OwotCi0gICAgLy8gRklYTUU6IEFsc28gbmVlZCB0byB0cmFuc2Zvcm0gY29udHJvbCBjaGFyYWN0
ZXJzIGludG8gXCBzZXF1ZW5jZXMuCi0gICAgU3RyaW5nIHMgPSBzdHJpbmc7Ci0gICAgcy5yZXBs
YWNlKCdcXCcsICJcXFxcIik7Ci0gICAgcy5yZXBsYWNlKCdcJycsICJcXCciKTsKLSAgICByZXR1
cm4gIiciICsgcyArICInIjsKLX0KLQotQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Q1NTU3R5bGVEZWNs
YXJhdGlvbihDU1NSdWxlICpwYXJlbnQpCi0gICAgOiBTdHlsZUJhc2UocGFyZW50KQotewotfQot
Ci1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzU3R5bGVEZWNsYXJhdGlvbigpCi17Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1N0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0g
ICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJ
RCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cElEKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUo
Y29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5
SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHByb3BJRCk7Ci19Ci0KLVN0cmluZyBD
U1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyAmcHJv
cGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7
Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4g
Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wSUQpID8gImltcG9ydGFudCIgOiAiIjsKLX0KLQotU3Ry
aW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmlu
ZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5
TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBp
bnQgc2hvcnRoYW5kSUQgPSBnZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wSUQpOwotICAgIGlmICgh
c2hvcnRoYW5kSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJv
cGVydHlOYW1lKHNob3J0aGFuZElEKTsKLX0KLQotYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjpp
c1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50
IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcElE
KTsKLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlv
cml0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkgLy8gc2V0IGV4Y2VwdGlvbj8KLSAgICAg
ICAgcmV0dXJuOwotICAgIGJvb2wgaW1wb3J0YW50ID0gcHJpb3JpdHkuZmluZCgiaW1wb3J0YW50
IiwgMCwgZmFsc2UpICE9IC0xOwotICAgIHNldFByb3BlcnR5KHByb3BJRCwgdmFsdWUsIGltcG9y
dGFudCwgZWMpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVy
dHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJv
cElELCBlYyk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eU5hbWUo
Y29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIHByb3BlcnR5SUQocHJv
cGVydHlOYW1lKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkKLSAg
ICA6IG1fbm9kZSgwKQotewotfQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSAqcGFyZW50KQotICAgIDogQ1NTU3R5bGVEZWNs
YXJhdGlvbihwYXJlbnQpLCBtX25vZGUoMCkKLXsKLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCwgY29uc3Qg
RGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gJnZhbHVlcykKLSAgICA6IENTU1N0eWxl
RGVjbGFyYXRpb24ocGFyZW50KSwgbV92YWx1ZXModmFsdWVzKSwgbV9ub2RlKDApCi17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgYWxsb3dzIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLgotfQotCi1DU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSAq
cGFyZW50LCBjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICpwcm9wZXJ0aWVzLCBpbnQgbnVtUHJv
cGVydGllcykKLSAgICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KSwgbV9ub2RlKDApCi17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIG1f
dmFsdWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7Ci0gICAgLy8gRklYTUU6IFRoaXMgYWxsb3dz
IGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLgotfQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om9wZXJhdG9yPShjb25zdCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiYgbykKLXsKLSAgICAvLyBkb24ndCBhdHRhY2ggaXQgdG8gdGhlIHNhbWUg
bm9kZSwganVzdCBsZWF2ZSB0aGUgY3VycmVudCBtX25vZGUgdmFsdWUKLSAgICBtX3ZhbHVlcyA9
IG8ubV92YWx1ZXM7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17
Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVy
dHlJRCk7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICByZXR1cm4gdmFsdWUtPmNzc1RleHQoKTsK
LQotICAgIC8vIFNob3J0aGFuZCBhbmQgNC12YWx1ZXMgcHJvcGVydGllcwotICAgIHN3aXRjaCAo
IHByb3BlcnR5SUQgKSB7Ci0gICAgY2FzZSBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OOgot
ICAgIHsKLSAgICAgICAgLy8gIyMgSXMgdGhpcyBjb3JyZWN0PyBUaGUgY29kZSBpbiBjc3NwYXJz
ZXIuY3BwIGlzIGNvbmZ1c2luZwotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsg
Q1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTl9YLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTl9ZIH07Ci0gICAgICAgIHJl
dHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMiApOwotICAgIH0KLSAgICBjYXNl
IENTU19QUk9QX0JBQ0tHUk9VTkQ6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGll
c1s1XSA9IHsgQ1NTX1BST1BfQkFDS0dST1VORF9JTUFHRSwgQ1NTX1BST1BfQkFDS0dST1VORF9S
RVBFQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CQUNL
R1JPVU5EX0FUVEFDSE1FTlQsIENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT04sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CQUNLR1JPVU5EX0NPTE9SIH07
Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgNSApOwotICAg
IH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUjoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBw
cm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9T
VFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRF
Ul9DT0xPUiB9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMs
IDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfVE9QOgotICAgIHsKLSAgICAg
ICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRFUl9UT1BfV0lEVEgs
IENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NfUFJPUF9CT1JERVJfVE9QX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNo
b3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1Bf
Qk9SREVSX1JJR0hUOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7
IENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX1JJ
R0hUX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVz
LCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0JPVFRPTToKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfQk9UVE9N
X1dJRFRILCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9DT0xPUn07Ci0gICAgICAg
IHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBj
YXNlIENTU19QUk9QX0JPUkRFUl9MRUZUOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRFUl9MRUZUX1dJRFRILCBDU1NfUFJPUF9CT1JERVJf
TEVGVF9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9Q
X0JPUkRFUl9MRUZUX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBw
cm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfT1VUTElORToKLSAgICB7
Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9PVVRMSU5FX1dJ
RFRILCBDU1NfUFJPUF9PVVRMSU5FX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTX1BST1BfT1VUTElORV9DT0xPUiB9OwotICAgICAgICByZXR1cm4gZ2V0U2hv
cnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9C
T1JERVJfQ09MT1I6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsg
Q1NTX1BST1BfQk9SREVSX1RPUF9DT0xPUiwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX0NPTE9SLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0JPVFRP
TV9DT0xPUiwgQ1NTX1BST1BfQk9SREVSX0xFRlRfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdl
dDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJf
V0lEVEg6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BS
T1BfQk9SREVSX1RPUF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1dJRFRILAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURU
SCwgQ1NTX1BST1BfQk9SREVSX0xFRlRfV0lEVEggfTsKLSAgICAgICAgcmV0dXJuIGdldDRWYWx1
ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfU1RZTEU6
Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BST1BfQk9S
REVSX1RPUF9TVFlMRSwgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1NUWUxFLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwgQ1NT
X1BST1BfQk9SREVSX0xFRlRfU1RZTEUgfTsKLSAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHBy
b3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9NQVJHSU46Ci0gICAgewotICAg
ICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BST1BfTUFSR0lOX1RPUCwgQ1NT
X1BST1BfTUFSR0lOX1JJR0hULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTX1BST1BfTUFSR0lOX0JPVFRPTSwgQ1NTX1BST1BfTUFSR0lOX0xFRlQgfTsKLSAgICAgICAg
cmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJP
UF9QQURESU5HOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENT
U19QUk9QX1BBRERJTkdfVE9QLCBDU1NfUFJPUF9QQURESU5HX1JJR0hULAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfUEFERElOR19CT1RUT00sIENTU19QUk9Q
X1BBRERJTkdfTEVGVCB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyAp
OwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0xJU1RfU1RZTEU6Ci0gICAgewotICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfTElTVF9TVFlMRV9UWVBFLCBDU1Nf
UFJPUF9MSVNUX1NUWUxFX1BPU0lUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTX1BST1BfTElTVF9TVFlMRV9JTUFHRSB9OwotICAgICAgICByZXR1cm4gZ2V0U2hv
cnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgfQotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXQ0VmFs
dWVzKCBjb25zdCBpbnQqIHByb3BlcnRpZXMgKSBjb25zdAotewotICAgIFN0cmluZyByZXM7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICAgICAgaWYgKCFpc1Byb3BlcnR5
SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAg
aWYgKCF2YWx1ZSkgLy8gYXBwYXJlbnRseSBhbGwgNCBwcm9wZXJ0aWVzIG11c3QgYmUgc3BlY2lm
aWVkLgotICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgICAgIGlmICgh
cmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJlcyArPSAiICI7Ci0gICAgICAgICAgICBy
ZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVz
OwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFNob3J0SGFuZFZh
bHVlKCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1iZXIgKSBjb25zdAotewotICAgIFN0
cmluZyByZXM7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXI7ICsraSkgewotICAgICAg
ICBpZiAoIWlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkgewotICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tp
XSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUpIHsgLy8gVE9ETyBwcm92aWRlIGRlZmF1bHQgdmFs
dWUgaWYgIXZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJlcyArPSAiICI7Ci0gICAgICAgICAgICAgICAgcmVzICs9IHZhbHVlLT5j
c3NUZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJl
czsKLX0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVj
YXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERl
cHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVz
LmZyb21MYXN0KCk7IGl0ICE9IGVuZDsgLS1pdCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0g
KCppdCkubV9pZCkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS52YWx1ZSgpOwotICAgIHJldHVy
biAwOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGVjID0gMDsKLQotICAgIFN0cmluZyB2YWx1ZTsKLQotICAgIERlcHJlY2F0ZWRW
YWx1ZUxpc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZh
bHVlTGlzdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmZyb21MYXN0KCk7IGl0
ICE9IGVuZDsgLS1pdCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkubV9pZCkgewot
ICAgICAgICAgICAgdmFsdWUgPSAoKml0KS52YWx1ZSgpLT5jc3NUZXh0KCk7Ci0gICAgICAgICAg
ICBtX3ZhbHVlcy5yZW1vdmUoaXQpOwotICAgICAgICAgICAgaWYgKG5vdGlmeUNoYW5nZWQpCi0g
ICAgICAgICAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y2xlYXIoKQotewotICAgIG1fdmFsdWVzLmNsZWFyKCk7Ci0gICAgc2V0Q2hhbmdlZCgp
OwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRDaGFuZ2VkKCkKLXsK
LSAgICBpZiAobV9ub2RlKSB7Ci0gICAgICAgIG1fbm9kZS0+c2V0Q2hhbmdlZCgpOwotICAgICAg
ICAvLyBGSVhNRTogSWRlYWxseSwgdGhpcyBzaG91bGQgYmUgZmFjdG9yZWQgYmV0dGVyIGFuZCB0
aGVyZQotICAgICAgICAvLyBzaG91bGQgYmUgYSBzdWJjbGFzcyBvZiBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiBqdXN0Ci0gICAgICAgIC8vIGZvciBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb25z
IHRoYXQgaGFuZGxlcyB0aGlzCi0gICAgICAgIGlmIChtX25vZGUtPmlzU3R5bGVkRWxlbWVudCgp
ICYmIHRoaXMgPT0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCAqPihtX25vZGUpLT5pbmxpbmVT
dHlsZURlY2woKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQgKj4obV9u
b2RlKS0+aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyAjIyMgcXVpY2smZGlydHkgaGFjayBmb3IgS0RFIDMuMC4uLiBtYWtlIHRoaXMg
TVVDSCBiZXR0ZXIhIChEaXJrKQotICAgIFN0eWxlQmFzZSAqcm9vdCA9IHRoaXM7Ci0gICAgd2hp
bGUgKFN0eWxlQmFzZSAqcGFyZW50ID0gcm9vdC0+cGFyZW50KCkpCi0gICAgICAgIHJvb3QgPSBw
YXJlbnQ7Ci0gICAgaWYgKHJvb3QtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4ocm9vdCktPmRvYygpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7
Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3Jp
dHkoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiAoKml0KS5pc0ltcG9ydGFudCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
aW50IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQg
cHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRv
cjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRl
cmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5pZCgpKQotICAgICAgICAgICAgcmV0
dXJuICgqaXQpLnNob3J0aGFuZElEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5
SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJv
cGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENT
U1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAoKml0
KS5pc0ltcGxpY2l0KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5n
ICZ2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldFBy
b3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUsIGVjKTsKLX0KLQotU3Ry
aW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHBy
b3BlcnR5SUQsIHRydWUsIGVjKTsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIGJvb2wg
aW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGVjID0gMDsKLQotICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwotCi0gICAgQ1NTUGFy
c2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNl
ci5wYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgIGlm
ICghc3VjY2VzcykgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgfSBlbHNlIGlmIChu
b3RpZnlDaGFuZ2VkKQotICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7
Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQp
Ci17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7Ci0gICAgbV92YWx1ZXMuYXBwZW5k
KENTU1Byb3BlcnR5KHByb3BlcnR5SUQsIG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSksIGlt
cG9ydGFudCkpOwotICAgIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICBzZXRDaGFuZ2VkKCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnNldFN0cmluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcgJnZhbHVlLCBD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUsIGJvb2wgaW1wb3J0YW50KQotewotICAg
IHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SWQpOwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQcm9w
ZXJ0eShwcm9wZXJ0eUlkLCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIHR5cGUpLCBpbXBv
cnRhbnQpKTsKLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnNldEltYWdlUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyAm
VVJMLCBib29sIGltcG9ydGFudCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlkKTsK
LSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwgbmV3IENTU0ltYWdl
VmFsdWUoVVJMLCB0aGlzKSwgaW1wb3J0YW50KSk7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0
cmluZyAmc3R5bGVEZWNsYXJhdGlvbikKLXsKLSAgICBtX3ZhbHVlcy5jbGVhcigpOwotICAgIENT
U1BhcnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBwYXJzZXIucGFyc2VEZWNs
YXJhdGlvbih0aGlzLCBzdHlsZURlY2xhcmF0aW9uKTsKLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmFkZFBhcnNlZFByb3BlcnRpZXMoY29u
c3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCi17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAg
cmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1tpXS0+aWQoKSwgZmFsc2UpOwotICAgICAgICBtX3Zh
bHVlcy5hcHBlbmQoKnByb3BlcnRpZXNbaV0pOwotICAgIH0KLSAgICAvLyBGSVhNRTogVGhpcyBw
cm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0Q2hhbmdlZCgpIGlmIHNvbWV0aGluZyBj
aGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAotICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBh
cmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVu
Y3Rpb25zIGluIHRoaXMgY2xhc3MuCi19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OnNldExlbmd0aFByb3BlcnR5KGludCBpZCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIGJvb2wgLyogbXVsdGlMZW5ndGgqLykKLXsKLSAgICBib29sIHBhcnNlTW9kZSA9
IHVzZVN0cmljdFBhcnNpbmcoKTsKLSAgICBzZXRTdHJpY3RQYXJzaW5nKGZhbHNlKTsKLSAgICBz
ZXRQcm9wZXJ0eShpZCwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgc2V0U3RyaWN0UGFyc2luZyhw
YXJzZU1vZGUpOwotfQotCi11bnNpZ25lZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bGVu
Z3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92YWx1ZXMuY291bnQoKTsKLX0KLQotU3RyaW5n
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjppdGVtKHVuc2lnbmVkIGkpIGNvbnN0Ci17Ci0g
ICAgaWYgKGkgPj0gbV92YWx1ZXMuY291bnQoKSkKLSAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShtX3ZhbHVlc1tpXS5pZCgpKTsKLX0KLQotQ1NTUnVs
ZSAqQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50UnVsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSdWxlKCkpID8gc3RhdGljX2Nhc3Q8Q1NTUnVsZSAq
PihwYXJlbnQoKSkgOiAwOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiIjsKLSAgICAKLSAgICBE
ZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZv
ciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92
YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICByZXN1bHQgKz0gKCppdCku
Y3NzVGV4dCgpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBtX3ZhbHVlcy5jbGVhcigpOwotICAgIENTU1Bh
cnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBwYXJzZXIucGFyc2VEZWNsYXJh
dGlvbih0aGlzLCB0ZXh0KTsKLSAgICAvLyBGSVhNRTogRGV0ZWN0IHN5bnRheCBlcnJvcnMgYW5k
IHNldCBlYy4KLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246Om1lcmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpvdGhlciwgYm9vbCBh
cmdPdmVycmlkZXNPbkNvbmZsaWN0KQotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0
ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBvdGhlci0+dmFsdWVzSXRlcmF0b3IoKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5ICZwcm9wZXJ0eSA9ICpp
dDsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUo
cHJvcGVydHkuaWQoKSk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgaWYgKCFh
cmdPdmVycmlkZXNPbkNvbmZsaWN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHkuaWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
bV92YWx1ZXMuYXBwZW5kKHByb3BlcnR5KTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFRoaXMgcHJv
YmFibHkgc2hvdWxkIGhhdmUgYSBjYWxsIHRvIHNldENoYW5nZWQoKSBpZiBzb21ldGhpbmcgY2hh
bmdlZC4gV2UgbWF5IGFsc28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJn
dW1lbnQgdG8gdGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0
aW9ucyBpbiB0aGlzIGNsYXNzLgotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OmRpZmYo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKSBjb25zdAotewotICAgIGlmICghc3R5
bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8aW50PiBwcm9w
ZXJ0aWVzOwotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5
PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9w
ZXJ0eT4gaXQoc3R5bGUtPnZhbHVlc0l0ZXJhdG9yKCkpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgY29uc3QgQ1NTUHJvcGVydHkgJnByb3BlcnR5ID0gKml0OwotICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS5pZCgpKTsKLSAg
ICAgICAgaWYgKHZhbHVlICYmICh2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LnZhbHVlKCkt
PmNzc1RleHQoKSkpCi0gICAgICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eS5pZCgp
KTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8aW50
PiBpdChwcm9wZXJ0aWVzLmJlZ2luKCkpOyBpdCAhPSBwcm9wZXJ0aWVzLmVuZCgpOyArK2l0KQot
ICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoKml0KTsKLX0KLQotLy8gVGhpcyBpcyB0aGUg
bGlzdCBvZiBwcm9wZXJ0aWVzIHdlIHdhbnQgdG8gY29weSBpbiB0aGUgY29weUluaGVyaXRhYmxl
UHJvcGVydGllcygpIGZ1bmN0aW9uLgotLy8gSXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUg
bGlzdCBvZiBpbmhlcml0ZWQgQ1NTIHByb3BlcnRpZXMgYW5kIHRoZQotLy8gcHJvcGVydGllcyBm
b3Igd2hpY2ggd2UgaGF2ZSBhIGNvbXB1dGVkIGltcGxlbWVudGF0aW9uIGluIHRoaXMgZmlsZS4K
LWNvbnN0IGludCBpbmhlcml0YWJsZVByb3BlcnRpZXNbXSA9IHsKLSAgICBDU1NfUFJPUF9CT1JE
RVJfQ09MTEFQU0UsCi0gICAgQ1NTX1BST1BfQk9SREVSX1NQQUNJTkcsCi0gICAgQ1NTX1BST1Bf
Q09MT1IsCi0gICAgQ1NTX1BST1BfRk9OVF9GQU1JTFksCi0gICAgQ1NTX1BST1BfRk9OVF9TSVpF
LAotICAgIENTU19QUk9QX0ZPTlRfU1RZTEUsCi0gICAgQ1NTX1BST1BfRk9OVF9WQVJJQU5ULAot
ICAgIENTU19QUk9QX0ZPTlRfV0VJR0hULAotICAgIENTU19QUk9QX0xFVFRFUl9TUEFDSU5HLAot
ICAgIENTU19QUk9QX0xJTkVfSEVJR0hULAotICAgIENTU19QUk9QX1RFWFRfQUxJR04sCi0gICAg
Q1NTX1BST1BfX1dFQktJVF9URVhUX0RFQ09SQVRJT05TX0lOX0VGRkVDVCwKLSAgICBDU1NfUFJP
UF9URVhUX0lOREVOVCwKLSAgICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfU0laRV9BREpVU1QsCi0g
ICAgQ1NTX1BST1BfVEVYVF9UUkFOU0ZPUk0sCi0gICAgQ1NTX1BST1BfT1JQSEFOUywKLSAgICBD
U1NfUFJPUF9XSElURV9TUEFDRSwKLSAgICBDU1NfUFJPUF9XSURPV1MsCi0gICAgQ1NTX1BST1Bf
V09SRF9TUEFDSU5HLAotfTsKLQotY29uc3QgdW5zaWduZWQgbnVtSW5oZXJpdGFibGVQcm9wZXJ0
aWVzID0gc2l6ZW9mKGluaGVyaXRhYmxlUHJvcGVydGllcykgLyBzaXplb2YoaW5oZXJpdGFibGVQ
cm9wZXJ0aWVzWzBdKTsKLQotLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIHdlIHdh
bnQgdG8gY29weSBpbiB0aGUgY29weUJsb2NrUHJvcGVydGllcygpIGZ1bmN0aW9uLgotLy8gSXQg
aXMgdGhlIGxpc3Qgb2YgQ1NTIHByb3BlcnRpZXMgdGhhdCBhcHBseSBzcGVjaWFsbHkgdG8gYmxv
Y2stbGV2ZWwgZWxlbWVudHMuCi1zdGF0aWMgY29uc3QgaW50IGJsb2NrUHJvcGVydGllc1tdID0g
ewotICAgIENTU19QUk9QX09SUEhBTlMsCi0gICAgQ1NTX1BST1BfT1ZFUkZMT1csIC8vIFRoaXMg
Y2FuIGJlIGFsc28gYmUgYXBwbGllZCB0byByZXBsYWNlZCBlbGVtZW50cwotICAgIENTU19QUk9Q
X1BBR0VfQlJFQUtfQUZURVIsCi0gICAgQ1NTX1BST1BfUEFHRV9CUkVBS19CRUZPUkUsCi0gICAg
Q1NTX1BST1BfUEFHRV9CUkVBS19JTlNJREUsCi0gICAgQ1NTX1BST1BfVEVYVF9BTElHTiwKLSAg
ICBDU1NfUFJPUF9URVhUX0lOREVOVCwKLSAgICBDU1NfUFJPUF9XSURPV1MKLX07Ci0KLWNvbnN0
IHVuc2lnbmVkIG51bUJsb2NrUHJvcGVydGllcyA9IHNpemVvZihibG9ja1Byb3BlcnRpZXMpIC8g
c2l6ZW9mKGJsb2NrUHJvcGVydGllc1swXSk7Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5QmxvY2tQcm9wZXJ0
aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVByb3BlcnRpZXNJblNldChibG9ja1Byb3Bl
cnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnJlbW92ZUJsb2NrUHJvcGVydGllcygpCi17Ci0gICAgcmVtb3ZlUHJvcGVydGll
c0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKLX0KLQotdm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlSW5oZXJpdGFibGVQcm9wZXJ0aWVzKCkK
LXsKLSAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoaW5oZXJpdGFibGVQcm9wZXJ0aWVzLCBudW1J
bmhlcml0YWJsZVByb3BlcnRpZXMpOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0
IGludCAqc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVl
TGlzdDxDU1NQcm9wZXJ0eT4gbGlzdDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5
Q1NTVmFsdWUoc2V0W2ldKTsKLSAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgbGlzdC5h
cHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAg
fQotICAgIHJldHVybiBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwgbGlzdCk7Ci19
Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnRpZXNJblNl
dChjb25zdCBpbnQgKnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0p
OwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlbW92ZShDU1NQ
cm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChjaGFuZ2VkKQotICAgICAg
ICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJsZSgpCi17Ci0gICAgcmV0
dXJuIHRoaXM7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmV3
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIG1fdmFsdWVzKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdW5zaWduZWQgc2hvcnQgQ1NTSW5oZXJpdGVkVmFs
dWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENTU19JTkhFUklUOwotfQot
Ci1TdHJpbmcgQ1NTSW5oZXJpdGVkVmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVy
biAiaW5oZXJpdCI7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IENTU0luaXRpYWxWYWx1ZTo6Y3NzVmFs
dWVUeXBlKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIENTU19JTklUSUFMOyAKLX0KLQotU3RyaW5n
IENTU0luaXRpYWxWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJpbml0aWFs
IjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NWYWx1ZUxp
c3Q6On5DU1NWYWx1ZUxpc3QoKQotewotICAgIGZvciAoQ1NTVmFsdWUgKnZhbCA9IG1fdmFsdWVz
LmZpcnN0KCk7IHZhbDsgdmFsID0gbV92YWx1ZXMubmV4dCgpKQotICAgICAgICB2YWwtPmRlcmVm
KCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IENTU1ZhbHVlTGlzdDo6Y3NzVmFsdWVUeXBlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gQ1NTX1ZBTFVFX0xJU1Q7Ci19Ci0KLXZvaWQgQ1NTVmFsdWVMaXN0
OjphcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsKQotewotICAgIG1fdmFsdWVzLmFwcGVu
ZCh2YWwucmVsZWFzZSgpKTsKLX0KLQotU3RyaW5nIENTU1ZhbHVlTGlzdDo6Y3NzVGV4dCgpIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIHJlc3VsdCA9ICIiOwotCi0gICAgZm9yIChEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPENTU1ZhbHVlPiBpdGVyYXRvcihtX3ZhbHVlcyk7IGl0ZXJhdG9yLmN1cnJl
bnQoKTsgKytpdGVyYXRvcikgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXN1bHQgKz0gIiwgIjsKLSAgICAgICAgcmVzdWx0ICs9IGl0ZXJhdG9yLmN1cnJl
bnQoKS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQ
cmltaXRpdmVWYWx1ZSgpCi17Ci0gICAgbV90eXBlID0gMDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGludCBpZGVudCkKLXsKLSAgICBtX3ZhbHVlLmlkZW50ID0g
aWRlbnQ7Ci0gICAgbV90eXBlID0gQ1NTX0lERU5UOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi17Ci0gICAgbV92
YWx1ZS5udW0gPSBudW07Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYgc3RyLCBVbml0VHlwZXMgdHlwZSkK
LXsKLSAgICBpZiAoKG1fdmFsdWUuc3RyaW5nID0gc3RyLmltcGwoKSkpCi0gICAgICAgIG1fdmFs
dWUuc3RyaW5nLT5yZWYoKTsKLSAgICBtX3R5cGUgPSB0eXBlOwotfQotCi1DU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPiBjKQotewotICAgIG1f
dmFsdWUuY291bnRlciA9IGMucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19DT1VOVEVSOwot
fQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxSZWN0
SW1wbD4gcikKLXsKLSAgICBtX3ZhbHVlLnJlY3QgPSByLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUg
PSBDU1NfUkVDVDsKLX0KLQotI2lmIF9fQVBQTEVfXwotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiByKQotewotICAgIG1fdmFs
dWUucmVnaW9uID0gci5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NTX0RBU0hCT0FSRF9SRUdJ
T047Ci19Ci0jZW5kaWYKLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFJH
QkEzMiBjb2xvcikKLXsKLSAgICBtX3ZhbHVlLnJnYmNvbG9yID0gY29sb3I7Ci0gICAgbV90eXBl
ID0gQ1NTX1JHQkNPTE9SOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUoUGFzc1JlZlB0cjxQYWlyPiBwKQotewotICAgIG1fdmFsdWUucGFpciA9IHAucmVsZWFzZSgp
OwotICAgIG1fdHlwZSA9IENTU19QQUlSOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6fkNTU1By
aW1pdGl2ZVZhbHVlKCkKLXsKLSAgICBjbGVhbnVwKCk7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZl
VmFsdWU6OmNsZWFudXAoKQotewotICAgIHN3aXRjaChtX3R5cGUpIHsKLSAgICBjYXNlIENTU19T
VFJJTkc6Ci0gICAgY2FzZSBDU1NfVVJJOgotICAgIGNhc2UgQ1NTX0FUVFI6Ci0gICAgICAgIGlm
IChtX3ZhbHVlLnN0cmluZykKLSAgICAgICAgICAgIG1fdmFsdWUuc3RyaW5nLT5kZXJlZigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19DT1VOVEVSOgotICAgICAgICBtX3ZhbHVlLmNv
dW50ZXItPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1JFQ1Q6Ci0gICAg
ICAgIG1fdmFsdWUucmVjdC0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1Nf
UEFJUjoKLSAgICAgICAgbV92YWx1ZS5wYWlyLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSNp
ZiBfX0FQUExFX18KLSAgICBjYXNlIENTU19EQVNIQk9BUkRfUkVHSU9OOgotICAgICAgICBpZiAo
bV92YWx1ZS5yZWdpb24pCi0gICAgICAgICAgICBtX3ZhbHVlLnJlZ2lvbi0+ZGVyZWYoKTsKLSAg
ICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBtX3R5cGUgPSAwOwotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVM
ZW5ndGhJbnQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBjb21w
dXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBp
bXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAg
V2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xv
c2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/
IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IElOVF9NQVggfHwgcmVzdWx0
IDwgSU5UX01JTikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAg
ICAKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0
eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11
bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMg
Y29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUu
Zy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3
ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQg
Kz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IElO
VF9NQVggfHwgcmVzdWx0IDwgSU5UX01JTikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IChpbnQpcmVzdWx0OyAgCi19Ci0KLWNvbnN0IGludCBpbnRNYXhGb3JMZW5ndGggPSAweDdmZmZm
ZmY7IC8vIG1heCB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50Ci1jb25zdCBpbnQgaW50TWluRm9yTGVu
Z3RoID0gKC0weDdmZmZmZmYtMSk7IC8vIG1pbiB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50Ci0KLS8v
IExlbmd0aHMgZXhwZWN0IGFuIGludCB0aGF0IGlzIG9ubHkgMjgtYml0cywgc28gd2UgaGF2ZSB0
byBjaGVjayBmb3IgYSBkaWZmZXJlbnQgb3ZlcmZsb3cuCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGRv
dWJsZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRo
aXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2Ys
IGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBp
ZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1
bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+
IGludE1heEZvckxlbmd0aCB8fCByZXN1bHQgPCBpbnRNaW5Gb3JMZW5ndGgpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgICAgCi19Ci0KLS8vIExlbmd0aHMgZXhw
ZWN0IGFuIGludCB0aGF0IGlzIG9ubHkgMjgtYml0cywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3Ig
YSBkaWZmZXJlbnQgb3ZlcmZsb3cuCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5n
dGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsK
LSAgICBkb3VibGUgcmVzdWx0ID0gbXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhGbG9hdChzdHls
ZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVz
dWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8g
Z28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRl
Z2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAg
ICAKLSAgICBpZiAocmVzdWx0ID4gaW50TWF4Rm9yTGVuZ3RoIHx8IHJlc3VsdCA8IGludE1pbkZv
ckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgCi19
Ci0KLXNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5
bGUgKnN0eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5
bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJl
c3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRv
IGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50
ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0g
ICAgCi0gICAgaWYgKHJlc3VsdCA+IFNIUlRfTUFYIHx8IHJlc3VsdCA8IFNIUlRfTUlOKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKHNob3J0KXJlc3VsdDsgICAgCi19Ci0KLXNob3J0
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUgKnN0eWxl
LCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gbXVsdGlwbGllciAq
IGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9u
IGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5
OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxs
eSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQg
PCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4gU0hSVF9NQVggfHwg
cmVzdWx0IDwgU0hSVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoc2hvcnQp
cmVzdWx0OyAgCi19Ci0KLWRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEZs
b2F0KFJlbmRlclN0eWxlICpzdHlsZSwgYm9vbCBhcHBseVpvb21GYWN0b3IpCi17Ci0gICAgdW5z
aWduZWQgc2hvcnQgdHlwZSA9IHByaW1pdGl2ZVR5cGUoKTsKLQotICAgIC8vIFdlIGFsd2F5cyBh
c3N1bWUgOTYgQ1NTIHBpeGVscyBpbiBhIENTUyBpbmNoLiBUaGlzIGlzIHRoZSBjb2xkIGhhcmQg
dHJ1dGggb2YgdGhlIFdlYi4KLSAgICAvLyBBdCBoaWdoIERQSSwgd2UgbWF5IHNjYWxlIGEgQ1NT
IHBpeGVsLCBidXQgdGhlIHJhdGlvIG9mIHRoZSBDU1MgcGl4ZWwgdG8gdGhlIHNvLWNhbGxlZAot
ICAgIC8vICJhYnNvbHV0ZSIgQ1NTIGxlbmd0aCB1bml0cyBsaWtlIGluY2ggYW5kIHB0IGlzIGFs
d2F5cyBmaXhlZCBhbmQgbmV2ZXIgY2hhbmdlcy4KLSAgICBkb3VibGUgY3NzUGl4ZWxzUGVySW5j
aCA9IDk2LjsKLQotICAgIGRvdWJsZSBmYWN0b3IgPSAxLjsKLSAgICBzd2l0Y2godHlwZSkgewot
ICAgIGNhc2UgQ1NTX0VNUzoKLSAgICAgICAgZmFjdG9yID0gYXBwbHlab29tRmFjdG9yID8KLSAg
ICAgICAgICBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkgOgotICAgICAg
ICAgIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTX0VYUzogewotICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBhIGJ1
ZyByaWdodCBub3cgd2hlcmUgdGhlIHpvb20gd2lsbCBiZSBhcHBsaWVkIG11bHRpcGxlIHRpbWVz
IHRvIEVYIHVuaXRzLgotICAgICAgICAvLyBXZSByZWFsbHkgbmVlZCB0byBjb21wdXRlIEVYIHVz
aW5nIGZvbnRNZXRyaWNzIGZvciB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkU2l6ZSBhbmQgbm90IHVz
ZQotICAgICAgICAvLyBvdXIgYWN0dWFsIGNvbnN0cnVjdGVkIHJlbmRlcmluZyBmb250LgotICAg
ICAgICBmYWN0b3IgPSBzdHlsZS0+Zm9udCgpLnhIZWlnaHQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgQ1NTX1BYOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19DTToK
LSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC8yLjU0OyAvLyAoMi41NCBjbS9pbikK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfTU06Ci0gICAgICAgIGZhY3RvciA9IGNzc1Bp
eGVsc1BlckluY2gvMjUuNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfSU46Ci0gICAg
ICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTX1BUOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoLzcyLjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NfUEM6Ci0gICAgICAgIC8vIDEgcGMgPT0gMTIgcHQKLSAgICAg
ICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCoxMi4vNzIuOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldEZs
b2F0VmFsdWUoKSAqIGZhY3RvcjsKLX0KLQotdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0Rmxv
YXRWYWx1ZSggdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9hdFZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgY2xlYW51cCgpOwotICAgIC8vICMj
IyBjaGVjayBpZiBwcm9wZXJ0eSBzdXBwb3J0cyB0aGlzIHR5cGUKLSAgICBpZiAobV90eXBlID4g
Q1NTX0RJTUVOU0lPTikgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy9pZihtX3R5cGUgPiBDU1NfRElNRU5TSU9OKSB0aHJvdyBET01FeGNl
cHRpb24oSU5WQUxJRF9BQ0NFU1NfRVJSKTsKLSAgICBtX3ZhbHVlLm51bSA9IGZsb2F0VmFsdWU7
Ci0gICAgbV90eXBlID0gdW5pdFR5cGU7Ci19Ci0KLWRvdWJsZSBzY2FsZUZhY3RvckZvckNvbnZl
cnNpb24odW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCi17Ci0gICAgZG91YmxlIGNzc1BpeGVsc1Bl
ckluY2ggPSA5Ni4wOwotICAgIGRvdWJsZSBmYWN0b3IgPSAxLjA7Ci0gICAgCi0gICAgc3dpdGNo
KHVuaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ006
Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoIC8gMi41NDsgLy8gKDIuNTQg
Y20vaW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX01NOgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lOOgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFQ6Ci0gICAgICAg
ICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoIC8gNzIuMDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6Ci0gICAgICAgICAgICBm
YWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoICogMTIuMCAvIDcyLjA7IC8vIDEgcGMgPT0gMTIgcHQK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWN0b3I7Ci19Ci0KLWRvdWJsZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Z2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkKLXsKLSAgICBp
ZiAodW5pdFR5cGUgPT0gbV90eXBlIHx8IHVuaXRUeXBlIDwgQ1NTX1BYIHx8IHVuaXRUeXBlID4g
Q1NTX1BDKQotICAgICAgICByZXR1cm4gbV92YWx1ZS5udW07Ci0gICAgCi0gICAgZG91YmxlIGNv
bnZlcnRlZFZhbHVlID0gbV92YWx1ZS5udW07Ci0gICAgCi0gICAgLy8gRmlyc3QgY29udmVydCB0
aGUgdmFsdWUgZnJvbSBtX3R5cGUgaW50byBDU1NQaXhlbHMKLSAgICBkb3VibGUgZmFjdG9yID0g
c2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKG1fdHlwZSk7Ci0gICAgY29udmVydGVkVmFsdWUgKj0g
ZmFjdG9yOwotICAgIAotICAgIC8vIE5vdyBjb252ZXJ0IGZyb20gQ1NTUGl4ZWxzIHRvIHRoZSBz
cGVjaWZpZWQgdW5pdFR5cGUKLSAgICBmYWN0b3IgPSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24o
dW5pdFR5cGUpOwotICAgIGNvbnZlcnRlZFZhbHVlIC89IGZhY3RvcjsKLSAgICAKLSAgICByZXR1
cm4gY29udmVydGVkVmFsdWU7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldFN0cmlu
Z1ZhbHVlKCB1bnNpZ25lZCBzaG9ydCBzdHJpbmdUeXBlLCBjb25zdCBTdHJpbmcgJnN0cmluZ1Zh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgY2xlYW51cCgpOwot
ICAgIC8vaWYobV90eXBlIDwgQ1NTX1NUUklORykgdGhyb3cgRE9NRXhjZXB0aW9uKElOVkFMSURf
QUNDRVNTX0VSUik7Ci0gICAgLy9pZihtX3R5cGUgPiBDU1NfQVRUUikgdGhyb3cgRE9NRXhjZXB0
aW9uKElOVkFMSURfQUNDRVNTX0VSUik7Ci0gICAgaWYgKG1fdHlwZSA8IENTU19TVFJJTkcgfHwg
bV90eXBlID4gQ1NTX0FUVFIpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmIChzdHJpbmdUeXBlICE9IENTU19JREVOVCkgewotICAgICAg
ICBtX3ZhbHVlLnN0cmluZyA9IHN0cmluZ1ZhbHVlLmltcGwoKTsKLSAgICAgICAgbV92YWx1ZS5z
dHJpbmctPnJlZigpOwotICAgICAgICBtX3R5cGUgPSBzdHJpbmdUeXBlOwotICAgIH0KLSAgICAv
LyAjIyMgcGFyc2UgaWRlbnQKLX0KLQotU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRTdHJp
bmdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBD
U1NfU1RSSU5HOgotICAgICAgICBjYXNlIENTU19BVFRSOgotICAgICAgICBjYXNlIENTU19VUkk6
Ci0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5zdHJpbmc7Ci0gICAgICAgIGNhc2UgQ1NTX0lE
RU5UOgotICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlTmFtZShtX3ZhbHVlLmlkZW50KTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgQ1NTIDIuMSBzcGVjIHNh
eXMgeW91IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaGVyZS4KLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0
IENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBD
U1NfUFJJTUlUSVZFX1ZBTFVFOwotfQotCi1ib29sIENTU1ByaW1pdGl2ZVZhbHVlOjpwYXJzZVN0
cmluZyggY29uc3QgU3RyaW5nICYvKnN0cmluZyovLCBib29sICkKLXsKLSAgICAvLyAjIyMKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SWRlbnQoKQot
ewotICAgIGlmKG1fdHlwZSAhPSBDU1NfSURFTlQpIHJldHVybiAwOwotICAgIHJldHVybiBtX3Zh
bHVlLmlkZW50OwotfQotCi1TdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25z
dAotewotICAgIC8vICMjIyByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlIGluc3RlYWQgb2YgYSBn
ZW5lcmF0ZWQgb25lIChlLmcuIGNvbG9yCi0gICAgLy8gbmFtZSBpZiBpdCB3YXMgc3BlY2lmaWVk
KSAtIGNoZWNrIHdoYXQgc3BlYyBzYXlzIGFib3V0IHRoaXMKLSAgICBTdHJpbmcgdGV4dDsKLSAg
ICBzd2l0Y2ggKCBtX3R5cGUgKSB7Ci0gICAgICAgIGNhc2UgQ1NTX1VOS05PV046Ci0gICAgICAg
ICAgICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19OVU1CRVI6
Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIiUiOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX0VNUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51
bWJlcihtX3ZhbHVlLm51bSkgKyAiZW0iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ1NTX0VYUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51
bSkgKyAiZXgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BYOgotICAg
ICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJweCI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQ006Ci0gICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImNtIjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU19NTToKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlciht
X3ZhbHVlLm51bSkgKyAibW0iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
X0lOOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJp
biI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUFQ6Ci0gICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB0IjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU19QQzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicGMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTX0RFRzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVl
Lm51bSkgKyAiZGVnIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19SQUQ6
Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInJhZCI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfR1JBRDoKLSAgICAgICAgICAg
IHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZ3JhZCI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1zIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUu
bnVtKSArICJzIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19IWjoKLSAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaHoiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0tIWjoKLSAgICAgICAgICAgIHRleHQg
PSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAia2h6IjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU19ESU1FTlNJT046Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19TVFJJTkc6Ci0gICAgICAgICAgICB0ZXh0
ID0gcXVvdGVTdHJpbmdJZk5lZWRlZChtX3ZhbHVlLnN0cmluZyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NfVVJJOgotICAgICAgICAgICAgdGV4dCA9ICJ1cmwoIiArIFN0
cmluZyhtX3ZhbHVlLnN0cmluZykgKyAiKSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NfSURFTlQ6Ci0gICAgICAgICAgICB0ZXh0ID0gZ2V0VmFsdWVOYW1lKG1fdmFsdWUu
aWRlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0FUVFI6Ci0gICAg
ICAgICAgICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19DT1VO
VEVSOgotICAgICAgICAgICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NfUkVDVDogewotICAgICAgICAgICAgUmVjdEltcGwqIHJlY3RWYWwgPSBnZXRSZWN0VmFs
dWUoKTsKLSAgICAgICAgICAgIHRleHQgPSAicmVjdCgiOwotICAgICAgICAgICAgdGV4dCArPSBy
ZWN0VmFsLT50b3AoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0
VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RW
YWwtPmJvdHRvbSgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RW
YWwtPmxlZnQoKS0+Y3NzVGV4dCgpICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDU1NfUkdCQ09MT1I6IHsKLSAgICAgICAgICAgIENvbG9yIGNvbG9y
KG1fdmFsdWUucmdiY29sb3IpOwotICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPCAweEZG
KQotICAgICAgICAgICAgICAgIHRleHQgPSAicmdiYSgiOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHRleHQgPSAicmdiKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6
bnVtYmVyKGNvbG9yLnJlZCgpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6
bnVtYmVyKGNvbG9yLmdyZWVuKCkpICsgIiwgIjsKLSAgICAgICAgICAgIHRleHQgKz0gU3RyaW5n
OjpudW1iZXIoY29sb3IuYmx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwg
MHhGRikKLSAgICAgICAgICAgICAgICB0ZXh0ICs9ICIsICIgKyBTdHJpbmc6Om51bWJlcigoZmxv
YXQpY29sb3IuYWxwaGEoKSAvIDB4RkYpOwotICAgICAgICAgICAgdGV4dCArPSAiKSI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU19QQUlSOgotICAgICAg
ICAgICAgdGV4dCA9IG1fdmFsdWUucGFpci0+Zmlyc3QoKS0+Y3NzVGV4dCgpOwotICAgICAgICAg
ICAgdGV4dCArPSAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IG1fdmFsdWUucGFpci0+c2Vjb25k
KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmIF9fQVBQTEVfXwotICAgICAg
ICBjYXNlIENTU19EQVNIQk9BUkRfUkVHSU9OOgotICAgICAgICAgICAgZm9yIChEYXNoYm9hcmRS
ZWdpb24qIHJlZ2lvbiA9IGdldERhc2hib2FyZFJlZ2lvblZhbHVlKCk7IHJlZ2lvbjsgcmVnaW9u
ID0gcmVnaW9uLT5tX25leHQuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICB0ZXh0ID0gImRhc2hi
b2FyZC1yZWdpb24oIjsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bV9sYWJlbDsK
LSAgICAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAg
ICAgICB0ZXh0ICs9ICIgY2lyY2xlICI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9u
LT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICIgcmVjdGFuZ2xl
ICI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+dG9wKCktPmNzc1RleHQoKSArICIgIjsKLSAg
ICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+cmlnaHQoKS0+Y3NzVGV4dCgpICsgIiAiOwot
ICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgpICsgIiAi
OwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5sZWZ0KCktPmNzc1RleHQoKTsKLSAg
ICAgICAgICAgICAgICB0ZXh0ICs9ICIpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiB0ZXh0OwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1SZWN0SW1wbDo6flJlY3RJbXBsKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFpcjo6flBh
aXIoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NJbWFnZVZhbHVlOjpDU1NJbWFnZVZhbHVl
KGNvbnN0IFN0cmluZyYgdXJsLCBTdHlsZUJhc2UgKnN0eWxlKQotICAgIDogQ1NTUHJpbWl0aXZl
VmFsdWUodXJsLCBDU1NfVVJJKSwgbV9pbWFnZSgwKSwgbV9hY2Nlc3NlZEltYWdlKGZhbHNlKQot
ewotfQotCi1DU1NJbWFnZVZhbHVlOjpDU1NJbWFnZVZhbHVlKCkKLSAgICA6IENTU1ByaW1pdGl2
ZVZhbHVlKENTU19WQUxfTk9ORSksIG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZSh0cnVlKQot
ewotfQotCi1DU1NJbWFnZVZhbHVlOjp+Q1NTSW1hZ2VWYWx1ZSgpCi17Ci0gICAgaWYgKG1faW1h
Z2UpCi0gICAgICAgIG1faW1hZ2UtPmRlcmVmKHRoaXMpOwotfQotCi1DYWNoZWRJbWFnZSogQ1NT
SW1hZ2VWYWx1ZTo6aW1hZ2UoRG9jTG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgaWYgKCFtX2FjY2Vz
c2VkSW1hZ2UpIHsKLSAgICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsKLQotICAgICAgICBp
ZiAobG9hZGVyKQotICAgICAgICAgICAgbV9pbWFnZSA9IGxvYWRlci0+cmVxdWVzdEltYWdlKGdl
dFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2ltYWdlID0gQ2Fj
aGU6OnJlcXVlc3RJbWFnZSgwLCBnZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChtX2ltYWdlKQotICAgICAgICAgICAgbV9pbWFnZS0+cmVmKHRoaXMpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gbV9pbWFnZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENTU0Jv
cmRlckltYWdlVmFsdWU6OkNTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZh
bHVlPiBpbWFnZSwKICAgICBQYXNzUmVmUHRyPFJlY3RJbXBsPiBpbWFnZVJlY3QsIGludCBob3Jp
em9udGFsUnVsZSwgaW50IHZlcnRpY2FsUnVsZSkKLSAgICA6IG1faW1hZ2UoaW1hZ2UpLCBtX2lt
YWdlU2xpY2VSZWN0KGltYWdlUmVjdCkKLSAgICAsIG1faG9yaXpvbnRhbFNpemVSdWxlKGhvcml6
b250YWxSdWxlKSwgbV92ZXJ0aWNhbFNpemVSdWxlKHZlcnRpY2FsUnVsZSkKKyAgICA6IG1faW1h
Z2UoaW1hZ2UpCisgICAgLCBtX2ltYWdlU2xpY2VSZWN0KGltYWdlUmVjdCkKKyAgICAsIG1faG9y
aXpvbnRhbFNpemVSdWxlKGhvcml6b250YWxSdWxlKQorICAgICwgbV92ZXJ0aWNhbFNpemVSdWxl
KHZlcnRpY2FsUnVsZSkKIHsKIH0KIApAQCAtMTI0NywxMDkgKzYwLDQgQEAKICAgICByZXR1cm4g
dGV4dDsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZvbnRGYW1pbHlWYWx1ZTo6Rm9udEZh
bWlseVZhbHVlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKLSAgICA6IENTU1ByaW1p
dGl2ZVZhbHVlKFN0cmluZygpLCBDU1NfU1RSSU5HKQotewotICAgIHN0YXRpYyBjb25zdCBSZWd1
bGFyRXhwcmVzc2lvbiBwYXJlblJlZygiIFxcKC4qXFwpJCIpOwotICAgIHN0YXRpYyBjb25zdCBS
ZWd1bGFyRXhwcmVzc2lvbiBicmFjZVJlZygiIFxcWy4qXFxdJCIpOwotCi0gICAgcGFyc2VkRm9u
dE5hbWUgPSBzdHJpbmc7Ci0gICAgLy8gYSBsYW5ndWFnZSB0YWcgaXMgb2Z0ZW4gYWRkZWQgaW4g
YnJhY2VzIGF0IHRoZSBlbmQuIFJlbW92ZSBpdC4KLSAgICBwYXJzZWRGb250TmFtZS5yZXBsYWNl
KHBhcmVuUmVnLCAiIik7Ci0gICAgLy8gcmVtb3ZlIFtYZnRdIHF1YWxpZmllcnMKLSAgICBwYXJz
ZWRGb250TmFtZS5yZXBsYWNlKGJyYWNlUmVnLCAiIik7Ci19Ci0KLVN0cmluZyBGb250RmFtaWx5
VmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVybiBxdW90ZVN0cmluZ0lmTmVlZGVk
KHBhcnNlZEZvbnROYW1lKTsKLX0KLQotU3RyaW5nIEZvbnRWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0
Ci17Ci0gICAgLy8gZm9udCB2YXJpYW50IHdlaWdodCBzaXplIC8gbGluZS1oZWlnaHQgZmFtaWx5
IAotCi0gICAgU3RyaW5nIHJlc3VsdCgiIik7Ci0KLSAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAg
cmVzdWx0ICs9IHN0eWxlLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh2YXJpYW50KSB7Ci0g
ICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7
Ci0gICAgICAgIHJlc3VsdCArPSB2YXJpYW50LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh3
ZWlnaHQpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVz
dWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IHdlaWdodC0+Y3NzVGV4dCgpOwotICAgIH0K
LSAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gc2l6ZS0+Y3NzVGV4dCgpOwot
ICAgIH0KLSAgICBpZiAobGluZUhlaWdodCkgewotICAgICAgICBpZiAoIXNpemUpCi0gICAgICAg
ICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gIi8iOwotICAgICAgICByZXN1
bHQgKz0gbGluZUhlaWdodC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoZmFtaWx5KSB7Ci0g
ICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7
Ci0gICAgICAgIHJlc3VsdCArPSBmYW1pbHktPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotICAgIAotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNo
YWRvdwotU2hhZG93VmFsdWU6OlNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IF94LAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF95LAotICAgIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF9ibHVyLAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IF9jb2xvcikKLSAgICA6IHgoX3gpLCB5KF95KSwgYmx1cihfYmx1ciksIGNvbG9y
KF9jb2xvcikKLXsKLX0KLQotU3RyaW5nIFNoYWRvd1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsK
LSAgICBTdHJpbmcgdGV4dCgiIik7Ci0KLSAgICBpZiAoY29sb3IpCi0gICAgICAgIHRleHQgKz0g
Y29sb3ItPmNzc1RleHQoKTsKLSAgICBpZiAoeCkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geC0+Y3NzVGV4
dCgpOwotICAgIH0KLSAgICBpZiAoeSkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geS0+Y3NzVGV4dCgpOwot
ICAgIH0KLSAgICBpZiAoYmx1cikgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0gYmx1ci0+Y3NzVGV4dCgpOwot
ICAgIH0KLQotICAgIHJldHVybiB0ZXh0OwotfQotCi1TdHJpbmcgQ1NTUHJvcGVydHk6OmNzc1Rl
eHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoaWQoKSkgKyAiOiAiICsg
bV92YWx1ZS0+Y3NzVGV4dCgpCi0gICAgICAgICsgKGlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRh
bnQiIDogIiIpICsgIjsgIjsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5
ICZhLCBjb25zdCBDU1NQcm9wZXJ0eSAmYikKLXsKLSAgICByZXR1cm4gYS5tX2lkID09IGIubV9p
ZCAmJiBhLm1faW1wb3J0YW50ID09IGIubV9pbXBvcnRhbnQgJiYgYS5tX3ZhbHVlID09IGIubV92
YWx1ZTsKLX0KLQogfQpJbmRleDogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lv
biAxNDQwMCkKKysrIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5LDE3MCArMTksNDYgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJjc3Nf
dmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKIAot
I2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJE
b2NMb2FkZXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgImNzc3BhcnNlci5oIgor
I2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5o
IgotCi0jaWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJrc3ZnY3NzcHJvcGVydGllcy5oIgotI2Vu
ZGlmCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKIAogLy8gTm90IGlu
IGFueSBoZWFkZXIsIHNvIGp1c3QgZGVjbGFyZSBpdCBoZXJlIGZvciBub3cuCiBXZWJDb3JlOjpT
dHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2lnbmVkIHNob3J0IGlkKTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0vLyBEZWZpbmVkIGluIENTU0dyYW1tYXIueSwgYnV0IG5vdCBpbiBhbnkgaGVh
ZGVyLCBzbyBqdXN0IGRlY2xhcmUgaXQgaGVyZSBmb3Igbm93LgotaW50IGdldFByb3BlcnR5SUQo
Y29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLQotc3RhdGljIGludCBwcm9wZXJ0eUlEKGNvbnN0
IFN0cmluZyYgcykKLXsKLSAgICBjaGFyIGJ1ZmZlclttYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGhd
OwotCi0gICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKLSAgICBpZiAobGVuID4gbWF4Q1NT
UHJvcGVydHlOYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgIT0gbGVuOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IHNbaV07Ci0gICAg
ICAgIGlmIChjID09IDAgfHwgYyA+PSAweDdGKQotICAgICAgICAgICAgcmV0dXJuIDA7IC8vIGls
bGVnYWwgY2hhcmFjdGVyCi0gICAgICAgIGJ1ZmZlcltpXSA9IGM7Ci0gICAgfQotCi0gICAgaW50
IGlkID0gZ2V0UHJvcGVydHlJRChidWZmZXIsIGxlbik7Ci0jaWYgU1ZHX1NVUFBPUlQKLSAgICBp
ZiAoaWQgPT0gMCkKLSAgICAgICAgaWQgPSBTVkc6OmdldFNWR0NTU1Byb3BlcnR5SUQoYnVmZmVy
LCBsZW4pOwotI2VuZGlmCi0gICAgcmV0dXJuIGlkOwotfQotCi0KLS8vIFF1b3RlcyB0aGUgc3Ry
aW5nIGlmIGl0IG5lZWRzIHF1b3RpbmcuCi0vLyBXZSB1c2Ugc2luZ2xlIHF1b3RlcyBmb3Igbm93
IGJlYXVzZSBtYXJrdXAuY3BwIHVzZXMgZG91YmxlIHF1b3Rlcy4KLXN0YXRpYyBTdHJpbmcgcXVv
dGVTdHJpbmdJZk5lZWRlZChjb25zdCBTdHJpbmcgJnN0cmluZykKLXsKLSAgICAvLyBGb3Igbm93
LCBqdXN0IGRvIHRoaXMgZm9yIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoICIjIiB0byBmaXggS29y
ZWFuIGZvbnQgbmFtZXMgdGhhdCBzdGFydCB3aXRoICIjIi4KLSAgICAvLyBQb3N0LVRpZ2VyLCB3
ZSBzaG91bGQgaXNMZWdhbElkZW50aWZpZXIgaW5zdGVhZCBhZnRlciB3b3JraW5nIG91dCBhbGwg
dGhlIGFuY2lsbGFyeSBpc3N1ZXMuCi0gICAgaWYgKHN0cmluZ1swXSAhPSAnIycpCi0gICAgICAg
IHJldHVybiBzdHJpbmc7Ci0KLSAgICAvLyBGSVhNRTogQWxzbyBuZWVkIHRvIHRyYW5zZm9ybSBj
b250cm9sIGNoYXJhY3RlcnMgaW50byBcIHNlcXVlbmNlcy4KLSAgICBTdHJpbmcgcyA9IHN0cmlu
ZzsKLSAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKLSAgICBzLnJlcGxhY2UoJ1wnJywgIlxc
JyIpOwotICAgIHJldHVybiAiJyIgKyBzICsgIiciOwotfQotCi1DU1NTdHlsZURlY2xhcmF0aW9u
OjpDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6IFN0eWxlQmFzZShw
YXJlbnQpCi17Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNTdHlsZURlY2xhcmF0
aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwot
ICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0
UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJv
cElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUocHJvcElEKTsK
LX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHkoY29u
c3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BJRCkgPyAiaW1wb3J0YW50IiA6
ICIiOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhh
bmQoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3Bl
cnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIGludCBzaG9ydGhhbmRJRCA9IGdldFByb3BlcnR5U2hvcnRoYW5kKHByb3BJ
RCk7Ci0gICAgaWYgKCFzaG9ydGhhbmRJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc2hvcnRoYW5kSUQpOwotfQotCi1ib29sIENTU1N0eWxl
RGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFt
ZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlm
ICghcHJvcElEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzUHJvcGVydHlJ
bXBsaWNpdChwcm9wSUQpOwotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQgcHJvcElE
ID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKSAvLyBzZXQgZXhj
ZXB0aW9uPwotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5m
aW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gLTE7Ci0gICAgc2V0UHJvcGVydHkocHJvcElE
LCB2YWx1ZSwgaW1wb3J0YW50LCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9u
OjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAg
ICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiByZW1v
dmVQcm9wZXJ0eShwcm9wSUQsIGVjKTsKLX0KLQotYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjpp
c1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4g
cHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24oKQogICAgIDogbV9ub2RlKDApCiB7CiB9CiAKIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQpCi0gICAg
OiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQorICAgIDogQ1NTU3R5bGVE
ZWNsYXJhdGlvbihwYXJlbnQpCisgICAgLCBtX25vZGUoMCkKIHsKIH0KIAogQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVu
dCwgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gJnZhbHVlcykKLSAgICA6
IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KSwgbV92YWx1ZXModmFsdWVzKSwgbV9ub2RlKDAp
CisgICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCkKKyAgICAsIG1fdmFsdWVzKHZhbHVl
cykKKyAgICAsIG1fbm9kZSgwKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyBkdXBsaWNh
dGUgcHJvcGVydGllcy4KIH0KIAogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCwgY29uc3QgQ1NTUHJvcGVydHkgKiBj
b25zdCAqcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCi0gICAgOiBDU1NTdHlsZURlY2xh
cmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQorICAgIDogQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXJl
bnQpCisgICAgLCBtX25vZGUoMCkKIHsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7ICsraSkKICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsKQEAg
LTQ5MywxMSArMzY5LDYgQEAKICAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKG1fdmFsdWVzW2ld
LmlkKCkpOwogfQogCi1DU1NSdWxlICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUoKSkgPyBz
dGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KIFN0cmluZyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlc3Vs
dCA9ICIiOwpAQCAtNTM2LDI0ICs0MDcsNiBAQAogICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBhcmd1
bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVuY3Rp
b25zIGluIHRoaXMgY2xhc3MuCiB9CiAKLXZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHls
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxpbnQ+IHByb3Bl
cnRpZXM7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+
IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3Bl
cnR5PiBpdChzdHlsZS0+dmFsdWVzSXRlcmF0b3IoKSk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LmlkKCkpOwotICAg
ICAgICBpZiAodmFsdWUgJiYgKHZhbHVlLT5jc3NUZXh0KCkgPT0gcHJvcGVydHkudmFsdWUoKS0+
Y3NzVGV4dCgpKSkKLSAgICAgICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5LmlkKCkp
OwotICAgIH0KLSAgICAKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RJdGVyYXRvcjxpbnQ+
IGl0KHByb3BlcnRpZXMuYmVnaW4oKSk7IGl0ICE9IHByb3BlcnRpZXMuZW5kKCk7ICsraXQpCi0g
ICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eSgqaXQpOwotfQotCiAvLyBUaGlzIGlzIHRoZSBs
aXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRoZSBjb3B5SW5oZXJpdGFibGVQ
cm9wZXJ0aWVzKCkgZnVuY3Rpb24uCiAvLyBJdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBs
aXN0IG9mIGluaGVyaXRlZCBDU1MgcHJvcGVydGllcyBhbmQgdGhlCiAvLyBwcm9wZXJ0aWVzIGZv
ciB3aGljaCB3ZSBoYXZlIGEgY29tcHV0ZWQgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBmaWxlLgpA
QCAtNjExLDE3ICs0NjQsNiBAQAogICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChpbmhlcml0YWJs
ZVByb3BlcnRpZXMsIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyk7CiB9CiAKLVBhc3NSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9w
ZXJ0aWVzSW5TZXQoY29uc3QgaW50ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKLXsKLSAg
ICBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBsaXN0OwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2Uo
KSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbigwLCBsaXN0KTsKLX0KLQogdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVt
b3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCAqc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CkBAIC02NDYsNzEwICs0ODgsNCBAQAogICAgIHJldHVy
biBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwgbV92YWx1ZXMpOwogfQogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi11bnNpZ25lZCBzaG9ydCBDU1NJbmhlcml0
ZWRWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NTX0lOSEVSSVQ7
Ci19Ci0KLVN0cmluZyBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICJpbmhlcml0IjsKLX0KLQotdW5zaWduZWQgc2hvcnQgQ1NTSW5pdGlhbFZhbHVlOjpj
c3NWYWx1ZVR5cGUoKSBjb25zdAoteyAKLSAgICByZXR1cm4gQ1NTX0lOSVRJQUw7IAotfQotCi1T
dHJpbmcgQ1NTSW5pdGlhbFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gImlu
aXRpYWwiOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU1Zh
bHVlTGlzdDo6fkNTU1ZhbHVlTGlzdCgpCi17Ci0gICAgZm9yIChDU1NWYWx1ZSAqdmFsID0gbV92
YWx1ZXMuZmlyc3QoKTsgdmFsOyB2YWwgPSBtX3ZhbHVlcy5uZXh0KCkpCi0gICAgICAgIHZhbC0+
ZGVyZWYoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgQ1NTVmFsdWVMaXN0Ojpjc3NWYWx1ZVR5cGUo
KSBjb25zdAotewotICAgIHJldHVybiBDU1NfVkFMVUVfTElTVDsKLX0KLQotdm9pZCBDU1NWYWx1
ZUxpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWwpCi17Ci0gICAgbV92YWx1ZXMu
YXBwZW5kKHZhbC5yZWxlYXNlKCkpOwotfQotCi1TdHJpbmcgQ1NTVmFsdWVMaXN0Ojpjc3NUZXh0
KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0KLSAgICBmb3IgKERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8Q1NTVmFsdWU+IGl0ZXJhdG9yKG1fdmFsdWVzKTsgaXRlcmF0b3Iu
Y3VycmVudCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJlc3VsdCArPSAiLCAiOwotICAgICAgICByZXN1bHQgKz0gaXRlcmF0b3Iu
Y3VycmVudCgpLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU1ByaW1pdGl2ZVZhbHVlKCkKLXsKLSAgICBtX3R5cGUgPSAwOwotfQotCi1DU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoaW50IGlkZW50KQotewotICAgIG1fdmFsdWUuaWRl
bnQgPSBpZGVudDsKLSAgICBtX3R5cGUgPSBDU1NfSURFTlQ7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NQcmltaXRpdmVWYWx1ZShkb3VibGUgbnVtLCBVbml0VHlwZXMgdHlwZSkKLXsKLSAg
ICBtX3ZhbHVlLm51bSA9IG51bTsKLSAgICBtX3R5cGUgPSB0eXBlOwotfQotCi1DU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgU3RyaW5nJiBzdHIsIFVuaXRUeXBlcyB0
eXBlKQotewotICAgIGlmICgobV92YWx1ZS5zdHJpbmcgPSBzdHIuaW1wbCgpKSkKLSAgICAgICAg
bV92YWx1ZS5zdHJpbmctPnJlZigpOwotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLUNTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPENvdW50ZXI+IGMpCi17Ci0g
ICAgbV92YWx1ZS5jb3VudGVyID0gYy5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NTX0NPVU5U
RVI7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRy
PFJlY3RJbXBsPiByKQotewotICAgIG1fdmFsdWUucmVjdCA9IHIucmVsZWFzZSgpOwotICAgIG1f
dHlwZSA9IENTU19SRUNUOwotfQotCi0jaWYgX19BUFBMRV9fCi1DU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxEYXNoYm9hcmRSZWdpb24+IHIpCi17Ci0gICAg
bV92YWx1ZS5yZWdpb24gPSByLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfREFTSEJPQVJE
X1JFR0lPTjsKLX0KLSNlbmRpZgotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUoUkdCQTMyIGNvbG9yKQotewotICAgIG1fdmFsdWUucmdiY29sb3IgPSBjb2xvcjsKLSAgICBt
X3R5cGUgPSBDU1NfUkdCQ09MT1I7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRp
dmVWYWx1ZShQYXNzUmVmUHRyPFBhaXI+IHApCi17Ci0gICAgbV92YWx1ZS5wYWlyID0gcC5yZWxl
YXNlKCk7Ci0gICAgbV90eXBlID0gQ1NTX1BBSVI7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjp+
Q1NTUHJpbWl0aXZlVmFsdWUoKQotewotICAgIGNsZWFudXAoKTsKLX0KLQotdm9pZCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y2xlYW51cCgpCi17Ci0gICAgc3dpdGNoKG1fdHlwZSkgewotICAgIGNhc2Ug
Q1NTX1NUUklORzoKLSAgICBjYXNlIENTU19VUkk6Ci0gICAgY2FzZSBDU1NfQVRUUjoKLSAgICAg
ICAgaWYgKG1fdmFsdWUuc3RyaW5nKQotICAgICAgICAgICAgbV92YWx1ZS5zdHJpbmctPmRlcmVm
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0NPVU5URVI6Ci0gICAgICAgIG1fdmFs
dWUuY291bnRlci0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfUkVDVDoK
LSAgICAgICAgbV92YWx1ZS5yZWN0LT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU19QQUlSOgotICAgICAgICBtX3ZhbHVlLnBhaXItPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFr
OwotI2lmIF9fQVBQTEVfXwotICAgIGNhc2UgQ1NTX0RBU0hCT0FSRF9SRUdJT046Ci0gICAgICAg
IGlmIChtX3ZhbHVlLnJlZ2lvbikKLSAgICAgICAgICAgIG1fdmFsdWUucmVnaW9uLT5kZXJlZigp
OwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIG1fdHlwZSA9IDA7Ci19Ci0KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9
IGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9u
IGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5
OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxs
eSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQg
PCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4gSU5UX01BWCB8fCBy
ZXN1bHQgPCBJTlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKGludClyZXN1
bHQ7ICAgIAotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnQoUmVu
ZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICBkb3VibGUgcmVzdWx0
ID0gbXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8g
VGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBv
ZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5k
IGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJl
c3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0
ID4gSU5UX01BWCB8fCByZXN1bHQgPCBJTlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gKGludClyZXN1bHQ7ICAKLX0KLQotY29uc3QgaW50IGludE1heEZvckxlbmd0aCA9IDB4
N2ZmZmZmZjsgLy8gbWF4IHZhbHVlIGZvciBhIDI4LWJpdCBpbnQKLWNvbnN0IGludCBpbnRNaW5G
b3JMZW5ndGggPSAoLTB4N2ZmZmZmZi0xKTsgLy8gbWluIHZhbHVlIGZvciBhIDI4LWJpdCBpbnQK
LQotLy8gTGVuZ3RocyBleHBlY3QgYW4gaW50IHRoYXQgaXMgb25seSAyOC1iaXRzLCBzbyB3ZSBo
YXZlIHRvIGNoZWNrIGZvciBhIGRpZmZlcmVudCBvdmVyZmxvdy4KLWludCBDU1NQcmltaXRpdmVW
YWx1ZTo6Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSAqc3R5bGUpCi17Ci0g
ICAgZG91YmxlIHJlc3VsdCA9IGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAg
Ly8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVl
cyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJv
dW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAg
IHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVz
dWx0ID4gaW50TWF4Rm9yTGVuZ3RoIHx8IHJlc3VsdCA8IGludE1pbkZvckxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgICAKLX0KLQotLy8gTGVuZ3Ro
cyBleHBlY3QgYW4gaW50IHRoYXQgaXMgb25seSAyOC1iaXRzLCBzbyB3ZSBoYXZlIHRvIGNoZWNr
IGZvciBhIGRpZmZlcmVudCBvdmVyZmxvdy4KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSAqc3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVy
KQotewotICAgIGRvdWJsZSByZXN1bHQgPSBtdWx0aXBsaWVyICogY29tcHV0ZUxlbmd0aEZsb2F0
KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRl
biByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVl
ZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0
IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAx
OwotICAgIAotICAgIGlmIChyZXN1bHQgPiBpbnRNYXhGb3JMZW5ndGggfHwgcmVzdWx0IDwgaW50
TWluRm9yTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKGludClyZXN1bHQ7
ICAKLX0KLQotc2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhTaG9ydChSZW5k
ZXJTdHlsZSAqc3R5bGUpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IGNvbXB1dGVMZW5ndGhGbG9h
dChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0
ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5l
ZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4
dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4w
MTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4gU0hSVF9NQVggfHwgcmVzdWx0IDwgU0hSVF9NSU4p
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoc2hvcnQpcmVzdWx0OyAgICAKLX0KLQot
c2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSAq
c3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBtdWx0aXBs
aWVyICogY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZl
cnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0
NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUg
cmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJl
c3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBTSFJUX01B
WCB8fCByZXN1bHQgPCBTSFJUX01JTikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChz
aG9ydClyZXN1bHQ7ICAKLX0KLQotZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoRmxvYXQoUmVuZGVyU3R5bGUgKnN0eWxlLCBib29sIGFwcGx5Wm9vbUZhY3RvcikKLXsKLSAg
ICB1bnNpZ25lZCBzaG9ydCB0eXBlID0gcHJpbWl0aXZlVHlwZSgpOwotCi0gICAgLy8gV2UgYWx3
YXlzIGFzc3VtZSA5NiBDU1MgcGl4ZWxzIGluIGEgQ1NTIGluY2guIFRoaXMgaXMgdGhlIGNvbGQg
aGFyZCB0cnV0aCBvZiB0aGUgV2ViLgotICAgIC8vIEF0IGhpZ2ggRFBJLCB3ZSBtYXkgc2NhbGUg
YSBDU1MgcGl4ZWwsIGJ1dCB0aGUgcmF0aW8gb2YgdGhlIENTUyBwaXhlbCB0byB0aGUgc28tY2Fs
bGVkCi0gICAgLy8gImFic29sdXRlIiBDU1MgbGVuZ3RoIHVuaXRzIGxpa2UgaW5jaCBhbmQgcHQg
aXMgYWx3YXlzIGZpeGVkIGFuZCBuZXZlciBjaGFuZ2VzLgotICAgIGRvdWJsZSBjc3NQaXhlbHNQ
ZXJJbmNoID0gOTYuOwotCi0gICAgZG91YmxlIGZhY3RvciA9IDEuOwotICAgIHN3aXRjaCh0eXBl
KSB7Ci0gICAgY2FzZSBDU1NfRU1TOgotICAgICAgICBmYWN0b3IgPSBhcHBseVpvb21GYWN0b3Ig
PwotICAgICAgICAgIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSA6Ci0g
ICAgICAgICAgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfRVhTOiB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBoYXZl
IGEgYnVnIHJpZ2h0IG5vdyB3aGVyZSB0aGUgem9vbSB3aWxsIGJlIGFwcGxpZWQgbXVsdGlwbGUg
dGltZXMgdG8gRVggdW5pdHMuCi0gICAgICAgIC8vIFdlIHJlYWxseSBuZWVkIHRvIGNvbXB1dGUg
RVggdXNpbmcgZm9udE1ldHJpY3MgZm9yIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWRTaXplIGFuZCBu
b3QgdXNlCi0gICAgICAgIC8vIG91ciBhY3R1YWwgY29uc3RydWN0ZWQgcmVuZGVyaW5nIGZvbnQu
Ci0gICAgICAgIGZhY3RvciA9IHN0eWxlLT5mb250KCkueEhlaWdodCgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFg6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
X0NNOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoLzIuNTQ7IC8vICgyLjU0IGNt
L2luKQotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19NTToKLSAgICAgICAgZmFjdG9yID0g
Y3NzUGl4ZWxzUGVySW5jaC8yNS40OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19JTjoK
LSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NfUFQ6Ci0gICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gvNzIuOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU19QQzoKLSAgICAgICAgLy8gMSBwYyA9PSAxMiBwdAot
ICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoKjEyLi83Mi47Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
Z2V0RmxvYXRWYWx1ZSgpICogZmFjdG9yOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpz
ZXRGbG9hdFZhbHVlKCB1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZG91YmxlIGZsb2F0VmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBjbGVhbnVwKCk7Ci0gICAg
Ly8gIyMjIGNoZWNrIGlmIHByb3BlcnR5IHN1cHBvcnRzIHRoaXMgdHlwZQotICAgIGlmIChtX3R5
cGUgPiBDU1NfRElNRU5TSU9OKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAvL2lmKG1fdHlwZSA+IENTU19ESU1FTlNJT04pIHRocm93IERP
TUV4Y2VwdGlvbihJTlZBTElEX0FDQ0VTU19FUlIpOwotICAgIG1fdmFsdWUubnVtID0gZmxvYXRW
YWx1ZTsKLSAgICBtX3R5cGUgPSB1bml0VHlwZTsKLX0KLQotZG91YmxlIHNjYWxlRmFjdG9yRm9y
Q29udmVyc2lvbih1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkKLXsKLSAgICBkb3VibGUgY3NzUGl4
ZWxzUGVySW5jaCA9IDk2LjA7Ci0gICAgZG91YmxlIGZhY3RvciA9IDEuMDsKLSAgICAKLSAgICBz
d2l0Y2godW5pdFR5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DTToKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyAyLjU0OyAvLyAo
Mi41NCBjbS9pbikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTU06Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoIC8g
MjUuNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSU46Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKLSAg
ICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyA3Mi4wOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQzoKLSAgICAgICAg
ICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggKiAxMi4wIC8gNzIuMDsgLy8gMSBwYyA9PSAx
MiBwdAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhY3RvcjsKLX0KLQotZG91YmxlIENTU1By
aW1pdGl2ZVZhbHVlOjpnZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQotewot
ICAgIGlmICh1bml0VHlwZSA9PSBtX3R5cGUgfHwgdW5pdFR5cGUgPCBDU1NfUFggfHwgdW5pdFR5
cGUgPiBDU1NfUEMpCi0gICAgICAgIHJldHVybiBtX3ZhbHVlLm51bTsKLSAgICAKLSAgICBkb3Vi
bGUgY29udmVydGVkVmFsdWUgPSBtX3ZhbHVlLm51bTsKLSAgICAKLSAgICAvLyBGaXJzdCBjb252
ZXJ0IHRoZSB2YWx1ZSBmcm9tIG1fdHlwZSBpbnRvIENTU1BpeGVscwotICAgIGRvdWJsZSBmYWN0
b3IgPSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24obV90eXBlKTsKLSAgICBjb252ZXJ0ZWRWYWx1
ZSAqPSBmYWN0b3I7Ci0gICAgCi0gICAgLy8gTm93IGNvbnZlcnQgZnJvbSBDU1NQaXhlbHMgdG8g
dGhlIHNwZWNpZmllZCB1bml0VHlwZQotICAgIGZhY3RvciA9IHNjYWxlRmFjdG9yRm9yQ29udmVy
c2lvbih1bml0VHlwZSk7Ci0gICAgY29udmVydGVkVmFsdWUgLz0gZmFjdG9yOwotICAgIAotICAg
IHJldHVybiBjb252ZXJ0ZWRWYWx1ZTsKLX0KLQotdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0
U3RyaW5nVmFsdWUoIHVuc2lnbmVkIHNob3J0IHN0cmluZ1R5cGUsIGNvbnN0IFN0cmluZyAmc3Ry
aW5nVmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBjbGVhbnVw
KCk7Ci0gICAgLy9pZihtX3R5cGUgPCBDU1NfU1RSSU5HKSB0aHJvdyBET01FeGNlcHRpb24oSU5W
QUxJRF9BQ0NFU1NfRVJSKTsKLSAgICAvL2lmKG1fdHlwZSA+IENTU19BVFRSKSB0aHJvdyBET01F
eGNlcHRpb24oSU5WQUxJRF9BQ0NFU1NfRVJSKTsKLSAgICBpZiAobV90eXBlIDwgQ1NTX1NUUklO
RyB8fCBtX3R5cGUgPiBDU1NfQVRUUikgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHN0cmluZ1R5cGUgIT0gQ1NTX0lERU5UKSB7Ci0g
ICAgICAgIG1fdmFsdWUuc3RyaW5nID0gc3RyaW5nVmFsdWUuaW1wbCgpOwotICAgICAgICBtX3Zh
bHVlLnN0cmluZy0+cmVmKCk7Ci0gICAgICAgIG1fdHlwZSA9IHN0cmluZ1R5cGU7Ci0gICAgfQot
ICAgIC8vICMjIyBwYXJzZSBpZGVudAotfQotCi1TdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6Omdl
dFN0cmluZ1ZhbHVlKCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgICAgICBj
YXNlIENTU19TVFJJTkc6Ci0gICAgICAgIGNhc2UgQ1NTX0FUVFI6Ci0gICAgICAgIGNhc2UgQ1NT
X1VSSToKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLnN0cmluZzsKLSAgICAgICAgY2FzZSBD
U1NfSURFTlQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0VmFsdWVOYW1lKG1fdmFsdWUuaWRlbnQp
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBDU1MgMi4xIHNw
ZWMgc2F5cyB5b3Ugc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlLgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdW5zaWduZWQg
c2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIENTU19QUklNSVRJVkVfVkFMVUU7Ci19Ci0KLWJvb2wgQ1NTUHJpbWl0aXZlVmFsdWU6OnBh
cnNlU3RyaW5nKCBjb25zdCBTdHJpbmcgJi8qc3RyaW5nKi8sIGJvb2wgKQotewotICAgIC8vICMj
IwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRJZGVu
dCgpCi17Ci0gICAgaWYobV90eXBlICE9IENTU19JREVOVCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG1fdmFsdWUuaWRlbnQ7Ci19Ci0KLVN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCgp
IGNvbnN0Ci17Ci0gICAgLy8gIyMjIHJldHVybiB0aGUgb3JpZ2luYWwgdmFsdWUgaW5zdGVhZCBv
ZiBhIGdlbmVyYXRlZCBvbmUgKGUuZy4gY29sb3IKLSAgICAvLyBuYW1lIGlmIGl0IHdhcyBzcGVj
aWZpZWQpIC0gY2hlY2sgd2hhdCBzcGVjIHNheXMgYWJvdXQgdGhpcwotICAgIFN0cmluZyB0ZXh0
OwotICAgIHN3aXRjaCAoIG1fdHlwZSApIHsKLSAgICAgICAgY2FzZSBDU1NfVU5LTk9XTjoKLSAg
ICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX05V
TUJFUjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUEVSQ0VOVEFHRToKLSAgICAgICAg
ICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiJSI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfRU1TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJlbSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NfRVhTOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFs
dWUubnVtKSArICJleCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUFg6
Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB4IjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19DTToKLSAgICAgICAgICAgIHRl
eHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiY20iOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX01NOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUubnVtKSArICJtbSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NfSU46Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgImluIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QVDoKLSAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHQiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BDOgotICAgICAgICAgICAgdGV4dCA9IFN0
cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwYyI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NfREVHOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1f
dmFsdWUubnVtKSArICJkZWciOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
X1JBRDoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAi
cmFkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19HUkFEOgotICAgICAg
ICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJncmFkIjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19NUzoKLSAgICAgICAgICAgIHRleHQgPSBT
dHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibXMiOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTX1M6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92
YWx1ZS5udW0pICsgInMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0ha
OgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJoeiI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfS0haOgotICAgICAgICAgICAg
dGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJraHoiOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0RJTUVOU0lPTjoKLSAgICAgICAgICAgIC8vICMjIwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1NUUklORzoKLSAgICAgICAgICAg
IHRleHQgPSBxdW90ZVN0cmluZ0lmTmVlZGVkKG1fdmFsdWUuc3RyaW5nKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU19VUkk6Ci0gICAgICAgICAgICB0ZXh0ID0gInVybCgi
ICsgU3RyaW5nKG1fdmFsdWUuc3RyaW5nKSArICIpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU19JREVOVDoKLSAgICAgICAgICAgIHRleHQgPSBnZXRWYWx1ZU5hbWUobV92
YWx1ZS5pZGVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQVRUUjoK
LSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
X0NPVU5URVI6Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19SRUNUOiB7Ci0gICAgICAgICAgICBSZWN0SW1wbCogcmVjdFZhbCA9IGdldFJl
Y3RWYWx1ZSgpOwotICAgICAgICAgICAgdGV4dCA9ICJyZWN0KCI7Ci0gICAgICAgICAgICB0ZXh0
ICs9IHJlY3RWYWwtPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9
IHJlY3RWYWwtPnJpZ2h0KCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0g
cmVjdFZhbC0+Ym90dG9tKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0g
cmVjdFZhbC0+bGVmdCgpLT5jc3NUZXh0KCkgKyAiKSI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENTU19SR0JDT0xPUjogewotICAgICAgICAgICAgQ29sb3Ig
Y29sb3IobV92YWx1ZS5yZ2Jjb2xvcik7Ci0gICAgICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA8
IDB4RkYpCi0gICAgICAgICAgICAgICAgdGV4dCA9ICJyZ2JhKCI7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICJyZ2IoIjsKLSAgICAgICAgICAgIHRleHQgKz0gU3Ry
aW5nOjpudW1iZXIoY29sb3IucmVkKCkpICsgIiwgIjsKLSAgICAgICAgICAgIHRleHQgKz0gU3Ry
aW5nOjpudW1iZXIoY29sb3IuZ3JlZW4oKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBT
dHJpbmc6Om51bWJlcihjb2xvci5ibHVlKCkpOwotICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhh
KCkgPCAweEZGKQotICAgICAgICAgICAgICAgIHRleHQgKz0gIiwgIiArIFN0cmluZzo6bnVtYmVy
KChmbG9hdCljb2xvci5hbHBoYSgpIC8gMHhGRik7Ci0gICAgICAgICAgICB0ZXh0ICs9ICIpIjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTX1BBSVI6Ci0g
ICAgICAgICAgICB0ZXh0ID0gbV92YWx1ZS5wYWlyLT5maXJzdCgpLT5jc3NUZXh0KCk7Ci0gICAg
ICAgICAgICB0ZXh0ICs9ICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0gbV92YWx1ZS5wYWlyLT5z
ZWNvbmQoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWYgX19BUFBMRV9fCi0g
ICAgICAgIGNhc2UgQ1NTX0RBU0hCT0FSRF9SRUdJT046Ci0gICAgICAgICAgICBmb3IgKERhc2hi
b2FyZFJlZ2lvbiogcmVnaW9uID0gZ2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsgcmVnaW9uOyBy
ZWdpb24gPSByZWdpb24tPm1fbmV4dC5nZXQoKSkgewotICAgICAgICAgICAgICAgIHRleHQgPSAi
ZGFzaGJvYXJkLXJlZ2lvbigiOwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5tX2xh
YmVsOwotICAgICAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCi0gICAgICAgICAg
ICAgICAgICAgIHRleHQgKz0gIiBjaXJjbGUgIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChy
ZWdpb24tPm1faXNSZWN0YW5nbGUpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIiByZWN0
YW5nbGUgIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT50b3AoKS0+Y3NzVGV4dCgpICsgIiAi
OwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5yaWdodCgpLT5jc3NUZXh0KCkgKyAi
ICI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPmJvdHRvbSgpLT5jc3NUZXh0KCkg
KyAiICI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPmxlZnQoKS0+Y3NzVGV4dCgp
OwotICAgICAgICAgICAgICAgIHRleHQgKz0gIikiOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLSAgICB9Ci0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVJlY3RJbXBsOjp+UmVjdEltcGwoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1QYWly
Ojp+UGFpcigpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU0ltYWdlVmFsdWU6OkNTU0ltYWdl
VmFsdWUoY29uc3QgU3RyaW5nJiB1cmwsIFN0eWxlQmFzZSAqc3R5bGUpCi0gICAgOiBDU1NQcmlt
aXRpdmVWYWx1ZSh1cmwsIENTU19VUkkpLCBtX2ltYWdlKDApLCBtX2FjY2Vzc2VkSW1hZ2UoZmFs
c2UpCi17Ci19Ci0KLUNTU0ltYWdlVmFsdWU6OkNTU0ltYWdlVmFsdWUoKQotICAgIDogQ1NTUHJp
bWl0aXZlVmFsdWUoQ1NTX1ZBTF9OT05FKSwgbV9pbWFnZSgwKSwgbV9hY2Nlc3NlZEltYWdlKHRy
dWUpCi17Ci19Ci0KLUNTU0ltYWdlVmFsdWU6On5DU1NJbWFnZVZhbHVlKCkKLXsKLSAgICBpZiAo
bV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+ZGVyZWYodGhpcyk7Ci19Ci0KLUNhY2hlZEltYWdl
KiBDU1NJbWFnZVZhbHVlOjppbWFnZShEb2NMb2FkZXIqIGxvYWRlcikKLXsKLSAgICBpZiAoIW1f
YWNjZXNzZWRJbWFnZSkgewotICAgICAgICBtX2FjY2Vzc2VkSW1hZ2UgPSB0cnVlOwotCi0gICAg
ICAgIGlmIChsb2FkZXIpCi0gICAgICAgICAgICBtX2ltYWdlID0gbG9hZGVyLT5yZXF1ZXN0SW1h
Z2UoZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1faW1hZ2Ug
PSBDYWNoZTo6cmVxdWVzdEltYWdlKDAsIGdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgICAgICBtX2ltYWdlLT5yZWYodGhpcyk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBtX2ltYWdlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
Q1NTQm9yZGVySW1hZ2VWYWx1ZTo6Q1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVmUHRyPENTU0lt
YWdlVmFsdWU+IGltYWdlLAotICAgIFBhc3NSZWZQdHI8UmVjdEltcGw+IGltYWdlUmVjdCwgaW50
IGhvcml6b250YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKQotICAgIDogbV9pbWFnZShpbWFnZSks
IG1faW1hZ2VTbGljZVJlY3QoaW1hZ2VSZWN0KQotICAgICwgbV9ob3Jpem9udGFsU2l6ZVJ1bGUo
aG9yaXpvbnRhbFJ1bGUpLCBtX3ZlcnRpY2FsU2l6ZVJ1bGUodmVydGljYWxSdWxlKQotewotfQot
Ci1TdHJpbmcgQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8g
SW1hZ2UgZmlyc3QuCi0gICAgU3RyaW5nIHRleHQobV9pbWFnZS0+Y3NzVGV4dCgpKTsKLSAgICB0
ZXh0ICs9ICIgIjsKLSAgICAKLSAgICAvLyBOb3cgdGhlIHJlY3QsIGJ1dCBpdCBpc24ndCByZWFs
bHkgYSByZWN0LCBzbyB3ZSBkdW1wIG1hbnVhbGx5Ci0gICAgdGV4dCArPSBtX2ltYWdlU2xpY2VS
ZWN0LT50b3AoKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gbV9p
bWFnZVNsaWNlUmVjdC0+cmlnaHQoKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAg
IHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+Ym90dG9tKCktPmNzc1RleHQoKTsKLSAgICB0ZXh0
ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPmxlZnQoKS0+Y3NzVGV4dCgp
OwotICAgIAotICAgIC8vIE5vdyB0aGUga2V5d29yZHMuCi0gICAgdGV4dCArPSAiICI7Ci0gICAg
dGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX2hvcml6b250YWxTaXplUnVsZSkuY3NzVGV4dCgp
OwotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gQ1NTUHJpbWl0aXZlVmFsdWUobV92ZXJ0
aWNhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLUZvbnRGYW1pbHlWYWx1ZTo6Rm9udEZhbWlseVZhbHVlKGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKLSAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKFN0cmluZygp
LCBDU1NfU1RSSU5HKQotewotICAgIHN0YXRpYyBjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiBwYXJl
blJlZygiIFxcKC4qXFwpJCIpOwotICAgIHN0YXRpYyBjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiBi
cmFjZVJlZygiIFxcWy4qXFxdJCIpOwotCi0gICAgcGFyc2VkRm9udE5hbWUgPSBzdHJpbmc7Ci0g
ICAgLy8gYSBsYW5ndWFnZSB0YWcgaXMgb2Z0ZW4gYWRkZWQgaW4gYnJhY2VzIGF0IHRoZSBlbmQu
IFJlbW92ZSBpdC4KLSAgICBwYXJzZWRGb250TmFtZS5yZXBsYWNlKHBhcmVuUmVnLCAiIik7Ci0g
ICAgLy8gcmVtb3ZlIFtYZnRdIHF1YWxpZmllcnMKLSAgICBwYXJzZWRGb250TmFtZS5yZXBsYWNl
KGJyYWNlUmVnLCAiIik7Ci19Ci0KLVN0cmluZyBGb250RmFtaWx5VmFsdWU6OmNzc1RleHQoKSBj
b25zdAotewotICAgIHJldHVybiBxdW90ZVN0cmluZ0lmTmVlZGVkKHBhcnNlZEZvbnROYW1lKTsK
LX0KLQotU3RyaW5nIEZvbnRWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gZm9udCB2
YXJpYW50IHdlaWdodCBzaXplIC8gbGluZS1oZWlnaHQgZmFtaWx5IAotCi0gICAgU3RyaW5nIHJl
c3VsdCgiIik7Ci0KLSAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgcmVzdWx0ICs9IHN0eWxlLT5j
c3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh2YXJpYW50KSB7Ci0gICAgICAgIGlmICghcmVzdWx0
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAgICAgIHJlc3VsdCAr
PSB2YXJpYW50LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh3ZWlnaHQpIHsKLSAgICAgICAg
aWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAg
ICAgcmVzdWx0ICs9IHdlaWdodC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoc2l6ZSkgewot
ICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAi
OwotICAgICAgICByZXN1bHQgKz0gc2l6ZS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAobGlu
ZUhlaWdodCkgewotICAgICAgICBpZiAoIXNpemUpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAi
OwotICAgICAgICByZXN1bHQgKz0gIi8iOwotICAgICAgICByZXN1bHQgKz0gbGluZUhlaWdodC0+
Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoZmFtaWx5KSB7Ci0gICAgICAgIGlmICghcmVzdWx0
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAgICAgIHJlc3VsdCAr
PSBmYW1pbHktPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotICAg
IAotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotU2hhZG93VmFsdWU6
OlNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF94LAotICAgIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF95LAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IF9ibHVyLAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF9jb2xvcikK
LSAgICA6IHgoX3gpLCB5KF95KSwgYmx1cihfYmx1ciksIGNvbG9yKF9jb2xvcikKLXsKLX0KLQot
U3RyaW5nIFNoYWRvd1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgdGV4dCgi
Iik7Ci0KLSAgICBpZiAoY29sb3IpCi0gICAgICAgIHRleHQgKz0gY29sb3ItPmNzc1RleHQoKTsK
LSAgICBpZiAoeCkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
dGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBp
ZiAoeSkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgdGV4dCAr
PSAiICI7Ci0gICAgICAgIHRleHQgKz0geS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoYmx1
cikgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgdGV4dCArPSAi
ICI7Ci0gICAgICAgIHRleHQgKz0gYmx1ci0+Y3NzVGV4dCgpOwotICAgIH0KLQotICAgIHJldHVy
biB0ZXh0OwotfQotCi1TdHJpbmcgQ1NTUHJvcGVydHk6OmNzc1RleHQoKSBjb25zdAotewotICAg
IHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoaWQoKSkgKyAiOiAiICsgbV92YWx1ZS0+Y3NzVGV4dCgp
Ci0gICAgICAgICsgKGlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsgIjsK
LX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5ICZhLCBjb25zdCBDU1NQcm9w
ZXJ0eSAmYikKLXsKLSAgICByZXR1cm4gYS5tX2lkID09IGIubV9pZCAmJiBhLm1faW1wb3J0YW50
ID09IGIubV9pbXBvcnRhbnQgJiYgYS5tX3ZhbHVlID09IGIubV92YWx1ZTsKLX0KLQogfQpJbmRl
eDogY3NzL0NTU0NoYXJzZXRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0NoYXJzZXRSdWxl
LmgJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU0NoYXJzZXRSdWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDU0ICsyMSwxNyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBDU1NfY3NzX3J1bGVpbXBsX2hfCi0jZGVmaW5lIENTU19jc3NfcnVsZWlt
cGxfaF8KKyNpZm5kZWYgQ1NTQ2hhcnNldFJ1bGVfSAorI2RlZmluZSBDU1NDaGFyc2V0UnVsZV9I
CiAKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBD
U1NTdHlsZVNoZWV0OwotY2xhc3MgTWVkaWFMaXN0OwotCi1jbGFzcyBDU1NSdWxlIDogcHVibGlj
IFN0eWxlQmFzZQotewotcHVibGljOgotICAgIGVudW0gQ1NTUnVsZVR5cGUgeyAKLSAgICAgICAg
VU5LTk9XTl9SVUxFLCAKLSAgICAgICAgU1RZTEVfUlVMRSwgCi0gICAgICAgIENIQVJTRVRfUlVM
RSwgCi0gICAgICAgIElNUE9SVF9SVUxFLCAKLSAgICAgICAgTUVESUFfUlVMRSwgCi0gICAgICAg
IEZPTlRfRkFDRV9SVUxFLCAKLSAgICAgICAgUEFHRV9SVUxFIAotICAgIH07Ci0gICAgCi0gICAg
Q1NTUnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICAgICAgOiBTdHlsZUJhc2UocGFyZW50KSwg
bV90eXBlKFVOS05PV05fUlVMRSkge30KLQotICAgIHZpcnR1YWwgYm9vbCBpc1J1bGUoKSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQotCi0gICAgQ1NTU3R5bGVTaGVldCAqcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0Owot
ICAgIENTU1J1bGUgKnBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNz
c1RleHQoKSBjb25zdDsKLSAgICB2b2lkIHNldENzc1RleHQoV2ViQ29yZTo6U3RyaW5nIHN0cik7
Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NSdWxlVHlwZSBtX3R5cGU7Ci19OwotCi0KIGNsYXNzIENT
U0NoYXJzZXRSdWxlIDogcHVibGljIENTU1J1bGUKIHsKIHB1YmxpYzoKLSAgICBDU1NDaGFyc2V0
UnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICAgICAgOiBDU1NSdWxlKHBhcmVudCkgeyBtX3R5
cGUgPSBDSEFSU0VUX1JVTEU7IH0KKyAgICBDU1NDaGFyc2V0UnVsZShTdHlsZUJhc2UqIHBhcmVu
dCkgOiBDU1NSdWxlKHBhcmVudCkgeyBtX3R5cGUgPSBDSEFSU0VUX1JVTEU7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBpc0NoYXJzZXRSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKQEAgLTgwLDE1MCArNDMsNiBAQAogICAgIFN0cmluZyBt
X2VuY29kaW5nOwogfTsKIAotCi1jbGFzcyBDU1NGb250RmFjZVJ1bGUgOiBwdWJsaWMgQ1NTUnVs
ZQotewotcHVibGljOgotICAgIENTU0ZvbnRGYWNlUnVsZShTdHlsZUJhc2UgKnBhcmVudCk7Ci0g
ICAgdmlydHVhbCB+Q1NTRm9udEZhY2VSdWxlKCk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fc3R5bGU7Ci19Owot
Ci0KLWNsYXNzIENTU0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50LCBwdWJs
aWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU0ltcG9ydFJ1bGUoU3R5bGVCYXNlKiBwYXJl
bnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgTWVkaWFMaXN0Kik7Ci0gICAgdmlydHVhbCB+Q1NTSW1w
b3J0UnVsZSgpOwotCi0gICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX3N0ckhyZWY7
IH0KLSAgICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYS5nZXQo
KTsgfQotICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlU2hlZXQuZ2V0KCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0ltcG9ydFJ1bGUoKSB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAKLSAg
ICBib29sIGlzTG9hZGluZygpIGNvbnN0OwotCi0gICAgLy8gZnJvbSBDYWNoZWRPYmplY3RDbGll
bnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBzaGVldCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvUGFyZW50
KCk7Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgbV9zdHJIcmVmOwotICAgIFJlZlB0cjxNZWRp
YUxpc3Q+IG1fbHN0TWVkaWE7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5bGVTaGVl
dDsKLSAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiBtX2NhY2hlZFNoZWV0OwotICAgIGJvb2wgbV9s
b2FkaW5nOwotfTsKLQotY2xhc3MgTWVkaWFMaXN0OwotCi1jbGFzcyBDU1NSdWxlTGlzdCA6IHB1
YmxpYyBTaGFyZWQ8Q1NTUnVsZUxpc3Q+Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTUnVsZUxpc3QoKSB7
IH0KLSAgICBDU1NSdWxlTGlzdChTdHlsZUxpc3QgKik7Ci0gICAgfkNTU1J1bGVMaXN0KCk7Ci0K
LSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xzdENTU1J1bGVzLmNvdW50
KCk7IH0KLSAgICBDU1NSdWxlICppdGVtICggdW5zaWduZWQgaW5kZXggKSB7IHJldHVybiBtX2xz
dENTU1J1bGVzLmF0KCBpbmRleCApOyB9Ci0KLSAgICAvKiBub3QgcGFydCBvZiB0aGUgRE9NICov
Ci0gICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIENTU1J1bGUgKnJ1bGUsIHVuc2lnbmVkIGluZGV4
ICk7Ci0gICAgdm9pZCBkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKTsKLSAgICB2b2lkIGFw
cGVuZCggQ1NTUnVsZSAqcnVsZSApOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRlZFB0ckxp
c3Q8Q1NTUnVsZT4gbV9sc3RDU1NSdWxlczsKLX07Ci0KLWNsYXNzIENTU01lZGlhUnVsZSA6IHB1
YmxpYyBDU1NSdWxlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTTWVkaWFSdWxlKCBTdHlsZUJhc2UgKnBh
cmVudCApOwotICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQsIGNvbnN0IFdlYkNv
cmU6OlN0cmluZyAmbWVkaWEgKTsKLSAgICBDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50
LCBNZWRpYUxpc3QgKm1lZGlhTGlzdCwgQ1NTUnVsZUxpc3QgKnJ1bGVMaXN0ICk7Ci0gICAgdmly
dHVhbCB+Q1NTTWVkaWFSdWxlKCk7Ci0KLSAgICBNZWRpYUxpc3QgKm1lZGlhKCkgY29uc3QgeyBy
ZXR1cm4gbV9sc3RNZWRpYS5nZXQoKTsgfQotICAgIENTU1J1bGVMaXN0ICpjc3NSdWxlcygpIHsg
cmV0dXJuIG1fbHN0Q1NTUnVsZXMuZ2V0KCk7IH0KLQotICAgIHVuc2lnbmVkIGluc2VydFJ1bGUg
KCBjb25zdCBXZWJDb3JlOjpTdHJpbmcgJnJ1bGUsIHVuc2lnbmVkIGluZGV4ICk7Ci0gICAgdm9p
ZCBkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKSB7IG1fbHN0Q1NTUnVsZXMtPmRlbGV0ZVJ1
bGUoIGluZGV4ICk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhUnVsZSgpIHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICAvKiBO
b3QgcGFydCBvZiB0aGUgRE9NICovCi0gICAgdW5zaWduZWQgYXBwZW5kKCBDU1NSdWxlICpydWxl
ICk7Ci1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPE1lZGlhTGlzdD4gbV9sc3RNZWRpYTsKLSAgICBS
ZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fbHN0Q1NTUnVsZXM7Ci19OwotCi0KLWNsYXNzIENTU1BhZ2VS
dWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NQYWdlUnVsZShTdHlsZUJh
c2UgKnBhcmVudCk7Ci0gICAgdmlydHVhbCB+Q1NTUGFnZVJ1bGUoKTsKLQotICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgV2ViQ29yZTo6U3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2Vs
ZWN0b3JUZXh0KFdlYkNvcmU6OlN0cmluZyBzdHIpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotfTsKLQotY2xhc3MgQ1NTSW1w
b3J0YW50UnVsZTsKLQotY2xhc3MgQ1NTU3R5bGVSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1
YmxpYzoKLSAgICBDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQpOwotICAgIHZpcnR1YWwg
fkNTU1N0eWxlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlz
U3R5bGVSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLQotICAgIFdlYkNvcmU6OlN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFNlbGVjdG9yVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBwYXJzZVN0cmluZyggY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wgPSBmYWxzZSAp
OwotCi0gICAgdm9pZCBzZXRTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IpIHsgbV9zZWxl
Y3RvciA9IHNlbGVjdG9yOyB9Ci0gICAgdm9pZCBzZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7Ci0KLSAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3Io
KSB7IHJldHVybiBtX3NlbGVjdG9yOyB9Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGRlY2xhcmF0aW9uKCkgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotIAotcHJvdGVjdGVkOgot
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKLSAgICBDU1NT
ZWxlY3RvciogbV9zZWxlY3RvcjsKLX07Ci0KLWNsYXNzIENTU1Vua25vd25SdWxlIDogcHVibGlj
IENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NVbmtub3duUnVsZShTdHlsZUJhc2UgKnBhcmVu
dCkgOiBDU1NSdWxlKHBhcmVudCkge30KLQotICAgIHZpcnR1YWwgYm9vbCBpc1Vua25vd25SdWxl
KCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4
OiBjc3MvUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9QYWlyLmgJKHJldmlzaW9uIDE0NDAwKQor
KysgY3NzL1BhaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMzEzICsyMCwxNSBAQAogICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NfY3NzX3ZhbHVlaW1w
bF9oXwotI2RlZmluZSBDU1NfY3NzX3ZhbHVlaW1wbF9oXworI2lmbmRlZiBQYWlyX0gKKyNkZWZp
bmUgUGFpcl9ICiAKLSNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnQuaCIKLSNpbmNsdWRlICJj
c3NfYmFzZS5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCi0jaW5jbHVkZSAiRGVw
cmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIKKyNpbmNs
dWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKLWNsYXNzIFFQYWludERldmljZU1ldHJpY3M7Ci0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Ci1jbGFz
cyBDYWNoZWRJbWFnZTsKLWNsYXNzIENvdW50ZXI7Ci1jbGFzcyBEb2NMb2FkZXI7Ci1jbGFzcyBO
b2RlOwotY2xhc3MgUGFpcjsKLWNsYXNzIFJlY3RJbXBsOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0K
LSNpZiBfX0FQUExFX18KLWNsYXNzIERhc2hib2FyZFJlZ2lvbjsKLSNlbmRpZgotCi10eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwotCi1leHRlcm4gY29uc3QgaW50IGluaGVyaXRhYmxlUHJvcGVy
dGllc1tdOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVydGllczsK
LQotY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBTdHlsZUJhc2UgewotcHVibGlj
OgotICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlRGVjbGFyYXRpb24oKTsKLQotICAgIHN0YXRpYyBi
b29sIGlzUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLQotICAgIENT
U1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0g
MDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRo
YW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBib29sIGlzUHJvcGVydHlJbXBs
aWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJ
RCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBw
cm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhh
bmQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0
eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIHNldFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVBy
b3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFN0
cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
LQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29w
eSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOwotIAotICAgIHZvaWQgZGlmZihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENTU1N0eWxlRGVjbGFyYXRpb24o
Q1NTUnVsZSogcGFyZW50UnVsZSA9IDApOwotCi1wcml2YXRlOgotICAgIENTU1N0eWxlRGVjbGFy
YXRpb24oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKLSAgICBDU1NTdHlsZURlY2xhcmF0
aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKLX07Ci0KLWNsYXNz
IENTU1ZhbHVlIDogcHVibGljIFN0eWxlQmFzZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5
cGVzIHsKLSAgICAgICAgQ1NTX0lOSEVSSVQgPSAwLAotICAgICAgICBDU1NfUFJJTUlUSVZFX1ZB
TFVFID0gMSwKLSAgICAgICAgQ1NTX1ZBTFVFX0xJU1QgPSAyLAotICAgICAgICBDU1NfQ1VTVE9N
ID0gMywKLSAgICAgICAgQ1NTX0lOSVRJQUwgPSA0Ci0gICAgfTsKLQotICAgIENTU1ZhbHVlKCkg
OiBTdHlsZUJhc2UoMCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVl
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIENTU19DVVNUT007IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBj
c3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmKSB7
IH0gLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVl
KCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgpIHsgcmV0
dXJuIGZhbHNlOyB9Ci19OwotCi1jbGFzcyBDU1NJbmhlcml0ZWRWYWx1ZSA6IHB1YmxpYyBDU1NW
YWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xh
c3MgQ1NTSW5pdGlhbFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci19OwotCi1jbGFzcyBDU1NWYWx1ZUxpc3QgOiBwdWJsaWMg
Q1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DU1NWYWx1ZUxpc3QoKTsKLQotICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmNvdW50KCk7IH0KLSAg
ICBDU1NWYWx1ZSogaXRlbSAodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzLmF0KGlu
ZGV4KTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQot
ICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBEZXByZWNhdGVkUHRyTGlzdDxD
U1NWYWx1ZT4gbV92YWx1ZXM7Ci19OwotCi0KLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlIDogcHVi
bGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBVbml0VHlwZXMgewotICAgICAgICBD
U1NfVU5LTk9XTiA9IDAsCi0gICAgICAgIENTU19OVU1CRVIgPSAxLAotICAgICAgICBDU1NfUEVS
Q0VOVEFHRSA9IDIsCi0gICAgICAgIENTU19FTVMgPSAzLAotICAgICAgICBDU1NfRVhTID0gNCwK
LSAgICAgICAgQ1NTX1BYID0gNSwKLSAgICAgICAgQ1NTX0NNID0gNiwKLSAgICAgICAgQ1NTX01N
ID0gNywKLSAgICAgICAgQ1NTX0lOID0gOCwKLSAgICAgICAgQ1NTX1BUID0gOSwKLSAgICAgICAg
Q1NTX1BDID0gMTAsCi0gICAgICAgIENTU19ERUcgPSAxMSwKLSAgICAgICAgQ1NTX1JBRCA9IDEy
LAotICAgICAgICBDU1NfR1JBRCA9IDEzLAotICAgICAgICBDU1NfTVMgPSAxNCwKLSAgICAgICAg
Q1NTX1MgPSAxNSwKLSAgICAgICAgQ1NTX0haID0gMTYsCi0gICAgICAgIENTU19LSFogPSAxNywK
LSAgICAgICAgQ1NTX0RJTUVOU0lPTiA9IDE4LAotICAgICAgICBDU1NfU1RSSU5HID0gMTksCi0g
ICAgICAgIENTU19VUkkgPSAyMCwKLSAgICAgICAgQ1NTX0lERU5UID0gMjEsCi0gICAgICAgIENT
U19BVFRSID0gMjIsCi0gICAgICAgIENTU19DT1VOVEVSID0gMjMsCi0gICAgICAgIENTU19SRUNU
ID0gMjQsCi0gICAgICAgIENTU19SR0JDT0xPUiA9IDI1LAotICAgICAgICBDU1NfUEFJUiA9IDEw
MCwgLy8gV2UgZW52aXNpb24gdGhpcyBiZWluZyBleHBvc2VkIGFzIGEgbWVhbnMgb2YgZ2V0dGlu
ZyBjb21wdXRlZCBzdHlsZSB2YWx1ZXMgZm9yIHBhaXJzIChib3JkZXItc3BhY2luZy9yYWRpdXMs
IGJhY2tncm91bmQtcG9zaXRpb24sIGV0Yy4pCi0gICAgICAgIENTU19EQVNIQk9BUkRfUkVHSU9O
ID0gMTAxIC8vIEZJWE1FOiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMgZG9pbmcgYXMgYSBwcmltaXRp
dmUgdmFsdWU/IEl0IHNob3VsZCBub3QgYmUhCi0gICAgfTsKLQotICAgIC8vIEZJWE1FOiBpbnQg
dnMuIHVuc2lnbmVkIG92ZXJsb2FkaW5nIGlzIHRvbyB0cmlja3kgZm9yIGNvbG9yIHZzLiBpZGVu
dAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoaW50IGlk
ZW50KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShkb3VibGUsIFVuaXRUeXBlcyk7Ci0gICAgQ1NT
UHJpbWl0aXZlVmFsdWUoY29uc3QgU3RyaW5nJiwgVW5pdFR5cGVzKTsKLSAgICBDU1NQcmltaXRp
dmVWYWx1ZShQYXNzUmVmUHRyPENvdW50ZXI+KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNz
UmVmUHRyPFJlY3RJbXBsPik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUodW5zaWduZWQgY29sb3Ip
OyAvLyBSR0IgdmFsdWUKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFBhaXI+KTsK
LQotI2lmIF9fQVBQTEVfXwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8RGFzaGJv
YXJkUmVnaW9uPik7IC8vIEZJWE1FOiBXaHkgaXMgZGFzaGJvYXJkIHJlZ2lvbiBhIHByaW1pdGl2
ZSB2YWx1ZT8gVGhpcyBtYWtlcyBubyBzZW5zZS4KLSNlbmRpZgotCi0gICAgdmlydHVhbCB+Q1NT
UHJpbWl0aXZlVmFsdWUoKTsKLQotICAgIHZvaWQgY2xlYW51cCgpOwotCi0gICAgdW5zaWduZWQg
c2hvcnQgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotCi0gICAgLyoK
LSAgICAgKiBjb21wdXRlcyBhIGxlbmd0aCBpbiBwaXhlbHMgb3V0IG9mIHRoZSBnaXZlbiBDU1NW
YWx1ZS4gTmVlZCB0aGUgUmVuZGVyU3R5bGUgdG8gZ2V0Ci0gICAgICogdGhlIGZvbnRpbmZvIGlu
IGNhc2UgdmFsIGlzIGRlZmluZWQgaW4gZW0gb3IgZXguCi0gICAgICoKLSAgICAgKiBUaGUgbWV0
cmljcyBoYXZlIHRvIGJlIGEgYml0IGRpZmZlcmVudCBmb3Igc2NyZWVuIGFuZCBwcmludGVyIG91
dHB1dC4KLSAgICAgKiBGb3Igc2NyZWVuIG91dHB1dCB3ZSBhc3N1bWUgMSBpbmNoID09IDcyIHB4
LCBmb3IgcHJpbnRlciB3ZSBhc3N1bWUgMzAwIGRwaQotICAgICAqCi0gICAgICogdGhpcyBpcyBz
Y3JlZW4vcHJpbnRlciBkZXBlbmRlbnQsIHNvIHdlIHByb2JhYmx5IG5lZWQgYSBjb25maWcgb3B0
aW9uIGZvciB0aGlzLAotICAgICAqIGFuZCBzb21lIHRvb2wgdG8gY2FsaWJyYXRlLgotICAgICAq
LwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKik7Ci0gICAgaW50IGNvbXB1
dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0gICAgaW50IGNv
bXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqKTsKLSAgICBpbnQgY29tcHV0ZUxl
bmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBz
aG9ydCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqKTsKLSAgICBzaG9ydCBjb21wdXRl
TGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0gICAgZG91Ymxl
IGNvbXB1dGVMZW5ndGhGbG9hdChSZW5kZXJTdHlsZSosIGJvb2wgYXBwbHlab29tRmFjdG9yID0g
dHJ1ZSk7Ci0KLSAgICAvLyB1c2Ugd2l0aCBjYXJlISEhCi0gICAgdm9pZCBzZXRQcmltaXRpdmVU
eXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQotICAgIHZvaWQgc2V0
RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSwgZG91YmxlIGZsb2F0VmFsdWUsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1
bml0VHlwZSk7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLm51
bTsgfQotCi0gICAgdm9pZCBzZXRTdHJpbmdWYWx1ZSh1bnNpZ25lZCBzaG9ydCBzdHJpbmdUeXBl
LCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5n
IGdldFN0cmluZ1ZhbHVlKCkgY29uc3Q7Ci0gICAgCi0gICAgQ291bnRlciogZ2V0Q291bnRlclZh
bHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfQ09VTlRFUiA/IDAg
OiBtX3ZhbHVlLmNvdW50ZXI7Ci0gICAgfQotCi0gICAgUmVjdEltcGwqIGdldFJlY3RWYWx1ZSAo
KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1JFQ1QgPyAwIDogbV92YWx1
ZS5yZWN0OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGdldFJHQkNvbG9yVmFsdWUoKSBjb25zdCB7
Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1JHQkNPTE9SID8gMCA6IG1fdmFsdWUucmdi
Y29sb3I7Ci0gICAgfQotCi0gICAgUGFpciogZ2V0UGFpclZhbHVlKCkgY29uc3QgewotICAgICAg
ICByZXR1cm4gbV90eXBlICE9IENTU19QQUlSID8gMCA6IG1fdmFsdWUucGFpcjsKLSAgICB9Ci0K
LSNpZiBfX0FQUExFX18KLSAgICBEYXNoYm9hcmRSZWdpb24gKmdldERhc2hib2FyZFJlZ2lvblZh
bHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfREFTSEJPQVJEX1JF
R0lPTiA/IDAgOiBtX3ZhbHVlLnJlZ2lvbjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwg
Ym9vbCBpc1ByaW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0KLSAgICBpbnQgZ2V0SWRl
bnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmLCBib29s
ID0gZmFsc2UpOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgaW50IG1fdHlwZTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGludCBpZGVudDsKLSAgICAg
ICAgZG91YmxlIG51bTsKLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBDb3Vu
dGVyKiBjb3VudGVyOwotICAgICAgICBSZWN0SW1wbCogcmVjdDsKLSAgICAgICAgdW5zaWduZWQg
cmdiY29sb3I7Ci0gICAgICAgIFBhaXIqIHBhaXI7Ci0jaWYgX19BUFBMRV9fCi0gICAgICAgIERh
c2hib2FyZFJlZ2lvbiogcmVnaW9uOwotI2VuZGlmCi0gICAgfSBtX3ZhbHVlOwotfTsKLQotLy8g
VGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGhhbmRsZSBxdWlya3kgbWFyZ2lucyBpbiByZWZsb3cgcm9v
dHMgKGJvZHksIHRkLCBhbmQgdGgpIGxpa2UgV2luSUUuCi0vLyBUaGUgYmFzaWMgaWRlYSBpcyB0
aGF0IGEgc3R5bGVzaGVldCBjYW4gdXNlIHRoZSB2YWx1ZSBfX3FlbSAoZm9yIHF1aXJreSBlbSkg
aW5zdGVhZCBvZiBlbQotLy8gaW4gYSBzdHlsZXNoZWV0LiAgV2hlbiB0aGUgcXVpcmt5IHZhbHVl
IGlzIHVzZWQsIGlmIHlvdSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlIG1hcmdpbiB3aWxsCi0vLyBj
b2xsYXBzZSBhd2F5IGluc2lkZSBhIHRhYmxlIGNlbGwuCi1jbGFzcyBDU1NRdWlya1ByaW1pdGl2
ZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTUXVp
cmtQcmltaXRpdmVWYWx1ZShkb3VibGUgbnVtLCBVbml0VHlwZXMgdHlwZSkKLSAgICAgICAgOiBD
U1NQcmltaXRpdmVWYWx1ZShudW0sIHR5cGUpIHt9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNRdWly
a1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQotY2xhc3MgQ291bnRlciA6IHB1YmxpYyBT
aGFyZWQ8Q291bnRlcj4gewotcHVibGljOgotICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAgU3RyaW5nIGxpc3RTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdFN0eWxlOyB9Ci0gICAgU3RyaW5nIHNlcGFyYXRvcigpIGNvbnN0IHsgcmV0
dXJuIG1fc2VwYXJhdG9yOyB9Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwotICAgIFN0cmlu
ZyBtX2xpc3RTdHlsZTsKLSAgICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci19OwotCi1jbGFzcyBSZWN0
SW1wbCA6IHB1YmxpYyBTaGFyZWQ8UmVjdEltcGw+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5S
ZWN0SW1wbCgpOwotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fdG9wLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yaWdodC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3R0b20oKSBj
b25zdCB7IHJldHVybiBtX2JvdHRvbS5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBs
ZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0LmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldFRvcChQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3ApIHsgbV90b3AgPSB0b3A7IH0KLSAgICB2
b2lkIHNldFJpZ2h0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJpZ2h0KSB7IG1fcmln
aHQgPSByaWdodDsgfQotICAgIHZvaWQgc2V0Qm90dG9tKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGJvdHRvbSkgeyBtX2JvdHRvbSA9IGJvdHRvbTsgfQotICAgIHZvaWQgc2V0TGVmdChQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0KSB7IG1fbGVmdCA9IGxlZnQ7IH0KLQot
cHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV90b3A7Ci0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gbV9ib3R0b207Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Ci19
OwotCiAvLyBBIHByaW1pdGl2ZSB2YWx1ZSByZXByZXNlbnRpbmcgYSBwYWlyLiAgVGhpcyBpcyB1
c2VmdWwgZm9yIHByb3BlcnRpZXMgbGlrZSBib3JkZXItcmFkaXVzLCBiYWNrZ3JvdW5kLXNpemUv
cG9zaXRpb24sCiAvLyBhbmQgYm9yZGVyLXNwYWNpbmcgKGFsbCBvZiB3aGljaCBhcmUgc3BhY2Ut
c2VwYXJhdGVkIHNldHMgb2YgdHdvIHZhbHVlcykuICBBdCB0aGUgbW9tZW50IHdlIGFyZSBvbmx5
IHVzaW5nIGl0IGZvcgogLy8gYm9yZGVyLXJhZGl1cyBhbmQgYmFja2dyb3VuZC1zaXplLCBidXQg
KEZJWE1FKSBib3JkZXItc3BhY2luZyBhbmQgYmFja2dyb3VuZC1wb3NpdGlvbiBjb3VsZCBiZSBj
b252ZXJ0ZWQgb3ZlciB0byB1c2UKQEAgLTMzNiw3ICszOCw3IEBACiAgICAgUGFpcigpIDogbV9m
aXJzdCgwKSwgbV9zZWNvbmQoMCkgeyB9CiAgICAgUGFpcihQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBmaXJzdCwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKQogICAg
ICAgICA6IG1fZmlyc3QoZmlyc3QpLCBtX3NlY29uZChzZWNvbmQpIHsgfQotICAgIHZpcnR1YWwg
flBhaXIoKTsKKyAgICB2aXJ0dWFsIH5QYWlyKCkgeyB9CiAKICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0LmdldCgpOyB9CiAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25kLmdldCgpOyB9CkBAIC0z
NDksMjEyICs1MSw2IEBACiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZDsK
IH07CiAKLWNsYXNzIERhc2hib2FyZFJlZ2lvbiA6IHB1YmxpYyBSZWN0SW1wbCB7Ci1wdWJsaWM6
Ci0gICAgRGFzaGJvYXJkUmVnaW9uKCkgOiBtX2lzQ2lyY2xlKDApLCBtX2lzUmVjdGFuZ2xlKDAp
IHsgfQotCi0gICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gbV9uZXh0OwotICAgIFN0cmluZyBt
X2xhYmVsOwotICAgIFN0cmluZyBtX2dlb21ldHJ5VHlwZTsKLSAgICBib29sIG1faXNDaXJjbGUg
OiAxOwotICAgIGJvb2wgbV9pc1JlY3RhbmdsZSA6IDE7Ci19OwotCi1jbGFzcyBDU1NJbWFnZVZh
bHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlLCBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50
Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTSW1hZ2VWYWx1ZSgpOwotICAgIENTU0ltYWdlVmFsdWUoY29u
c3QgU3RyaW5nJiB1cmwsIFN0eWxlQmFzZSopOwotICAgIHZpcnR1YWwgfkNTU0ltYWdlVmFsdWUo
KTsKLQotICAgIENhY2hlZEltYWdlKiBpbWFnZShEb2NMb2FkZXIqKTsKLQotcHJvdGVjdGVkOgot
ICAgIENhY2hlZEltYWdlKiBtX2ltYWdlOwotICAgIGJvb2wgbV9hY2Nlc3NlZEltYWdlOwotfTsK
LQotY2xhc3MgQ1NTQm9yZGVySW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGlj
OgotICAgIENTU0JvcmRlckltYWdlVmFsdWUoKTsKLSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKFBh
c3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4sCi0gICAgICAgIFBhc3NSZWZQdHI8UmVjdEltcGw+LCBp
bnQgaG9yaXpvbnRhbFJ1bGUsIGludCB2ZXJ0aWNhbFJ1bGUpOwotCi0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wdWJsaWM6Ci0gICAgLy8gVGhlIGJvcmRlciBpbWFnZS4K
LSAgICBSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4gbV9pbWFnZTsKLQotICAgIC8vIFRoZXNlIGZvdXIg
dmFsdWVzIGFyZSB1c2VkIHRvIG1ha2UgImN1dHMiIGluIHRoZSBpbWFnZS4gIFRoZXkgY2FuIGJl
IG51bWJlcnMKLSAgICAvLyBvciBwZXJjZW50YWdlcy4KLSAgICBSZWZQdHI8UmVjdEltcGw+IG1f
aW1hZ2VTbGljZVJlY3Q7Ci0gICAgCi0gICAgLy8gVmFsdWVzIGZvciBob3cgdG8gaGFuZGxlIHRo
ZSBzY2FsaW5nL3N0cmV0Y2hpbmcvdGlsaW5nIG9mIHRoZSBpbWFnZSBzbGljZXMuCi0gICAgaW50
IG1faG9yaXpvbnRhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8gYWRqdXN0IHRoZSB3aWR0
aHMgb2YgdGhlIHRvcC9taWRkbGUvYm90dG9tCi0gICAgaW50IG1fdmVydGljYWxTaXplUnVsZTsg
Ly8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgaGVpZ2h0cyBvZiB0aGUgbGVmdC9taWRkbGUv
cmlnaHQKLX07Ci0KLWNsYXNzIEZvbnRGYW1pbHlWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVW
YWx1ZQotewotcHVibGljOgotICAgIEZvbnRGYW1pbHlWYWx1ZSggY29uc3QgRGVwcmVjYXRlZFN0
cmluZyAmc3RyaW5nKTsKLSAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBmb250TmFtZSgpIGNv
bnN0IHsgcmV0dXJuIHBhcnNlZEZvbnROYW1lOyB9Ci0gICAgaW50IGdlbmVyaWNGYW1pbHlUeXBl
KCkgY29uc3QgeyByZXR1cm4gX2dlbmVyaWNGYW1pbHlUeXBlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0
cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHBhcnNlZEZvbnRO
YW1lOwotcHJpdmF0ZToKLSAgICBpbnQgX2dlbmVyaWNGYW1pbHlUeXBlOwotfTsKLQotY2xhc3Mg
Rm9udFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgp
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGU7
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YXJpYW50OwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gd2VpZ2h0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6
ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVIZWlnaHQ7Ci0gICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gZmFtaWx5OwotfTsKLQotLy8gVXNlZCBmb3IgdGV4dC1zaGFkb3cgYW5k
IGJveC1zaGFkb3cKLWNsYXNzIFNoYWRvd1ZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJs
aWM6Ci0gICAgU2hhZG93VmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geCwKLSAg
ICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geSwKLSAgICAgICAgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1ciwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY29sb3IpOwotICAgIAotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geDsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBibHVyOwotICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gYW5vdGhlciBoZWxwZXIgY2xhc3MKLWNsYXNzIENTU1Byb3BlcnR5Ci17
Ci1wdWJsaWM6Ci0gICAgQ1NTUHJvcGVydHkoaW50IHByb3BJRCwgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGludCBzaG9ydGhhbmRJRCA9IDAsIGJv
b2wgaW1wbGljaXQgPSBmYWxzZSkKLSAgICAgICAgOiBtX2lkKHByb3BJRCksIG1fc2hvcnRoYW5k
SUQoc2hvcnRoYW5kSUQpLCBtX2ltcG9ydGFudChpbXBvcnRhbnQpLCBtX2ltcGxpY2l0KGltcGxp
Y2l0KSwgbV92YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENTU1Byb3BlcnR5
ICZvcGVyYXRvcj0oY29uc3QgQ1NTUHJvcGVydHkmIG8pCi0gICAgewotICAgICAgICBtX2lkID0g
by5tX2lkOwotICAgICAgICBtX3Nob3J0aGFuZElEID0gby5tX3Nob3J0aGFuZElEOwotICAgICAg
ICBtX2ltcG9ydGFudCA9IG8ubV9pbXBvcnRhbnQ7Ci0gICAgICAgIG1fdmFsdWUgPSBvLm1fdmFs
dWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgCi0gICAgaW50IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQotICAgIGludCBzaG9ydGhhbmRJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvcnRoYW5kSUQ7IH0KLSAgICAKLSAgICBib29sIGlzSW1wb3J0YW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBvcnRhbnQ7IH0KLSAgICBib29sIGlzSW1wbGljaXQoKSBjb25zdCB7IHJldHVy
biBtX2ltcGxpY2l0OyB9Ci0KLSAgICBDU1NWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlLmdldCgpOyB9Ci0gICAgCi0gICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAg
IC8vIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGZpdHMgaW4gNCBieXRlcy4KLSAgICBpbnQgbV9p
ZDsKLSAgICBpbnQgbV9zaG9ydGhhbmRJRDsgIC8vIElmIHRoaXMgcHJvcGVydHkgd2FzIHNldCBh
cyBwYXJ0IG9mIGEgc2hvcnRoYW5kLCBnaXZlcyB0aGUgc2hvcnRoYW5kLgotICAgIGJvb2wgbV9p
bXBvcnRhbnQgOiAxOwotICAgIGJvb2wgbV9pbXBsaWNpdCA6IDE7IC8vIFdoZXRoZXIgb3Igbm90
IHRoZSBwcm9wZXJ0eSB3YXMgc2V0IGltcGxpY2l0bHkgYXMgdGhlIHJlc3VsdCBvZiBhIHNob3J0
aGFuZC4KLQotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTUHJvcGVydHkgJiwg
Y29uc3QgQ1NTUHJvcGVydHkgJik7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1fdmFsdWU7Ci19
OwotCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURl
Y2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsK
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlKTsKLSAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBE
ZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiAmKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0
ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKLQotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
ICZvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gJik7Ci0KLSAgICB2
b2lkIHNldE5vZGUoTm9kZSogbm9kZSkgeyBtX25vZGUgPSBub2RlOyB9Ci0KLSAgICB2aXJ0dWFs
IFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1
ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlW
YWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5
UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdldFByb3Bl
cnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
cm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgp
OwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IHZh
bHVlc0l0ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQotCi0gICAg
Ym9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFu
dCA9IGZhbHNlLCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKTsKLSAgICBib29sIHNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwg
Ym9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0
eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBm
YWxzZSwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSkKLSAgICAgICAgeyBFeGNlcHRpb25Db2Rl
IGVjOyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIGltcG9ydGFudCwgbm90
aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0KLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBy
ZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSkK
LSAgICAgICAgeyBFeGNlcHRpb25Db2RlIGVjOyByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVy
dHlJRCwgbm90aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICB2
b2lkIHNldENoYW5nZWQoKTsKLSAKLSAgICAvLyBzZXRMZW5ndGhQcm9wZXJ0eSB0cmVhdHMgaW50
ZWdlcnMgYXMgcGl4ZWxzISAoTmVlZGVkIGZvciBjb252ZXJzaW9uIG9mIEhUTUwgYXR0cmlidXRl
cy4pCi0gICAgdm9pZCBzZXRMZW5ndGhQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbXVsdGlMZW5ndGggPSBmYWxzZSk7Ci0g
ICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcywgYm9vbCBpbXBvcnRhbnQgPSBmYWxz
ZSk7IC8vIHBhcnNlZCBzdHJpbmcgdmFsdWUKLSAgICB2b2lkIHNldEltYWdlUHJvcGVydHkoaW50
IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgVVJMLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsK
LSAKLSAgICAvLyBUaGUgZm9sbG93aW5nIHBhcnNlcyBhbiBlbnRpcmUgbmV3IHN0eWxlIGRlY2xh
cmF0aW9uLgotICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVj
bGFyYXRpb24pOwotCi0gICAgLy8gQmVzaWRlcyBhZGRpbmcgdGhlIHByb3BlcnRpZXMsIHRoaXMg
YWxzbyByZW1vdmVzIGFueSBleGlzdGluZyBwcm9wZXJ0aWVzIHdpdGggdGhlc2UgSURzLgotICAg
IC8vIEl0IGRvZXMgbm8gbm90aWZpY2F0aW9uIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSBwYXJz
ZXIuCi0gICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5ICogY29u
c3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotIAotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdDsKLSAgICB2b2lkIHJl
bW92ZUJsb2NrUHJvcGVydGllcygpOwotICAgIHZvaWQgcmVtb3ZlSW5oZXJpdGFibGVQcm9wZXJ0
aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lkIG1lcmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1ZSk7Ci0gCi1wcml2YXRlOgot
ICAgIFN0cmluZyBnZXRTaG9ydEhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBu
dW1iZXIpIGNvbnN0OwotICAgIFN0cmluZyBnZXQ0VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGll
cykgY29uc3Q7Ci0gCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gbV92YWx1
ZXM7Ci0gICAgTm9kZSogbV9ub2RlOwotfTsKLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCklu
ZGV4OiBjc3MvQ1NTSW5pdGlhbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0luaXRpYWxW
YWx1ZS5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9DU1NJbml0aWFsVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsMTEyICsyMCwxMyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCiAgKi8KIAotI2lmbmRlZiBDU1NfY3NzX3ZhbHVlaW1wbF9oXwotI2RlZmluZSBDU1NfY3Nz
X3ZhbHVlaW1wbF9oXworI2lmbmRlZiBDU1NJbml0aWFsVmFsdWVfSAorI2RlZmluZSBDU1NJbml0
aWFsVmFsdWVfSAogCi0jaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCi0jaW5jbHVkZSAi
Y3NzX2Jhc2UuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRl
cHJlY2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCi0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKKyNp
bmNsdWRlICJDU1NWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDb3VudGVy
OwotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgTm9kZTsKLWNsYXNzIFBhaXI7Ci1jbGFzcyBSZWN0
SW1wbDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0jaWYgX19BUFBMRV9fCi1jbGFzcyBEYXNoYm9h
cmRSZWdpb247Ci0jZW5kaWYKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotZXh0ZXJu
IGNvbnN0IGludCBpbmhlcml0YWJsZVByb3BlcnRpZXNbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25l
ZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXM7Ci0KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24g
OiBwdWJsaWMgU3R5bGVCYXNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURl
Y2xhcmF0aW9uKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSk7Ci0KLSAgICBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBT
dHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAg
U3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwot
ICAgIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSk7Ci0gICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpOwotICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlD
U1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdl
dFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29u
c3QgPSAwOwotCi0gICAgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlv
bkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsK
LSAKLSAgICB2b2lkIGRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQot
ICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVz
SW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQot
cHJpdmF0ZToKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRp
b24gJik7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IENTU1N0eWxl
RGVjbGFyYXRpb24gJik7Ci19OwotCi1jbGFzcyBDU1NWYWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UK
LXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0gICAgICAgIENTU19JTkhFUklUID0g
MCwKLSAgICAgICAgQ1NTX1BSSU1JVElWRV9WQUxVRSA9IDEsCi0gICAgICAgIENTU19WQUxVRV9M
SVNUID0gMiwKLSAgICAgICAgQ1NTX0NVU1RPTSA9IDMsCi0gICAgICAgIENTU19JTklUSUFMID0g
NAotICAgIH07Ci0KLSAgICBDU1NWYWx1ZSgpIDogU3R5bGVCYXNlKDApIHsgfQotCi0gICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NfQ1VT
VE9NOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2b2lk
IHNldENzc1RleHQoY29uc3QgU3RyaW5nJikgeyB9IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQu
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQotfTsKLQotY2xhc3MgQ1NT
SW5oZXJpdGVkVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLX07Ci0KIGNsYXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBD
U1NWYWx1ZQogewogcHVibGljOgpAQCAtMTMzLDQyOCArMzQsNiBAQAogICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKIH07CiAKLWNsYXNzIENTU1ZhbHVlTGlzdCA6IHB1YmxpYyBD
U1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgfkNTU1ZhbHVlTGlzdCgpOwotCi0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY291bnQoKTsgfQotICAg
IENTU1ZhbHVlKiBpdGVtICh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXMuYXQoaW5k
ZXgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0g
ICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIERlcHJlY2F0ZWRQdHJMaXN0PENT
U1ZhbHVlPiBtX3ZhbHVlczsKLX07Ci0KLQotY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWUgOiBwdWJs
aWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0gICAgICAgIENT
U19VTktOT1dOID0gMCwKLSAgICAgICAgQ1NTX05VTUJFUiA9IDEsCi0gICAgICAgIENTU19QRVJD
RU5UQUdFID0gMiwKLSAgICAgICAgQ1NTX0VNUyA9IDMsCi0gICAgICAgIENTU19FWFMgPSA0LAot
ICAgICAgICBDU1NfUFggPSA1LAotICAgICAgICBDU1NfQ00gPSA2LAotICAgICAgICBDU1NfTU0g
PSA3LAotICAgICAgICBDU1NfSU4gPSA4LAotICAgICAgICBDU1NfUFQgPSA5LAotICAgICAgICBD
U1NfUEMgPSAxMCwKLSAgICAgICAgQ1NTX0RFRyA9IDExLAotICAgICAgICBDU1NfUkFEID0gMTIs
Ci0gICAgICAgIENTU19HUkFEID0gMTMsCi0gICAgICAgIENTU19NUyA9IDE0LAotICAgICAgICBD
U1NfUyA9IDE1LAotICAgICAgICBDU1NfSFogPSAxNiwKLSAgICAgICAgQ1NTX0tIWiA9IDE3LAot
ICAgICAgICBDU1NfRElNRU5TSU9OID0gMTgsCi0gICAgICAgIENTU19TVFJJTkcgPSAxOSwKLSAg
ICAgICAgQ1NTX1VSSSA9IDIwLAotICAgICAgICBDU1NfSURFTlQgPSAyMSwKLSAgICAgICAgQ1NT
X0FUVFIgPSAyMiwKLSAgICAgICAgQ1NTX0NPVU5URVIgPSAyMywKLSAgICAgICAgQ1NTX1JFQ1Qg
PSAyNCwKLSAgICAgICAgQ1NTX1JHQkNPTE9SID0gMjUsCi0gICAgICAgIENTU19QQUlSID0gMTAw
LCAvLyBXZSBlbnZpc2lvbiB0aGlzIGJlaW5nIGV4cG9zZWQgYXMgYSBtZWFucyBvZiBnZXR0aW5n
IGNvbXB1dGVkIHN0eWxlIHZhbHVlcyBmb3IgcGFpcnMgKGJvcmRlci1zcGFjaW5nL3JhZGl1cywg
YmFja2dyb3VuZC1wb3NpdGlvbiwgZXRjLikKLSAgICAgICAgQ1NTX0RBU0hCT0FSRF9SRUdJT04g
PSAxMDEgLy8gRklYTUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBkb2luZyBhcyBhIHByaW1pdGl2
ZSB2YWx1ZT8gSXQgc2hvdWxkIG5vdCBiZSEKLSAgICB9OwotCi0gICAgLy8gRklYTUU6IGludCB2
cy4gdW5zaWduZWQgb3ZlcmxvYWRpbmcgaXMgdG9vIHRyaWNreSBmb3IgY29sb3IgdnMuIGlkZW50
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShpbnQgaWRl
bnQpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSwgVW5pdFR5cGVzKTsKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmLCBVbml0VHlwZXMpOwotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NS
ZWZQdHI8UmVjdEltcGw+KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSh1bnNpZ25lZCBjb2xvcik7
IC8vIFJHQiB2YWx1ZQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UGFpcj4pOwot
Ci0jaWYgX19BUFBMRV9fCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxEYXNoYm9h
cmRSZWdpb24+KTsgLy8gRklYTUU6IFdoeSBpcyBkYXNoYm9hcmQgcmVnaW9uIGEgcHJpbWl0aXZl
IHZhbHVlPyBUaGlzIG1ha2VzIG5vIHNlbnNlLgotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIH5DU1NQ
cmltaXRpdmVWYWx1ZSgpOwotCi0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB1bnNpZ25lZCBz
aG9ydCBwcmltaXRpdmVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICAvKgot
ICAgICAqIGNvbXB1dGVzIGEgbGVuZ3RoIGluIHBpeGVscyBvdXQgb2YgdGhlIGdpdmVuIENTU1Zh
bHVlLiBOZWVkIHRoZSBSZW5kZXJTdHlsZSB0byBnZXQKLSAgICAgKiB0aGUgZm9udGluZm8gaW4g
Y2FzZSB2YWwgaXMgZGVmaW5lZCBpbiBlbSBvciBleC4KLSAgICAgKgotICAgICAqIFRoZSBtZXRy
aWNzIGhhdmUgdG8gYmUgYSBiaXQgZGlmZmVyZW50IGZvciBzY3JlZW4gYW5kIHByaW50ZXIgb3V0
cHV0LgotICAgICAqIEZvciBzY3JlZW4gb3V0cHV0IHdlIGFzc3VtZSAxIGluY2ggPT0gNzIgcHgs
IGZvciBwcmludGVyIHdlIGFzc3VtZSAzMDAgZHBpCi0gICAgICoKLSAgICAgKiB0aGlzIGlzIHNj
cmVlbi9wcmludGVyIGRlcGVuZGVudCwgc28gd2UgcHJvYmFibHkgbmVlZCBhIGNvbmZpZyBvcHRp
b24gZm9yIHRoaXMsCi0gICAgICogYW5kIHNvbWUgdG9vbCB0byBjYWxpYnJhdGUuCi0gICAgICov
Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqKTsKLSAgICBpbnQgY29tcHV0
ZUxlbmd0aEludChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBpbnQgY29t
cHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSopOwotICAgIGludCBjb21wdXRlTGVu
Z3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIHNo
b3J0IGNvbXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSopOwotICAgIHNob3J0IGNvbXB1dGVM
ZW5ndGhTaG9ydChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBkb3VibGUg
Y29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxlKiwgYm9vbCBhcHBseVpvb21GYWN0b3IgPSB0
cnVlKTsKLQotICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKLSAgICB2b2lkIHNldFByaW1pdGl2ZVR5
cGUodW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0gICAgdm9pZCBzZXRG
bG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0IHVu
aXRUeXBlKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWUubnVt
OyB9Ci0KLSAgICB2b2lkIHNldFN0cmluZ1ZhbHVlKHVuc2lnbmVkIHNob3J0IHN0cmluZ1R5cGUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcg
Z2V0U3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICAKLSAgICBDb3VudGVyKiBnZXRDb3VudGVyVmFs
dWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19DT1VOVEVSID8gMCA6
IG1fdmFsdWUuY291bnRlcjsKLSAgICB9Ci0KLSAgICBSZWN0SW1wbCogZ2V0UmVjdFZhbHVlICgp
IGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkVDVCA/IDAgOiBtX3ZhbHVl
LnJlY3Q7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2V0UkdCQ29sb3JWYWx1ZSgpIGNvbnN0IHsK
LSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkdCQ09MT1IgPyAwIDogbV92YWx1ZS5yZ2Jj
b2xvcjsKLSAgICB9Ci0KLSAgICBQYWlyKiBnZXRQYWlyVmFsdWUoKSBjb25zdCB7Ci0gICAgICAg
IHJldHVybiBtX3R5cGUgIT0gQ1NTX1BBSVIgPyAwIDogbV92YWx1ZS5wYWlyOwotICAgIH0KLQot
I2lmIF9fQVBQTEVfXwotICAgIERhc2hib2FyZFJlZ2lvbiAqZ2V0RGFzaGJvYXJkUmVnaW9uVmFs
dWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19EQVNIQk9BUkRfUkVH
SU9OID8gMCA6IG1fdmFsdWUucmVnaW9uOwotICAgIH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCBi
b29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQotICAgIGludCBnZXRJZGVu
dCgpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wg
PSBmYWxzZSk7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICBpbnQgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgaW50IGlkZW50OwotICAgICAg
ICBkb3VibGUgbnVtOwotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7Ci0gICAgICAgIENvdW50
ZXIqIGNvdW50ZXI7Ci0gICAgICAgIFJlY3RJbXBsKiByZWN0OwotICAgICAgICB1bnNpZ25lZCBy
Z2Jjb2xvcjsKLSAgICAgICAgUGFpciogcGFpcjsKLSNpZiBfX0FQUExFX18KLSAgICAgICAgRGFz
aGJvYXJkUmVnaW9uKiByZWdpb247Ci0jZW5kaWYKLSAgICB9IG1fdmFsdWU7Ci19OwotCi0vLyBU
aGlzIHZhbHVlIGlzIHVzZWQgdG8gaGFuZGxlIHF1aXJreSBtYXJnaW5zIGluIHJlZmxvdyByb290
cyAoYm9keSwgdGQsIGFuZCB0aCkgbGlrZSBXaW5JRS4KLS8vIFRoZSBiYXNpYyBpZGVhIGlzIHRo
YXQgYSBzdHlsZXNoZWV0IGNhbiB1c2UgdGhlIHZhbHVlIF9fcWVtIChmb3IgcXVpcmt5IGVtKSBp
bnN0ZWFkIG9mIGVtCi0vLyBpbiBhIHN0eWxlc2hlZXQuICBXaGVuIHRoZSBxdWlya3kgdmFsdWUg
aXMgdXNlZCwgaWYgeW91J3JlIGluIHF1aXJrcyBtb2RlLCB0aGUgbWFyZ2luIHdpbGwKLS8vIGNv
bGxhcHNlIGF3YXkgaW5zaWRlIGEgdGFibGUgY2VsbC4KLWNsYXNzIENTU1F1aXJrUHJpbWl0aXZl
VmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBDU1NRdWly
a1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotICAgICAgICA6IENT
U1ByaW1pdGl2ZVZhbHVlKG51bSwgdHlwZSkge30KLQotICAgIHZpcnR1YWwgYm9vbCBpc1F1aXJr
VmFsdWUoKSB7IHJldHVybiB0cnVlOyB9Ci19OwotCi1jbGFzcyBDb3VudGVyIDogcHVibGljIFNo
YXJlZDxDb3VudGVyPiB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBTdHJpbmcgbGlzdFN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0U3R5bGU7IH0KLSAgICBTdHJpbmcgc2VwYXJhdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zZXBhcmF0b3I7IH0KLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgU3RyaW5n
IG1fbGlzdFN0eWxlOwotICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKLX07Ci0KLWNsYXNzIFJlY3RJ
bXBsIDogcHVibGljIFNoYXJlZDxSZWN0SW1wbD4gewotcHVibGljOgotICAgIHZpcnR1YWwgflJl
Y3RJbXBsKCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyByZXR1cm4g
bV90b3AuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX3JpZ2h0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm90dG9tLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGxl
ZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0VG9wKFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsgfQotICAgIHZv
aWQgc2V0UmlnaHQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmlnaHQpIHsgbV9yaWdo
dCA9IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gYm90dG9tKSB7IG1fYm90dG9tID0gYm90dG9tOyB9Ci0gICAgdm9pZCBzZXRMZWZ0KFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3RvcDsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVmdDsKLX07
Ci0KLS8vIEEgcHJpbWl0aXZlIHZhbHVlIHJlcHJlc2VudGluZyBhIHBhaXIuICBUaGlzIGlzIHVz
ZWZ1bCBmb3IgcHJvcGVydGllcyBsaWtlIGJvcmRlci1yYWRpdXMsIGJhY2tncm91bmQtc2l6ZS9w
b3NpdGlvbiwKLS8vIGFuZCBib3JkZXItc3BhY2luZyAoYWxsIG9mIHdoaWNoIGFyZSBzcGFjZS1z
ZXBhcmF0ZWQgc2V0cyBvZiB0d28gdmFsdWVzKS4gIEF0IHRoZSBtb21lbnQgd2UgYXJlIG9ubHkg
dXNpbmcgaXQgZm9yCi0vLyBib3JkZXItcmFkaXVzIGFuZCBiYWNrZ3JvdW5kLXNpemUsIGJ1dCAo
RklYTUUpIGJvcmRlci1zcGFjaW5nIGFuZCBiYWNrZ3JvdW5kLXBvc2l0aW9uIGNvdWxkIGJlIGNv
bnZlcnRlZCBvdmVyIHRvIHVzZQotLy8gaXQgKGVsaW1pbmF0aW5nIHNvbWUgZXh0cmEgLXdlYmtp
dC0gaW50ZXJuYWwgcHJvcGVydGllcykuCi1jbGFzcyBQYWlyIDogcHVibGljIFNoYXJlZDxQYWly
PiB7Ci1wdWJsaWM6Ci0gICAgUGFpcigpIDogbV9maXJzdCgwKSwgbV9zZWNvbmQoMCkgeyB9Ci0g
ICAgUGFpcihQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdCwgUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKQotICAgICAgICA6IG1fZmlyc3QoZmlyc3QpLCBtX3Nl
Y29uZChzZWNvbmQpIHsgfQotICAgIHZpcnR1YWwgflBhaXIoKTsKLQotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3QuZ2V0KCk7IH0KLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV9zZWNvbmQuZ2V0KCk7IH0K
LQotICAgIHZvaWQgc2V0Rmlyc3QoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmlyc3Qp
IHsgbV9maXJzdCA9IGZpcnN0OyB9Ci0gICAgdm9pZCBzZXRTZWNvbmQoUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gc2Vjb25kKSB7IG1fc2Vjb25kID0gc2Vjb25kOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3Q7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZDsKLX07Ci0KLWNsYXNzIERhc2hib2FyZFJlZ2lvbiA6
IHB1YmxpYyBSZWN0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgRGFzaGJvYXJkUmVnaW9uKCkgOiBtX2lz
Q2lyY2xlKDApLCBtX2lzUmVjdGFuZ2xlKDApIHsgfQotCi0gICAgUmVmUHRyPERhc2hib2FyZFJl
Z2lvbj4gbV9uZXh0OwotICAgIFN0cmluZyBtX2xhYmVsOwotICAgIFN0cmluZyBtX2dlb21ldHJ5
VHlwZTsKLSAgICBib29sIG1faXNDaXJjbGUgOiAxOwotICAgIGJvb2wgbV9pc1JlY3RhbmdsZSA6
IDE7Ci19OwotCi1jbGFzcyBDU1NJbWFnZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVl
LCBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTSW1hZ2VWYWx1
ZSgpOwotICAgIENTU0ltYWdlVmFsdWUoY29uc3QgU3RyaW5nJiB1cmwsIFN0eWxlQmFzZSopOwot
ICAgIHZpcnR1YWwgfkNTU0ltYWdlVmFsdWUoKTsKLQotICAgIENhY2hlZEltYWdlKiBpbWFnZShE
b2NMb2FkZXIqKTsKLQotcHJvdGVjdGVkOgotICAgIENhY2hlZEltYWdlKiBtX2ltYWdlOwotICAg
IGJvb2wgbV9hY2Nlc3NlZEltYWdlOwotfTsKLQotY2xhc3MgQ1NTQm9yZGVySW1hZ2VWYWx1ZSA6
IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIENTU0JvcmRlckltYWdlVmFsdWUoKTsK
LSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4sCi0gICAg
ICAgIFBhc3NSZWZQdHI8UmVjdEltcGw+LCBpbnQgaG9yaXpvbnRhbFJ1bGUsIGludCB2ZXJ0aWNh
bFJ1bGUpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wdWJsaWM6
Ci0gICAgLy8gVGhlIGJvcmRlciBpbWFnZS4KLSAgICBSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4gbV9p
bWFnZTsKLQotICAgIC8vIFRoZXNlIGZvdXIgdmFsdWVzIGFyZSB1c2VkIHRvIG1ha2UgImN1dHMi
IGluIHRoZSBpbWFnZS4gIFRoZXkgY2FuIGJlIG51bWJlcnMKLSAgICAvLyBvciBwZXJjZW50YWdl
cy4KLSAgICBSZWZQdHI8UmVjdEltcGw+IG1faW1hZ2VTbGljZVJlY3Q7Ci0gICAgCi0gICAgLy8g
VmFsdWVzIGZvciBob3cgdG8gaGFuZGxlIHRoZSBzY2FsaW5nL3N0cmV0Y2hpbmcvdGlsaW5nIG9m
IHRoZSBpbWFnZSBzbGljZXMuCi0gICAgaW50IG1faG9yaXpvbnRhbFNpemVSdWxlOyAvLyBSdWxl
IGZvciBob3cgdG8gYWRqdXN0IHRoZSB3aWR0aHMgb2YgdGhlIHRvcC9taWRkbGUvYm90dG9tCi0g
ICAgaW50IG1fdmVydGljYWxTaXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUg
aGVpZ2h0cyBvZiB0aGUgbGVmdC9taWRkbGUvcmlnaHQKLX07Ci0KLWNsYXNzIEZvbnRGYW1pbHlW
YWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgotICAgIEZvbnRGYW1p
bHlWYWx1ZSggY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyaW5nKTsKLSAgICBjb25zdCBEZXBy
ZWNhdGVkU3RyaW5nJiBmb250TmFtZSgpIGNvbnN0IHsgcmV0dXJuIHBhcnNlZEZvbnROYW1lOyB9
Ci0gICAgaW50IGdlbmVyaWNGYW1pbHlUeXBlKCkgY29uc3QgeyByZXR1cm4gX2dlbmVyaWNGYW1p
bHlUeXBlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBE
ZXByZWNhdGVkU3RyaW5nIHBhcnNlZEZvbnROYW1lOwotcHJpdmF0ZToKLSAgICBpbnQgX2dlbmVy
aWNGYW1pbHlUeXBlOwotfTsKLQotY2xhc3MgRm9udFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIAotICAg
IHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB2YXJpYW50OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gd2VpZ2h0OwotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGxpbmVIZWlnaHQ7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZmFtaWx5OwotfTsKLQot
Ly8gVXNlZCBmb3IgdGV4dC1zaGFkb3cgYW5kIGJveC1zaGFkb3cKLWNsYXNzIFNoYWRvd1ZhbHVl
IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgU2hhZG93VmFsdWUoUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4geCwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4geSwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1ciwKLSAg
ICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3IpOwotICAgIAotICAgIHZp
cnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4geDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHk7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBibHVyOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29s
b3I7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gYW5vdGhlciBoZWxwZXIg
Y2xhc3MKLWNsYXNzIENTU1Byb3BlcnR5Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTUHJvcGVydHkoaW50
IHByb3BJRCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFs
c2UsIGludCBzaG9ydGhhbmRJRCA9IDAsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSkKLSAgICAgICAg
OiBtX2lkKHByb3BJRCksIG1fc2hvcnRoYW5kSUQoc2hvcnRoYW5kSUQpLCBtX2ltcG9ydGFudChp
bXBvcnRhbnQpLCBtX2ltcGxpY2l0KGltcGxpY2l0KSwgbV92YWx1ZSh2YWx1ZSkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIENTU1Byb3BlcnR5ICZvcGVyYXRvcj0oY29uc3QgQ1NTUHJvcGVydHkm
IG8pCi0gICAgewotICAgICAgICBtX2lkID0gby5tX2lkOwotICAgICAgICBtX3Nob3J0aGFuZElE
ID0gby5tX3Nob3J0aGFuZElEOwotICAgICAgICBtX2ltcG9ydGFudCA9IG8ubV9pbXBvcnRhbnQ7
Ci0gICAgICAgIG1fdmFsdWUgPSBvLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0gICAgCi0gICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIGludCBz
aG9ydGhhbmRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvcnRoYW5kSUQ7IH0KLSAgICAKLSAgICBi
b29sIGlzSW1wb3J0YW50KCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRhbnQ7IH0KLSAgICBib29s
IGlzSW1wbGljaXQoKSBjb25zdCB7IHJldHVybiBtX2ltcGxpY2l0OyB9Ci0KLSAgICBDU1NWYWx1
ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9Ci0gICAgCi0gICAgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIC8vIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGZp
dHMgaW4gNCBieXRlcy4KLSAgICBpbnQgbV9pZDsKLSAgICBpbnQgbV9zaG9ydGhhbmRJRDsgIC8v
IElmIHRoaXMgcHJvcGVydHkgd2FzIHNldCBhcyBwYXJ0IG9mIGEgc2hvcnRoYW5kLCBnaXZlcyB0
aGUgc2hvcnRoYW5kLgotICAgIGJvb2wgbV9pbXBvcnRhbnQgOiAxOwotICAgIGJvb2wgbV9pbXBs
aWNpdCA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9wZXJ0eSB3YXMgc2V0IGltcGxpY2l0
bHkgYXMgdGhlIHJlc3VsdCBvZiBhIHNob3J0aGFuZC4KLQotICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ1NTUHJvcGVydHkgJiwgY29uc3QgQ1NTUHJvcGVydHkgJik7Ci0KLSAgICBS
ZWZQdHI8Q1NTVmFsdWU+IG1fdmFsdWU7Ci19OwotCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0gICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bihDU1NSdWxlKiBwYXJlbnRSdWxlKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihD
U1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5
PiAmKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxl
LCBjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKLQotICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICZvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24gJik7Ci0KLSAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkgeyBtX25v
ZGUgPSBub2RlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlE
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9u
Q29kZSYpOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBjb3B5KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpOwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENv
bnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IHZhbHVlc0l0ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuYmVnaW4oKTsgfQotCi0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNoYW5nZWQg
PSB0cnVlKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1
ZSkKLSAgICAgICAgeyBFeGNlcHRpb25Db2RlIGVjOyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVy
dHlJZCwgdmFsdWUsIGltcG9ydGFudCwgbm90aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0KLSAgICBTdHJp
bmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Ym9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSkKLSAgICAgICAgeyBFeGNlcHRpb25Db2RlIGVjOyBy
ZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0K
LSAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICB2b2lkIHNldENoYW5nZWQoKTsKLSAKLSAgICAvLyBz
ZXRMZW5ndGhQcm9wZXJ0eSB0cmVhdHMgaW50ZWdlcnMgYXMgcGl4ZWxzISAoTmVlZGVkIGZvciBj
b252ZXJzaW9uIG9mIEhUTUwgYXR0cmlidXRlcy4pCi0gICAgdm9pZCBzZXRMZW5ndGhQcm9wZXJ0
eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJv
b2wgbXVsdGlMZW5ndGggPSBmYWxzZSk7Ci0gICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcywgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7IC8vIHBhcnNlZCBzdHJpbmcgdmFsdWUKLSAg
ICB2b2lkIHNldEltYWdlUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgVVJM
LCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKLSAKLSAgICAvLyBUaGUgZm9sbG93aW5nIHBhcnNl
cyBhbiBlbnRpcmUgbmV3IHN0eWxlIGRlY2xhcmF0aW9uLgotICAgIHZvaWQgcGFyc2VEZWNsYXJh
dGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRpb24pOwotCi0gICAgLy8gQmVzaWRlcyBh
ZGRpbmcgdGhlIHByb3BlcnRpZXMsIHRoaXMgYWxzbyByZW1vdmVzIGFueSBleGlzdGluZyBwcm9w
ZXJ0aWVzIHdpdGggdGhlc2UgSURzLgotICAgIC8vIEl0IGRvZXMgbm8gbm90aWZpY2F0aW9uIHNp
bmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSBwYXJzZXIuCi0gICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0
aWVzKGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotIAot
ICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlCbG9ja1Byb3Bl
cnRpZXMoKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwotICAgIHZv
aWQgcmVtb3ZlSW5oZXJpdGFibGVQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lkIG1l
cmdlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZs
aWN0ID0gdHJ1ZSk7Ci0gCi1wcml2YXRlOgotICAgIFN0cmluZyBnZXRTaG9ydEhhbmRWYWx1ZShj
b25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1iZXIpIGNvbnN0OwotICAgIFN0cmluZyBnZXQ0
VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGllcykgY29uc3Q7Ci0gCi0gICAgRGVwcmVjYXRlZFZh
bHVlTGlzdDxDU1NQcm9wZXJ0eT4gbV92YWx1ZXM7Ci0gICAgTm9kZSogbV9ub2RlOwotfTsKLQog
fSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBjc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBjc3MvY3NzcGFyc2VyLmNwcAkocmV2aXNpb24gMTQ0MDYpCisrKyBjc3MvY3NzcGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMgKzI0LDMwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgImNzc19ydWxlaW1wbC5oIgotI2luY2x1ZGUgImNzc2hlbHBlci5oIgorI2luY2x1
ZGUgIkNTU0JvcmRlckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkNTU0luaGVyaXRlZFZhbHVlLmgi
CisjaW5jbHVkZSAiQ1NTSW5pdGlhbFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgi
CisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNTU1F1
aXJrUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5j
bHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250RmFtaWx5VmFsdWUuaCIKKyNpbmNsdWRl
ICJGb250VmFsdWUuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKKyNpbmNsdWRlICJQYWlyLmgi
CisjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJjc3NoZWxwZXIuaCIKIAogI2Rl
ZmluZSBZWURFQlVHIDAKIApJbmRleDogY3NzL2Nzc19ydWxlaW1wbC5oIChkZWxldGVkKQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkluZGV4OiBjc3MvY3NzX3ZhbHVlaW1wbC5jcHAgKGRlbGV0ZWQpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
SW5kZXg6IGNzcy9Gb250RmFtaWx5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvRm9udEZhbWls
eVZhbHVlLmgJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0ZvbnRGYW1pbHlWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw1MzkgKzIwLDI2IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KICAqLwogCi0jaWZuZGVmIENTU19jc3NfdmFsdWVpbXBsX2hfCi0jZGVmaW5lIENTU19j
c3NfdmFsdWVpbXBsX2hfCisjaWZuZGVmIEZvbnRGYW1pbHlWYWx1ZV9ICisjZGVmaW5lIEZvbnRG
YW1pbHlWYWx1ZV9ICiAKLSNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnQuaCIKLSNpbmNsdWRl
ICJjc3NfYmFzZS5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCisjaW5jbHVkZSAi
Q1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5j
bHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0KLWNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBDYWNoZWRJbWFnZTsKLWNs
YXNzIENvdW50ZXI7Ci1jbGFzcyBEb2NMb2FkZXI7Ci1jbGFzcyBOb2RlOwotY2xhc3MgUGFpcjsK
LWNsYXNzIFJlY3RJbXBsOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLSNpZiBfX0FQUExFX18KLWNs
YXNzIERhc2hib2FyZFJlZ2lvbjsKLSNlbmRpZgotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwotCi1leHRlcm4gY29uc3QgaW50IGluaGVyaXRhYmxlUHJvcGVydGllc1tdOwotZXh0ZXJuIGNv
bnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVydGllczsKLQotY2xhc3MgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiA6IHB1YmxpYyBTdHlsZUJhc2UgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9v
bCBpc1N0eWxlRGVjbGFyYXRpb24oKTsKLQotICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlOYW1l
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLQotICAgIENTU1J1bGUqIHBhcmVudFJ1bGUo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpID0g
MDsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKLQotICAgIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlO
YW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lKTsKLSAgICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSk7Ci0gICAgCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9w
ZXJ0eUlEKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBy
b3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFu
dCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1vdmVQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRh
YmxlKCkgPSAwOwotIAotICAgIHZvaWQgZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiop
IGNvbnN0OwotCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29w
eVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotICAgIENTU1N0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVs
ZSA9IDApOwotCi1wcml2YXRlOgotICAgIENTU1N0eWxlRGVjbGFyYXRpb24oY29uc3QgQ1NTU3R5
bGVEZWNsYXJhdGlvbiAmKTsKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uJiBvcGVyYXRvcj0oY29u
c3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmKTsKLX07Ci0KLWNsYXNzIENTU1ZhbHVlIDogcHVibGlj
IFN0eWxlQmFzZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5cGVzIHsKLSAgICAgICAgQ1NT
X0lOSEVSSVQgPSAwLAotICAgICAgICBDU1NfUFJJTUlUSVZFX1ZBTFVFID0gMSwKLSAgICAgICAg
Q1NTX1ZBTFVFX0xJU1QgPSAyLAotICAgICAgICBDU1NfQ1VTVE9NID0gMywKLSAgICAgICAgQ1NT
X0lOSVRJQUwgPSA0Ci0gICAgfTsKLQotICAgIENTU1ZhbHVlKCkgOiBTdHlsZUJhc2UoMCkgeyB9
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIENTU19DVVNUT007IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAw
OwotICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmKSB7IH0gLy8gRklYTUU6IE5vdCBp
bXBsZW1lbnRlZC4KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci19Owot
Ci1jbGFzcyBDU1NJbmhlcml0ZWRWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgot
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTSW5pdGlhbFZhbHVl
IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9y
dCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7Ci19OwotCi1jbGFzcyBDU1NWYWx1ZUxpc3QgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5DU1NWYWx1ZUxpc3QoKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmNvdW50KCk7IH0KLSAgICBDU1NWYWx1ZSogaXRlbSAo
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzLmF0KGluZGV4KTsgfQotCi0gICAgdmly
dHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQotICAgIHZvaWQgYXBwZW5kKFBh
c3NSZWZQdHI8Q1NTVmFsdWU+KTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0KLXByb3RlY3RlZDoKLSAgICBEZXByZWNhdGVkUHRyTGlzdDxDU1NWYWx1ZT4gbV92YWx1ZXM7
Ci19OwotCi0KLWNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1w
dWJsaWM6Ci0gICAgZW51bSBVbml0VHlwZXMgewotICAgICAgICBDU1NfVU5LTk9XTiA9IDAsCi0g
ICAgICAgIENTU19OVU1CRVIgPSAxLAotICAgICAgICBDU1NfUEVSQ0VOVEFHRSA9IDIsCi0gICAg
ICAgIENTU19FTVMgPSAzLAotICAgICAgICBDU1NfRVhTID0gNCwKLSAgICAgICAgQ1NTX1BYID0g
NSwKLSAgICAgICAgQ1NTX0NNID0gNiwKLSAgICAgICAgQ1NTX01NID0gNywKLSAgICAgICAgQ1NT
X0lOID0gOCwKLSAgICAgICAgQ1NTX1BUID0gOSwKLSAgICAgICAgQ1NTX1BDID0gMTAsCi0gICAg
ICAgIENTU19ERUcgPSAxMSwKLSAgICAgICAgQ1NTX1JBRCA9IDEyLAotICAgICAgICBDU1NfR1JB
RCA9IDEzLAotICAgICAgICBDU1NfTVMgPSAxNCwKLSAgICAgICAgQ1NTX1MgPSAxNSwKLSAgICAg
ICAgQ1NTX0haID0gMTYsCi0gICAgICAgIENTU19LSFogPSAxNywKLSAgICAgICAgQ1NTX0RJTUVO
U0lPTiA9IDE4LAotICAgICAgICBDU1NfU1RSSU5HID0gMTksCi0gICAgICAgIENTU19VUkkgPSAy
MCwKLSAgICAgICAgQ1NTX0lERU5UID0gMjEsCi0gICAgICAgIENTU19BVFRSID0gMjIsCi0gICAg
ICAgIENTU19DT1VOVEVSID0gMjMsCi0gICAgICAgIENTU19SRUNUID0gMjQsCi0gICAgICAgIENT
U19SR0JDT0xPUiA9IDI1LAotICAgICAgICBDU1NfUEFJUiA9IDEwMCwgLy8gV2UgZW52aXNpb24g
dGhpcyBiZWluZyBleHBvc2VkIGFzIGEgbWVhbnMgb2YgZ2V0dGluZyBjb21wdXRlZCBzdHlsZSB2
YWx1ZXMgZm9yIHBhaXJzIChib3JkZXItc3BhY2luZy9yYWRpdXMsIGJhY2tncm91bmQtcG9zaXRp
b24sIGV0Yy4pCi0gICAgICAgIENTU19EQVNIQk9BUkRfUkVHSU9OID0gMTAxIC8vIEZJWE1FOiBX
aGF0IG9uIGVhcnRoIGlzIHRoaXMgZG9pbmcgYXMgYSBwcmltaXRpdmUgdmFsdWU/IEl0IHNob3Vs
ZCBub3QgYmUhCi0gICAgfTsKLQotICAgIC8vIEZJWE1FOiBpbnQgdnMuIHVuc2lnbmVkIG92ZXJs
b2FkaW5nIGlzIHRvbyB0cmlja3kgZm9yIGNvbG9yIHZzLiBpZGVudAotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoaW50IGlkZW50KTsKLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZShkb3VibGUsIFVuaXRUeXBlcyk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoY29u
c3QgU3RyaW5nJiwgVW5pdFR5cGVzKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRy
PENvdW50ZXI+KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFJlY3RJbXBsPik7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUodW5zaWduZWQgY29sb3IpOyAvLyBSR0IgdmFsdWUKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFBhaXI+KTsKLQotI2lmIF9fQVBQTEVfXwot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPik7IC8vIEZJ
WE1FOiBXaHkgaXMgZGFzaGJvYXJkIHJlZ2lvbiBhIHByaW1pdGl2ZSB2YWx1ZT8gVGhpcyBtYWtl
cyBubyBzZW5zZS4KLSNlbmRpZgotCi0gICAgdmlydHVhbCB+Q1NTUHJpbWl0aXZlVmFsdWUoKTsK
LQotICAgIHZvaWQgY2xlYW51cCgpOwotCi0gICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotCi0gICAgLyoKLSAgICAgKiBjb21wdXRlcyBh
IGxlbmd0aCBpbiBwaXhlbHMgb3V0IG9mIHRoZSBnaXZlbiBDU1NWYWx1ZS4gTmVlZCB0aGUgUmVu
ZGVyU3R5bGUgdG8gZ2V0Ci0gICAgICogdGhlIGZvbnRpbmZvIGluIGNhc2UgdmFsIGlzIGRlZmlu
ZWQgaW4gZW0gb3IgZXguCi0gICAgICoKLSAgICAgKiBUaGUgbWV0cmljcyBoYXZlIHRvIGJlIGEg
Yml0IGRpZmZlcmVudCBmb3Igc2NyZWVuIGFuZCBwcmludGVyIG91dHB1dC4KLSAgICAgKiBGb3Ig
c2NyZWVuIG91dHB1dCB3ZSBhc3N1bWUgMSBpbmNoID09IDcyIHB4LCBmb3IgcHJpbnRlciB3ZSBh
c3N1bWUgMzAwIGRwaQotICAgICAqCi0gICAgICogdGhpcyBpcyBzY3JlZW4vcHJpbnRlciBkZXBl
bmRlbnQsIHNvIHdlIHByb2JhYmx5IG5lZWQgYSBjb25maWcgb3B0aW9uIGZvciB0aGlzLAotICAg
ICAqIGFuZCBzb21lIHRvb2wgdG8gY2FsaWJyYXRlLgotICAgICAqLwotICAgIGludCBjb21wdXRl
TGVuZ3RoSW50KFJlbmRlclN0eWxlKik7Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVy
U3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnRGb3JM
ZW5ndGgoUmVuZGVyU3R5bGUqKTsKLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChS
ZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBzaG9ydCBjb21wdXRlTGVuZ3Ro
U2hvcnQoUmVuZGVyU3R5bGUqKTsKLSAgICBzaG9ydCBjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVy
U3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhGbG9h
dChSZW5kZXJTdHlsZSosIGJvb2wgYXBwbHlab29tRmFjdG9yID0gdHJ1ZSk7Ci0KLSAgICAvLyB1
c2Ugd2l0aCBjYXJlISEhCi0gICAgdm9pZCBzZXRQcmltaXRpdmVUeXBlKHVuc2lnbmVkIHNob3J0
IHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQotICAgIHZvaWQgc2V0RmxvYXRWYWx1ZSh1bnNpZ25l
ZCBzaG9ydCB1bml0VHlwZSwgZG91YmxlIGZsb2F0VmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSk7Ci0gICAgZG91
YmxlIGdldEZsb2F0VmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLm51bTsgfQotCi0gICAgdm9pZCBz
ZXRTdHJpbmdWYWx1ZSh1bnNpZ25lZCBzaG9ydCBzdHJpbmdUeXBlLCBjb25zdCBTdHJpbmcmIHN0
cmluZ1ZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkg
Y29uc3Q7Ci0gICAgCi0gICAgQ291bnRlciogZ2V0Q291bnRlclZhbHVlICgpIGNvbnN0IHsKLSAg
ICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfQ09VTlRFUiA/IDAgOiBtX3ZhbHVlLmNvdW50ZXI7
Ci0gICAgfQotCi0gICAgUmVjdEltcGwqIGdldFJlY3RWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAg
IHJldHVybiBtX3R5cGUgIT0gQ1NTX1JFQ1QgPyAwIDogbV92YWx1ZS5yZWN0OwotICAgIH0KLQot
ICAgIHVuc2lnbmVkIGdldFJHQkNvbG9yVmFsdWUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBt
X3R5cGUgIT0gQ1NTX1JHQkNPTE9SID8gMCA6IG1fdmFsdWUucmdiY29sb3I7Ci0gICAgfQotCi0g
ICAgUGFpciogZ2V0UGFpclZhbHVlKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9
IENTU19QQUlSID8gMCA6IG1fdmFsdWUucGFpcjsKLSAgICB9Ci0KLSNpZiBfX0FQUExFX18KLSAg
ICBEYXNoYm9hcmRSZWdpb24gKmdldERhc2hib2FyZFJlZ2lvblZhbHVlICgpIGNvbnN0IHsKLSAg
ICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfREFTSEJPQVJEX1JFR0lPTiA/IDAgOiBtX3ZhbHVl
LnJlZ2lvbjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgYm9vbCBpc1ByaW1pdGl2ZVZh
bHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQg
Y3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0KLSAgICBpbnQgZ2V0SWRlbnQoKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmLCBib29sID0gZmFsc2UpOwotICAgIHZp
cnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1F1aXJr
VmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgaW50IG1fdHlwZTsK
LSAgICB1bmlvbiB7Ci0gICAgICAgIGludCBpZGVudDsKLSAgICAgICAgZG91YmxlIG51bTsKLSAg
ICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBDb3VudGVyKiBjb3VudGVyOwotICAg
ICAgICBSZWN0SW1wbCogcmVjdDsKLSAgICAgICAgdW5zaWduZWQgcmdiY29sb3I7Ci0gICAgICAg
IFBhaXIqIHBhaXI7Ci0jaWYgX19BUFBMRV9fCi0gICAgICAgIERhc2hib2FyZFJlZ2lvbiogcmVn
aW9uOwotI2VuZGlmCi0gICAgfSBtX3ZhbHVlOwotfTsKLQotLy8gVGhpcyB2YWx1ZSBpcyB1c2Vk
IHRvIGhhbmRsZSBxdWlya3kgbWFyZ2lucyBpbiByZWZsb3cgcm9vdHMgKGJvZHksIHRkLCBhbmQg
dGgpIGxpa2UgV2luSUUuCi0vLyBUaGUgYmFzaWMgaWRlYSBpcyB0aGF0IGEgc3R5bGVzaGVldCBj
YW4gdXNlIHRoZSB2YWx1ZSBfX3FlbSAoZm9yIHF1aXJreSBlbSkgaW5zdGVhZCBvZiBlbQotLy8g
aW4gYSBzdHlsZXNoZWV0LiAgV2hlbiB0aGUgcXVpcmt5IHZhbHVlIGlzIHVzZWQsIGlmIHlvdSdy
ZSBpbiBxdWlya3MgbW9kZSwgdGhlIG1hcmdpbiB3aWxsCi0vLyBjb2xsYXBzZSBhd2F5IGluc2lk
ZSBhIHRhYmxlIGNlbGwuCi1jbGFzcyBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENT
U1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZShk
b3VibGUgbnVtLCBVbml0VHlwZXMgdHlwZSkKLSAgICAgICAgOiBDU1NQcmltaXRpdmVWYWx1ZShu
dW0sIHR5cGUpIHt9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4g
dHJ1ZTsgfQotfTsKLQotY2xhc3MgQ291bnRlciA6IHB1YmxpYyBTaGFyZWQ8Q291bnRlcj4gewot
cHVibGljOgotICAgIFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVyOyB9Ci0gICAgU3RyaW5nIGxpc3RTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFN0eWxl
OyB9Ci0gICAgU3RyaW5nIHNlcGFyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VwYXJhdG9yOyB9
Ci0KLSAgICBTdHJpbmcgbV9pZGVudGlmaWVyOwotICAgIFN0cmluZyBtX2xpc3RTdHlsZTsKLSAg
ICBTdHJpbmcgbV9zZXBhcmF0b3I7Ci19OwotCi1jbGFzcyBSZWN0SW1wbCA6IHB1YmxpYyBTaGFy
ZWQ8UmVjdEltcGw+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZWN0SW1wbCgpOwotCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9Ci0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodC5nZXQo
KTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2Jv
dHRvbS5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9sZWZ0LmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldFRvcChQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiB0b3ApIHsgbV90b3AgPSB0b3A7IH0KLSAgICB2b2lkIHNldFJpZ2h0KFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJpZ2h0KSB7IG1fcmlnaHQgPSByaWdodDsgfQotICAg
IHZvaWQgc2V0Qm90dG9tKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvdHRvbSkgeyBt
X2JvdHRvbSA9IGJvdHRvbTsgfQotICAgIHZvaWQgc2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBsZWZ0KSB7IG1fbGVmdCA9IGxlZnQ7IH0KLQotcHJvdGVjdGVkOgotICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV90b3A7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX3JpZ2h0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Ci19OwotCi0vLyBBIHByaW1pdGl2
ZSB2YWx1ZSByZXByZXNlbnRpbmcgYSBwYWlyLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHByb3BlcnRp
ZXMgbGlrZSBib3JkZXItcmFkaXVzLCBiYWNrZ3JvdW5kLXNpemUvcG9zaXRpb24sCi0vLyBhbmQg
Ym9yZGVyLXNwYWNpbmcgKGFsbCBvZiB3aGljaCBhcmUgc3BhY2Utc2VwYXJhdGVkIHNldHMgb2Yg
dHdvIHZhbHVlcykuICBBdCB0aGUgbW9tZW50IHdlIGFyZSBvbmx5IHVzaW5nIGl0IGZvcgotLy8g
Ym9yZGVyLXJhZGl1cyBhbmQgYmFja2dyb3VuZC1zaXplLCBidXQgKEZJWE1FKSBib3JkZXItc3Bh
Y2luZyBhbmQgYmFja2dyb3VuZC1wb3NpdGlvbiBjb3VsZCBiZSBjb252ZXJ0ZWQgb3ZlciB0byB1
c2UKLS8vIGl0IChlbGltaW5hdGluZyBzb21lIGV4dHJhIC13ZWJraXQtIGludGVybmFsIHByb3Bl
cnRpZXMpLgotY2xhc3MgUGFpciA6IHB1YmxpYyBTaGFyZWQ8UGFpcj4gewotcHVibGljOgotICAg
IFBhaXIoKSA6IG1fZmlyc3QoMCksIG1fc2Vjb25kKDApIHsgfQotICAgIFBhaXIoUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmlyc3QsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHNlY29uZCkKLSAgICAgICAgOiBtX2ZpcnN0KGZpcnN0KSwgbV9zZWNvbmQoc2Vjb25kKSB7IH0K
LSAgICB2aXJ0dWFsIH5QYWlyKCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QoKSBj
b25zdCB7IHJldHVybiBtX2ZpcnN0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNl
Y29uZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vjb25kLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldEZp
cnN0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0KSB7IG1fZmlyc3QgPSBmaXJz
dDsgfQotICAgIHZvaWQgc2V0U2Vjb25kKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNl
Y29uZCkgeyBtX3NlY29uZCA9IHNlY29uZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bV9zZWNvbmQ7Ci19OwotCi1jbGFzcyBEYXNoYm9hcmRSZWdpb24gOiBwdWJsaWMgUmVjdEltcGwg
ewotcHVibGljOgotICAgIERhc2hib2FyZFJlZ2lvbigpIDogbV9pc0NpcmNsZSgwKSwgbV9pc1Jl
Y3RhbmdsZSgwKSB7IH0KLQotICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IG1fbmV4dDsKLSAg
ICBTdHJpbmcgbV9sYWJlbDsKLSAgICBTdHJpbmcgbV9nZW9tZXRyeVR5cGU7Ci0gICAgYm9vbCBt
X2lzQ2lyY2xlIDogMTsKLSAgICBib29sIG1faXNSZWN0YW5nbGUgOiAxOwotfTsKLQotY2xhc3Mg
Q1NTSW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZSwgcHVibGljIENhY2hlZE9i
amVjdENsaWVudAotewotcHVibGljOgotICAgIENTU0ltYWdlVmFsdWUoKTsKLSAgICBDU1NJbWFn
ZVZhbHVlKGNvbnN0IFN0cmluZyYgdXJsLCBTdHlsZUJhc2UqKTsKLSAgICB2aXJ0dWFsIH5DU1NJ
bWFnZVZhbHVlKCk7Ci0KLSAgICBDYWNoZWRJbWFnZSogaW1hZ2UoRG9jTG9hZGVyKik7Ci0KLXBy
b3RlY3RlZDoKLSAgICBDYWNoZWRJbWFnZSogbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJ
bWFnZTsKLX07Ci0KLWNsYXNzIENTU0JvcmRlckltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUK
LXsKLXB1YmxpYzoKLSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTQm9yZGVySW1h
Z2VWYWx1ZShQYXNzUmVmUHRyPENTU0ltYWdlVmFsdWU+LAotICAgICAgICBQYXNzUmVmUHRyPFJl
Y3RJbXBsPiwgaW50IGhvcml6b250YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKTsKLQotICAgIHZp
cnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotcHVibGljOgotICAgIC8vIFRoZSBib3Jk
ZXIgaW1hZ2UuCi0gICAgUmVmUHRyPENTU0ltYWdlVmFsdWU+IG1faW1hZ2U7Ci0KLSAgICAvLyBU
aGVzZSBmb3VyIHZhbHVlcyBhcmUgdXNlZCB0byBtYWtlICJjdXRzIiBpbiB0aGUgaW1hZ2UuICBU
aGV5IGNhbiBiZSBudW1iZXJzCi0gICAgLy8gb3IgcGVyY2VudGFnZXMuCi0gICAgUmVmUHRyPFJl
Y3RJbXBsPiBtX2ltYWdlU2xpY2VSZWN0OwotICAgIAotICAgIC8vIFZhbHVlcyBmb3IgaG93IHRv
IGhhbmRsZSB0aGUgc2NhbGluZy9zdHJldGNoaW5nL3RpbGluZyBvZiB0aGUgaW1hZ2Ugc2xpY2Vz
LgotICAgIGludCBtX2hvcml6b250YWxTaXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVz
dCB0aGUgd2lkdGhzIG9mIHRoZSB0b3AvbWlkZGxlL2JvdHRvbQotICAgIGludCBtX3ZlcnRpY2Fs
U2l6ZVJ1bGU7IC8vIFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIGhlaWdodHMgb2YgdGhlIGxl
ZnQvbWlkZGxlL3JpZ2h0Ci19OwotCiBjbGFzcyBGb250RmFtaWx5VmFsdWUgOiBwdWJsaWMgQ1NT
UHJpbWl0aXZlVmFsdWUKIHsKIHB1YmxpYzoKICAgICBGb250RmFtaWx5VmFsdWUoIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcgJnN0cmluZyk7CiAgICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZm9u
dE5hbWUoKSBjb25zdCB7IHJldHVybiBwYXJzZWRGb250TmFtZTsgfQotICAgIGludCBnZW5lcmlj
RmFtaWx5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9nZW5lcmljRmFtaWx5VHlwZTsgfQorICAgIGlu
dCBnZW5lcmljRmFtaWx5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2VuZXJpY0ZhbWlseVR5cGU7
IH0KIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAogICAgIERlcHJlY2F0
ZWRTdHJpbmcgcGFyc2VkRm9udE5hbWU7CiBwcml2YXRlOgotICAgIGludCBfZ2VuZXJpY0ZhbWls
eVR5cGU7Ci19OwotCi1jbGFzcyBGb250VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhcmlh
bnQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB3ZWlnaHQ7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBzaXplOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlu
ZUhlaWdodDsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmYW1pbHk7Ci19OwotCi0vLyBVc2Vk
IGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotY2xhc3MgU2hhZG93VmFsdWUgOiBwdWJs
aWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBTaGFkb3dWYWx1ZShQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB4LAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5
LAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBibHVyLAotICAgICAgICBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcik7Ci0gICAgCi0gICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGJsdXI7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcjsKLX07
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBhbm90aGVyIGhlbHBlciBjbGFzcwot
Y2xhc3MgQ1NTUHJvcGVydHkKLXsKLXB1YmxpYzoKLSAgICBDU1NQcm9wZXJ0eShpbnQgcHJvcElE
LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgaW50
IHNob3J0aGFuZElEID0gMCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKQotICAgICAgICA6IG1faWQo
cHJvcElEKSwgbV9zaG9ydGhhbmRJRChzaG9ydGhhbmRJRCksIG1faW1wb3J0YW50KGltcG9ydGFu
dCksIG1faW1wbGljaXQoaW1wbGljaXQpLCBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgQ1NTUHJvcGVydHkgJm9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eSYgbykKLSAg
ICB7Ci0gICAgICAgIG1faWQgPSBvLm1faWQ7Ci0gICAgICAgIG1fc2hvcnRoYW5kSUQgPSBvLm1f
c2hvcnRoYW5kSUQ7Ci0gICAgICAgIG1faW1wb3J0YW50ID0gby5tX2ltcG9ydGFudDsKLSAgICAg
ICAgbV92YWx1ZSA9IG8ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAg
ICAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW50IHNob3J0aGFu
ZElEKCkgY29uc3QgeyByZXR1cm4gbV9zaG9ydGhhbmRJRDsgfQotICAgIAotICAgIGJvb2wgaXNJ
bXBvcnRhbnQoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFudDsgfQotICAgIGJvb2wgaXNJbXBs
aWNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbGljaXQ7IH0KLQotICAgIENTU1ZhbHVlKiB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLSAgICAKLSAgICBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwotCi0gICAgLy8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZml0cyBpbiA0
IGJ5dGVzLgotICAgIGludCBtX2lkOwotICAgIGludCBtX3Nob3J0aGFuZElEOyAgLy8gSWYgdGhp
cyBwcm9wZXJ0eSB3YXMgc2V0IGFzIHBhcnQgb2YgYSBzaG9ydGhhbmQsIGdpdmVzIHRoZSBzaG9y
dGhhbmQuCi0gICAgYm9vbCBtX2ltcG9ydGFudCA6IDE7Ci0gICAgYm9vbCBtX2ltcGxpY2l0IDog
MTsgLy8gV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHdhcyBzZXQgaW1wbGljaXRseSBhcyB0
aGUgcmVzdWx0IG9mIGEgc2hvcnRoYW5kLgotCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDU1NQcm9wZXJ0eSAmLCBjb25zdCBDU1NQcm9wZXJ0eSAmKTsKLQotICAgIFJlZlB0cjxD
U1NWYWx1ZT4gbV92YWx1ZTsKLX07Ci0KLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
IDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24KLXsKLXB1YmxpYzoKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1
bGUqIHBhcmVudFJ1bGUpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUq
IHBhcmVudFJ1bGUsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+ICYpOwot
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0
IENTU1Byb3BlcnR5ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotCi0gICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24gJm9wZXJhdG9yPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiAmKTsKLQotICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKSB7IG1fbm9kZSA9IG5v
ZGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0o
dW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1
YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNv
cHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IG1ha2VNdXRhYmxlKCk7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gdmFsdWVzSXRlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5iZWdpbigpOyB9Ci0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQg
dmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUp
OwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQotICAg
ICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2
YWx1ZSwgaW1wb3J0YW50LCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0KLQotICAgIFN0cmluZyByZW1v
dmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5v
dGlmeUNoYW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiBy
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0KLQotICAgIHZv
aWQgY2xlYXIoKTsKLQotICAgIHZvaWQgc2V0Q2hhbmdlZCgpOwotIAotICAgIC8vIHNldExlbmd0
aFByb3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChOZWVkZWQgZm9yIGNvbnZlcnNp
b24gb2YgSFRNTCBhdHRyaWJ1dGVzLikKLSAgICB2b2lkIHNldExlbmd0aFByb3BlcnR5KGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBtdWx0
aUxlbmd0aCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldFN0cmluZ1Byb3BlcnR5KGludCBwcm9wZXJ0
eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzLCBi
b29sIGltcG9ydGFudCA9IGZhbHNlKTsgLy8gcGFyc2VkIHN0cmluZyB2YWx1ZQotICAgIHZvaWQg
c2V0SW1hZ2VQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBVUkwsIGJvb2wg
aW1wb3J0YW50ID0gZmFsc2UpOwotIAotICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFyc2VzIGFuIGVu
dGlyZSBuZXcgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNv
bnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbik7Ci0KLSAgICAvLyBCZXNpZGVzIGFkZGluZyB0
aGUgcHJvcGVydGllcywgdGhpcyBhbHNvIHJlbW92ZXMgYW55IGV4aXN0aW5nIHByb3BlcnRpZXMg
d2l0aCB0aGVzZSBJRHMuCi0gICAgLy8gSXQgZG9lcyBubyBub3RpZmljYXRpb24gc2luY2UgaXQn
cyBjYWxsZWQgYnkgdGhlIHBhcnNlci4KLSAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29u
c3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJvcGVydGllcyk7Ci0gCi0gICAgUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUJsb2NrUHJvcGVydGllcygp
IGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1v
dmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJlbW92ZVByb3BlcnRpZXNJblNl
dChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHZvaWQgbWVyZ2UoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QgPSB0
cnVlKTsKLSAKLXByaXZhdGU6Ci0gICAgU3RyaW5nIGdldFNob3J0SGFuZFZhbHVlKGNvbnN0IGlu
dCogcHJvcGVydGllcywgaW50IG51bWJlcikgY29uc3Q7Ci0gICAgU3RyaW5nIGdldDRWYWx1ZXMo
Y29uc3QgaW50KiBwcm9wZXJ0aWVzKSBjb25zdDsKLSAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0
PENTU1Byb3BlcnR5PiBtX3ZhbHVlczsKLSAgICBOb2RlKiBtX25vZGU7CisgICAgaW50IG1fZ2Vu
ZXJpY0ZhbWlseVR5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogY3NzL0NTU1J1bGVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTUnVsZUxpc3QuY3BwCShyZXZpc2lvbiAxNDQw
MCkKKysrIGNzcy9DU1NSdWxlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDIyNCArMjAs
MTggQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0K
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJjc3NfcnVsZWltcGwuaCIKKyNpbmNsdWRl
ICJDU1NSdWxlTGlzdC5oIgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRD
U1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1ZGUgIkRv
Y0xvYWRlci5oIgotI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgotI2luY2x1ZGUgImNzc3BhcnNlci5o
IgotI2luY2x1ZGUgPEtVUkwuaD4KKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiY3Nz
X2Jhc2UuaCIgLy8gZm9yIFN0eWxlTGlzdAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1N0
eWxlU2hlZXQqIENTU1J1bGU6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAotewotICAgIHJldHVy
biAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzQ1NTU3R5bGVTaGVldCgpKSA/IHN0YXRpY19jYXN0
PENTU1N0eWxlU2hlZXQqPihwYXJlbnQoKSkgOiAwOwotfQotCi1DU1NSdWxlKiBDU1NSdWxlOjpw
YXJlbnRSdWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5p
c1J1bGUoKSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlKj4ocGFyZW50KCkpIDogMDsKLX0KLQotU3Ry
aW5nIENTU1J1bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vICMjIwotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotdm9pZCBDU1NSdWxlOjpzZXRDc3NUZXh0KFN0cmluZyAvKnN0ciovKQot
ewotICAgIC8vICMjIwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTRm9udEZhY2VS
dWxlOjpDU1NGb250RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBh
cmVudCkKLXsKLSAgICBtX3R5cGUgPSBGT05UX0ZBQ0VfUlVMRTsKLX0KLQotQ1NTRm9udEZhY2VS
dWxlOjp+Q1NTRm9udEZhY2VSdWxlKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
Q1NTSW1wb3J0UnVsZTo6Q1NTSW1wb3J0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3Ry
aW5nJiBocmVmLCBNZWRpYUxpc3QqIG1lZGlhKQotICAgIDogQ1NTUnVsZShwYXJlbnQpCi0gICAg
LCBtX3N0ckhyZWYoaHJlZikKLSAgICAsIG1fbHN0TWVkaWEobWVkaWEpCi0gICAgLCBtX2NhY2hl
ZFNoZWV0KDApCi0gICAgLCBtX2xvYWRpbmcoZmFsc2UpCi17Ci0gICAgbV90eXBlID0gSU1QT1JU
X1JVTEU7Ci0KLSAgICBpZiAobV9sc3RNZWRpYSkKLSAgICAgICAgbV9sc3RNZWRpYS0+c2V0UGFy
ZW50KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9sc3RNZWRpYSA9IG5ldyBNZWRpYUxpc3Qo
dGhpcywgU3RyaW5nKCkpOwotfQotCi1DU1NJbXBvcnRSdWxlOjp+Q1NTSW1wb3J0UnVsZSgpCi17
Ci0gICAgaWYgKG1fbHN0TWVkaWEpCi0gICAgICAgIG1fbHN0TWVkaWEtPnNldFBhcmVudCgwKTsK
LSAgICBpZiAobV9zdHlsZVNoZWV0KQotICAgICAgICBtX3N0eWxlU2hlZXQtPnNldFBhcmVudCgw
KTsKLSAgICBpZiAobV9jYWNoZWRTaGVldCkKLSAgICAgICAgbV9jYWNoZWRTaGVldC0+ZGVyZWYo
dGhpcyk7Ci19Ci0KLXZvaWQgQ1NTSW1wb3J0UnVsZTo6c2V0U3R5bGVTaGVldChjb25zdCBTdHJp
bmcgJnVybCwgY29uc3QgU3RyaW5nICZzaGVldCkKLXsKLSAgICBpZiAobV9zdHlsZVNoZWV0KQot
ICAgICAgICBtX3N0eWxlU2hlZXQtPnNldFBhcmVudCgwKTsKLSAgICBtX3N0eWxlU2hlZXQgPSBu
ZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCB1cmwpOwotCi0gICAgQ1NTU3R5bGVTaGVldCAqcGFyZW50
ID0gcGFyZW50U3R5bGVTaGVldCgpOwotICAgIG1fc3R5bGVTaGVldC0+cGFyc2VTdHJpbmcoc2hl
ZXQsICFwYXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIG1fbG9hZGlu
ZyA9IGZhbHNlOwotCi0gICAgY2hlY2tMb2FkZWQoKTsKLX0KLQotYm9vbCBDU1NJbXBvcnRSdWxl
Ojppc0xvYWRpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2xvYWRpbmcgfHwgKG1fc3R5bGVT
aGVldCAmJiBtX3N0eWxlU2hlZXQtPmlzTG9hZGluZygpKTsKLX0KLQotdm9pZCBDU1NJbXBvcnRS
dWxlOjppbnNlcnRlZEludG9QYXJlbnQoKQotewotICAgIFN0eWxlQmFzZSogcm9vdCA9IHRoaXM7
Ci0gICAgU3R5bGVCYXNlKiBwYXJlbnQ7Ci0gICAgd2hpbGUgKChwYXJlbnQgPSByb290LT5wYXJl
bnQoKSkpCi0gICAgICAgIHJvb3QgPSBwYXJlbnQ7Ci0gICAgaWYgKCFyb290LT5pc0NTU1N0eWxl
U2hlZXQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2NMb2FkZXIoKTsKLSAgICBpZiAoIWRv
Y0xvYWRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGFic0hyZWYgPSBtX3N0ckhy
ZWY7Ci0gICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7
Ci0gICAgaWYgKCFwYXJlbnRTaGVldC0+aHJlZigpLmlzTnVsbCgpKQotICAgICAgICAvLyB1c2Ug
cGFyZW50IHN0eWxlaGVldCdzIFVSTCBhcyB0aGUgYmFzZSBVUkwKLSAgICAgICAgYWJzSHJlZiA9
IEtVUkwocGFyZW50U2hlZXQtPmhyZWYoKS5kZXByZWNhdGVkU3RyaW5nKCksIG1fc3RySHJlZi5k
ZXByZWNhdGVkU3RyaW5nKCkpLnVybCgpOwotCi0gICAgLy8gQ2hlY2sgZm9yIGEgY3ljbGUgaW4g
b3VyIGltcG9ydCBjaGFpbi4gIElmIHdlIGVuY291bnRlciBhIHN0eWxlc2hlZXQKLSAgICAvLyBp
biBvdXIgcGFyZW50IGNoYWluIHdpdGggdGhlIHNhbWUgVVJMLCB0aGVuIGp1c3QgYmFpbC4KLSAg
ICBmb3IgKHBhcmVudCA9IHN0YXRpY19jYXN0PFN0eWxlQmFzZSo+KHRoaXMpLT5wYXJlbnQoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKQotICAgICAgICBpZiAoYWJzSHJlZiA9
PSBwYXJlbnQtPmJhc2VVUkwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyAj
IyMgcGFzcyBjb3JyZWN0IGNoYXJzZXQgaGVyZSEhCi0gICAgbV9jYWNoZWRTaGVldCA9IGRvY0xv
YWRlci0+cmVxdWVzdFN0eWxlU2hlZXQoYWJzSHJlZiwgRGVwcmVjYXRlZFN0cmluZzo6bnVsbCk7
Ci0gICAgaWYgKG1fY2FjaGVkU2hlZXQpIHsKLSAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAg
ICAgICAgbV9jYWNoZWRTaGVldC0+cmVmKHRoaXMpOwotICAgIH0KLX0KLQotU3RyaW5nIENTU0lt
cG9ydFJ1bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAiQGltcG9y
dCB1cmwoXCIiOwotICAgIHJlc3VsdCArPSBtX3N0ckhyZWY7Ci0gICAgcmVzdWx0ICs9ICJcIiki
OwotCi0gICAgaWYgKG1fbHN0TWVkaWEpIHsKLSAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAg
ICAgcmVzdWx0ICs9IG1fbHN0TWVkaWEtPm1lZGlhVGV4dCgpOwotICAgIH0KLSAgICByZXN1bHQg
Kz0gIjsiOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LUNTU01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgTWVkaWFMaXN0
ICptZWRpYUxpc3QsIENTU1J1bGVMaXN0ICpydWxlTGlzdCApCi0gICAgOiAgIENTU1J1bGUoIHBh
cmVudCApCi17Ci0gICAgbV90eXBlID0gTUVESUFfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gbWVk
aWFMaXN0OwotICAgIG1fbHN0Q1NTUnVsZXMgPSBydWxlTGlzdDsKLX0KLQotQ1NTTWVkaWFSdWxl
OjpDU1NNZWRpYVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpCi0gICAgOiAgIENTU1J1bGUoIHBhcmVu
dCApCitDU1NSdWxlTGlzdDo6Q1NTUnVsZUxpc3QoKQogewotICAgIG1fdHlwZSA9IE1FRElBX1JV
TEU7Ci0gICAgbV9sc3RNZWRpYSA9IDA7Ci0gICAgbV9sc3RDU1NSdWxlcyA9IG5ldyBDU1NSdWxl
TGlzdCgpOwotfQotCi1DU1NNZWRpYVJ1bGU6OkNTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJl
bnQsIGNvbnN0IFN0cmluZyAmbWVkaWEgKQotOiAgIENTU1J1bGUoIHBhcmVudCApCi17Ci0gICAg
bV90eXBlID0gTUVESUFfUlVMRTsKLSAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlzdCggdGhp
cywgbWVkaWEgKTsKLSAgICBtX2xzdENTU1J1bGVzID0gbmV3IENTU1J1bGVMaXN0KCk7Ci19Ci0K
LUNTU01lZGlhUnVsZTo6fkNTU01lZGlhUnVsZSgpCi17Ci0gICAgaWYobV9sc3RNZWRpYSkKLSAg
ICAgICAgbV9sc3RNZWRpYS0+c2V0UGFyZW50KDApOwotCi0gICAgaW50IGxlbmd0aCA9IG1fbHN0
Q1NTUnVsZXMtPmxlbmd0aCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
Ci0gICAgICAgIG1fbHN0Q1NTUnVsZXMtPml0ZW0oaSktPnNldFBhcmVudCgwKTsKIH0KIAotdW5z
aWduZWQgQ1NTTWVkaWFSdWxlOjphcHBlbmQoIENTU1J1bGUgKnJ1bGUgKQotewotICAgIGlmICgh
cnVsZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBydWxlLT5zZXRQYXJlbnQo
dGhpcyk7Ci0gICAgcmV0dXJuIG1fbHN0Q1NTUnVsZXMtPmluc2VydFJ1bGUoIHJ1bGUsIG1fbHN0
Q1NTUnVsZXMtPmxlbmd0aCgpICk7Ci19Ci0KLXVuc2lnbmVkIENTU01lZGlhUnVsZTo6aW5zZXJ0
UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUsIHVuc2lnbmVkIGluZGV4KQotewotICAgIENTU1BhcnNl
ciBwKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgUmVmUHRyPENTU1J1bGU+IG5ld1J1bGUgPSBw
LnBhcnNlUnVsZShwYXJlbnRTdHlsZVNoZWV0KCksIHJ1bGUpOwotICAgIGlmICghbmV3UnVsZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgbmV3UnVsZS0+c2V0UGFyZW50KHRoaXMpOwotICAgIHJl
dHVybiBtX2xzdENTU1J1bGVzLT5pbnNlcnRSdWxlKG5ld1J1bGUuZ2V0KCksIGluZGV4KTsKLX0K
LQotU3RyaW5nIENTU01lZGlhUnVsZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJl
c3VsdCA9ICJAbWVkaWEgIjsKLSAgICBpZiAobV9sc3RNZWRpYSkgewotICAgICAgICByZXN1bHQg
Kz0gbV9sc3RNZWRpYS0+bWVkaWFUZXh0KCk7Ci0gICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAg
fQotICAgIHJlc3VsdCArPSAieyBcbiI7Ci0gICAgCi0gICAgaWYgKG1fbHN0Q1NTUnVsZXMpIHsK
LSAgICAgICAgdW5zaWduZWQgbGVuID0gbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgcmVzdWx0
ICs9ICIgICI7Ci0gICAgICAgICAgICByZXN1bHQgKz0gbV9sc3RDU1NSdWxlcy0+aXRlbShpKS0+
Y3NzVGV4dCgpOwotICAgICAgICAgICAgcmVzdWx0ICs9ICJcbiI7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgcmVzdWx0ICs9ICJ9IjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQogQ1NTUnVsZUxpc3Q6OkNTU1J1bGVMaXN0KFN0eWxlTGlzdCAq
bHN0KQogewogICAgIGlmIChsc3QpIHsKQEAgLTI1Nyw4NiArNTEsNiBAQAogICAgICAgICBydWxl
LT5kZXJlZigpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTUGFnZVJ1bGU6OkNT
U1BhZ2VSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQpCi17Ci0g
ICAgbV90eXBlID0gUEFHRV9SVUxFOwotfQotCi1DU1NQYWdlUnVsZTo6fkNTU1BhZ2VSdWxlKCkK
LXsKLX0KLQotU3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRleHQoKSBjb25zdAotewotICAg
IC8vICMjIwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBDU1NQYWdlUnVsZTo6c2V0
U2VsZWN0b3JUZXh0KFN0cmluZyAvKnN0ciovKQotewotICAgIC8vICMjIwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1DU1NTdHlsZVJ1bGU6OkNTU1N0eWxlUnVsZShTdHlsZUJhc2UgKnBh
cmVudCkKLSAgICA6IENTU1J1bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9IFNUWUxFX1JVTEU7
Ci0gICAgbV9zZWxlY3RvciA9IDA7Ci19Ci0KLUNTU1N0eWxlUnVsZTo6fkNTU1N0eWxlUnVsZSgp
Ci17Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPnNldFBhcmVudCgwKTsKLSAg
ICBkZWxldGUgbV9zZWxlY3RvcjsKLX0KLQotU3RyaW5nIENTU1N0eWxlUnVsZTo6c2VsZWN0b3JU
ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9zZWxlY3RvcikgewotICAgICAgICBTdHJpbmcgc3Ry
OwotICAgICAgICBmb3IgKENTU1NlbGVjdG9yICpzID0gbV9zZWxlY3RvcjsgczsgcyA9IHMtPm5l
eHQoKSkgewotICAgICAgICAgICAgaWYgKHMgIT0gbV9zZWxlY3RvcikKLSAgICAgICAgICAgICAg
ICBzdHIgKz0gIiwgIjsKLSAgICAgICAgICAgIHN0ciArPSBzLT5zZWxlY3RvclRleHQoKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gc3RyOwotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKCk7
Ci19Ci0KLXZvaWQgQ1NTU3R5bGVSdWxlOjpzZXRTZWxlY3RvclRleHQoU3RyaW5nIC8qc3RyKi8p
Ci17Ci0gICAgLy8gIyMjCi19Ci0KLVN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25z
dAotewotICAgIFN0cmluZyByZXN1bHQgPSBzZWxlY3RvclRleHQoKTsKLSAgICAKLSAgICByZXN1
bHQgKz0gIiB7ICI7Ci0gICAgcmVzdWx0ICs9IG1fc3R5bGUtPmNzc1RleHQoKTsKLSAgICByZXN1
bHQgKz0gIn0iOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVS
dWxlOjpwYXJzZVN0cmluZyggY29uc3QgU3RyaW5nICYvKnN0cmluZyovLCBib29sICkKLXsKLSAg
ICAvLyAjIyMKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVSdWxlOjpzZXRE
ZWNsYXJhdGlvbihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSkK
LXsKLSAgICBtX3N0eWxlID0gc3R5bGU7Ci19Ci0KIHZvaWQgQ1NTUnVsZUxpc3Q6OmRlbGV0ZVJ1
bGUgKCB1bnNpZ25lZCBpbmRleCApCiB7CiAgICAgQ1NTUnVsZSAqcnVsZSA9IG1fbHN0Q1NTUnVs
ZXMudGFrZSggaW5kZXggKTsKQEAgLTM1Myw4ICs2Nyw3IEBACiAKIHVuc2lnbmVkIENTU1J1bGVM
aXN0OjppbnNlcnRSdWxlKCBDU1NSdWxlICpydWxlLCB1bnNpZ25lZCBpbmRleCApCiB7Ci0gICAg
aWYoIHJ1bGUgJiYgbV9sc3RDU1NSdWxlcy5pbnNlcnQoIGluZGV4LCBydWxlICkgKQotICAgIHsK
KyAgICBpZiAocnVsZSAmJiBtX2xzdENTU1J1bGVzLmluc2VydChpbmRleCwgcnVsZSkpIHsKICAg
ICAgICAgcnVsZS0+cmVmKCk7CiAgICAgICAgIHJldHVybiBpbmRleDsKICAgICB9CkluZGV4OiBj
c3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NzdHlsZXNlbGVjdG9y
LmgJKHJldmlzaW9uIDE0NDA2KQorKysgY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBDU1NfY3Nzc3R5bGVzZWxlY3Rvcl9oXwog
I2RlZmluZSBDU1NfY3Nzc3R5bGVzZWxlY3Rvcl9oXwogCi0jaW5jbHVkZSAiY3NzX3J1bGVpbXBs
LmgiCiAjaW5jbHVkZSAicmVuZGVyX3N0eWxlLmgiCiAKIGNsYXNzIEtIVE1MU2V0dGluZ3M7CkBA
IC0zMiw5ICszMSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NSdWxlRGF0
YTsKIGNsYXNzIENTU1J1bGVEYXRhTGlzdDsKK2NsYXNzIENTU1J1bGVMaXN0OwogY2xhc3MgQ1NT
UnVsZVNldDsKIGNsYXNzIENTU1NlbGVjdG9yOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKSW5kZXg6
IGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwyNiArMTksMTUgQEAKICAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2lu
Y2x1ZGUgIkRvY0xvYWRlci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiY3NzcGFy
c2VyLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJDU1NQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRl
ICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgotI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgot
Ci0jaWYgU1ZHX1NVUFBPUlQKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiRGVwcmVj
YXRlZFZhbHVlTGlzdC5oIgogI2luY2x1ZGUgImtzdmdjc3Nwcm9wZXJ0aWVzLmgiCi0jZW5kaWYK
IAogLy8gTm90IGluIGFueSBoZWFkZXIsIHNvIGp1c3QgZGVjbGFyZSBpdCBoZXJlIGZvciBub3cu
CiBXZWJDb3JlOjpTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKHVuc2lnbmVkIHNob3J0IGlkKTsKQEAg
LTcxLDIzICs2MCw2IEBACiAgICAgcmV0dXJuIGlkOwogfQogCi0KLS8vIFF1b3RlcyB0aGUgc3Ry
aW5nIGlmIGl0IG5lZWRzIHF1b3RpbmcuCi0vLyBXZSB1c2Ugc2luZ2xlIHF1b3RlcyBmb3Igbm93
IGJlYXVzZSBtYXJrdXAuY3BwIHVzZXMgZG91YmxlIHF1b3Rlcy4KLXN0YXRpYyBTdHJpbmcgcXVv
dGVTdHJpbmdJZk5lZWRlZChjb25zdCBTdHJpbmcgJnN0cmluZykKLXsKLSAgICAvLyBGb3Igbm93
LCBqdXN0IGRvIHRoaXMgZm9yIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoICIjIiB0byBmaXggS29y
ZWFuIGZvbnQgbmFtZXMgdGhhdCBzdGFydCB3aXRoICIjIi4KLSAgICAvLyBQb3N0LVRpZ2VyLCB3
ZSBzaG91bGQgaXNMZWdhbElkZW50aWZpZXIgaW5zdGVhZCBhZnRlciB3b3JraW5nIG91dCBhbGwg
dGhlIGFuY2lsbGFyeSBpc3N1ZXMuCi0gICAgaWYgKHN0cmluZ1swXSAhPSAnIycpCi0gICAgICAg
IHJldHVybiBzdHJpbmc7Ci0KLSAgICAvLyBGSVhNRTogQWxzbyBuZWVkIHRvIHRyYW5zZm9ybSBj
b250cm9sIGNoYXJhY3RlcnMgaW50byBcIHNlcXVlbmNlcy4KLSAgICBTdHJpbmcgcyA9IHN0cmlu
ZzsKLSAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKLSAgICBzLnJlcGxhY2UoJ1wnJywgIlxc
JyIpOwotICAgIHJldHVybiAiJyIgKyBzICsgIiciOwotfQotCiBDU1NTdHlsZURlY2xhcmF0aW9u
OjpDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKICAgICA6IFN0eWxlQmFzZShw
YXJlbnQpCiB7CkBAIC0xNjMsMzc5ICsxMzUsMTEgQEAKICAgICByZXR1cm4gcHJvcGVydHlJRChw
cm9wZXJ0eU5hbWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKQot
ICAgIDogbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQpCi0gICAgOiBDU1NTdHlsZURl
Y2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQotewotfQotCi1DU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSAqcGFyZW50LCBjb25z
dCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiAmdmFsdWVzKQotICAgIDogQ1NTU3R5
bGVEZWNsYXJhdGlvbihwYXJlbnQpLCBtX3ZhbHVlcyh2YWx1ZXMpLCBtX25vZGUoMCkKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRlIHByb3BlcnRpZXMuCi19Ci0KLUNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxl
ICpwYXJlbnQsIGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKnByb3BlcnRpZXMsIGludCBudW1Q
cm9wZXJ0aWVzKQotICAgIDogQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXJlbnQpLCBtX25vZGUoMCkK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkKLSAgICAgICAg
bV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsKLSAgICAvLyBGSVhNRTogVGhpcyBhbGxv
d3MgZHVwbGljYXRlIHByb3BlcnRpZXMuCi19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
JiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6b3BlcmF0b3I9KGNvbnN0IENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uJiBvKQotewotICAgIC8vIGRvbid0IGF0dGFjaCBpdCB0byB0aGUgc2Ft
ZSBub2RlLCBqdXN0IGxlYXZlIHRoZSBjdXJyZW50IG1fbm9kZSB2YWx1ZQotICAgIG1fdmFsdWVz
ID0gby5tX3ZhbHVlczsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QK
LXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9w
ZXJ0eUlEKTsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgp
OwotCi0gICAgLy8gU2hvcnRoYW5kIGFuZCA0LXZhbHVlcyBwcm9wZXJ0aWVzCi0gICAgc3dpdGNo
ICggcHJvcGVydHlJRCApIHsKLSAgICBjYXNlIENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT046
Ci0gICAgewotICAgICAgICAvLyAjIyBJcyB0aGlzIGNvcnJlY3Q/IFRoZSBjb2RlIGluIGNzc3Bh
cnNlci5jcHAgaXMgY29uZnVzaW5nCi0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0g
eyBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OX1gsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OX1kgfTsKLSAgICAgICAg
cmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAyICk7Ci0gICAgfQotICAgIGNh
c2UgQ1NTX1BST1BfQkFDS0dST1VORDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0
aWVzWzVdID0geyBDU1NfUFJPUF9CQUNLR1JPVU5EX0lNQUdFLCBDU1NfUFJPUF9CQUNLR1JPVU5E
X1JFUEVBVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JB
Q0tHUk9VTkRfQVRUQUNITUVOVCwgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1Ig
fTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCA1ICk7Ci0g
ICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50
IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRFUl9XSURUSCwgQ1NTX1BST1BfQk9SREVS
X1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9S
REVSX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGll
cywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9UT1A6Ci0gICAgewotICAg
ICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX1RPUF9XSURU
SCwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9UT1BfQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0
U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJP
UF9CT1JERVJfUklHSFQ6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9
IHsgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZ
TEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJf
UklHSFRfQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRp
ZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfQk9UVE9NOgotICAgIHsK
LSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRFUl9CT1RU
T01fV0lEVEgsIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX0NPTE9SfTsKLSAgICAg
ICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAg
IGNhc2UgQ1NTX1BST1BfQk9SREVSX0xFRlQ6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0xFRlRfV0lEVEgsIENTU19QUk9QX0JPUkRF
Ul9MRUZUX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BS
T1BfQk9SREVSX0xFRlRfQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUo
IHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9PVVRMSU5FOgotICAg
IHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX09VVExJTkVf
V0lEVEgsIENTU19QUk9QX09VVExJTkVfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NfUFJPUF9PVVRMSU5FX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXRT
aG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9Q
X0JPUkRFUl9DT0xPUjoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0g
eyBDU1NfUFJPUF9CT1JERVJfVE9QX0NPTE9SLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfQ09MT1Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfQk9U
VE9NX0NPTE9SLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9DT0xPUiB9OwotICAgICAgICByZXR1cm4g
Z2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRF
Ul9XSURUSDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1Nf
UFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfUklHSFRfV0lEVEgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJ
RFRILCBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCB9OwotICAgICAgICByZXR1cm4gZ2V0NFZh
bHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9TVFlM
RToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9C
T1JERVJfVE9QX1NUWUxFLCBDU1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NUWUxFLCBD
U1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcygg
cHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX01BUkdJTjoKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9NQVJHSU5fVE9QLCBD
U1NfUFJPUF9NQVJHSU5fUklHSFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCB9OwotICAgICAg
ICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENTU19Q
Uk9QX1BBRERJTkc6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsg
Q1NTX1BST1BfUEFERElOR19UT1AsIENTU19QUk9QX1BBRERJTkdfUklHSFQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9QQURESU5HX0JPVFRPTSwgQ1NTX1BS
T1BfUEFERElOR19MRUZUIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVz
ICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTElTVF9TVFlMRToKLSAgICB7Ci0gICAgICAg
IGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9MSVNUX1NUWUxFX1RZUEUsIENT
U19QUk9QX0xJU1RfU1RZTEVfUE9TSVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NfUFJPUF9MSVNUX1NUWUxFX0lNQUdFIH07Ci0gICAgICAgIHJldHVybiBnZXRT
aG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IFN0cmluZygpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldDRW
YWx1ZXMoIGNvbnN0IGludCogcHJvcGVydGllcyApIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlczsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgewotICAgICAgICBpZiAoIWlzUHJvcGVy
dHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7Ci0gICAgICAgICAg
ICBpZiAoIXZhbHVlKSAvLyBhcHBhcmVudGx5IGFsbCA0IHByb3BlcnRpZXMgbXVzdCBiZSBzcGVj
aWZpZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICAgICAgaWYg
KCFyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAgICAgICAg
IHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0U2hvcnRIYW5k
VmFsdWUoIGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bWJlciApIGNvbnN0Ci17Ci0gICAg
U3RyaW5nIHJlczsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlcjsgKytpKSB7Ci0gICAg
ICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbaV0pKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVz
W2ldKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgeyAvLyBUT0RPIHByb3ZpZGUgZGVmYXVsdCB2
YWx1ZSBpZiAhdmFsdWUKLSAgICAgICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAgICAgICAgICAgICByZXMgKz0gdmFsdWUt
PmNzc1RleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVzOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBEZXBy
ZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAo
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1
ZXMuZnJvbUxhc3QoKTsgaXQgIT0gZW5kOyAtLWl0KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9
PSAoKml0KS5tX2lkKQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLnZhbHVlKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgZWMgPSAwOwotCi0gICAgU3RyaW5nIHZhbHVlOwotCi0gICAgRGVwcmVjYXRl
ZFZhbHVlTGlzdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVk
VmFsdWVMaXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuZnJvbUxhc3QoKTsg
aXQgIT0gZW5kOyAtLWl0KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5tX2lkKSB7
Ci0gICAgICAgICAgICB2YWx1ZSA9ICgqaXQpLnZhbHVlKCktPmNzc1RleHQoKTsKLSAgICAgICAg
ICAgIG1fdmFsdWVzLnJlbW92ZShpdCk7Ci0gICAgICAgICAgICBpZiAobm90aWZ5Q2hhbmdlZCkK
LSAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjbGVhcigpCi17Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBzZXRDaGFuZ2Vk
KCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldENoYW5nZWQoKQot
ewotICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgbV9ub2RlLT5zZXRDaGFuZ2VkKCk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB0aGlzIHNob3VsZCBiZSBmYWN0b3JlZCBiZXR0ZXIgYW5k
IHRoZXJlCi0gICAgICAgIC8vIHNob3VsZCBiZSBhIHN1YmNsYXNzIG9mIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uIGp1c3QKLSAgICAgICAgLy8gZm9yIGlubGluZSBzdHlsZSBkZWNsYXJhdGlv
bnMgdGhhdCBoYW5kbGVzIHRoaXMKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNTdHlsZWRFbGVtZW50
KCkgJiYgdGhpcyA9PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50ICo+KG1fbm9kZSktPmlubGlu
ZVN0eWxlRGVjbCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCAqPiht
X25vZGUpLT5pbnZhbGlkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vICMjIyBxdWljayZkaXJ0eSBoYWNrIGZvciBLREUgMy4wLi4uIG1ha2UgdGhp
cyBNVUNIIGJldHRlciEgKERpcmspCi0gICAgU3R5bGVCYXNlICpyb290ID0gdGhpczsKLSAgICB3
aGlsZSAoU3R5bGVCYXNlICpwYXJlbnQgPSByb290LT5wYXJlbnQoKSkKLSAgICAgICAgcm9vdCA9
IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9jKCktPnVwZGF0ZVN0eWxlU2VsZWN0b3Io
KTsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlv
cml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5pZCgpKQotICAgICAg
ICAgICAgcmV0dXJuICgqaXQpLmlzSW1wb3J0YW50KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1pbnQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5U2hvcnRoYW5kKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJ
dGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gKCppdCkuc2hvcnRoYW5kSUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVy
dHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5pZCgpKQotICAgICAgICAgICAgcmV0dXJuICgq
aXQpLmlzSW1wbGljaXQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0
UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1ZSwgZWMpOwotfQotCi1T
dHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCwgdHJ1ZSwgZWMpOwotfQotCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwgYm9v
bCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotCi0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7Ci0KLSAgICBDU1NQ
YXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFy
c2VyLnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAg
aWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICB9IGVsc2UgaWYg
KG5vdGlmeUNoYW5nZWQpCi0gICAgICAgIHNldENoYW5nZWQoKTsKLSAgICByZXR1cm4gc3VjY2Vz
czsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdl
ZCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICBtX3ZhbHVlcy5hcHBl
bmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSwg
aW1wb3J0YW50KSk7Ci0gICAgaWYgKG5vdGlmeUNoYW5nZWQpCi0gICAgICAgIHNldENoYW5nZWQo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6c2V0U3RyaW5nUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyAmdmFsdWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSwgYm9vbCBpbXBvcnRhbnQpCi17Ci0g
ICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0gICAgbV92YWx1ZXMuYXBwZW5kKENTU1By
b3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgdHlwZSksIGlt
cG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0SW1hZ2VQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5n
ICZVUkwsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SWQp
OwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wZXJ0eUlkLCBuZXcgQ1NTSW1h
Z2VWYWx1ZShVUkwsIHRoaXMpLCBpbXBvcnRhbnQpKTsKLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnBhcnNlRGVjbGFyYXRpb24oY29uc3Qg
U3RyaW5nICZzdHlsZURlY2xhcmF0aW9uKQotewotICAgIG1fdmFsdWVzLmNsZWFyKCk7Ci0gICAg
Q1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIHBhcnNlci5wYXJzZURl
Y2xhcmF0aW9uKHRoaXMsIHN0eWxlRGVjbGFyYXRpb24pOwotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6YWRkUGFyc2VkUHJvcGVydGllcyhj
b25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICpwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewotICAgICAg
ICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLT5pZCgpLCBmYWxzZSk7Ci0gICAgICAgIG1f
dmFsdWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBUaGlz
IHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBzZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5n
IGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2Vk
IGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBm
dW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6c2V0TGVuZ3RoUHJvcGVydHkoaW50IGlkLCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29s
IGltcG9ydGFudCwgYm9vbCAvKiBtdWx0aUxlbmd0aCovKQotewotICAgIGJvb2wgcGFyc2VNb2Rl
ID0gdXNlU3RyaWN0UGFyc2luZygpOwotICAgIHNldFN0cmljdFBhcnNpbmcoZmFsc2UpOwotICAg
IHNldFByb3BlcnR5KGlkLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICBzZXRTdHJpY3RQYXJzaW5n
KHBhcnNlTW9kZSk7Ci19Ci0KLXVuc2lnbmVkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjps
ZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZhbHVlcy5jb3VudCgpOwotfQotCi1TdHJp
bmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKLXsK
LSAgICBpZiAoaSA+PSBtX3ZhbHVlcy5jb3VudCgpKQotICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKG1fdmFsdWVzW2ldLmlkKCkpOwotfQotCiBDU1NS
dWxlICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRSdWxlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUoKSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxl
ICo+KHBhcmVudCgpKSA6IDA7CiB9CiAKLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlc3VsdCA9ICIiOwotICAgIAotICAg
IERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAg
Zm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBt
X3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdCArPSAoKml0
KS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIG1fdmFsdWVzLmNsZWFyKCk7Ci0gICAgQ1NT
UGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIHBhcnNlci5wYXJzZURlY2xh
cmF0aW9uKHRoaXMsIHRleHQpOwotICAgIC8vIEZJWE1FOiBEZXRlY3Qgc3ludGF4IGVycm9ycyBh
bmQgc2V0IGVjLgotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6bWVyZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKm90aGVyLCBib29s
IGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG90aGVyLT52YWx1ZXNJdGVyYXRvcigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkgJnByb3BlcnR5ID0g
Kml0OwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1
ZShwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAo
IWFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgfQotICAgICAg
ICBtX3ZhbHVlcy5hcHBlbmQocHJvcGVydHkpOwotICAgIH0KLSAgICAvLyBGSVhNRTogVGhpcyBw
cm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0Q2hhbmdlZCgpIGlmIHNvbWV0aGluZyBj
aGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAotICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBh
cmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVu
Y3Rpb25zIGluIHRoaXMgY2xhc3MuCi19Ci0KIHZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlm
ZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKCFz
dHlsZSkKQEAgLTU1NCw2MyArMTU4LDYgQEAKICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KCppdCk7CiB9CiAKLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRv
IGNvcHkgaW4gdGhlIGNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0
IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpc3Qgb2YgaW5oZXJpdGVkIENTUyBwcm9wZXJ0
aWVzIGFuZCB0aGUKLS8vIHByb3BlcnRpZXMgZm9yIHdoaWNoIHdlIGhhdmUgYSBjb21wdXRlZCBp
bXBsZW1lbnRhdGlvbiBpbiB0aGlzIGZpbGUuCi1jb25zdCBpbnQgaW5oZXJpdGFibGVQcm9wZXJ0
aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfQk9SREVSX0NPTExBUFNFLAotICAgIENTU19QUk9QX0JP
UkRFUl9TUEFDSU5HLAotICAgIENTU19QUk9QX0NPTE9SLAotICAgIENTU19QUk9QX0ZPTlRfRkFN
SUxZLAotICAgIENTU19QUk9QX0ZPTlRfU0laRSwKLSAgICBDU1NfUFJPUF9GT05UX1NUWUxFLAot
ICAgIENTU19QUk9QX0ZPTlRfVkFSSUFOVCwKLSAgICBDU1NfUFJPUF9GT05UX1dFSUdIVCwKLSAg
ICBDU1NfUFJPUF9MRVRURVJfU1BBQ0lORywKLSAgICBDU1NfUFJPUF9MSU5FX0hFSUdIVCwKLSAg
ICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAgIENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFU
SU9OU19JTl9FRkZFQ1QsCi0gICAgQ1NTX1BST1BfVEVYVF9JTkRFTlQsCi0gICAgQ1NTX1BST1Bf
X1dFQktJVF9URVhUX1NJWkVfQURKVVNULAotICAgIENTU19QUk9QX1RFWFRfVFJBTlNGT1JNLAot
ICAgIENTU19QUk9QX09SUEhBTlMsCi0gICAgQ1NTX1BST1BfV0hJVEVfU1BBQ0UsCi0gICAgQ1NT
X1BST1BfV0lET1dTLAotICAgIENTU19QUk9QX1dPUkRfU1BBQ0lORywKLX07Ci0KLWNvbnN0IHVu
c2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyA9IHNpemVvZihpbmhlcml0YWJsZVByb3Bl
cnRpZXMpIC8gc2l6ZW9mKGluaGVyaXRhYmxlUHJvcGVydGllc1swXSk7Ci0KLS8vIFRoaXMgaXMg
dGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlCbG9ja1By
b3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBsaXN0IG9mIENTUyBwcm9wZXJ0aWVz
IHRoYXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxldmVsIGVsZW1lbnRzLgotc3RhdGljIGNv
bnN0IGludCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKLSAgICBDU1NfUFJPUF9PUlBIQU5TLAotICAg
IENTU19QUk9QX09WRVJGTE9XLCAvLyBUaGlzIGNhbiBiZSBhbHNvIGJlIGFwcGxpZWQgdG8gcmVw
bGFjZWQgZWxlbWVudHMKLSAgICBDU1NfUFJPUF9QQUdFX0JSRUFLX0FGVEVSLAotICAgIENTU19Q
Uk9QX1BBR0VfQlJFQUtfQkVGT1JFLAotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfSU5TSURFLAot
ICAgIENTU19QUk9QX1RFWFRfQUxJR04sCi0gICAgQ1NTX1BST1BfVEVYVF9JTkRFTlQsCi0gICAg
Q1NTX1BST1BfV0lET1dTCi19OwotCi1jb25zdCB1bnNpZ25lZCBudW1CbG9ja1Byb3BlcnRpZXMg
PSBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzKSAvIHNpemVvZihibG9ja1Byb3BlcnRpZXNbMF0pOwot
Ci1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Y29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNv
cHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMpOwot
fQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVCbG9ja1Byb3BlcnRp
ZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJs
b2NrUHJvcGVydGllcyk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJl
bW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygpCi17Ci0gICAgcmVtb3ZlUHJvcGVydGllc0luU2V0
KGluaGVyaXRhYmxlUHJvcGVydGllcywgbnVtSW5oZXJpdGFibGVQcm9wZXJ0aWVzKTsKLX0KLQog
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQgKnNldCwgdW5zaWduZWQgbGVuZ3RoKSBj
b25zdAogewogICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IGxpc3Q7CkBAIC02
MjIsNzM0ICsxNjksNCBAQAogICAgIHJldHVybiBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oMCwgbGlzdCk7CiB9CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92
ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQgKnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlD
U1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIG1fdmFs
dWVzLnJlbW92ZShDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsK
LSAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChj
aGFuZ2VkKQotICAgICAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptYWtlTXV0YWJs
ZSgpCi17Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIG1fdmFsdWVzKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdW5zaWduZWQgc2hvcnQg
Q1NTSW5oZXJpdGVkVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENT
U19JTkhFUklUOwotfQotCi1TdHJpbmcgQ1NTSW5oZXJpdGVkVmFsdWU6OmNzc1RleHQoKSBjb25z
dAotewotICAgIHJldHVybiAiaW5oZXJpdCI7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IENTU0luaXRp
YWxWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIENTU19JTklUSUFM
OyAKLX0KLQotU3RyaW5nIENTU0luaXRpYWxWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICJpbml0aWFsIjsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1DU1NWYWx1ZUxpc3Q6On5DU1NWYWx1ZUxpc3QoKQotewotICAgIGZvciAoQ1NTVmFsdWUg
KnZhbCA9IG1fdmFsdWVzLmZpcnN0KCk7IHZhbDsgdmFsID0gbV92YWx1ZXMubmV4dCgpKQotICAg
ICAgICB2YWwtPmRlcmVmKCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IENTU1ZhbHVlTGlzdDo6Y3Nz
VmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NTX1ZBTFVFX0xJU1Q7Ci19Ci0KLXZv
aWQgQ1NTVmFsdWVMaXN0OjphcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsKQotewotICAg
IG1fdmFsdWVzLmFwcGVuZCh2YWwucmVsZWFzZSgpKTsKLX0KLQotU3RyaW5nIENTU1ZhbHVlTGlz
dDo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlc3VsdCA9ICIiOwotCi0gICAgZm9y
IChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPENTU1ZhbHVlPiBpdGVyYXRvcihtX3ZhbHVlcyk7
IGl0ZXJhdG9yLmN1cnJlbnQoKTsgKytpdGVyYXRvcikgewotICAgICAgICBpZiAoIXJlc3VsdC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiwgIjsKLSAgICAgICAgcmVzdWx0ICs9
IGl0ZXJhdG9yLmN1cnJlbnQoKS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZSgpCi17Ci0gICAgbV90eXBlID0gMDsKLX0KLQot
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGludCBpZGVudCkKLXsKLSAgICBt
X3ZhbHVlLmlkZW50ID0gaWRlbnQ7Ci0gICAgbV90eXBlID0gQ1NTX0lERU5UOwotfQotCi1DU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5
cGUpCi17Ci0gICAgbV92YWx1ZS5udW0gPSBudW07Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQot
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYgc3RyLCBV
bml0VHlwZXMgdHlwZSkKLXsKLSAgICBpZiAoKG1fdmFsdWUuc3RyaW5nID0gc3RyLmltcGwoKSkp
Ci0gICAgICAgIG1fdmFsdWUuc3RyaW5nLT5yZWYoKTsKLSAgICBtX3R5cGUgPSB0eXBlOwotfQot
Ci1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVy
PiBjKQotewotICAgIG1fdmFsdWUuY291bnRlciA9IGMucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9
IENTU19DT1VOVEVSOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUo
UGFzc1JlZlB0cjxSZWN0SW1wbD4gcikKLXsKLSAgICBtX3ZhbHVlLnJlY3QgPSByLnJlbGVhc2Uo
KTsKLSAgICBtX3R5cGUgPSBDU1NfUkVDVDsKLX0KLQotI2lmIF9fQVBQTEVfXwotQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiBy
KQotewotICAgIG1fdmFsdWUucmVnaW9uID0gci5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NT
X0RBU0hCT0FSRF9SRUdJT047Ci19Ci0jZW5kaWYKLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKFJHQkEzMiBjb2xvcikKLXsKLSAgICBtX3ZhbHVlLnJnYmNvbG9yID0gY29s
b3I7Ci0gICAgbV90eXBlID0gQ1NTX1JHQkNPTE9SOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxQYWlyPiBwKQotewotICAgIG1fdmFsdWUucGFp
ciA9IHAucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19QQUlSOwotfQotCi1DU1NQcmltaXRp
dmVWYWx1ZTo6fkNTU1ByaW1pdGl2ZVZhbHVlKCkKLXsKLSAgICBjbGVhbnVwKCk7Ci19Ci0KLXZv
aWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNsZWFudXAoKQotewotICAgIHN3aXRjaChtX3R5cGUpIHsK
LSAgICBjYXNlIENTU19TVFJJTkc6Ci0gICAgY2FzZSBDU1NfVVJJOgotICAgIGNhc2UgQ1NTX0FU
VFI6Ci0gICAgICAgIGlmIChtX3ZhbHVlLnN0cmluZykKLSAgICAgICAgICAgIG1fdmFsdWUuc3Ry
aW5nLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19DT1VOVEVSOgotICAg
ICAgICBtX3ZhbHVlLmNvdW50ZXItPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTX1JFQ1Q6Ci0gICAgICAgIG1fdmFsdWUucmVjdC0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDU1NfUEFJUjoKLSAgICAgICAgbV92YWx1ZS5wYWlyLT5kZXJlZigpOwotICAg
ICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAgICBjYXNlIENTU19EQVNIQk9BUkRfUkVHSU9O
OgotICAgICAgICBpZiAobV92YWx1ZS5yZWdpb24pCi0gICAgICAgICAgICBtX3ZhbHVlLnJlZ2lv
bi0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3R5cGUgPSAwOwotfQotCi1pbnQgQ1NTUHJpbWl0aXZl
VmFsdWU6OmNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGRvdWJs
ZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMg
Y29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUu
Zy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3
ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQg
Kz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IElO
VF9NQVggfHwgcmVzdWx0IDwgSU5UX01JTikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IChpbnQpcmVzdWx0OyAgICAKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoSW50KFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91
YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAg
IAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBp
biB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFk
IGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1
ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAg
aWYgKHJlc3VsdCA+IElOVF9NQVggfHwgcmVzdWx0IDwgSU5UX01JTikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgCi19Ci0KLWNvbnN0IGludCBpbnRNYXhGb3JM
ZW5ndGggPSAweDdmZmZmZmY7IC8vIG1heCB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50Ci1jb25zdCBp
bnQgaW50TWluRm9yTGVuZ3RoID0gKC0weDdmZmZmZmYtMSk7IC8vIG1pbiB2YWx1ZSBmb3IgYSAy
OC1iaXQgaW50Ci0KLS8vIExlbmd0aHMgZXhwZWN0IGFuIGludCB0aGF0IGlzIG9ubHkgMjgtYml0
cywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3IgYSBkaWZmZXJlbnQgb3ZlcmZsb3cuCi1pbnQgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUgKnN0
eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwot
ICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGlu
ZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFo
ZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2
YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0g
ICAgaWYgKHJlc3VsdCA+IGludE1heEZvckxlbmd0aCB8fCByZXN1bHQgPCBpbnRNaW5Gb3JMZW5n
dGgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgICAgCi19Ci0K
LS8vIExlbmd0aHMgZXhwZWN0IGFuIGludCB0aGF0IGlzIG9ubHkgMjgtYml0cywgc28gd2UgaGF2
ZSB0byBjaGVjayBmb3IgYSBkaWZmZXJlbnQgb3ZlcmZsb3cuCi1pbnQgQ1NTUHJpbWl0aXZlVmFs
dWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUg
bXVsdGlwbGllcikKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gbXVsdGlwbGllciAqIGNvbXB1dGVM
ZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJl
Y2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQot
ICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0
byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAu
MDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4gaW50TWF4Rm9yTGVuZ3RoIHx8IHJl
c3VsdCA8IGludE1pbkZvckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChp
bnQpcmVzdWx0OyAgCi19Ci0KLXNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3Ro
U2hvcnQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBjb21wdXRl
TGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXBy
ZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UK
LSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2Ug
dG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0w
LjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IFNIUlRfTUFYIHx8IHJlc3VsdCA8
IFNIUlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKHNob3J0KXJlc3VsdDsg
ICAgCi19Ci0KLXNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoU2hvcnQoUmVu
ZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICBkb3VibGUgcmVzdWx0
ID0gbXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8g
VGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBv
ZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5k
IGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJl
c3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0
ID4gU0hSVF9NQVggfHwgcmVzdWx0IDwgU0hSVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiAoc2hvcnQpcmVzdWx0OyAgCi19Ci0KLWRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxlICpzdHlsZSwgYm9vbCBhcHBseVpvb21GYWN0
b3IpCi17Ci0gICAgdW5zaWduZWQgc2hvcnQgdHlwZSA9IHByaW1pdGl2ZVR5cGUoKTsKLQotICAg
IC8vIFdlIGFsd2F5cyBhc3N1bWUgOTYgQ1NTIHBpeGVscyBpbiBhIENTUyBpbmNoLiBUaGlzIGlz
IHRoZSBjb2xkIGhhcmQgdHJ1dGggb2YgdGhlIFdlYi4KLSAgICAvLyBBdCBoaWdoIERQSSwgd2Ug
bWF5IHNjYWxlIGEgQ1NTIHBpeGVsLCBidXQgdGhlIHJhdGlvIG9mIHRoZSBDU1MgcGl4ZWwgdG8g
dGhlIHNvLWNhbGxlZAotICAgIC8vICJhYnNvbHV0ZSIgQ1NTIGxlbmd0aCB1bml0cyBsaWtlIGlu
Y2ggYW5kIHB0IGlzIGFsd2F5cyBmaXhlZCBhbmQgbmV2ZXIgY2hhbmdlcy4KLSAgICBkb3VibGUg
Y3NzUGl4ZWxzUGVySW5jaCA9IDk2LjsKLQotICAgIGRvdWJsZSBmYWN0b3IgPSAxLjsKLSAgICBz
d2l0Y2godHlwZSkgewotICAgIGNhc2UgQ1NTX0VNUzoKLSAgICAgICAgZmFjdG9yID0gYXBwbHla
b29tRmFjdG9yID8KLSAgICAgICAgICBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRT
aXplKCkgOgotICAgICAgICAgIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXpl
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0VYUzogewotICAgICAgICAvLyBGSVhN
RTogV2UgaGF2ZSBhIGJ1ZyByaWdodCBub3cgd2hlcmUgdGhlIHpvb20gd2lsbCBiZSBhcHBsaWVk
IG11bHRpcGxlIHRpbWVzIHRvIEVYIHVuaXRzLgotICAgICAgICAvLyBXZSByZWFsbHkgbmVlZCB0
byBjb21wdXRlIEVYIHVzaW5nIGZvbnRNZXRyaWNzIGZvciB0aGUgb3JpZ2luYWwgc3BlY2lmaWVk
U2l6ZSBhbmQgbm90IHVzZQotICAgICAgICAvLyBvdXIgYWN0dWFsIGNvbnN0cnVjdGVkIHJlbmRl
cmluZyBmb250LgotICAgICAgICBmYWN0b3IgPSBzdHlsZS0+Zm9udCgpLnhIZWlnaHQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BYOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU19DTToKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC8yLjU0OyAv
LyAoMi41NCBjbS9pbikKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfTU06Ci0gICAgICAg
IGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gvMjUuNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NfSU46Ci0gICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNo
LzcyLjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfUEM6Ci0gICAgICAgIC8vIDEgcGMg
PT0gMTIgcHQKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCoxMi4vNzIuOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGdldEZsb2F0VmFsdWUoKSAqIGZhY3RvcjsKLX0KLQotdm9pZCBDU1NQcmltaXRp
dmVWYWx1ZTo6c2V0RmxvYXRWYWx1ZSggdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBm
bG9hdFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgY2xlYW51
cCgpOwotICAgIC8vICMjIyBjaGVjayBpZiBwcm9wZXJ0eSBzdXBwb3J0cyB0aGlzIHR5cGUKLSAg
ICBpZiAobV90eXBlID4gQ1NTX0RJTUVOU0lPTikgewotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy9pZihtX3R5cGUgPiBDU1NfRElNRU5TSU9O
KSB0aHJvdyBET01FeGNlcHRpb24oSU5WQUxJRF9BQ0NFU1NfRVJSKTsKLSAgICBtX3ZhbHVlLm51
bSA9IGZsb2F0VmFsdWU7Ci0gICAgbV90eXBlID0gdW5pdFR5cGU7Ci19Ci0KLWRvdWJsZSBzY2Fs
ZUZhY3RvckZvckNvbnZlcnNpb24odW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCi17Ci0gICAgZG91
YmxlIGNzc1BpeGVsc1BlckluY2ggPSA5Ni4wOwotICAgIGRvdWJsZSBmYWN0b3IgPSAxLjA7Ci0g
ICAgCi0gICAgc3dpdGNoKHVuaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfQ006Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoIC8g
Mi41NDsgLy8gKDIuNTQgY20vaW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NOgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxz
UGVySW5jaCAvIDI1LjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lOOgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5j
aDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFQ6Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoIC8gNzIuMDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6
Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoICogMTIuMCAvIDcyLjA7IC8v
IDEgcGMgPT0gMTIgcHQKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWN0b3I7Ci19Ci0KLWRv
dWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0
VHlwZSkKLXsKLSAgICBpZiAodW5pdFR5cGUgPT0gbV90eXBlIHx8IHVuaXRUeXBlIDwgQ1NTX1BY
IHx8IHVuaXRUeXBlID4gQ1NTX1BDKQotICAgICAgICByZXR1cm4gbV92YWx1ZS5udW07Ci0gICAg
Ci0gICAgZG91YmxlIGNvbnZlcnRlZFZhbHVlID0gbV92YWx1ZS5udW07Ci0gICAgCi0gICAgLy8g
Rmlyc3QgY29udmVydCB0aGUgdmFsdWUgZnJvbSBtX3R5cGUgaW50byBDU1NQaXhlbHMKLSAgICBk
b3VibGUgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKG1fdHlwZSk7Ci0gICAgY29u
dmVydGVkVmFsdWUgKj0gZmFjdG9yOwotICAgIAotICAgIC8vIE5vdyBjb252ZXJ0IGZyb20gQ1NT
UGl4ZWxzIHRvIHRoZSBzcGVjaWZpZWQgdW5pdFR5cGUKLSAgICBmYWN0b3IgPSBzY2FsZUZhY3Rv
ckZvckNvbnZlcnNpb24odW5pdFR5cGUpOwotICAgIGNvbnZlcnRlZFZhbHVlIC89IGZhY3RvcjsK
LSAgICAKLSAgICByZXR1cm4gY29udmVydGVkVmFsdWU7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZl
VmFsdWU6OnNldFN0cmluZ1ZhbHVlKCB1bnNpZ25lZCBzaG9ydCBzdHJpbmdUeXBlLCBjb25zdCBT
dHJpbmcgJnN0cmluZ1ZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0g
ICAgY2xlYW51cCgpOwotICAgIC8vaWYobV90eXBlIDwgQ1NTX1NUUklORykgdGhyb3cgRE9NRXhj
ZXB0aW9uKElOVkFMSURfQUNDRVNTX0VSUik7Ci0gICAgLy9pZihtX3R5cGUgPiBDU1NfQVRUUikg
dGhyb3cgRE9NRXhjZXB0aW9uKElOVkFMSURfQUNDRVNTX0VSUik7Ci0gICAgaWYgKG1fdHlwZSA8
IENTU19TVFJJTkcgfHwgbV90eXBlID4gQ1NTX0FUVFIpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzdHJpbmdUeXBlICE9IENTU19J
REVOVCkgewotICAgICAgICBtX3ZhbHVlLnN0cmluZyA9IHN0cmluZ1ZhbHVlLmltcGwoKTsKLSAg
ICAgICAgbV92YWx1ZS5zdHJpbmctPnJlZigpOwotICAgICAgICBtX3R5cGUgPSBzdHJpbmdUeXBl
OwotICAgIH0KLSAgICAvLyAjIyMgcGFyc2UgaWRlbnQKLX0KLQotU3RyaW5nIENTU1ByaW1pdGl2
ZVZhbHVlOjpnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX3R5cGUpIHsK
LSAgICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAgICAgICBjYXNlIENTU19BVFRSOgotICAgICAg
ICBjYXNlIENTU19VUkk6Ci0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5zdHJpbmc7Ci0gICAg
ICAgIGNhc2UgQ1NTX0lERU5UOgotICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlTmFtZShtX3Zh
bHVlLmlkZW50KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUg
Q1NTIDIuMSBzcGVjIHNheXMgeW91IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaGVyZS4KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0K
LXVuc2lnbmVkIHNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAot
ewotICAgIHJldHVybiBDU1NfUFJJTUlUSVZFX1ZBTFVFOwotfQotCi1ib29sIENTU1ByaW1pdGl2
ZVZhbHVlOjpwYXJzZVN0cmluZyggY29uc3QgU3RyaW5nICYvKnN0cmluZyovLCBib29sICkKLXsK
LSAgICAvLyAjIyMKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBDU1NQcmltaXRpdmVWYWx1
ZTo6Z2V0SWRlbnQoKQotewotICAgIGlmKG1fdHlwZSAhPSBDU1NfSURFTlQpIHJldHVybiAwOwot
ICAgIHJldHVybiBtX3ZhbHVlLmlkZW50OwotfQotCi1TdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6
OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vICMjIyByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVl
IGluc3RlYWQgb2YgYSBnZW5lcmF0ZWQgb25lIChlLmcuIGNvbG9yCi0gICAgLy8gbmFtZSBpZiBp
dCB3YXMgc3BlY2lmaWVkKSAtIGNoZWNrIHdoYXQgc3BlYyBzYXlzIGFib3V0IHRoaXMKLSAgICBT
dHJpbmcgdGV4dDsKLSAgICBzd2l0Y2ggKCBtX3R5cGUgKSB7Ci0gICAgICAgIGNhc2UgQ1NTX1VO
S05PV046Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU19OVU1CRVI6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BFUkNFTlRBR0U6
Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIiUiOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0VNUzoKLSAgICAgICAgICAgIHRl
eHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZW0iOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX0VYUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51
bWJlcihtX3ZhbHVlLm51bSkgKyAiZXgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ1NTX1BYOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVt
KSArICJweCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQ006Ci0gICAg
ICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImNtIjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19NTToKLSAgICAgICAgICAgIHRleHQgPSBT
dHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibW0iOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1f
dmFsdWUubnVtKSArICJpbiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1Nf
UFQ6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInB0
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QQzoKLSAgICAgICAgICAg
IHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicGMiOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0RFRzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6
Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19SQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgInJhZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfR1JB
RDoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZ3Jh
ZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfTVM6Ci0gICAgICAgICAg
ICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1zIjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU19TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6
bnVtYmVyKG1fdmFsdWUubnVtKSArICJzIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU19IWjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51
bSkgKyAiaHoiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0tIWjoKLSAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAia2h6IjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19ESU1FTlNJT046Ci0gICAgICAgICAg
ICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19TVFJJTkc6Ci0g
ICAgICAgICAgICB0ZXh0ID0gcXVvdGVTdHJpbmdJZk5lZWRlZChtX3ZhbHVlLnN0cmluZyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfVVJJOgotICAgICAgICAgICAgdGV4
dCA9ICJ1cmwoIiArIFN0cmluZyhtX3ZhbHVlLnN0cmluZykgKyAiKSI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NfSURFTlQ6Ci0gICAgICAgICAgICB0ZXh0ID0gZ2V0VmFs
dWVOYW1lKG1fdmFsdWUuaWRlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTX0FUVFI6Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19DT1VOVEVSOgotICAgICAgICAgICAgLy8gIyMjCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NfUkVDVDogewotICAgICAgICAgICAgUmVjdEltcGwqIHJlY3RW
YWwgPSBnZXRSZWN0VmFsdWUoKTsKLSAgICAgICAgICAgIHRleHQgPSAicmVjdCgiOwotICAgICAg
ICAgICAgdGV4dCArPSByZWN0VmFsLT50b3AoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAg
ICAgdGV4dCArPSByZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAg
ICB0ZXh0ICs9IHJlY3RWYWwtPmJvdHRvbSgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAg
ICB0ZXh0ICs9IHJlY3RWYWwtPmxlZnQoKS0+Y3NzVGV4dCgpICsgIikiOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NfUkdCQ09MT1I6IHsKLSAgICAgICAg
ICAgIENvbG9yIGNvbG9yKG1fdmFsdWUucmdiY29sb3IpOwotICAgICAgICAgICAgaWYgKGNvbG9y
LmFscGhhKCkgPCAweEZGKQotICAgICAgICAgICAgICAgIHRleHQgPSAicmdiYSgiOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRleHQgPSAicmdiKCI7Ci0gICAgICAgICAgICB0
ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLnJlZCgpKSArICIsICI7Ci0gICAgICAgICAgICB0
ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLmdyZWVuKCkpICsgIiwgIjsKLSAgICAgICAgICAg
IHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IuYmx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChj
b2xvci5hbHBoYSgpIDwgMHhGRikKLSAgICAgICAgICAgICAgICB0ZXh0ICs9ICIsICIgKyBTdHJp
bmc6Om51bWJlcigoZmxvYXQpY29sb3IuYWxwaGEoKSAvIDB4RkYpOwotICAgICAgICAgICAgdGV4
dCArPSAiKSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENT
U19QQUlSOgotICAgICAgICAgICAgdGV4dCA9IG1fdmFsdWUucGFpci0+Zmlyc3QoKS0+Y3NzVGV4
dCgpOwotICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IG1fdmFs
dWUucGFpci0+c2Vjb25kKCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmIF9f
QVBQTEVfXwotICAgICAgICBjYXNlIENTU19EQVNIQk9BUkRfUkVHSU9OOgotICAgICAgICAgICAg
Zm9yIChEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9IGdldERhc2hib2FyZFJlZ2lvblZhbHVlKCk7
IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0KCkpIHsKLSAgICAgICAgICAgICAg
ICB0ZXh0ID0gImRhc2hib2FyZC1yZWdpb24oIjsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJl
Z2lvbi0+bV9sYWJlbDsKLSAgICAgICAgICAgICAgICBpZiAocmVnaW9uLT5tX2lzQ2lyY2xlKQot
ICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICIgY2lyY2xlICI7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAgICAgICAgICAgICAgICAgICB0ZXh0
ICs9ICIgcmVjdGFuZ2xlICI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+dG9wKCktPmNzc1Rl
eHQoKSArICIgIjsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+cmlnaHQoKS0+Y3Nz
VGV4dCgpICsgIiAiOwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5ib3R0b20oKS0+
Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgICAgIHRleHQgKz0gcmVnaW9uLT5sZWZ0KCkt
PmNzc1RleHQoKTsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9ICIpIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiB0ZXh0OwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1SZWN0SW1wbDo6flJlY3RJbXBsKCkKLXsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotUGFpcjo6flBhaXIoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NJbWFnZVZhbHVl
OjpDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdXJsLCBTdHlsZUJhc2UgKnN0eWxlKQotICAg
IDogQ1NTUHJpbWl0aXZlVmFsdWUodXJsLCBDU1NfVVJJKSwgbV9pbWFnZSgwKSwgbV9hY2Nlc3Nl
ZEltYWdlKGZhbHNlKQotewotfQotCi1DU1NJbWFnZVZhbHVlOjpDU1NJbWFnZVZhbHVlKCkKLSAg
ICA6IENTU1ByaW1pdGl2ZVZhbHVlKENTU19WQUxfTk9ORSksIG1faW1hZ2UoMCksIG1fYWNjZXNz
ZWRJbWFnZSh0cnVlKQotewotfQotCi1DU1NJbWFnZVZhbHVlOjp+Q1NTSW1hZ2VWYWx1ZSgpCi17
Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIG1faW1hZ2UtPmRlcmVmKHRoaXMpOwotfQotCi1D
YWNoZWRJbWFnZSogQ1NTSW1hZ2VWYWx1ZTo6aW1hZ2UoRG9jTG9hZGVyKiBsb2FkZXIpCi17Ci0g
ICAgaWYgKCFtX2FjY2Vzc2VkSW1hZ2UpIHsKLSAgICAgICAgbV9hY2Nlc3NlZEltYWdlID0gdHJ1
ZTsKLQotICAgICAgICBpZiAobG9hZGVyKQotICAgICAgICAgICAgbV9pbWFnZSA9IGxvYWRlci0+
cmVxdWVzdEltYWdlKGdldFN0cmluZ1ZhbHVlKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX2ltYWdlID0gQ2FjaGU6OnJlcXVlc3RJbWFnZSgwLCBnZXRTdHJpbmdWYWx1ZSgpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX2ltYWdlKQotICAgICAgICAgICAgbV9pbWFnZS0+cmVmKHRo
aXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9pbWFnZTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLUNTU0JvcmRlckltYWdlVmFsdWU6OkNTU0JvcmRlckltYWdlVmFsdWUoUGFzc1Jl
ZlB0cjxDU1NJbWFnZVZhbHVlPiBpbWFnZSwKLSAgICBQYXNzUmVmUHRyPFJlY3RJbXBsPiBpbWFn
ZVJlY3QsIGludCBob3Jpem9udGFsUnVsZSwgaW50IHZlcnRpY2FsUnVsZSkKLSAgICA6IG1faW1h
Z2UoaW1hZ2UpLCBtX2ltYWdlU2xpY2VSZWN0KGltYWdlUmVjdCkKLSAgICAsIG1faG9yaXpvbnRh
bFNpemVSdWxlKGhvcml6b250YWxSdWxlKSwgbV92ZXJ0aWNhbFNpemVSdWxlKHZlcnRpY2FsUnVs
ZSkKLXsKLX0KLQotU3RyaW5nIENTU0JvcmRlckltYWdlVmFsdWU6OmNzc1RleHQoKSBjb25zdAot
ewotICAgIC8vIEltYWdlIGZpcnN0LgotICAgIFN0cmluZyB0ZXh0KG1faW1hZ2UtPmNzc1RleHQo
KSk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgCi0gICAgLy8gTm93IHRoZSByZWN0LCBidXQgaXQg
aXNuJ3QgcmVhbGx5IGEgcmVjdCwgc28gd2UgZHVtcCBtYW51YWxseQotICAgIHRleHQgKz0gbV9p
bWFnZVNsaWNlUmVjdC0+dG9wKCktPmNzc1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0
ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPnJpZ2h0KCktPmNzc1RleHQoKTsKLSAgICB0ZXh0ICs9
ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPmJvdHRvbSgpLT5jc3NUZXh0KCk7
Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2ltYWdlU2xpY2VSZWN0LT5sZWZ0KCkt
PmNzc1RleHQoKTsKLSAgICAKLSAgICAvLyBOb3cgdGhlIGtleXdvcmRzLgotICAgIHRleHQgKz0g
IiAiOwotICAgIHRleHQgKz0gQ1NTUHJpbWl0aXZlVmFsdWUobV9ob3Jpem9udGFsU2l6ZVJ1bGUp
LmNzc1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IENTU1ByaW1pdGl2ZVZh
bHVlKG1fdmVydGljYWxTaXplUnVsZSkuY3NzVGV4dCgpOwotCi0gICAgcmV0dXJuIHRleHQ7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Gb250RmFtaWx5VmFsdWU6OkZvbnRGYW1pbHlWYWx1
ZShjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHJpbmcpCi0gICAgOiBDU1NQcmltaXRpdmVWYWx1
ZShTdHJpbmcoKSwgQ1NTX1NUUklORykKLXsKLSAgICBzdGF0aWMgY29uc3QgUmVndWxhckV4cHJl
c3Npb24gcGFyZW5SZWcoIiBcXCguKlxcKSQiKTsKLSAgICBzdGF0aWMgY29uc3QgUmVndWxhckV4
cHJlc3Npb24gYnJhY2VSZWcoIiBcXFsuKlxcXSQiKTsKLQotICAgIHBhcnNlZEZvbnROYW1lID0g
c3RyaW5nOwotICAgIC8vIGEgbGFuZ3VhZ2UgdGFnIGlzIG9mdGVuIGFkZGVkIGluIGJyYWNlcyBh
dCB0aGUgZW5kLiBSZW1vdmUgaXQuCi0gICAgcGFyc2VkRm9udE5hbWUucmVwbGFjZShwYXJlblJl
ZywgIiIpOwotICAgIC8vIHJlbW92ZSBbWGZ0XSBxdWFsaWZpZXJzCi0gICAgcGFyc2VkRm9udE5h
bWUucmVwbGFjZShicmFjZVJlZywgIiIpOwotfQotCi1TdHJpbmcgRm9udEZhbWlseVZhbHVlOjpj
c3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcXVvdGVTdHJpbmdJZk5lZWRlZChwYXJzZWRG
b250TmFtZSk7Ci19Ci0KLVN0cmluZyBGb250VmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAg
IC8vIGZvbnQgdmFyaWFudCB3ZWlnaHQgc2l6ZSAvIGxpbmUtaGVpZ2h0IGZhbWlseSAKLQotICAg
IFN0cmluZyByZXN1bHQoIiIpOwotCi0gICAgaWYgKHN0eWxlKSB7Ci0gICAgICAgIHJlc3VsdCAr
PSBzdHlsZS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAodmFyaWFudCkgewotICAgICAgICBp
ZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgICAg
ICByZXN1bHQgKz0gdmFyaWFudC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAod2VpZ2h0KSB7
Ci0gICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAi
ICI7Ci0gICAgICAgIHJlc3VsdCArPSB3ZWlnaHQtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYg
KHNpemUpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVz
dWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IHNpemUtPmNzc1RleHQoKTsKLSAgICB9Ci0g
ICAgaWYgKGxpbmVIZWlnaHQpIHsKLSAgICAgICAgaWYgKCFzaXplKQotICAgICAgICAgICAgcmVz
dWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9ICIvIjsKLSAgICAgICAgcmVzdWx0ICs9IGxp
bmVIZWlnaHQtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKGZhbWlseSkgewotICAgICAgICBp
ZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgICAg
ICByZXN1bHQgKz0gZmFtaWx5LT5jc3NUZXh0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLSAgICAKLQotLy8gVXNlZCBmb3IgdGV4dC1zaGFkb3cgYW5kIGJveC1zaGFkb3cKLVNo
YWRvd1ZhbHVlOjpTaGFkb3dWYWx1ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfeCwK
LSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfeSwKLSAgICBQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBfYmx1ciwKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBfY29sb3IpCi0gICAgOiB4KF94KSwgeShfeSksIGJsdXIoX2JsdXIpLCBjb2xvcihfY29sb3Ip
Ci17Ci19Ci0KLVN0cmluZyBTaGFkb3dWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3Ry
aW5nIHRleHQoIiIpOwotCi0gICAgaWYgKGNvbG9yKQotICAgICAgICB0ZXh0ICs9IGNvbG9yLT5j
c3NUZXh0KCk7Ci0gICAgaWYgKHgpIHsKLSAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9IHgtPmNzc1RleHQoKTsKLSAg
ICB9Ci0gICAgaWYgKHkpIHsKLSAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9IHktPmNzc1RleHQoKTsKLSAgICB9Ci0g
ICAgaWYgKGJsdXIpIHsKLSAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9IGJsdXItPmNzc1RleHQoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdGV4dDsKLX0KLQotU3RyaW5nIENTU1Byb3BlcnR5Ojpjc3NUZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKGlkKCkpICsgIjogIiArIG1fdmFsdWUt
PmNzc1RleHQoKQotICAgICAgICArIChpc0ltcG9ydGFudCgpID8gIiAhaW1wb3J0YW50IiA6ICIi
KSArICI7ICI7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAmYSwgY29u
c3QgQ1NTUHJvcGVydHkgJmIpCi17Ci0gICAgcmV0dXJuIGEubV9pZCA9PSBiLm1faWQgJiYgYS5t
X2ltcG9ydGFudCA9PSBiLm1faW1wb3J0YW50ICYmIGEubV92YWx1ZSA9PSBiLm1fdmFsdWU7Ci19
Ci0KIH0KSW5kZXg6IGNzcy9DU1NJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0lt
cG9ydFJ1bGUuaAkocmV2aXNpb24gMTQ0MDApCisrKyBjc3MvQ1NTSW1wb3J0UnVsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw4MiArMjEsMTcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgogICovCiAKLSNpZm5kZWYgQ1NTX2Nzc19ydWxlaW1wbF9oXwotI2RlZmluZSBDU1NfY3Nz
X3J1bGVpbXBsX2hfCisjaWZuZGVmIENTU0ltcG9ydFJ1bGVfSAorI2RlZmluZSBDU1NJbXBvcnRS
dWxlX0gKIAotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgi
CisjaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOwotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFz
cyBNZWRpYUxpc3Q7CiAKLWNsYXNzIENTU1J1bGUgOiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJs
aWM6Ci0gICAgZW51bSBDU1NSdWxlVHlwZSB7IAotICAgICAgICBVTktOT1dOX1JVTEUsIAotICAg
ICAgICBTVFlMRV9SVUxFLCAKLSAgICAgICAgQ0hBUlNFVF9SVUxFLCAKLSAgICAgICAgSU1QT1JU
X1JVTEUsIAotICAgICAgICBNRURJQV9SVUxFLCAKLSAgICAgICAgRk9OVF9GQUNFX1JVTEUsIAot
ICAgICAgICBQQUdFX1JVTEUgCi0gICAgfTsKLSAgICAKLSAgICBDU1NSdWxlKFN0eWxlQmFzZSAq
cGFyZW50KQotICAgICAgICA6IFN0eWxlQmFzZShwYXJlbnQpLCBtX3R5cGUoVU5LTk9XTl9SVUxF
KSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB1
bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBDU1NT
dHlsZVNoZWV0ICpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgQ1NTUnVsZSAqcGFyZW50
UnVsZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAg
IHZvaWQgc2V0Q3NzVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsKLQotcHJvdGVjdGVkOgotICAg
IENTU1J1bGVUeXBlIG1fdHlwZTsKLX07Ci0KLQotY2xhc3MgQ1NTQ2hhcnNldFJ1bGUgOiBwdWJs
aWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU0NoYXJzZXRSdWxlKFN0eWxlQmFzZSAqcGFy
ZW50KQotICAgICAgICA6IENTU1J1bGUocGFyZW50KSB7IG1fdHlwZSA9IENIQVJTRVRfUlVMRTsg
fQotCi0gICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgU3RyaW5nIGVuY29kaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQotICAgIHZvaWQgc2V0RW5jb2RpbmcoU3Ry
aW5nIF9lbmNvZGluZykgeyBtX2VuY29kaW5nID0gX2VuY29kaW5nOyB9Ci0KLXByb3RlY3RlZDoK
LSAgICBTdHJpbmcgbV9lbmNvZGluZzsKLX07Ci0KLQotY2xhc3MgQ1NTRm9udEZhY2VSdWxlIDog
cHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NGb250RmFjZVJ1bGUoU3R5bGVCYXNl
ICpwYXJlbnQpOwotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwotCi0gICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQo
KTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBt
X3N0eWxlOwotfTsKLQotCi1jbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVibGljIENhY2hlZE9iamVj
dENsaWVudCwgcHVibGljIENTU1J1bGUKK2NsYXNzIENTU0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ1NT
UnVsZSwgcHVibGljIENhY2hlZE9iamVjdENsaWVudAogewogcHVibGljOgogICAgIENTU0ltcG9y
dFJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgTWVkaWFMaXN0Kik7
CkBAIC0xMjQsMTA2ICs1OSw2IEBACiAgICAgYm9vbCBtX2xvYWRpbmc7CiB9OwogCi1jbGFzcyBN
ZWRpYUxpc3Q7Ci0KLWNsYXNzIENTU1J1bGVMaXN0IDogcHVibGljIFNoYXJlZDxDU1NSdWxlTGlz
dD4KLXsKLXB1YmxpYzoKLSAgICBDU1NSdWxlTGlzdCgpIHsgfQotICAgIENTU1J1bGVMaXN0KFN0
eWxlTGlzdCAqKTsKLSAgICB+Q1NTUnVsZUxpc3QoKTsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuY291bnQoKTsgfQotICAgIENTU1J1bGUgKml0
ZW0gKCB1bnNpZ25lZCBpbmRleCApIHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuYXQoIGluZGV4ICk7
IH0KLQotICAgIC8qIG5vdCBwYXJ0IG9mIHRoZSBET00gKi8KLSAgICB1bnNpZ25lZCBpbnNlcnRS
dWxlICggQ1NTUnVsZSAqcnVsZSwgdW5zaWduZWQgaW5kZXggKTsKLSAgICB2b2lkIGRlbGV0ZVJ1
bGUgKCB1bnNpZ25lZCBpbmRleCApOwotICAgIHZvaWQgYXBwZW5kKCBDU1NSdWxlICpydWxlICk7
Ci0KLXByb3RlY3RlZDoKLSAgICBEZXByZWNhdGVkUHRyTGlzdDxDU1NSdWxlPiBtX2xzdENTU1J1
bGVzOwotfTsKLQotY2xhc3MgQ1NTTWVkaWFSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1Ymxp
YzoKLSAgICBDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50ICk7Ci0gICAgQ1NTTWVkaWFS
dWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nICZtZWRpYSApOwot
ICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQsIE1lZGlhTGlzdCAqbWVkaWFMaXN0
LCBDU1NSdWxlTGlzdCAqcnVsZUxpc3QgKTsKLSAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGUoKTsK
LQotICAgIE1lZGlhTGlzdCAqbWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhLmdldCgp
OyB9Ci0gICAgQ1NTUnVsZUxpc3QgKmNzc1J1bGVzKCkgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5n
ZXQoKTsgfQotCi0gICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IFdlYkNvcmU6OlN0cmlu
ZyAmcnVsZSwgdW5zaWduZWQgaW5kZXggKTsKLSAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNpZ25l
ZCBpbmRleCApIHsgbV9sc3RDU1NSdWxlcy0+ZGVsZXRlUnVsZSggaW5kZXggKTsgfQotCi0gICAg
dmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIC8qIE5vdCBwYXJ0IG9mIHRoZSBET00gKi8K
LSAgICB1bnNpZ25lZCBhcHBlbmQoIENTU1J1bGUgKnJ1bGUgKTsKLXByb3RlY3RlZDoKLSAgICBS
ZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1lZGlhOwotICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9s
c3RDU1NSdWxlczsKLX07Ci0KLQotY2xhc3MgQ1NTUGFnZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQot
ewotcHVibGljOgotICAgIENTU1BhZ2VSdWxlKFN0eWxlQmFzZSAqcGFyZW50KTsKLSAgICB2aXJ0
dWFsIH5DU1NQYWdlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29s
IGlzUGFnZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBXZWJDb3JlOjpTdHJpbmcgc2Vs
ZWN0b3JUZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RvclRleHQoV2ViQ29yZTo6U3Ry
aW5nIHN0cik7Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IG1fc3R5bGU7Ci19OwotCi1jbGFzcyBDU1NJbXBvcnRhbnRSdWxlOwotCi1jbGFzcyBD
U1NTdHlsZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1N0eWxlUnVs
ZShTdHlsZUJhc2UqIHBhcmVudCk7Ci0gICAgdmlydHVhbCB+Q1NTU3R5bGVSdWxlKCk7Ci0KLSAg
ICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVJ1bGUoKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgV2ViQ29y
ZTo6U3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0
KFdlYkNvcmU6OlN0cmluZyBzdHIpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKCBj
b25zdCBTdHJpbmcgJnN0cmluZywgYm9vbCA9IGZhbHNlICk7Ci0KLSAgICB2b2lkIHNldFNlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvcikgeyBtX3NlbGVjdG9yID0gc2VsZWN0b3I7IH0KLSAg
ICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+KTsKLQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIHsgcmV0dXJuIG1fc2VsZWN0b3I7
IH0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24oKSB7IHJldHVy
biBtX3N0eWxlLmdldCgpOyB9Ci0gCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOwot
fTsKLQotY2xhc3MgQ1NTVW5rbm93blJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgot
ICAgIENTU1Vua25vd25SdWxlKFN0eWxlQmFzZSAqcGFyZW50KSA6IENTU1J1bGUocGFyZW50KSB7
fQotCi0gICAgdmlydHVhbCBib29sIGlzVW5rbm93blJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci19
OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGNzcy9DU1NWYWx1ZUxpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGNzcy9DU1NWYWx1ZUxpc3QuY3BwCShyZXZpc2lvbiAxNDQwMCkKKysr
IGNzcy9DU1NWYWx1ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw2NTcgKzE5LDExIEBA
CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgotCi0jaW5jbHVkZSAi
Q2FjaGUuaCIKLSNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkRvY0xvYWRlci5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgImNzc3N0eWxlc2VsZWN0b3IuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2lu
Y2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCi0KLSNpZiBTVkdfU1VQUE9SVAotI2luY2x1ZGUg
Imtzdmdjc3Nwcm9wZXJ0aWVzLmgiCi0jZW5kaWYKLQotLy8gTm90IGluIGFueSBoZWFkZXIsIHNv
IGp1c3QgZGVjbGFyZSBpdCBoZXJlIGZvciBub3cuCi1XZWJDb3JlOjpTdHJpbmcgZ2V0UHJvcGVy
dHlOYW1lKHVuc2lnbmVkIHNob3J0IGlkKTsKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBEZWZpbmVkIGluIENTU0dyYW1tYXIueSwgYnV0IG5v
dCBpbiBhbnkgaGVhZGVyLCBzbyBqdXN0IGRlY2xhcmUgaXQgaGVyZSBmb3Igbm93LgotaW50IGdl
dFByb3BlcnR5SUQoY29uc3QgY2hhciogc3RyLCBpbnQgbGVuKTsKLQotc3RhdGljIGludCBwcm9w
ZXJ0eUlEKGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBjaGFyIGJ1ZmZlclttYXhDU1NQcm9wZXJ0
eU5hbWVMZW5ndGhdOwotCi0gICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKLSAgICBpZiAo
bGVuID4gbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgIT0gbGVuOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9
IHNbaV07Ci0gICAgICAgIGlmIChjID09IDAgfHwgYyA+PSAweDdGKQotICAgICAgICAgICAgcmV0
dXJuIDA7IC8vIGlsbGVnYWwgY2hhcmFjdGVyCi0gICAgICAgIGJ1ZmZlcltpXSA9IGM7Ci0gICAg
fQotCi0gICAgaW50IGlkID0gZ2V0UHJvcGVydHlJRChidWZmZXIsIGxlbik7Ci0jaWYgU1ZHX1NV
UFBPUlQKLSAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgaWQgPSBTVkc6OmdldFNWR0NTU1Byb3Bl
cnR5SUQoYnVmZmVyLCBsZW4pOwotI2VuZGlmCi0gICAgcmV0dXJuIGlkOwotfQotCi0KLS8vIFF1
b3RlcyB0aGUgc3RyaW5nIGlmIGl0IG5lZWRzIHF1b3RpbmcuCi0vLyBXZSB1c2Ugc2luZ2xlIHF1
b3RlcyBmb3Igbm93IGJlYXVzZSBtYXJrdXAuY3BwIHVzZXMgZG91YmxlIHF1b3Rlcy4KLXN0YXRp
YyBTdHJpbmcgcXVvdGVTdHJpbmdJZk5lZWRlZChjb25zdCBTdHJpbmcgJnN0cmluZykKLXsKLSAg
ICAvLyBGb3Igbm93LCBqdXN0IGRvIHRoaXMgZm9yIHN0cmluZ3MgdGhhdCBzdGFydCB3aXRoICIj
IiB0byBmaXggS29yZWFuIGZvbnQgbmFtZXMgdGhhdCBzdGFydCB3aXRoICIjIi4KLSAgICAvLyBQ
b3N0LVRpZ2VyLCB3ZSBzaG91bGQgaXNMZWdhbElkZW50aWZpZXIgaW5zdGVhZCBhZnRlciB3b3Jr
aW5nIG91dCBhbGwgdGhlIGFuY2lsbGFyeSBpc3N1ZXMuCi0gICAgaWYgKHN0cmluZ1swXSAhPSAn
IycpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KLSAgICAvLyBGSVhNRTogQWxzbyBuZWVkIHRv
IHRyYW5zZm9ybSBjb250cm9sIGNoYXJhY3RlcnMgaW50byBcIHNlcXVlbmNlcy4KLSAgICBTdHJp
bmcgcyA9IHN0cmluZzsKLSAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKLSAgICBzLnJlcGxh
Y2UoJ1wnJywgIlxcJyIpOwotICAgIHJldHVybiAiJyIgKyBzICsgIiciOwotfQotCi1DU1NTdHls
ZURlY2xhcmF0aW9uOjpDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6
IFN0eWxlQmFzZShwYXJlbnQpCi17Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNT
dHlsZURlY2xhcmF0aW9uKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9w
ZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsK
LSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJv
cElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFs
dWUocHJvcElEKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
UHJpb3JpdHkoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BJRCA9
IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BJRCkgPyAi
aW1wb3J0YW50IiA6ICIiOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJv
cGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHBy
b3BJRCA9IHByb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIGludCBzaG9ydGhhbmRJRCA9IGdldFByb3BlcnR5U2hv
cnRoYW5kKHByb3BJRCk7Ci0gICAgaWYgKCFzaG9ydGhhbmRJRCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc2hvcnRoYW5kSUQpOwotfQotCi1i
b29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcg
JnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5h
bWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IGlzUHJvcGVydHlJbXBsaWNpdChwcm9wSUQpOwotfQotCi12b2lkIENTU1N0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElE
KSAvLyBzZXQgZXhjZXB0aW9uPwotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpbXBvcnRhbnQg
PSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gLTE7Ci0gICAgc2V0UHJv
cGVydHkocHJvcElELCB2YWx1ZSwgaW1wb3J0YW50LCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NTdHls
ZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaW50IHByb3BJRCA9IHByb3BlcnR5SUQocHJvcGVy
dHlOYW1lKTsKLSAgICBpZiAoIXByb3BJRCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wSUQsIGVjKTsKLX0KLQotYm9vbCBDU1NTdHlsZURl
Y2xhcmF0aW9uOjppc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsK
LSAgICByZXR1cm4gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24oKQotICAgIDogbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpw
YXJlbnQpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQotewot
fQotCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oQ1NTUnVsZSAqcGFyZW50LCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5
PiAmdmFsdWVzKQotICAgIDogQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXJlbnQpLCBtX3ZhbHVlcyh2
YWx1ZXMpLCBtX25vZGUoMCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRl
IHByb3BlcnRpZXMuCi19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQsIGNvbnN0IENTU1Byb3BlcnR5ICogY29u
c3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQotICAgIDogQ1NTU3R5bGVEZWNsYXJh
dGlvbihwYXJlbnQpLCBtX25vZGUoMCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsK
LSAgICAvLyBGSVhNRTogVGhpcyBhbGxvd3MgZHVwbGljYXRlIHByb3BlcnRpZXMuCi19Ci0KLUNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6b3Bl
cmF0b3I9KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBvKQotewotICAgIC8vIGRv
bid0IGF0dGFjaCBpdCB0byB0aGUgc2FtZSBub2RlLCBqdXN0IGxlYXZlIHRoZSBjdXJyZW50IG1f
bm9kZSB2YWx1ZQotICAgIG1fdmFsdWVzID0gby5tX3ZhbHVlczsKLSAgICByZXR1cm4gKnRoaXM7
Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1
ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICBpZiAodmFsdWUpCi0gICAgICAg
IHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOwotCi0gICAgLy8gU2hvcnRoYW5kIGFuZCA0LXZhbHVl
cyBwcm9wZXJ0aWVzCi0gICAgc3dpdGNoICggcHJvcGVydHlJRCApIHsKLSAgICBjYXNlIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfUE9TSVRJT046Ci0gICAgewotICAgICAgICAvLyAjIyBJcyB0aGlzIGNv
cnJlY3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5nCi0gICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OX1gs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CQUNLR1JPVU5E
X1BPU0lUSU9OX1kgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0
aWVzLCAyICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORDoKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzVdID0geyBDU1NfUFJPUF9CQUNLR1JPVU5EX0lN
QUdFLCBDU1NfUFJPUF9CQUNLR1JPVU5EX1JFUEVBVCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0JBQ0tHUk9VTkRfQVRUQUNITUVOVCwgQ1NTX1BST1BfQkFD
S0dST1VORF9QT1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U19QUk9QX0JBQ0tHUk9VTkRfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZh
bHVlKCBwcm9wZXJ0aWVzLCA1ICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSOgot
ICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0JPUkRF
Ul9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXRT
aG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9Q
X0JPUkRFUl9UT1A6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsg
Q1NTX1BST1BfQk9SREVSX1RPUF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX1RPUF9TVFlMRSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9UT1BfQ09M
T1J9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsK
LSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfUklHSFQ6Ci0gICAgewotICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX1JJR0hUX1dJRFRILCBD
U1NfUFJPUF9CT1JERVJfUklHSFRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NfUFJPUF9CT1JERVJfUklHSFRfQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0
U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10g
PSB7IENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgsIENTU19QUk9QX0JPUkRFUl9CT1RUT01f
U1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JE
RVJfQk9UVE9NX0NPTE9SfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9w
ZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0xFRlQ6Ci0gICAg
ewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0xF
RlRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX0xFRlRfQ09MT1J9OwotICAgICAgICBy
ZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NfUFJPUF9PVVRMSU5FOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
M10gPSB7IENTU19QUk9QX09VVExJTkVfV0lEVEgsIENTU19QUk9QX09VVExJTkVfU1RZTEUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9PVVRMSU5FX0NPTE9S
IH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwot
ICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9DT0xPUjoKLSAgICB7Ci0gICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX0NPTE9SLCBDU1Nf
UFJPUF9CT1JERVJfUklHSFRfQ09MT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX0NPTE9SLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9D
T0xPUiB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0K
LSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9XSURUSDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfUFJPUF9C
T1JERVJfUklHSFRfV0lEVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NfUFJPUF9CT1JERVJfQk9UVE9NX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCB9
OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBj
YXNlIENTU19QUk9QX0JPUkRFUl9TVFlMRToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCBDU1NfUFJPUF9CT1JERVJf
UklHSFRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9CT1JERVJfQk9UVE9NX1NUWUxFLCBDU1NfUFJPUF9CT1JERVJfTEVGVF9TVFlMRSB9OwotICAg
ICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyApOwotICAgIH0KLSAgICBjYXNlIENT
U19QUk9QX01BUkdJTjoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0g
eyBDU1NfUFJPUF9NQVJHSU5fVE9QLCBDU1NfUFJPUF9NQVJHSU5fUklHSFQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9NQVJHSU5fQk9UVE9NLCBDU1NfUFJP
UF9NQVJHSU5fTEVGVCB9OwotICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyggcHJvcGVydGllcyAp
OwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX1BBRERJTkc6Ci0gICAgewotICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTX1BST1BfUEFERElOR19UT1AsIENTU19QUk9QX1BB
RERJTkdfUklHSFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9QQURESU5HX0JPVFRPTSwgQ1NTX1BST1BfUEFERElOR19MRUZUIH07Ci0gICAgICAgIHJldHVy
biBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTElT
VF9TVFlMRToKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1Nf
UFJPUF9MSVNUX1NUWUxFX1RZUEUsIENTU19QUk9QX0xJU1RfU1RZTEVfUE9TSVRJT04sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9MSVNUX1NUWUxFX0lNQUdF
IH07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwot
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmdldDRWYWx1ZXMoIGNvbnN0IGludCogcHJvcGVydGllcyApIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkg
ewotICAgICAgICBpZiAoIWlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkgewotICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydGllc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKSAvLyBhcHBhcmVudGx5IGFsbCA0
IHByb3BlcnRpZXMgbXVzdCBiZSBzcGVjaWZpZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAg
cmVzICs9ICIgIjsKLSAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0U2hvcnRIYW5kVmFsdWUoIGNvbnN0IGludCogcHJvcGVydGllcywgaW50
IG51bWJlciApIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bWJlcjsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3Bl
cnRpZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSkgeyAv
LyBUT0RPIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZSBpZiAhdmFsdWUKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlcy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAg
ICAgICAgICAgICByZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVy
dHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuZnJvbUxhc3QoKTsgaXQgIT0gZW5kOyAtLWl0KQot
ICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5tX2lkKQotICAgICAgICAgICAgcmV0dXJu
ICgqaXQpLnZhbHVlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5
Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotCi0gICAgU3RyaW5n
IHZhbHVlOwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBl
bmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0
ID0gbV92YWx1ZXMuZnJvbUxhc3QoKTsgaXQgIT0gZW5kOyAtLWl0KQotICAgICAgICBpZiAocHJv
cGVydHlJRCA9PSAoKml0KS5tX2lkKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9ICgqaXQpLnZhbHVl
KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIG1fdmFsdWVzLnJlbW92ZShpdCk7Ci0gICAgICAg
ICAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjbGVhcigpCi17Ci0gICAgbV92YWx1ZXMu
Y2xlYXIoKTsKLSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnNldENoYW5nZWQoKQotewotICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgbV9u
b2RlLT5zZXRDaGFuZ2VkKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBJZGVhbGx5LCB0aGlzIHNob3Vs
ZCBiZSBmYWN0b3JlZCBiZXR0ZXIgYW5kIHRoZXJlCi0gICAgICAgIC8vIHNob3VsZCBiZSBhIHN1
YmNsYXNzIG9mIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uIGp1c3QKLSAgICAgICAgLy8gZm9y
IGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMgdGhhdCBoYW5kbGVzIHRoaXMKLSAgICAgICAgaWYg
KG1fbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkgJiYgdGhpcyA9PSBzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50ICo+KG1fbm9kZSktPmlubGluZVN0eWxlRGVjbCgpKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCAqPihtX25vZGUpLT5pbnZhbGlkYXRlU3R5bGVBdHRyaWJ1dGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vICMjIyBxdWljayZkaXJ0eSBoYWNr
IGZvciBLREUgMy4wLi4uIG1ha2UgdGhpcyBNVUNIIGJldHRlciEgKERpcmspCi0gICAgU3R5bGVC
YXNlICpyb290ID0gdGhpczsKLSAgICB3aGlsZSAoU3R5bGVCYXNlICpwYXJlbnQgPSByb290LT5w
YXJlbnQoKSkKLSAgICAgICAgcm9vdCA9IHBhcmVudDsKLSAgICBpZiAocm9vdC0+aXNDU1NTdHls
ZVNoZWV0KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9j
KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAg
ICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAg
IGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0g
bV92YWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJ
RCA9PSAoKml0KS5pZCgpKQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmlzSW1wb3J0YW50KCk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJl
Y2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChE
ZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgq
aXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuc2hvcnRoYW5kSUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmlzUHJv
cGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRl
ZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gbV92YWx1ZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSAoKml0KS5pZCgp
KQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLmlzSW1wbGljaXQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9y
dGFudCwgdHJ1ZSwgZWMpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICByZXR1cm4gcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCwgdHJ1ZSwgZWMpOwotfQotCi1ib29s
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Y29uc3QgU3RyaW5nICZ2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotCi0gICAgcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCk7Ci0KLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7
Ci0gICAgYm9vbCBzdWNjZXNzID0gcGFyc2VyLnBhcnNlVmFsdWUodGhpcywgcHJvcGVydHlJRCwg
dmFsdWUsIGltcG9ydGFudCk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGVjID0gU1lO
VEFYX0VSUjsKLSAgICB9IGVsc2UgaWYgKG5vdGlmeUNoYW5nZWQpCi0gICAgICAgIHNldENoYW5n
ZWQoKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlEKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSwgaW1wb3J0YW50KSk7Ci0gICAgaWYgKG5vdGlmeUNoYW5n
ZWQpCi0gICAgICAgIHNldENoYW5nZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0U3RyaW5nUHJvcGVydHkoaW50IHByb3BlcnR5
SWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlw
ZSwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0g
ICAgbV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZSwgdHlwZSksIGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0SW1hZ2VQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZVUkwsIGJvb2wgaW1wb3J0YW50KQotewotICAgIHJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SWQpOwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQcm9wZXJ0
eShwcm9wZXJ0eUlkLCBuZXcgQ1NTSW1hZ2VWYWx1ZShVUkwsIHRoaXMpLCBpbXBvcnRhbnQpKTsK
LSAgICBzZXRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nICZzdHlsZURlY2xhcmF0aW9uKQotewotICAg
IG1fdmFsdWVzLmNsZWFyKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5n
KCkpOwotICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHN0eWxlRGVjbGFyYXRpb24p
OwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6YWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0ICpwcm9wZXJ0
aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBy
b3BlcnRpZXM7ICsraSkgewotICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLT5p
ZCgpLCBmYWxzZSk7Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7Ci0g
ICAgfQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBz
ZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRk
Ci0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9s
bG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLX0KLQotdm9p
ZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0TGVuZ3RoUHJvcGVydHkoaW50IGlkLCBj
b25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCAvKiBtdWx0aUxlbmd0aCov
KQotewotICAgIGJvb2wgcGFyc2VNb2RlID0gdXNlU3RyaWN0UGFyc2luZygpOwotICAgIHNldFN0
cmljdFBhcnNpbmcoZmFsc2UpOwotICAgIHNldFByb3BlcnR5KGlkLCB2YWx1ZSwgaW1wb3J0YW50
KTsKLSAgICBzZXRTdHJpY3RQYXJzaW5nKHBhcnNlTW9kZSk7Ci19Ci0KLXVuc2lnbmVkIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zh
bHVlcy5jb3VudCgpOwotfQotCi1TdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0
ZW0odW5zaWduZWQgaSkgY29uc3QKLXsKLSAgICBpZiAoaSA+PSBtX3ZhbHVlcy5jb3VudCgpKQot
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKG1fdmFs
dWVzW2ldLmlkKCkpOwotfQotCi1DU1NSdWxlICpDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRS
dWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUo
KSkgPyBzdGF0aWNfY2FzdDxDU1NSdWxlICo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLVN0cmluZyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5n
IHJlc3VsdCA9ICIiOwotICAgIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y
PENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIHJlc3VsdCArPSAoKml0KS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIG1f
dmFsdWVzLmNsZWFyKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcih1c2VTdHJpY3RQYXJzaW5nKCkp
OwotICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRoaXMsIHRleHQpOwotICAgIC8vIEZJWE1F
OiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0IGVjLgotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWVyZ2UoQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24gKm90aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi17Ci0gICAg
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBm
b3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG90
aGVyLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3Qg
Q1NTUHJvcGVydHkgJnByb3BlcnR5ID0gKml0OwotICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgaWYgKHZh
bHVlKSB7Ci0gICAgICAgICAgICBpZiAoIWFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS5p
ZCgpKTsKLSAgICAgICAgfQotICAgICAgICBtX3ZhbHVlcy5hcHBlbmQocHJvcGVydHkpOwotICAg
IH0KLSAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0
Q2hhbmdlZCgpIGlmIHNvbWV0aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAot
ICAgIC8vIGEgbm90aWZ5Q2hhbmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxv
dyB0aGUgbW9kZWwgb2Ygb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCi19Ci0KLXZvaWQg
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5
bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGVw
cmVjYXRlZFZhbHVlTGlzdDxpbnQ+IHByb3BlcnRpZXM7Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdChzdHlsZS0+dmFsdWVzSXRlcmF0b3Io
KSk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVy
dHkgPSAqaXQ7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNT
U1ZhbHVlKHByb3BlcnR5LmlkKCkpOwotICAgICAgICBpZiAodmFsdWUgJiYgKHZhbHVlLT5jc3NU
ZXh0KCkgPT0gcHJvcGVydHkudmFsdWUoKS0+Y3NzVGV4dCgpKSkKLSAgICAgICAgICAgIHByb3Bl
cnRpZXMuYXBwZW5kKHByb3BlcnR5LmlkKCkpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKERlcHJl
Y2F0ZWRWYWx1ZUxpc3RJdGVyYXRvcjxpbnQ+IGl0KHByb3BlcnRpZXMuYmVnaW4oKSk7IGl0ICE9
IHByb3BlcnRpZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eSgq
aXQpOwotfQotCi0vLyBUaGlzIGlzIHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBj
b3B5IGluIHRoZSBjb3B5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKCkgZnVuY3Rpb24uCi0vLyBJdCBp
cyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaXN0IG9mIGluaGVyaXRlZCBDU1MgcHJvcGVydGll
cyBhbmQgdGhlCi0vLyBwcm9wZXJ0aWVzIGZvciB3aGljaCB3ZSBoYXZlIGEgY29tcHV0ZWQgaW1w
bGVtZW50YXRpb24gaW4gdGhpcyBmaWxlLgotY29uc3QgaW50IGluaGVyaXRhYmxlUHJvcGVydGll
c1tdID0gewotICAgIENTU19QUk9QX0JPUkRFUl9DT0xMQVBTRSwKLSAgICBDU1NfUFJPUF9CT1JE
RVJfU1BBQ0lORywKLSAgICBDU1NfUFJPUF9DT0xPUiwKLSAgICBDU1NfUFJPUF9GT05UX0ZBTUlM
WSwKLSAgICBDU1NfUFJPUF9GT05UX1NJWkUsCi0gICAgQ1NTX1BST1BfRk9OVF9TVFlMRSwKLSAg
ICBDU1NfUFJPUF9GT05UX1ZBUklBTlQsCi0gICAgQ1NTX1BST1BfRk9OVF9XRUlHSFQsCi0gICAg
Q1NTX1BST1BfTEVUVEVSX1NQQUNJTkcsCi0gICAgQ1NTX1BST1BfTElORV9IRUlHSFQsCi0gICAg
Q1NTX1BST1BfVEVYVF9BTElHTiwKLSAgICBDU1NfUFJPUF9fV0VCS0lUX1RFWFRfREVDT1JBVElP
TlNfSU5fRUZGRUNULAotICAgIENTU19QUk9QX1RFWFRfSU5ERU5ULAotICAgIENTU19QUk9QX19X
RUJLSVRfVEVYVF9TSVpFX0FESlVTVCwKLSAgICBDU1NfUFJPUF9URVhUX1RSQU5TRk9STSwKLSAg
ICBDU1NfUFJPUF9PUlBIQU5TLAotICAgIENTU19QUk9QX1dISVRFX1NQQUNFLAotICAgIENTU19Q
Uk9QX1dJRE9XUywKLSAgICBDU1NfUFJPUF9XT1JEX1NQQUNJTkcsCi19OwotCi1jb25zdCB1bnNp
Z25lZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXMgPSBzaXplb2YoaW5oZXJpdGFibGVQcm9wZXJ0
aWVzKSAvIHNpemVvZihpbmhlcml0YWJsZVByb3BlcnRpZXNbMF0pOwotCi0vLyBUaGlzIGlzIHRo
ZSBsaXN0IG9mIHByb3BlcnRpZXMgd2Ugd2FudCB0byBjb3B5IGluIHRoZSBjb3B5QmxvY2tQcm9w
ZXJ0aWVzKCkgZnVuY3Rpb24uCi0vLyBJdCBpcyB0aGUgbGlzdCBvZiBDU1MgcHJvcGVydGllcyB0
aGF0IGFwcGx5IHNwZWNpYWxseSB0byBibG9jay1sZXZlbCBlbGVtZW50cy4KLXN0YXRpYyBjb25z
dCBpbnQgYmxvY2tQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfT1JQSEFOUywKLSAgICBD
U1NfUFJPUF9PVkVSRkxPVywgLy8gVGhpcyBjYW4gYmUgYWxzbyBiZSBhcHBsaWVkIHRvIHJlcGxh
Y2VkIGVsZW1lbnRzCi0gICAgQ1NTX1BST1BfUEFHRV9CUkVBS19BRlRFUiwKLSAgICBDU1NfUFJP
UF9QQUdFX0JSRUFLX0JFRk9SRSwKLSAgICBDU1NfUFJPUF9QQUdFX0JSRUFLX0lOU0lERSwKLSAg
ICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAgIENTU19QUk9QX1RFWFRfSU5ERU5ULAotICAgIENT
U19QUk9QX1dJRE9XUwotfTsKLQotY29uc3QgdW5zaWduZWQgbnVtQmxvY2tQcm9wZXJ0aWVzID0g
c2l6ZW9mKGJsb2NrUHJvcGVydGllcykgLyBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzWzBdKTsKLQot
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdAotewotICAgIHJldHVybiBjb3B5
UHJvcGVydGllc0luU2V0KGJsb2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9j
a1Byb3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1v
dmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChp
bmhlcml0YWJsZVByb3BlcnRpZXMsIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyk7Ci19Ci0KLVBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU1N0eWxlRGVjbGFyYXRpb246
OmNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3QKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBsaXN0OwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVl
LnJlbGVhc2UoKSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbigwLCBsaXN0KTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCAqc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICAgICAgbV92YWx1ZXMucmVtb3ZlKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgp
LCBmYWxzZSkpOwotICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKGNoYW5nZWQpCi0gICAgICAgIHNldENoYW5nZWQoKTsKLX0KLQotUGFzc1JlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
Om1ha2VNdXRhYmxlKCkKLXsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvcHko
KSBjb25zdAotewotICAgIHJldHVybiBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwg
bV92YWx1ZXMpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi11bnNp
Z25lZCBzaG9ydCBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gQ1NTX0lOSEVSSVQ7Ci19Ci0KLVN0cmluZyBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3Nz
VGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJpbmhlcml0IjsKLX0KLQotdW5zaWduZWQgc2hv
cnQgQ1NTSW5pdGlhbFZhbHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAoteyAKLSAgICByZXR1cm4g
Q1NTX0lOSVRJQUw7IAotfQotCi1TdHJpbmcgQ1NTSW5pdGlhbFZhbHVlOjpjc3NUZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gImluaXRpYWwiOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KIENTU1ZhbHVlTGlzdDo6fkNTU1ZhbHVlTGlzdCgpCiB7CiAgICAgZm9y
IChDU1NWYWx1ZSAqdmFsID0gbV92YWx1ZXMuZmlyc3QoKTsgdmFsOyB2YWwgPSBtX3ZhbHVlcy5u
ZXh0KCkpCkBAIC02OTksNjU3ICs1Myw0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJp
bWl0aXZlVmFsdWUoKQotewotICAgIG1fdHlwZSA9IDA7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NQcmltaXRpdmVWYWx1ZShpbnQgaWRlbnQpCi17Ci0gICAgbV92YWx1ZS5pZGVudCA9IGlk
ZW50OwotICAgIG1fdHlwZSA9IENTU19JREVOVDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotewotICAgIG1fdmFs
dWUubnVtID0gbnVtOwotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmIHN0ciwgVW5pdFR5cGVzIHR5cGUpCi17
Ci0gICAgaWYgKChtX3ZhbHVlLnN0cmluZyA9IHN0ci5pbXBsKCkpKQotICAgICAgICBtX3ZhbHVl
LnN0cmluZy0+cmVmKCk7Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4gYykKLXsKLSAgICBtX3Zh
bHVlLmNvdW50ZXIgPSBjLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfQ09VTlRFUjsKLX0K
LQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdElt
cGw+IHIpCi17Ci0gICAgbV92YWx1ZS5yZWN0ID0gci5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0g
Q1NTX1JFQ1Q7Ci19Ci0KLSNpZiBfX0FQUExFX18KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmlt
aXRpdmVWYWx1ZShQYXNzUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gcikKLXsKLSAgICBtX3ZhbHVl
LnJlZ2lvbiA9IHIucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19EQVNIQk9BUkRfUkVHSU9O
OwotfQotI2VuZGlmCi0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShSR0JB
MzIgY29sb3IpCi17Ci0gICAgbV92YWx1ZS5yZ2Jjb2xvciA9IGNvbG9yOwotICAgIG1fdHlwZSA9
IENTU19SR0JDT0xPUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVl
KFBhc3NSZWZQdHI8UGFpcj4gcCkKLXsKLSAgICBtX3ZhbHVlLnBhaXIgPSBwLnJlbGVhc2UoKTsK
LSAgICBtX3R5cGUgPSBDU1NfUEFJUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6On5DU1NQcmlt
aXRpdmVWYWx1ZSgpCi17Ci0gICAgY2xlYW51cCgpOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZh
bHVlOjpjbGVhbnVwKCkKLXsKLSAgICBzd2l0Y2gobV90eXBlKSB7Ci0gICAgY2FzZSBDU1NfU1RS
SU5HOgotICAgIGNhc2UgQ1NTX1VSSToKLSAgICBjYXNlIENTU19BVFRSOgotICAgICAgICBpZiAo
bV92YWx1ZS5zdHJpbmcpCi0gICAgICAgICAgICBtX3ZhbHVlLnN0cmluZy0+ZGVyZWYoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ09VTlRFUjoKLSAgICAgICAgbV92YWx1ZS5jb3Vu
dGVyLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19SRUNUOgotICAgICAg
ICBtX3ZhbHVlLnJlY3QtPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1BB
SVI6Ci0gICAgICAgIG1fdmFsdWUucGFpci0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYg
X19BUFBMRV9fCi0gICAgY2FzZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgaWYgKG1f
dmFsdWUucmVnaW9uKQotICAgICAgICAgICAgbV92YWx1ZS5yZWdpb24tPmRlcmVmKCk7Ci0gICAg
ICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgbV90eXBlID0gMDsKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVu
Z3RoSW50KFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0
ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1w
cmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdl
Ci0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3Nl
IHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAt
MC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFYIHx8IHJlc3VsdCA8
IElOVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgICAg
Ci19Ci0KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHls
ZSAqc3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBtdWx0
aXBsaWVyICogY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNv
bnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcu
LCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2Un
cmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9
IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRf
TUFYIHx8IHJlc3VsdCA8IElOVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAo
aW50KXJlc3VsdDsgIAotfQotCi1jb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZmZmZm
OyAvLyBtYXggdmFsdWUgZm9yIGEgMjgtYml0IGludAotY29uc3QgaW50IGludE1pbkZvckxlbmd0
aCA9ICgtMHg3ZmZmZmZmLTEpOyAvLyBtaW4gdmFsdWUgZm9yIGEgMjgtYml0IGludAotCi0vLyBM
ZW5ndGhzIGV4cGVjdCBhbiBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8g
Y2hlY2sgZm9yIGEgZGlmZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpj
b21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3Vi
bGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlz
IGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBl
LmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYg
d2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0
ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBp
bnRNYXhGb3JMZW5ndGggfHwgcmVzdWx0IDwgaW50TWluRm9yTGVuZ3RoKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gKGludClyZXN1bHQ7ICAgIAotfQotCi0vLyBMZW5ndGhzIGV4cGVj
dCBhbiBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGEg
ZGlmZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3Ro
SW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0g
ICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUp
OwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3Vs
dGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdv
IGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdl
ciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAg
Ci0gICAgaWYgKHJlc3VsdCA+IGludE1heEZvckxlbmd0aCB8fCByZXN1bHQgPCBpbnRNaW5Gb3JM
ZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgIAotfQot
Ci1zaG9ydCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxl
ICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxl
KTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1
bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBn
byBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVn
ZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAg
IAotICAgIGlmIChyZXN1bHQgPiBTSFJUX01BWCB8fCByZXN1bHQgPCBTSFJUX01JTikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChzaG9ydClyZXN1bHQ7ICAgIAotfQotCi1zaG9ydCBD
U1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpzdHlsZSwg
ZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBj
b21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBp
cyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4
LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkg
Y2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwg
MCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IFNIUlRfTUFYIHx8IHJl
c3VsdCA8IFNIUlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKHNob3J0KXJl
c3VsdDsgIAotfQotCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhGbG9h
dChSZW5kZXJTdHlsZSAqc3R5bGUsIGJvb2wgYXBwbHlab29tRmFjdG9yKQotewotICAgIHVuc2ln
bmVkIHNob3J0IHR5cGUgPSBwcmltaXRpdmVUeXBlKCk7Ci0KLSAgICAvLyBXZSBhbHdheXMgYXNz
dW1lIDk2IENTUyBwaXhlbHMgaW4gYSBDU1MgaW5jaC4gVGhpcyBpcyB0aGUgY29sZCBoYXJkIHRy
dXRoIG9mIHRoZSBXZWIuCi0gICAgLy8gQXQgaGlnaCBEUEksIHdlIG1heSBzY2FsZSBhIENTUyBw
aXhlbCwgYnV0IHRoZSByYXRpbyBvZiB0aGUgQ1NTIHBpeGVsIHRvIHRoZSBzby1jYWxsZWQKLSAg
ICAvLyAiYWJzb2x1dGUiIENTUyBsZW5ndGggdW5pdHMgbGlrZSBpbmNoIGFuZCBwdCBpcyBhbHdh
eXMgZml4ZWQgYW5kIG5ldmVyIGNoYW5nZXMuCi0gICAgZG91YmxlIGNzc1BpeGVsc1BlckluY2gg
PSA5Ni47Ci0KLSAgICBkb3VibGUgZmFjdG9yID0gMS47Ci0gICAgc3dpdGNoKHR5cGUpIHsKLSAg
ICBjYXNlIENTU19FTVM6Ci0gICAgICAgIGZhY3RvciA9IGFwcGx5Wm9vbUZhY3RvciA/Ci0gICAg
ICAgICAgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIDoKLSAgICAgICAg
ICBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU19FWFM6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBidWcg
cmlnaHQgbm93IHdoZXJlIHRoZSB6b29tIHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lcyB0
byBFWCB1bml0cy4KLSAgICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgdG8gY29tcHV0ZSBFWCB1c2lu
ZyBmb250TWV0cmljcyBmb3IgdGhlIG9yaWdpbmFsIHNwZWNpZmllZFNpemUgYW5kIG5vdCB1c2UK
LSAgICAgICAgLy8gb3VyIGFjdHVhbCBjb25zdHJ1Y3RlZCByZW5kZXJpbmcgZm9udC4KLSAgICAg
ICAgZmFjdG9yID0gc3R5bGUtPmZvbnQoKS54SGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIENTU19QWDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ006Ci0g
ICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gvMi41NDsgLy8gKDIuNTQgY20vaW4pCi0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX01NOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhl
bHNQZXJJbmNoLzI1LjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0lOOgotICAgICAg
ICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U19QVDoKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC83Mi47Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTX1BDOgotICAgICAgICAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAg
IGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gqMTIuLzcyLjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiBnZXRGbG9h
dFZhbHVlKCkgKiBmYWN0b3I7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldEZsb2F0
VmFsdWUoIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAvLyAjIyMg
Y2hlY2sgaWYgcHJvcGVydHkgc3VwcG9ydHMgdGhpcyB0eXBlCi0gICAgaWYgKG1fdHlwZSA+IENT
U19ESU1FTlNJT04pIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIC8vaWYobV90eXBlID4gQ1NTX0RJTUVOU0lPTikgdGhyb3cgRE9NRXhjZXB0
aW9uKElOVkFMSURfQUNDRVNTX0VSUik7Ci0gICAgbV92YWx1ZS5udW0gPSBmbG9hdFZhbHVlOwot
ICAgIG1fdHlwZSA9IHVuaXRUeXBlOwotfQotCi1kb3VibGUgc2NhbGVGYWN0b3JGb3JDb252ZXJz
aW9uKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQotewotICAgIGRvdWJsZSBjc3NQaXhlbHNQZXJJ
bmNoID0gOTYuMDsKLSAgICBkb3VibGUgZmFjdG9yID0gMS4wOwotICAgIAotICAgIHN3aXRjaCh1
bml0VHlwZSkgewotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgot
ICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDIuNTQ7IC8vICgyLjU0IGNt
L2luKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19NTToKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyAyNS40Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19J
TjoKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgICAgICAg
ICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDOgotICAgICAgICAgICAgZmFj
dG9yID0gY3NzUGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOyAvLyAxIHBjID09IDEyIHB0Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFjdG9yOwotfQotCi1kb3VibGUgQ1NTUHJpbWl0aXZl
VmFsdWU6OmdldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCi17Ci0gICAgaWYg
KHVuaXRUeXBlID09IG1fdHlwZSB8fCB1bml0VHlwZSA8IENTU19QWCB8fCB1bml0VHlwZSA+IENT
U19QQykKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUubnVtOwotICAgIAotICAgIGRvdWJsZSBjb252
ZXJ0ZWRWYWx1ZSA9IG1fdmFsdWUubnVtOwotICAgIAotICAgIC8vIEZpcnN0IGNvbnZlcnQgdGhl
IHZhbHVlIGZyb20gbV90eXBlIGludG8gQ1NTUGl4ZWxzCi0gICAgZG91YmxlIGZhY3RvciA9IHNj
YWxlRmFjdG9yRm9yQ29udmVyc2lvbihtX3R5cGUpOwotICAgIGNvbnZlcnRlZFZhbHVlICo9IGZh
Y3RvcjsKLSAgICAKLSAgICAvLyBOb3cgY29udmVydCBmcm9tIENTU1BpeGVscyB0byB0aGUgc3Bl
Y2lmaWVkIHVuaXRUeXBlCi0gICAgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVu
aXRUeXBlKTsKLSAgICBjb252ZXJ0ZWRWYWx1ZSAvPSBmYWN0b3I7Ci0gICAgCi0gICAgcmV0dXJu
IGNvbnZlcnRlZFZhbHVlOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRTdHJpbmdW
YWx1ZSggdW5zaWduZWQgc2hvcnQgc3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nICZzdHJpbmdWYWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAg
ICAvL2lmKG1fdHlwZSA8IENTU19TVFJJTkcpIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElEX0FD
Q0VTU19FUlIpOwotICAgIC8vaWYobV90eXBlID4gQ1NTX0FUVFIpIHRocm93IERPTUV4Y2VwdGlv
bihJTlZBTElEX0FDQ0VTU19FUlIpOwotICAgIGlmIChtX3R5cGUgPCBDU1NfU1RSSU5HIHx8IG1f
dHlwZSA+IENTU19BVFRSKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoc3RyaW5nVHlwZSAhPSBDU1NfSURFTlQpIHsKLSAgICAgICAg
bV92YWx1ZS5zdHJpbmcgPSBzdHJpbmdWYWx1ZS5pbXBsKCk7Ci0gICAgICAgIG1fdmFsdWUuc3Ry
aW5nLT5yZWYoKTsKLSAgICAgICAgbV90eXBlID0gc3RyaW5nVHlwZTsKLSAgICB9Ci0gICAgLy8g
IyMjIHBhcnNlIGlkZW50Ci19Ci0KLVN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0U3RyaW5n
VmFsdWUoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NT
X1NUUklORzoKLSAgICAgICAgY2FzZSBDU1NfQVRUUjoKLSAgICAgICAgY2FzZSBDU1NfVVJJOgot
ICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuc3RyaW5nOwotICAgICAgICBjYXNlIENTU19JREVO
VDoKLSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZU5hbWUobV92YWx1ZS5pZGVudCk7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIENTUyAyLjEgc3BlYyBzYXlz
IHlvdSBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi11bnNpZ25lZCBzaG9ydCBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NT
X1BSSU1JVElWRV9WQUxVRTsKLX0KLQotYm9vbCBDU1NQcmltaXRpdmVWYWx1ZTo6cGFyc2VTdHJp
bmcoIGNvbnN0IFN0cmluZyAmLypzdHJpbmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElkZW50KCkKLXsK
LSAgICBpZihtX3R5cGUgIT0gQ1NTX0lERU5UKSByZXR1cm4gMDsKLSAgICByZXR1cm4gbV92YWx1
ZS5pZGVudDsKLX0KLQotU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QK
LXsKLSAgICAvLyAjIyMgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbnN0ZWFkIG9mIGEgZ2Vu
ZXJhdGVkIG9uZSAoZS5nLiBjb2xvcgotICAgIC8vIG5hbWUgaWYgaXQgd2FzIHNwZWNpZmllZCkg
LSBjaGVjayB3aGF0IHNwZWMgc2F5cyBhYm91dCB0aGlzCi0gICAgU3RyaW5nIHRleHQ7Ci0gICAg
c3dpdGNoICggbV90eXBlICkgewotICAgICAgICBjYXNlIENTU19VTktOT1dOOgotICAgICAgICAg
ICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfTlVNQkVSOgot
ICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgdGV4
dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICIlIjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU19FTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1i
ZXIobV92YWx1ZS5udW0pICsgImVtIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU19FWFM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgImV4IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QWDoKLSAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHgiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICAgICAgdGV4dCA9IFN0
cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJjbSI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NfTU06Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92
YWx1ZS5udW0pICsgIm1tIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19J
TjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaW4i
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICAgICAg
dGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwdCI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NfUEM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpu
dW1iZXIobV92YWx1ZS5udW0pICsgInBjIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU19ERUc6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5u
dW0pICsgImRlZyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUkFEOgot
ICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAgICB0
ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImdyYWQiOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX01TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6
bnVtYmVyKG1fdmFsdWUubnVtKSArICJtcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NfUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51
bSkgKyAicyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSFo6Ci0gICAg
ICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImh6IjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19LSFo6Ci0gICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImtoeiI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NfRElNRU5TSU9OOgotICAgICAgICAgICAgLy8gIyMjCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAgICAgICAgICAgdGV4dCA9
IHF1b3RlU3RyaW5nSWZOZWVkZWQobV92YWx1ZS5zdHJpbmcpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTX1VSSToKLSAgICAgICAgICAgIHRleHQgPSAidXJsKCIgKyBTdHJp
bmcobV92YWx1ZS5zdHJpbmcpICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ1NTX0lERU5UOgotICAgICAgICAgICAgdGV4dCA9IGdldFZhbHVlTmFtZShtX3ZhbHVlLmlk
ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19BVFRSOgotICAgICAg
ICAgICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQ09VTlRF
UjoKLSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTX1JFQ1Q6IHsKLSAgICAgICAgICAgIFJlY3RJbXBsKiByZWN0VmFsID0gZ2V0UmVjdFZhbHVl
KCk7Ci0gICAgICAgICAgICB0ZXh0ID0gInJlY3QoIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVj
dFZhbC0+dG9wKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZh
bC0+cmlnaHQoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFs
LT5ib3R0b20oKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFs
LT5sZWZ0KCktPmNzc1RleHQoKSArICIpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ1NTX1JHQkNPTE9SOiB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvciht
X3ZhbHVlLnJnYmNvbG9yKTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwgMHhGRikK
LSAgICAgICAgICAgICAgICB0ZXh0ID0gInJnYmEoIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICB0ZXh0ID0gInJnYigiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51
bWJlcihjb2xvci5yZWQoKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51
bWJlcihjb2xvci5ncmVlbigpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6
bnVtYmVyKGNvbG9yLmJsdWUoKSk7Ci0gICAgICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA8IDB4
RkYpCi0gICAgICAgICAgICAgICAgdGV4dCArPSAiLCAiICsgU3RyaW5nOjpudW1iZXIoKGZsb2F0
KWNvbG9yLmFscGhhKCkgLyAweEZGKTsKLSAgICAgICAgICAgIHRleHQgKz0gIikiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NfUEFJUjoKLSAgICAgICAg
ICAgIHRleHQgPSBtX3ZhbHVlLnBhaXItPmZpcnN0KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAg
IHRleHQgKz0gIiAiOwotICAgICAgICAgICAgdGV4dCArPSBtX3ZhbHVlLnBhaXItPnNlY29uZCgp
LT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAgICAgICAg
Y2FzZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgICAgIGZvciAoRGFzaGJvYXJkUmVn
aW9uKiByZWdpb24gPSBnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOyByZWdpb247IHJlZ2lvbiA9
IHJlZ2lvbi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICJkYXNoYm9h
cmQtcmVnaW9uKCI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fbGFiZWw7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAgICAgICAgICAgICAg
ICAgdGV4dCArPSAiIGNpcmNsZSAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+
bV9pc1JlY3RhbmdsZSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIHJlY3RhbmdsZSAi
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAg
ICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPnJpZ2h0KCktPmNzc1RleHQoKSArICIgIjsKLSAg
ICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+Ym90dG9tKCktPmNzc1RleHQoKSArICIgIjsK
LSAgICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0gICAg
ICAgICAgICAgICAgdGV4dCArPSAiKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
UmVjdEltcGw6On5SZWN0SW1wbCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhaXI6On5QYWly
KCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1ZShj
b25zdCBTdHJpbmcmIHVybCwgU3R5bGVCYXNlICpzdHlsZSkKLSAgICA6IENTU1ByaW1pdGl2ZVZh
bHVlKHVybCwgQ1NTX1VSSSksIG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKLXsK
LX0KLQotQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1ZSgpCi0gICAgOiBDU1NQcmltaXRpdmVW
YWx1ZShDU1NfVkFMX05PTkUpLCBtX2ltYWdlKDApLCBtX2FjY2Vzc2VkSW1hZ2UodHJ1ZSkKLXsK
LX0KLQotQ1NTSW1hZ2VWYWx1ZTo6fkNTU0ltYWdlVmFsdWUoKQotewotICAgIGlmIChtX2ltYWdl
KQotICAgICAgICBtX2ltYWdlLT5kZXJlZih0aGlzKTsKLX0KLQotQ2FjaGVkSW1hZ2UqIENTU0lt
YWdlVmFsdWU6OmltYWdlKERvY0xvYWRlciogbG9hZGVyKQotewotICAgIGlmICghbV9hY2Nlc3Nl
ZEltYWdlKSB7Ci0gICAgICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0KLSAgICAgICAgaWYg
KGxvYWRlcikKLSAgICAgICAgICAgIG1faW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZShnZXRT
dHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pbWFnZSA9IENhY2hl
OjpyZXF1ZXN0SW1hZ2UoMCwgZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobV9pbWFnZSkKLSAgICAgICAgICAgIG1faW1hZ2UtPnJlZih0aGlzKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIG1faW1hZ2U7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NCb3Jk
ZXJJbWFnZVZhbHVlOjpDU1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1
ZT4gaW1hZ2UsCi0gICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4gaW1hZ2VSZWN0LCBpbnQgaG9yaXpv
bnRhbFJ1bGUsIGludCB2ZXJ0aWNhbFJ1bGUpCi0gICAgOiBtX2ltYWdlKGltYWdlKSwgbV9pbWFn
ZVNsaWNlUmVjdChpbWFnZVJlY3QpCi0gICAgLCBtX2hvcml6b250YWxTaXplUnVsZShob3Jpem9u
dGFsUnVsZSksIG1fdmVydGljYWxTaXplUnVsZSh2ZXJ0aWNhbFJ1bGUpCi17Ci19Ci0KLVN0cmlu
ZyBDU1NCb3JkZXJJbWFnZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAvLyBJbWFnZSBm
aXJzdC4KLSAgICBTdHJpbmcgdGV4dChtX2ltYWdlLT5jc3NUZXh0KCkpOwotICAgIHRleHQgKz0g
IiAiOwotICAgIAotICAgIC8vIE5vdyB0aGUgcmVjdCwgYnV0IGl0IGlzbid0IHJlYWxseSBhIHJl
Y3QsIHNvIHdlIGR1bXAgbWFudWFsbHkKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPnRv
cCgpLT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2ltYWdlU2xp
Y2VSZWN0LT5yaWdodCgpLT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCAr
PSBtX2ltYWdlU2xpY2VSZWN0LT5ib3R0b20oKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAi
OwotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0gICAg
Ci0gICAgLy8gTm93IHRoZSBrZXl3b3Jkcy4KLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9
IENTU1ByaW1pdGl2ZVZhbHVlKG1faG9yaXpvbnRhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0gICAg
dGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX3ZlcnRpY2FsU2l6
ZVJ1bGUpLmNzc1RleHQoKTsKLQotICAgIHJldHVybiB0ZXh0OwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotRm9udEZhbWlseVZhbHVlOjpGb250RmFtaWx5VmFsdWUoY29uc3QgRGVwcmVjYXRl
ZFN0cmluZyYgc3RyaW5nKQotICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUoU3RyaW5nKCksIENTU19T
VFJJTkcpCi17Ci0gICAgc3RhdGljIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uIHBhcmVuUmVnKCIg
XFwoLipcXCkkIik7Ci0gICAgc3RhdGljIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uIGJyYWNlUmVn
KCIgXFxbLipcXF0kIik7Ci0KLSAgICBwYXJzZWRGb250TmFtZSA9IHN0cmluZzsKLSAgICAvLyBh
IGxhbmd1YWdlIHRhZyBpcyBvZnRlbiBhZGRlZCBpbiBicmFjZXMgYXQgdGhlIGVuZC4gUmVtb3Zl
IGl0LgotICAgIHBhcnNlZEZvbnROYW1lLnJlcGxhY2UocGFyZW5SZWcsICIiKTsKLSAgICAvLyBy
ZW1vdmUgW1hmdF0gcXVhbGlmaWVycwotICAgIHBhcnNlZEZvbnROYW1lLnJlcGxhY2UoYnJhY2VS
ZWcsICIiKTsKLX0KLQotU3RyaW5nIEZvbnRGYW1pbHlWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHF1b3RlU3RyaW5nSWZOZWVkZWQocGFyc2VkRm9udE5hbWUpOwotfQotCi1T
dHJpbmcgRm9udFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAvLyBmb250IHZhcmlhbnQg
d2VpZ2h0IHNpemUgLyBsaW5lLWhlaWdodCBmYW1pbHkgCi0KLSAgICBTdHJpbmcgcmVzdWx0KCIi
KTsKLQotICAgIGlmIChzdHlsZSkgewotICAgICAgICByZXN1bHQgKz0gc3R5bGUtPmNzc1RleHQo
KTsKLSAgICB9Ci0gICAgaWYgKHZhcmlhbnQpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IHZhcmlh
bnQtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHdlaWdodCkgewotICAgICAgICBpZiAoIXJl
c3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1
bHQgKz0gd2VpZ2h0LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmIChzaXplKSB7Ci0gICAgICAg
IGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAg
ICAgIHJlc3VsdCArPSBzaXplLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmIChsaW5lSGVpZ2h0
KSB7Ci0gICAgICAgIGlmICghc2l6ZSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAg
ICAgIHJlc3VsdCArPSAiLyI7Ci0gICAgICAgIHJlc3VsdCArPSBsaW5lSGVpZ2h0LT5jc3NUZXh0
KCk7Ci0gICAgfQotICAgIGlmIChmYW1pbHkpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IGZhbWls
eS0+Y3NzVGV4dCgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gICAgCi0KLS8v
IFVzZWQgZm9yIHRleHQtc2hhZG93IGFuZCBib3gtc2hhZG93Ci1TaGFkb3dWYWx1ZTo6U2hhZG93
VmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gX3gsCi0gICAgUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gX3ksCi0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
X2JsdXIsCi0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gX2NvbG9yKQotICAgIDog
eChfeCksIHkoX3kpLCBibHVyKF9ibHVyKSwgY29sb3IoX2NvbG9yKQotewotfQotCi1TdHJpbmcg
U2hhZG93VmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyB0ZXh0KCIiKTsKLQot
ICAgIGlmIChjb2xvcikKLSAgICAgICAgdGV4dCArPSBjb2xvci0+Y3NzVGV4dCgpOwotICAgIGlm
ICh4KSB7Ci0gICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0ZXh0ICs9
ICIgIjsKLSAgICAgICAgdGV4dCArPSB4LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh5KSB7
Ci0gICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0ZXh0ICs9ICIgIjsK
LSAgICAgICAgdGV4dCArPSB5LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmIChibHVyKSB7Ci0g
ICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0ZXh0ICs9ICIgIjsKLSAg
ICAgICAgdGV4dCArPSBibHVyLT5jc3NUZXh0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRleHQ7
Ci19Ci0KLVN0cmluZyBDU1NQcm9wZXJ0eTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdldFByb3BlcnR5TmFtZShpZCgpKSArICI6ICIgKyBtX3ZhbHVlLT5jc3NUZXh0KCkKLSAgICAg
ICAgKyAoaXNJbXBvcnRhbnQoKSA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAiOyAiOwotfQotCi1i
b29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTUHJvcGVydHkgJmEsIGNvbnN0IENTU1Byb3BlcnR5ICZi
KQotewotICAgIHJldHVybiBhLm1faWQgPT0gYi5tX2lkICYmIGEubV9pbXBvcnRhbnQgPT0gYi5t
X2ltcG9ydGFudCAmJiBhLm1fdmFsdWUgPT0gYi5tX3ZhbHVlOwotfQotCiB9CkluZGV4OiBjc3Mv
Y3NzX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9jc3NfYmFzZS5jcHAJKHJldmlzaW9uIDE0
NDA2KQorKysgY3NzL2Nzc19iYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBA
QAogI2luY2x1ZGUgImNzc19iYXNlLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgImNzc192YWx1ZWltcGwuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKSW5kZXg6IGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMzkgKzIwLDIxIEBACiAgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZuZGVmIENTU19jc3NfdmFsdWVpbXBs
X2hfCi0jZGVmaW5lIENTU19jc3NfdmFsdWVpbXBsX2hfCisjaWZuZGVmIENTU1ByaW1pdGl2ZVZh
bHVlX0gKKyNkZWZpbmUgQ1NTUHJpbWl0aXZlVmFsdWVfSAogCi0jaW5jbHVkZSAiQ2FjaGVkT2Jq
ZWN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiY3NzX2Jhc2UuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVk
UHRyTGlzdC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJEZXBy
ZWNhdGVkVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotY2xhc3Mg
UVBhaW50RGV2aWNlTWV0cmljczsKKyNpbmNsdWRlICJDU1NWYWx1ZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ2Fj
aGVkSW1hZ2U7CiBjbGFzcyBDb3VudGVyOwotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgTm9kZTsK
K2NsYXNzIERhc2hib2FyZFJlZ2lvbjsKIGNsYXNzIFBhaXI7CiBjbGFzcyBSZWN0SW1wbDsKIGNs
YXNzIFJlbmRlclN0eWxlOwogCi0jaWYgX19BUFBMRV9fCi1jbGFzcyBEYXNoYm9hcmRSZWdpb247
Ci0jZW5kaWYKLQogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotZXh0ZXJuIGNvbnN0IGlu
dCBpbmhlcml0YWJsZVByb3BlcnRpZXNbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBudW1Jbmhl
cml0YWJsZVByb3BlcnRpZXM7Ci0KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMg
U3R5bGVCYXNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURlY2xhcmF0aW9u
KCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSk7Ci0KLSAgICBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NU
ZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdCA9IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0
UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdl
dFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmlu
ZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAg
Ym9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAg
IAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShp
bnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5
VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJv
cGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50
IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwot
Ci0gICAgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
ZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAKLSAgICB2
b2lkIGRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBhc3NS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29u
c3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBD
U1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQotcHJpdmF0ZToK
LSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci0g
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IENTU1N0eWxlRGVjbGFyYXRp
b24gJik7Ci19OwotCi1jbGFzcyBDU1NWYWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UKLXsKLXB1Ymxp
YzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0gICAgICAgIENTU19JTkhFUklUID0gMCwKLSAgICAg
ICAgQ1NTX1BSSU1JVElWRV9WQUxVRSA9IDEsCi0gICAgICAgIENTU19WQUxVRV9MSVNUID0gMiwK
LSAgICAgICAgQ1NTX0NVU1RPTSA9IDMsCi0gICAgICAgIENTU19JTklUSUFMID0gNAotICAgIH07
Ci0KLSAgICBDU1NWYWx1ZSgpIDogU3R5bGVCYXNlKDApIHsgfQotCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NfQ1VTVE9NOyB9Ci0g
ICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIHNldENzc1Rl
eHQoY29uc3QgU3RyaW5nJikgeyB9IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNGb250VmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQotfTsKLQotY2xhc3MgQ1NTSW5oZXJpdGVk
VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQot
ewotcHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NT
VmFsdWVMaXN0IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NT
VmFsdWVMaXN0KCk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5jb3VudCgpOyB9Ci0gICAgQ1NTVmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX3ZhbHVlcy5hdChpbmRleCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlTGlz
dCgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFs
dWVUeXBlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7
Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAg
RGVwcmVjYXRlZFB0ckxpc3Q8Q1NTVmFsdWU+IG1fdmFsdWVzOwotfTsKLQotCiBjbGFzcyBDU1NQ
cmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQogewogcHVibGljOgpAQCAtMjgyLDI3OSAr
MTY0LDYgQEAKICAgICB9IG1fdmFsdWU7CiB9OwogCi0vLyBUaGlzIHZhbHVlIGlzIHVzZWQgdG8g
aGFuZGxlIHF1aXJreSBtYXJnaW5zIGluIHJlZmxvdyByb290cyAoYm9keSwgdGQsIGFuZCB0aCkg
bGlrZSBXaW5JRS4KLS8vIFRoZSBiYXNpYyBpZGVhIGlzIHRoYXQgYSBzdHlsZXNoZWV0IGNhbiB1
c2UgdGhlIHZhbHVlIF9fcWVtIChmb3IgcXVpcmt5IGVtKSBpbnN0ZWFkIG9mIGVtCi0vLyBpbiBh
IHN0eWxlc2hlZXQuICBXaGVuIHRoZSBxdWlya3kgdmFsdWUgaXMgdXNlZCwgaWYgeW91J3JlIGlu
IHF1aXJrcyBtb2RlLCB0aGUgbWFyZ2luIHdpbGwKLS8vIGNvbGxhcHNlIGF3YXkgaW5zaWRlIGEg
dGFibGUgY2VsbC4KLWNsYXNzIENTU1F1aXJrUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgQ1NTUHJp
bWl0aXZlVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlKGRvdWJs
ZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotICAgICAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKG51bSwg
dHlwZSkge30KLQotICAgIHZpcnR1YWwgYm9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiB0cnVl
OyB9Ci19OwotCi1jbGFzcyBDb3VudGVyIDogcHVibGljIFNoYXJlZDxDb3VudGVyPiB7Ci1wdWJs
aWM6Ci0gICAgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7
IH0KLSAgICBTdHJpbmcgbGlzdFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9saXN0U3R5bGU7IH0K
LSAgICBTdHJpbmcgc2VwYXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zZXBhcmF0b3I7IH0KLQot
ICAgIFN0cmluZyBtX2lkZW50aWZpZXI7Ci0gICAgU3RyaW5nIG1fbGlzdFN0eWxlOwotICAgIFN0
cmluZyBtX3NlcGFyYXRvcjsKLX07Ci0KLWNsYXNzIFJlY3RJbXBsIDogcHVibGljIFNoYXJlZDxS
ZWN0SW1wbD4gewotcHVibGljOgotICAgIHZpcnR1YWwgflJlY3RJbXBsKCk7Ci0KLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogdG9wKCkgY29uc3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0LmdldCgpOyB9
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9t
LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGxlZnQoKSBjb25zdCB7IHJldHVybiBt
X2xlZnQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsgfQotICAgIHZvaWQgc2V0UmlnaHQoUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmlnaHQpIHsgbV9yaWdodCA9IHJpZ2h0OyB9Ci0gICAgdm9p
ZCBzZXRCb3R0b20oUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm90dG9tKSB7IG1fYm90
dG9tID0gYm90dG9tOyB9Ci0gICAgdm9pZCBzZXRMZWZ0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX3RvcDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fcmlnaHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVmdDsKLX07Ci0KLS8vIEEgcHJpbWl0aXZlIHZh
bHVlIHJlcHJlc2VudGluZyBhIHBhaXIuICBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvcGVydGllcyBs
aWtlIGJvcmRlci1yYWRpdXMsIGJhY2tncm91bmQtc2l6ZS9wb3NpdGlvbiwKLS8vIGFuZCBib3Jk
ZXItc3BhY2luZyAoYWxsIG9mIHdoaWNoIGFyZSBzcGFjZS1zZXBhcmF0ZWQgc2V0cyBvZiB0d28g
dmFsdWVzKS4gIEF0IHRoZSBtb21lbnQgd2UgYXJlIG9ubHkgdXNpbmcgaXQgZm9yCi0vLyBib3Jk
ZXItcmFkaXVzIGFuZCBiYWNrZ3JvdW5kLXNpemUsIGJ1dCAoRklYTUUpIGJvcmRlci1zcGFjaW5n
IGFuZCBiYWNrZ3JvdW5kLXBvc2l0aW9uIGNvdWxkIGJlIGNvbnZlcnRlZCBvdmVyIHRvIHVzZQot
Ly8gaXQgKGVsaW1pbmF0aW5nIHNvbWUgZXh0cmEgLXdlYmtpdC0gaW50ZXJuYWwgcHJvcGVydGll
cykuCi1jbGFzcyBQYWlyIDogcHVibGljIFNoYXJlZDxQYWlyPiB7Ci1wdWJsaWM6Ci0gICAgUGFp
cigpIDogbV9maXJzdCgwKSwgbV9zZWNvbmQoMCkgeyB9Ci0gICAgUGFpcihQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBmaXJzdCwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vj
b25kKQotICAgICAgICA6IG1fZmlyc3QoZmlyc3QpLCBtX3NlY29uZChzZWNvbmQpIHsgfQotICAg
IHZpcnR1YWwgflBhaXIoKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlyc3QuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25k
KCkgY29uc3QgeyByZXR1cm4gbV9zZWNvbmQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0Rmlyc3Qo
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmlyc3QpIHsgbV9maXJzdCA9IGZpcnN0OyB9
Ci0gICAgdm9pZCBzZXRTZWNvbmQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25k
KSB7IG1fc2Vjb25kID0gc2Vjb25kOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IG1fZmlyc3Q7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Nl
Y29uZDsKLX07Ci0KLWNsYXNzIERhc2hib2FyZFJlZ2lvbiA6IHB1YmxpYyBSZWN0SW1wbCB7Ci1w
dWJsaWM6Ci0gICAgRGFzaGJvYXJkUmVnaW9uKCkgOiBtX2lzQ2lyY2xlKDApLCBtX2lzUmVjdGFu
Z2xlKDApIHsgfQotCi0gICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gbV9uZXh0OwotICAgIFN0
cmluZyBtX2xhYmVsOwotICAgIFN0cmluZyBtX2dlb21ldHJ5VHlwZTsKLSAgICBib29sIG1faXND
aXJjbGUgOiAxOwotICAgIGJvb2wgbV9pc1JlY3RhbmdsZSA6IDE7Ci19OwotCi1jbGFzcyBDU1NJ
bWFnZVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlLCBwdWJsaWMgQ2FjaGVkT2JqZWN0
Q2xpZW50Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTSW1hZ2VWYWx1ZSgpOwotICAgIENTU0ltYWdlVmFs
dWUoY29uc3QgU3RyaW5nJiB1cmwsIFN0eWxlQmFzZSopOwotICAgIHZpcnR1YWwgfkNTU0ltYWdl
VmFsdWUoKTsKLQotICAgIENhY2hlZEltYWdlKiBpbWFnZShEb2NMb2FkZXIqKTsKLQotcHJvdGVj
dGVkOgotICAgIENhY2hlZEltYWdlKiBtX2ltYWdlOwotICAgIGJvb2wgbV9hY2Nlc3NlZEltYWdl
OwotfTsKLQotY2xhc3MgQ1NTQm9yZGVySW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewot
cHVibGljOgotICAgIENTU0JvcmRlckltYWdlVmFsdWUoKTsKLSAgICBDU1NCb3JkZXJJbWFnZVZh
bHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4sCi0gICAgICAgIFBhc3NSZWZQdHI8UmVjdElt
cGw+LCBpbnQgaG9yaXpvbnRhbFJ1bGUsIGludCB2ZXJ0aWNhbFJ1bGUpOwotCi0gICAgdmlydHVh
bCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wdWJsaWM6Ci0gICAgLy8gVGhlIGJvcmRlciBp
bWFnZS4KLSAgICBSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4gbV9pbWFnZTsKLQotICAgIC8vIFRoZXNl
IGZvdXIgdmFsdWVzIGFyZSB1c2VkIHRvIG1ha2UgImN1dHMiIGluIHRoZSBpbWFnZS4gIFRoZXkg
Y2FuIGJlIG51bWJlcnMKLSAgICAvLyBvciBwZXJjZW50YWdlcy4KLSAgICBSZWZQdHI8UmVjdElt
cGw+IG1faW1hZ2VTbGljZVJlY3Q7Ci0gICAgCi0gICAgLy8gVmFsdWVzIGZvciBob3cgdG8gaGFu
ZGxlIHRoZSBzY2FsaW5nL3N0cmV0Y2hpbmcvdGlsaW5nIG9mIHRoZSBpbWFnZSBzbGljZXMuCi0g
ICAgaW50IG1faG9yaXpvbnRhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8gYWRqdXN0IHRo
ZSB3aWR0aHMgb2YgdGhlIHRvcC9taWRkbGUvYm90dG9tCi0gICAgaW50IG1fdmVydGljYWxTaXpl
UnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgaGVpZ2h0cyBvZiB0aGUgbGVmdC9t
aWRkbGUvcmlnaHQKLX07Ci0KLWNsYXNzIEZvbnRGYW1pbHlWYWx1ZSA6IHB1YmxpYyBDU1NQcmlt
aXRpdmVWYWx1ZQotewotcHVibGljOgotICAgIEZvbnRGYW1pbHlWYWx1ZSggY29uc3QgRGVwcmVj
YXRlZFN0cmluZyAmc3RyaW5nKTsKLSAgICBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBmb250TmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIHBhcnNlZEZvbnROYW1lOyB9Ci0gICAgaW50IGdlbmVyaWNGYW1p
bHlUeXBlKCkgY29uc3QgeyByZXR1cm4gX2dlbmVyaWNGYW1pbHlUeXBlOyB9Ci0KLSAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHBhcnNl
ZEZvbnROYW1lOwotcHJpdmF0ZToKLSAgICBpbnQgX2dlbmVyaWNGYW1pbHlUeXBlOwotfTsKLQot
Y2xhc3MgRm9udFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRW
YWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
c3R5bGU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YXJpYW50OwotICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gd2VpZ2h0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gc2l6ZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVIZWlnaHQ7Ci0gICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gZmFtaWx5OwotfTsKLQotLy8gVXNlZCBmb3IgdGV4dC1zaGFk
b3cgYW5kIGJveC1zaGFkb3cKLWNsYXNzIFNoYWRvd1ZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17
Ci1wdWJsaWM6Ci0gICAgU2hhZG93VmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
eCwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geSwKLSAgICAgICAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1ciwKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY29sb3IpOwotICAgIAotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geDsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBibHVy
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3I7Ci19OwotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotLy8gYW5vdGhlciBoZWxwZXIgY2xhc3MKLWNsYXNzIENTU1Byb3Bl
cnR5Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTUHJvcGVydHkoaW50IHByb3BJRCwgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGludCBzaG9ydGhhbmRJRCA9
IDAsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSkKLSAgICAgICAgOiBtX2lkKHByb3BJRCksIG1fc2hv
cnRoYW5kSUQoc2hvcnRoYW5kSUQpLCBtX2ltcG9ydGFudChpbXBvcnRhbnQpLCBtX2ltcGxpY2l0
KGltcGxpY2l0KSwgbV92YWx1ZSh2YWx1ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENTU1By
b3BlcnR5ICZvcGVyYXRvcj0oY29uc3QgQ1NTUHJvcGVydHkmIG8pCi0gICAgewotICAgICAgICBt
X2lkID0gby5tX2lkOwotICAgICAgICBtX3Nob3J0aGFuZElEID0gby5tX3Nob3J0aGFuZElEOwot
ICAgICAgICBtX2ltcG9ydGFudCA9IG8ubV9pbXBvcnRhbnQ7Ci0gICAgICAgIG1fdmFsdWUgPSBv
Lm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgCi0gICAgaW50IGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIGludCBzaG9ydGhhbmRJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvcnRoYW5kSUQ7IH0KLSAgICAKLSAgICBib29sIGlzSW1wb3J0YW50KCkgY29u
c3QgeyByZXR1cm4gbV9pbXBvcnRhbnQ7IH0KLSAgICBib29sIGlzSW1wbGljaXQoKSBjb25zdCB7
IHJldHVybiBtX2ltcGxpY2l0OyB9Ci0KLSAgICBDU1NWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlLmdldCgpOyB9Ci0gICAgCi0gICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LQotICAgIC8vIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGZpdHMgaW4gNCBieXRlcy4KLSAgICBp
bnQgbV9pZDsKLSAgICBpbnQgbV9zaG9ydGhhbmRJRDsgIC8vIElmIHRoaXMgcHJvcGVydHkgd2Fz
IHNldCBhcyBwYXJ0IG9mIGEgc2hvcnRoYW5kLCBnaXZlcyB0aGUgc2hvcnRoYW5kLgotICAgIGJv
b2wgbV9pbXBvcnRhbnQgOiAxOwotICAgIGJvb2wgbV9pbXBsaWNpdCA6IDE7IC8vIFdoZXRoZXIg
b3Igbm90IHRoZSBwcm9wZXJ0eSB3YXMgc2V0IGltcGxpY2l0bHkgYXMgdGhlIHJlc3VsdCBvZiBh
IHNob3J0aGFuZC4KLQotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTUHJvcGVy
dHkgJiwgY29uc3QgQ1NTUHJvcGVydHkgJik7Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG1fdmFs
dWU7Ci19OwotCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NT
dHlsZURlY2xhcmF0aW9uCi17Ci1wdWJsaWM6Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxl
KTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBj
b25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiAmKTsKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSAq
IGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKLQotICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uICZvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gJik7Ci0K
LSAgICB2b2lkIHNldE5vZGUoTm9kZSogbm9kZSkgeyBtX25vZGUgPSBub2RlOyB9Ci0KLSAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1Rl
eHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlD
U1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJv
cGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldFBy
b3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGdl
dFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZW1v
dmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0
YWJsZSgpOwotCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVy
dHk+IHZhbHVlc0l0ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQot
Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGlt
cG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKTsKLSAgICBib29sIHNl
dFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9y
dGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBzZXRQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSkKLSAgICAgICAgeyBFeGNlcHRp
b25Db2RlIGVjOyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJZCwgdmFsdWUsIGltcG9ydGFu
dCwgbm90aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0KLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0
cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkID0g
dHJ1ZSkKLSAgICAgICAgeyBFeGNlcHRpb25Db2RlIGVjOyByZXR1cm4gcmVtb3ZlUHJvcGVydHko
cHJvcGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZWMpOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0K
LSAgICB2b2lkIHNldENoYW5nZWQoKTsKLSAKLSAgICAvLyBzZXRMZW5ndGhQcm9wZXJ0eSB0cmVh
dHMgaW50ZWdlcnMgYXMgcGl4ZWxzISAoTmVlZGVkIGZvciBjb252ZXJzaW9uIG9mIEhUTUwgYXR0
cmlidXRlcy4pCi0gICAgdm9pZCBzZXRMZW5ndGhQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbXVsdGlMZW5ndGggPSBmYWxz
ZSk7Ci0gICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcywgYm9vbCBpbXBvcnRhbnQg
PSBmYWxzZSk7IC8vIHBhcnNlZCBzdHJpbmcgdmFsdWUKLSAgICB2b2lkIHNldEltYWdlUHJvcGVy
dHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgVVJMLCBib29sIGltcG9ydGFudCA9IGZh
bHNlKTsKLSAKLSAgICAvLyBUaGUgZm9sbG93aW5nIHBhcnNlcyBhbiBlbnRpcmUgbmV3IHN0eWxl
IGRlY2xhcmF0aW9uLgotICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0
eWxlRGVjbGFyYXRpb24pOwotCi0gICAgLy8gQmVzaWRlcyBhZGRpbmcgdGhlIHByb3BlcnRpZXMs
IHRoaXMgYWxzbyByZW1vdmVzIGFueSBleGlzdGluZyBwcm9wZXJ0aWVzIHdpdGggdGhlc2UgSURz
LgotICAgIC8vIEl0IGRvZXMgbm8gbm90aWZpY2F0aW9uIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRo
ZSBwYXJzZXIuCi0gICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5
ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotIAotICAgIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdDsKLSAgICB2
b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwotICAgIHZvaWQgcmVtb3ZlSW5oZXJpdGFibGVQ
cm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lkIG1lcmdlKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1ZSk7Ci0gCi1wcml2
YXRlOgotICAgIFN0cmluZyBnZXRTaG9ydEhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMs
IGludCBudW1iZXIpIGNvbnN0OwotICAgIFN0cmluZyBnZXQ0VmFsdWVzKGNvbnN0IGludCogcHJv
cGVydGllcykgY29uc3Q7Ci0gCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4g
bV92YWx1ZXM7Ci0gICAgTm9kZSogbV9ub2RlOwotfTsKLQogfSAvLyBuYW1lc3BhY2UKIAogI2Vu
ZGlmCkluZGV4OiBjc3MvQ1NTR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NHcmFtbWFy
LnkJKHJldmlzaW9uIDE0NDA2KQorKysgY3NzL0NTU0dyYW1tYXIueQkod29ya2luZyBjb3B5KQpA
QCAtMjQsMTMgKzI0LDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIkNT
U01lZGlhUnVsZS5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5jbHVkZSAi
Q1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlICJjc3NfcnVsZWltcGwuaCIKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCiAjaW5jbHVk
ZSAiY3NzcGFyc2VyLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+
CkluZGV4OiBjc3MvU2hhZG93VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvU2hhZG93VmFsdWUu
aAkocmV2aXNpb24gMTQ0MDApCisrKyBjc3MvU2hhZG93VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjAsNDExICsyMCwxMyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBDU1NfY3NzX3ZhbHVlaW1wbF9oXwotI2RlZmluZSBDU1NfY3NzX3ZhbHVlaW1w
bF9oXworI2lmbmRlZiBTaGFkb3dWYWx1ZV9ICisjZGVmaW5lIFNoYWRvd1ZhbHVlX0gKIAotI2lu
Y2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudC5oIgotI2luY2x1ZGUgImNzc19iYXNlLmgiCi0jaW5j
bHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0KLWNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CisjaW5jbHVkZSAiQ1NTVmFsdWUu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjsKLWNsYXNzIENhY2hlZEltYWdlOwotY2xhc3MgQ291bnRlcjsKLWNsYXNzIERvY0xvYWRl
cjsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBQYWlyOwotY2xhc3MgUmVjdEltcGw7Ci1jbGFzcyBSZW5k
ZXJTdHlsZTsKLQotI2lmIF9fQVBQTEVfXwotY2xhc3MgRGFzaGJvYXJkUmVnaW9uOwotI2VuZGlm
Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWV4dGVybiBjb25zdCBpbnQgaW5oZXJp
dGFibGVQcm9wZXJ0aWVzW107Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgbnVtSW5oZXJpdGFibGVQ
cm9wZXJ0aWVzOwotCi1jbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIFN0eWxlQmFz
ZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGlzU3R5bGVEZWNsYXJhdGlvbigpOwotCi0g
ICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OwotCi0gICAgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgPSAwOwotCi0gICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5
VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0
eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJv
cGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgaXNQ
cm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICAKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3Bl
cnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJp
b3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9w
ZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLQotICAgIHZv
aWQgc2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJp
bmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAg
IHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25D
b2RlJikgPSAwOwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBjb3B5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKSA9IDA7Ci0gCi0gICAgdm9pZCBkaWZm
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCog
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlID0gMCk7Ci0KLXByaXZhdGU6Ci0gICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbihjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICYpOwotICAgIENTU1N0
eWxlRGVjbGFyYXRpb24mIG9wZXJhdG9yPShjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICYpOwot
fTsKLQotY2xhc3MgQ1NTVmFsdWUgOiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAg
ZW51bSBVbml0VHlwZXMgewotICAgICAgICBDU1NfSU5IRVJJVCA9IDAsCi0gICAgICAgIENTU19Q
UklNSVRJVkVfVkFMVUUgPSAxLAotICAgICAgICBDU1NfVkFMVUVfTElTVCA9IDIsCi0gICAgICAg
IENTU19DVVNUT00gPSAzLAotICAgICAgICBDU1NfSU5JVElBTCA9IDQKLSAgICB9OwotCi0gICAg
Q1NTVmFsdWUoKSA6IFN0eWxlQmFzZSgwKSB7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hv
cnQgY3NzVmFsdWVUeXBlKCkgY29uc3QgeyByZXR1cm4gQ1NTX0NVU1RPTTsgfQotICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0
IFN0cmluZyYpIHsgfSAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotCi0gICAgdmlydHVhbCBi
b29sIGlzVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRm9udFZh
bHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KLX07Ci0KLWNsYXNzIENTU0luaGVyaXRlZFZhbHVlIDog
cHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBj
c3NWYWx1ZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci19OwotCi1jbGFzcyBDU1NJbml0aWFsVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU1ZhbHVlTGlz
dCA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgfkNTU1ZhbHVlTGlz
dCgpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY291
bnQoKTsgfQotICAgIENTU1ZhbHVlKiBpdGVtICh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92
YWx1ZXMuYXQoaW5kZXgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJl
dHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgp
IGNvbnN0OwotCi0gICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwotICAgIHZp
cnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIERlcHJlY2F0
ZWRQdHJMaXN0PENTU1ZhbHVlPiBtX3ZhbHVlczsKLX07Ci0KLQotY2xhc3MgQ1NTUHJpbWl0aXZl
VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7
Ci0gICAgICAgIENTU19VTktOT1dOID0gMCwKLSAgICAgICAgQ1NTX05VTUJFUiA9IDEsCi0gICAg
ICAgIENTU19QRVJDRU5UQUdFID0gMiwKLSAgICAgICAgQ1NTX0VNUyA9IDMsCi0gICAgICAgIENT
U19FWFMgPSA0LAotICAgICAgICBDU1NfUFggPSA1LAotICAgICAgICBDU1NfQ00gPSA2LAotICAg
ICAgICBDU1NfTU0gPSA3LAotICAgICAgICBDU1NfSU4gPSA4LAotICAgICAgICBDU1NfUFQgPSA5
LAotICAgICAgICBDU1NfUEMgPSAxMCwKLSAgICAgICAgQ1NTX0RFRyA9IDExLAotICAgICAgICBD
U1NfUkFEID0gMTIsCi0gICAgICAgIENTU19HUkFEID0gMTMsCi0gICAgICAgIENTU19NUyA9IDE0
LAotICAgICAgICBDU1NfUyA9IDE1LAotICAgICAgICBDU1NfSFogPSAxNiwKLSAgICAgICAgQ1NT
X0tIWiA9IDE3LAotICAgICAgICBDU1NfRElNRU5TSU9OID0gMTgsCi0gICAgICAgIENTU19TVFJJ
TkcgPSAxOSwKLSAgICAgICAgQ1NTX1VSSSA9IDIwLAotICAgICAgICBDU1NfSURFTlQgPSAyMSwK
LSAgICAgICAgQ1NTX0FUVFIgPSAyMiwKLSAgICAgICAgQ1NTX0NPVU5URVIgPSAyMywKLSAgICAg
ICAgQ1NTX1JFQ1QgPSAyNCwKLSAgICAgICAgQ1NTX1JHQkNPTE9SID0gMjUsCi0gICAgICAgIENT
U19QQUlSID0gMTAwLCAvLyBXZSBlbnZpc2lvbiB0aGlzIGJlaW5nIGV4cG9zZWQgYXMgYSBtZWFu
cyBvZiBnZXR0aW5nIGNvbXB1dGVkIHN0eWxlIHZhbHVlcyBmb3IgcGFpcnMgKGJvcmRlci1zcGFj
aW5nL3JhZGl1cywgYmFja2dyb3VuZC1wb3NpdGlvbiwgZXRjLikKLSAgICAgICAgQ1NTX0RBU0hC
T0FSRF9SRUdJT04gPSAxMDEgLy8gRklYTUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBkb2luZyBh
cyBhIHByaW1pdGl2ZSB2YWx1ZT8gSXQgc2hvdWxkIG5vdCBiZSEKLSAgICB9OwotCi0gICAgLy8g
RklYTUU6IGludCB2cy4gdW5zaWduZWQgb3ZlcmxvYWRpbmcgaXMgdG9vIHRyaWNreSBmb3IgY29s
b3IgdnMuIGlkZW50Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoKTsKLSAgICBDU1NQcmltaXRpdmVW
YWx1ZShpbnQgaWRlbnQpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSwgVW5pdFR5cGVz
KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmLCBVbml0VHlwZXMpOwotICAg
IENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4pOwotICAgIENTU1ByaW1pdGl2
ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdEltcGw+KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSh1bnNp
Z25lZCBjb2xvcik7IC8vIFJHQiB2YWx1ZQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQ
dHI8UGFpcj4pOwotCi0jaWYgX19BUFBMRV9fCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1Jl
ZlB0cjxEYXNoYm9hcmRSZWdpb24+KTsgLy8gRklYTUU6IFdoeSBpcyBkYXNoYm9hcmQgcmVnaW9u
IGEgcHJpbWl0aXZlIHZhbHVlPyBUaGlzIG1ha2VzIG5vIHNlbnNlLgotI2VuZGlmCi0KLSAgICB2
aXJ0dWFsIH5DU1NQcmltaXRpdmVWYWx1ZSgpOwotCi0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAg
ICB1bnNpZ25lZCBzaG9ydCBwcmltaXRpdmVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0KLSAgICAvKgotICAgICAqIGNvbXB1dGVzIGEgbGVuZ3RoIGluIHBpeGVscyBvdXQgb2YgdGhl
IGdpdmVuIENTU1ZhbHVlLiBOZWVkIHRoZSBSZW5kZXJTdHlsZSB0byBnZXQKLSAgICAgKiB0aGUg
Zm9udGluZm8gaW4gY2FzZSB2YWwgaXMgZGVmaW5lZCBpbiBlbSBvciBleC4KLSAgICAgKgotICAg
ICAqIFRoZSBtZXRyaWNzIGhhdmUgdG8gYmUgYSBiaXQgZGlmZmVyZW50IGZvciBzY3JlZW4gYW5k
IHByaW50ZXIgb3V0cHV0LgotICAgICAqIEZvciBzY3JlZW4gb3V0cHV0IHdlIGFzc3VtZSAxIGlu
Y2ggPT0gNzIgcHgsIGZvciBwcmludGVyIHdlIGFzc3VtZSAzMDAgZHBpCi0gICAgICoKLSAgICAg
KiB0aGlzIGlzIHNjcmVlbi9wcmludGVyIGRlcGVuZGVudCwgc28gd2UgcHJvYmFibHkgbmVlZCBh
IGNvbmZpZyBvcHRpb24gZm9yIHRoaXMsCi0gICAgICogYW5kIHNvbWUgdG9vbCB0byBjYWxpYnJh
dGUuCi0gICAgICovCi0gICAgaW50IGNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqKTsKLSAg
ICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsK
LSAgICBpbnQgY29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChSZW5kZXJTdHlsZSopOwotICAgIGlu
dCBjb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxp
ZXIpOwotICAgIHNob3J0IGNvbXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSopOwotICAgIHNo
b3J0IGNvbXB1dGVMZW5ndGhTaG9ydChSZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsK
LSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxlKiwgYm9vbCBhcHBseVpv
b21GYWN0b3IgPSB0cnVlKTsKLQotICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKLSAgICB2b2lkIHNl
dFByaW1pdGl2ZVR5cGUodW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0g
ICAgdm9pZCBzZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxv
YXRWYWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKHVuc2ln
bmVkIHNob3J0IHVuaXRUeXBlKTsKLSAgICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSgpIHsgcmV0dXJu
IG1fdmFsdWUubnVtOyB9Ci0KLSAgICB2b2lkIHNldFN0cmluZ1ZhbHVlKHVuc2lnbmVkIHNob3J0
IHN0cmluZ1R5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nVmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICAKLSAgICBDb3VudGVyKiBn
ZXRDb3VudGVyVmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19D
T1VOVEVSID8gMCA6IG1fdmFsdWUuY291bnRlcjsKLSAgICB9Ci0KLSAgICBSZWN0SW1wbCogZ2V0
UmVjdFZhbHVlICgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkVDVCA/
IDAgOiBtX3ZhbHVlLnJlY3Q7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2V0UkdCQ29sb3JWYWx1
ZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkdCQ09MT1IgPyAwIDog
bV92YWx1ZS5yZ2Jjb2xvcjsKLSAgICB9Ci0KLSAgICBQYWlyKiBnZXRQYWlyVmFsdWUoKSBjb25z
dCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX1BBSVIgPyAwIDogbV92YWx1ZS5wYWly
OwotICAgIH0KLQotI2lmIF9fQVBQTEVfXwotICAgIERhc2hib2FyZFJlZ2lvbiAqZ2V0RGFzaGJv
YXJkUmVnaW9uVmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19E
QVNIQk9BUkRfUkVHSU9OID8gMCA6IG1fdmFsdWUucmVnaW9uOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgdmlydHVhbCBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQotICAg
IGludCBnZXRJZGVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0
cmluZyYsIGJvb2wgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBpbnQgbV90eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgaW50IGlk
ZW50OwotICAgICAgICBkb3VibGUgbnVtOwotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7Ci0g
ICAgICAgIENvdW50ZXIqIGNvdW50ZXI7Ci0gICAgICAgIFJlY3RJbXBsKiByZWN0OwotICAgICAg
ICB1bnNpZ25lZCByZ2Jjb2xvcjsKLSAgICAgICAgUGFpciogcGFpcjsKLSNpZiBfX0FQUExFX18K
LSAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiByZWdpb247Ci0jZW5kaWYKLSAgICB9IG1fdmFsdWU7
Ci19OwotCi0vLyBUaGlzIHZhbHVlIGlzIHVzZWQgdG8gaGFuZGxlIHF1aXJreSBtYXJnaW5zIGlu
IHJlZmxvdyByb290cyAoYm9keSwgdGQsIGFuZCB0aCkgbGlrZSBXaW5JRS4KLS8vIFRoZSBiYXNp
YyBpZGVhIGlzIHRoYXQgYSBzdHlsZXNoZWV0IGNhbiB1c2UgdGhlIHZhbHVlIF9fcWVtIChmb3Ig
cXVpcmt5IGVtKSBpbnN0ZWFkIG9mIGVtCi0vLyBpbiBhIHN0eWxlc2hlZXQuICBXaGVuIHRoZSBx
dWlya3kgdmFsdWUgaXMgdXNlZCwgaWYgeW91J3JlIGluIHF1aXJrcyBtb2RlLCB0aGUgbWFyZ2lu
IHdpbGwKLS8vIGNvbGxhcHNlIGF3YXkgaW5zaWRlIGEgdGFibGUgY2VsbC4KLWNsYXNzIENTU1F1
aXJrUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFsdWUKLXsKLXB1YmxpYzoK
LSAgICBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQot
ICAgICAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKG51bSwgdHlwZSkge30KLQotICAgIHZpcnR1YWwg
Ym9vbCBpc1F1aXJrVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9Ci19OwotCi1jbGFzcyBDb3VudGVy
IDogcHVibGljIFNoYXJlZDxDb3VudGVyPiB7Ci1wdWJsaWM6Ci0gICAgU3RyaW5nIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICBTdHJpbmcgbGlzdFN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0U3R5bGU7IH0KLSAgICBTdHJpbmcgc2VwYXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXBhcmF0b3I7IH0KLQotICAgIFN0cmluZyBtX2lkZW50aWZpZXI7
Ci0gICAgU3RyaW5nIG1fbGlzdFN0eWxlOwotICAgIFN0cmluZyBtX3NlcGFyYXRvcjsKLX07Ci0K
LWNsYXNzIFJlY3RJbXBsIDogcHVibGljIFNoYXJlZDxSZWN0SW1wbD4gewotcHVibGljOgotICAg
IHZpcnR1YWwgflJlY3RJbXBsKCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogdG9wKCkgY29u
c3QgeyByZXR1cm4gbV90b3AuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQuZ2V0KCk7IH0KLQotICAgIHZv
aWQgc2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRv
cDsgfQotICAgIHZvaWQgc2V0UmlnaHQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmln
aHQpIHsgbV9yaWdodCA9IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gYm90dG9tKSB7IG1fYm90dG9tID0gYm90dG9tOyB9Ci0gICAgdm9p
ZCBzZXRMZWZ0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0g
bGVmdDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Rv
cDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmlnaHQ7Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBtX2JvdHRvbTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fbGVmdDsKLX07Ci0KLS8vIEEgcHJpbWl0aXZlIHZhbHVlIHJlcHJlc2VudGluZyBhIHBhaXIu
ICBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvcGVydGllcyBsaWtlIGJvcmRlci1yYWRpdXMsIGJhY2tn
cm91bmQtc2l6ZS9wb3NpdGlvbiwKLS8vIGFuZCBib3JkZXItc3BhY2luZyAoYWxsIG9mIHdoaWNo
IGFyZSBzcGFjZS1zZXBhcmF0ZWQgc2V0cyBvZiB0d28gdmFsdWVzKS4gIEF0IHRoZSBtb21lbnQg
d2UgYXJlIG9ubHkgdXNpbmcgaXQgZm9yCi0vLyBib3JkZXItcmFkaXVzIGFuZCBiYWNrZ3JvdW5k
LXNpemUsIGJ1dCAoRklYTUUpIGJvcmRlci1zcGFjaW5nIGFuZCBiYWNrZ3JvdW5kLXBvc2l0aW9u
IGNvdWxkIGJlIGNvbnZlcnRlZCBvdmVyIHRvIHVzZQotLy8gaXQgKGVsaW1pbmF0aW5nIHNvbWUg
ZXh0cmEgLXdlYmtpdC0gaW50ZXJuYWwgcHJvcGVydGllcykuCi1jbGFzcyBQYWlyIDogcHVibGlj
IFNoYXJlZDxQYWlyPiB7Ci1wdWJsaWM6Ci0gICAgUGFpcigpIDogbV9maXJzdCgwKSwgbV9zZWNv
bmQoMCkgeyB9Ci0gICAgUGFpcihQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJzdCwg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKQotICAgICAgICA6IG1fZmlyc3Qo
Zmlyc3QpLCBtX3NlY29uZChzZWNvbmQpIHsgfQotICAgIHZpcnR1YWwgflBhaXIoKTsKLQotICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3QuZ2V0KCk7
IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kKCkgY29uc3QgeyByZXR1cm4gbV9zZWNv
bmQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0Rmlyc3QoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gZmlyc3QpIHsgbV9maXJzdCA9IGZpcnN0OyB9Ci0gICAgdm9pZCBzZXRTZWNvbmQoUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKSB7IG1fc2Vjb25kID0gc2Vjb25kOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3Q7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZDsKLX07Ci0KLWNsYXNzIERhc2hi
b2FyZFJlZ2lvbiA6IHB1YmxpYyBSZWN0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgRGFzaGJvYXJkUmVn
aW9uKCkgOiBtX2lzQ2lyY2xlKDApLCBtX2lzUmVjdGFuZ2xlKDApIHsgfQotCi0gICAgUmVmUHRy
PERhc2hib2FyZFJlZ2lvbj4gbV9uZXh0OwotICAgIFN0cmluZyBtX2xhYmVsOwotICAgIFN0cmlu
ZyBtX2dlb21ldHJ5VHlwZTsKLSAgICBib29sIG1faXNDaXJjbGUgOiAxOwotICAgIGJvb2wgbV9p
c1JlY3RhbmdsZSA6IDE7Ci19OwotCi1jbGFzcyBDU1NJbWFnZVZhbHVlIDogcHVibGljIENTU1By
aW1pdGl2ZVZhbHVlLCBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50Ci17Ci1wdWJsaWM6Ci0gICAg
Q1NTSW1hZ2VWYWx1ZSgpOwotICAgIENTU0ltYWdlVmFsdWUoY29uc3QgU3RyaW5nJiB1cmwsIFN0
eWxlQmFzZSopOwotICAgIHZpcnR1YWwgfkNTU0ltYWdlVmFsdWUoKTsKLQotICAgIENhY2hlZElt
YWdlKiBpbWFnZShEb2NMb2FkZXIqKTsKLQotcHJvdGVjdGVkOgotICAgIENhY2hlZEltYWdlKiBt
X2ltYWdlOwotICAgIGJvb2wgbV9hY2Nlc3NlZEltYWdlOwotfTsKLQotY2xhc3MgQ1NTQm9yZGVy
SW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIENTU0JvcmRlcklt
YWdlVmFsdWUoKTsKLSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VW
YWx1ZT4sCi0gICAgICAgIFBhc3NSZWZQdHI8UmVjdEltcGw+LCBpbnQgaG9yaXpvbnRhbFJ1bGUs
IGludCB2ZXJ0aWNhbFJ1bGUpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotCi1wdWJsaWM6Ci0gICAgLy8gVGhlIGJvcmRlciBpbWFnZS4KLSAgICBSZWZQdHI8Q1NTSW1h
Z2VWYWx1ZT4gbV9pbWFnZTsKLQotICAgIC8vIFRoZXNlIGZvdXIgdmFsdWVzIGFyZSB1c2VkIHRv
IG1ha2UgImN1dHMiIGluIHRoZSBpbWFnZS4gIFRoZXkgY2FuIGJlIG51bWJlcnMKLSAgICAvLyBv
ciBwZXJjZW50YWdlcy4KLSAgICBSZWZQdHI8UmVjdEltcGw+IG1faW1hZ2VTbGljZVJlY3Q7Ci0g
ICAgCi0gICAgLy8gVmFsdWVzIGZvciBob3cgdG8gaGFuZGxlIHRoZSBzY2FsaW5nL3N0cmV0Y2hp
bmcvdGlsaW5nIG9mIHRoZSBpbWFnZSBzbGljZXMuCi0gICAgaW50IG1faG9yaXpvbnRhbFNpemVS
dWxlOyAvLyBSdWxlIGZvciBob3cgdG8gYWRqdXN0IHRoZSB3aWR0aHMgb2YgdGhlIHRvcC9taWRk
bGUvYm90dG9tCi0gICAgaW50IG1fdmVydGljYWxTaXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRv
IGFkanVzdCB0aGUgaGVpZ2h0cyBvZiB0aGUgbGVmdC9taWRkbGUvcmlnaHQKLX07Ci0KLWNsYXNz
IEZvbnRGYW1pbHlWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgot
ICAgIEZvbnRGYW1pbHlWYWx1ZSggY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmc3RyaW5nKTsKLSAg
ICBjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBmb250TmFtZSgpIGNvbnN0IHsgcmV0dXJuIHBhcnNl
ZEZvbnROYW1lOyB9Ci0gICAgaW50IGdlbmVyaWNGYW1pbHlUeXBlKCkgY29uc3QgeyByZXR1cm4g
X2dlbmVyaWNGYW1pbHlUeXBlOyB9Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7Ci0KLSAgICBEZXByZWNhdGVkU3RyaW5nIHBhcnNlZEZvbnROYW1lOwotcHJpdmF0ZToKLSAg
ICBpbnQgX2dlbmVyaWNGYW1pbHlUeXBlOwotfTsKLQotY2xhc3MgRm9udFZhbHVlIDogcHVibGlj
IENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0K
LQotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3R5bGU7Ci0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB2YXJpYW50OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gd2Vp
Z2h0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZTsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGxpbmVIZWlnaHQ7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZmFt
aWx5OwotfTsKLQogLy8gVXNlZCBmb3IgdGV4dC1zaGFkb3cgYW5kIGJveC1zaGFkb3cKIGNsYXNz
IFNoYWRvd1ZhbHVlIDogcHVibGljIENTU1ZhbHVlCiB7CkBAIC00NDIsMTE5ICs0NCw2IEBACiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcjsKIH07CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi0vLyBhbm90aGVyIGhlbHBlciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkK
LXsKLXB1YmxpYzoKLSAgICBDU1NQcm9wZXJ0eShpbnQgcHJvcElELCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgaW50IHNob3J0aGFuZElEID0gMCwg
Ym9vbCBpbXBsaWNpdCA9IGZhbHNlKQotICAgICAgICA6IG1faWQocHJvcElEKSwgbV9zaG9ydGhh
bmRJRChzaG9ydGhhbmRJRCksIG1faW1wb3J0YW50KGltcG9ydGFudCksIG1faW1wbGljaXQoaW1w
bGljaXQpLCBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ1NTUHJvcGVy
dHkgJm9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eSYgbykKLSAgICB7Ci0gICAgICAgIG1faWQg
PSBvLm1faWQ7Ci0gICAgICAgIG1fc2hvcnRoYW5kSUQgPSBvLm1fc2hvcnRoYW5kSUQ7Ci0gICAg
ICAgIG1faW1wb3J0YW50ID0gby5tX2ltcG9ydGFudDsKLSAgICAgICAgbV92YWx1ZSA9IG8ubV92
YWx1ZTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLSAgICAKLSAgICBpbnQgaWQoKSBj
b25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW50IHNob3J0aGFuZElEKCkgY29uc3QgeyByZXR1
cm4gbV9zaG9ydGhhbmRJRDsgfQotICAgIAotICAgIGJvb2wgaXNJbXBvcnRhbnQoKSBjb25zdCB7
IHJldHVybiBtX2ltcG9ydGFudDsgfQotICAgIGJvb2wgaXNJbXBsaWNpdCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1wbGljaXQ7IH0KLQotICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWUuZ2V0KCk7IH0KLSAgICAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0g
ICAgLy8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgZml0cyBpbiA0IGJ5dGVzLgotICAgIGludCBt
X2lkOwotICAgIGludCBtX3Nob3J0aGFuZElEOyAgLy8gSWYgdGhpcyBwcm9wZXJ0eSB3YXMgc2V0
IGFzIHBhcnQgb2YgYSBzaG9ydGhhbmQsIGdpdmVzIHRoZSBzaG9ydGhhbmQuCi0gICAgYm9vbCBt
X2ltcG9ydGFudCA6IDE7Ci0gICAgYm9vbCBtX2ltcGxpY2l0IDogMTsgLy8gV2hldGhlciBvciBu
b3QgdGhlIHByb3BlcnR5IHdhcyBzZXQgaW1wbGljaXRseSBhcyB0aGUgcmVzdWx0IG9mIGEgc2hv
cnRoYW5kLgotCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAm
LCBjb25zdCBDU1NQcm9wZXJ0eSAmKTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV92YWx1ZTsK
LX07Ci0KLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxl
RGVjbGFyYXRpb24KLXsKLXB1YmxpYzoKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigp
OwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpOwot
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+ICYpOwotICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5ICogY29u
c3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24gJm9wZXJhdG9yPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmKTsKLQotICAg
IHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKSB7IG1fbm9kZSA9IG5vZGU7IH0KLQotICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1Zh
bHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0
eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVy
dHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJv
cGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2
b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29s
IGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVBy
b3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxl
KCk7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4g
dmFsdWVzSXRlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9Ci0KLSAg
ICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0
YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpOwotICAgIGJvb2wgc2V0UHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50
LCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9
IGZhbHNlLCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNv
ZGUgZWM7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZSwgaW1wb3J0YW50LCBu
b3RpZnlDaGFuZ2VkLCBlYyk7IH0KLQotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJv
cGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5n
IHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVl
KQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9w
ZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0KLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAg
IHZvaWQgc2V0Q2hhbmdlZCgpOwotIAotICAgIC8vIHNldExlbmd0aFByb3BlcnR5IHRyZWF0cyBp
bnRlZ2VycyBhcyBwaXhlbHMhIChOZWVkZWQgZm9yIGNvbnZlcnNpb24gb2YgSFRNTCBhdHRyaWJ1
dGVzLikKLSAgICB2b2lkIHNldExlbmd0aFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBtdWx0aUxlbmd0aCA9IGZhbHNlKTsK
LSAgICB2b2lkIHNldFN0cmluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzLCBib29sIGltcG9ydGFudCA9IGZh
bHNlKTsgLy8gcGFyc2VkIHN0cmluZyB2YWx1ZQotICAgIHZvaWQgc2V0SW1hZ2VQcm9wZXJ0eShp
bnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBVUkwsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2Up
OwotIAotICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFyc2VzIGFuIGVudGlyZSBuZXcgc3R5bGUgZGVj
bGFyYXRpb24uCi0gICAgdm9pZCBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVE
ZWNsYXJhdGlvbik7Ci0KLSAgICAvLyBCZXNpZGVzIGFkZGluZyB0aGUgcHJvcGVydGllcywgdGhp
cyBhbHNvIHJlbW92ZXMgYW55IGV4aXN0aW5nIHByb3BlcnRpZXMgd2l0aCB0aGVzZSBJRHMuCi0g
ICAgLy8gSXQgZG9lcyBubyBub3RpZmljYXRpb24gc2luY2UgaXQncyBjYWxsZWQgYnkgdGhlIHBh
cnNlci4KLSAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkgKiBj
b25zdCAqLCBpbnQgbnVtUHJvcGVydGllcyk7Ci0gCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gY29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0OwotICAgIHZvaWQg
cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7Ci0gICAgdm9pZCByZW1vdmVJbmhlcml0YWJsZVByb3Bl
cnRpZXMoKTsKLSAgICB2b2lkIHJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHZvaWQgbWVyZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QgPSB0cnVlKTsKLSAKLXByaXZhdGU6
Ci0gICAgU3RyaW5nIGdldFNob3J0SGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgaW50
IG51bWJlcikgY29uc3Q7Ci0gICAgU3RyaW5nIGdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0
aWVzKSBjb25zdDsKLSAKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBtX3Zh
bHVlczsKLSAgICBOb2RlKiBtX25vZGU7Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYK
SW5kZXg6IGNzcy9DU1NGb250RmFjZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTRm9udEZh
Y2VSdWxlLmgJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2NSArMjEsMTQgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgogICovCiAKLSNpZm5kZWYgQ1NTX2Nzc19ydWxlaW1wbF9oXwotI2RlZmluZSBDU1NfY3Nz
X3J1bGVpbXBsX2hfCisjaWZuZGVmIENTU0ZvbnRGYWNlUnVsZV9ICisjZGVmaW5lIENTU0ZvbnRG
YWNlUnVsZV9ICiAKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTUnVs
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7
CiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7
Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwotY2xhc3MgTWVkaWFMaXN0OwotCi1jbGFzcyBDU1NSdWxl
IDogcHVibGljIFN0eWxlQmFzZQotewotcHVibGljOgotICAgIGVudW0gQ1NTUnVsZVR5cGUgeyAK
LSAgICAgICAgVU5LTk9XTl9SVUxFLCAKLSAgICAgICAgU1RZTEVfUlVMRSwgCi0gICAgICAgIENI
QVJTRVRfUlVMRSwgCi0gICAgICAgIElNUE9SVF9SVUxFLCAKLSAgICAgICAgTUVESUFfUlVMRSwg
Ci0gICAgICAgIEZPTlRfRkFDRV9SVUxFLCAKLSAgICAgICAgUEFHRV9SVUxFIAotICAgIH07Ci0g
ICAgCi0gICAgQ1NTUnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICAgICAgOiBTdHlsZUJhc2Uo
cGFyZW50KSwgbV90eXBlKFVOS05PV05fUlVMRSkge30KLQotICAgIHZpcnR1YWwgYm9vbCBpc1J1
bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQotCi0gICAgQ1NTU3R5bGVTaGVldCAqcGFyZW50U3R5bGVTaGVldCgp
IGNvbnN0OwotICAgIENTU1J1bGUgKnBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICB2b2lkIHNldENzc1RleHQoV2ViQ29yZTo6U3Ry
aW5nIHN0cik7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NSdWxlVHlwZSBtX3R5cGU7Ci19OwotCi0K
LWNsYXNzIENTU0NoYXJzZXRSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBD
U1NDaGFyc2V0UnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICAgICAgOiBDU1NSdWxlKHBhcmVu
dCkgeyBtX3R5cGUgPSBDSEFSU0VUX1JVTEU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJz
ZXRSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLQotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7
IH0KLSAgICB2b2lkIHNldEVuY29kaW5nKFN0cmluZyBfZW5jb2RpbmcpIHsgbV9lbmNvZGluZyA9
IF9lbmNvZGluZzsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fZW5jb2Rpbmc7Ci19Owot
CiAKIGNsYXNzIENTU0ZvbnRGYWNlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCiB7CkBAIC05NSwxMzUg
KzQ0LDYgQEAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fc3R5bGU7
CiB9OwogCi0KLWNsYXNzIENTU0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ2FjaGVkT2JqZWN0Q2xpZW50
LCBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU0ltcG9ydFJ1bGUoU3R5bGVCYXNl
KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgTWVkaWFMaXN0Kik7Ci0gICAgdmlydHVhbCB+
Q1NTSW1wb3J0UnVsZSgpOwotCi0gICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX3N0
ckhyZWY7IH0KLSAgICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRp
YS5nZXQoKTsgfQotICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0ltcG9ydFJ1bGUo
KSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owot
ICAKLSAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OwotCi0gICAgLy8gZnJvbSBDYWNoZWRPYmpl
Y3RDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBzaGVldCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
UGFyZW50KCk7Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgbV9zdHJIcmVmOwotICAgIFJlZlB0
cjxNZWRpYUxpc3Q+IG1fbHN0TWVkaWE7Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5
bGVTaGVldDsKLSAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiBtX2NhY2hlZFNoZWV0OwotICAgIGJv
b2wgbV9sb2FkaW5nOwotfTsKLQotY2xhc3MgTWVkaWFMaXN0OwotCi1jbGFzcyBDU1NSdWxlTGlz
dCA6IHB1YmxpYyBTaGFyZWQ8Q1NTUnVsZUxpc3Q+Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTUnVsZUxp
c3QoKSB7IH0KLSAgICBDU1NSdWxlTGlzdChTdHlsZUxpc3QgKik7Ci0gICAgfkNTU1J1bGVMaXN0
KCk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xzdENTU1J1bGVz
LmNvdW50KCk7IH0KLSAgICBDU1NSdWxlICppdGVtICggdW5zaWduZWQgaW5kZXggKSB7IHJldHVy
biBtX2xzdENTU1J1bGVzLmF0KCBpbmRleCApOyB9Ci0KLSAgICAvKiBub3QgcGFydCBvZiB0aGUg
RE9NICovCi0gICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIENTU1J1bGUgKnJ1bGUsIHVuc2lnbmVk
IGluZGV4ICk7Ci0gICAgdm9pZCBkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKTsKLSAgICB2
b2lkIGFwcGVuZCggQ1NTUnVsZSAqcnVsZSApOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRl
ZFB0ckxpc3Q8Q1NTUnVsZT4gbV9sc3RDU1NSdWxlczsKLX07Ci0KLWNsYXNzIENTU01lZGlhUnVs
ZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTTWVkaWFSdWxlKCBTdHlsZUJh
c2UgKnBhcmVudCApOwotICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQsIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyAmbWVkaWEgKTsKLSAgICBDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAq
cGFyZW50LCBNZWRpYUxpc3QgKm1lZGlhTGlzdCwgQ1NTUnVsZUxpc3QgKnJ1bGVMaXN0ICk7Ci0g
ICAgdmlydHVhbCB+Q1NTTWVkaWFSdWxlKCk7Ci0KLSAgICBNZWRpYUxpc3QgKm1lZGlhKCkgY29u
c3QgeyByZXR1cm4gbV9sc3RNZWRpYS5nZXQoKTsgfQotICAgIENTU1J1bGVMaXN0ICpjc3NSdWxl
cygpIHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuZ2V0KCk7IH0KLQotICAgIHVuc2lnbmVkIGluc2Vy
dFJ1bGUgKCBjb25zdCBXZWJDb3JlOjpTdHJpbmcgJnJ1bGUsIHVuc2lnbmVkIGluZGV4ICk7Ci0g
ICAgdm9pZCBkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKSB7IG1fbHN0Q1NTUnVsZXMtPmRl
bGV0ZVJ1bGUoIGluZGV4ICk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhUnVsZSgpIHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAg
ICAvKiBOb3QgcGFydCBvZiB0aGUgRE9NICovCi0gICAgdW5zaWduZWQgYXBwZW5kKCBDU1NSdWxl
ICpydWxlICk7Ci1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPE1lZGlhTGlzdD4gbV9sc3RNZWRpYTsK
LSAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fbHN0Q1NTUnVsZXM7Ci19OwotCi0KLWNsYXNzIENT
U1BhZ2VSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NQYWdlUnVsZShT
dHlsZUJhc2UgKnBhcmVudCk7Ci0gICAgdmlydHVhbCB+Q1NTUGFnZVJ1bGUoKTsKLQotICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUu
Z2V0KCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgV2ViQ29yZTo6U3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwotICAgIHZvaWQg
c2V0U2VsZWN0b3JUZXh0KFdlYkNvcmU6OlN0cmluZyBzdHIpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotfTsKLQotY2xhc3Mg
Q1NTSW1wb3J0YW50UnVsZTsKLQotY2xhc3MgQ1NTU3R5bGVSdWxlIDogcHVibGljIENTU1J1bGUK
LXsKLXB1YmxpYzoKLSAgICBDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQpOwotICAgIHZp
cnR1YWwgfkNTU1N0eWxlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBi
b29sIGlzU3R5bGVSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNz
c1RleHQoKSBjb25zdDsKLQotICAgIFdlYkNvcmU6OlN0cmluZyBzZWxlY3RvclRleHQoKSBjb25z
dDsKLSAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsKLQotICAg
IHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyggY29uc3QgU3RyaW5nICZzdHJpbmcsIGJvb2wgPSBm
YWxzZSApOwotCi0gICAgdm9pZCBzZXRTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IpIHsg
bV9zZWxlY3RvciA9IHNlbGVjdG9yOyB9Ci0gICAgdm9pZCBzZXREZWNsYXJhdGlvbihQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7Ci0KLSAgICBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IoKSB7IHJldHVybiBtX3NlbGVjdG9yOyB9Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIGRlY2xhcmF0aW9uKCkgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotIAotcHJvdGVj
dGVkOgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKLSAg
ICBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKLX07Ci0KLWNsYXNzIENTU1Vua25vd25SdWxlIDog
cHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NVbmtub3duUnVsZShTdHlsZUJhc2Ug
KnBhcmVudCkgOiBDU1NSdWxlKHBhcmVudCkge30KLQotICAgIHZpcnR1YWwgYm9vbCBpc1Vua25v
d25SdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlm
CkluZGV4OiBjc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NC
b3JkZXJJbWFnZVZhbHVlLmgJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU0JvcmRlckltYWdl
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMzY2ICsyMCwyMSBAQAogICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NfY3NzX3ZhbHVlaW1wbF9oXwot
I2RlZmluZSBDU1NfY3NzX3ZhbHVlaW1wbF9oXworI2lmbmRlZiBDU1NCb3JkZXJJbWFnZVZhbHVl
X0gKKyNkZWZpbmUgQ1NTQm9yZGVySW1hZ2VWYWx1ZV9ICiAKLSNpbmNsdWRlICJDYWNoZWRPYmpl
Y3RDbGllbnQuaCIKLSNpbmNsdWRlICJjc3NfYmFzZS5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQ
dHJMaXN0LmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1jbGFzcyBR
UGFpbnREZXZpY2VNZXRyaWNzOworI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBDYWNo
ZWRJbWFnZTsKLWNsYXNzIENvdW50ZXI7Ci1jbGFzcyBEb2NMb2FkZXI7Ci1jbGFzcyBOb2RlOwot
Y2xhc3MgUGFpcjsKK2NsYXNzIENTU0ltYWdlVmFsdWU7CiBjbGFzcyBSZWN0SW1wbDsKLWNsYXNz
IFJlbmRlclN0eWxlOwotCi0jaWYgX19BUFBMRV9fCi1jbGFzcyBEYXNoYm9hcmRSZWdpb247Ci0j
ZW5kaWYKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotZXh0ZXJuIGNvbnN0IGludCBp
bmhlcml0YWJsZVByb3BlcnRpZXNbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBudW1Jbmhlcml0
YWJsZVByb3BlcnRpZXM7Ci0KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgU3R5
bGVCYXNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURlY2xhcmF0aW9uKCk7
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSk7Ci0KLSAgICBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0
KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdCA9IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJv
cGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFBy
b3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBn
ZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgYm9v
bCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIAot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQg
cHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVy
dHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGdl
dFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotCi0g
ICAgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAKLSAgICB2b2lk
IGRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3Qg
aW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQotcHJpdmF0ZToKLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci0gICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24g
Jik7Ci19OwotCi1jbGFzcyBDU1NWYWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UKLXsKLXB1YmxpYzoK
LSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0gICAgICAgIENTU19JTkhFUklUID0gMCwKLSAgICAgICAg
Q1NTX1BSSU1JVElWRV9WQUxVRSA9IDEsCi0gICAgICAgIENTU19WQUxVRV9MSVNUID0gMiwKLSAg
ICAgICAgQ1NTX0NVU1RPTSA9IDMsCi0gICAgICAgIENTU19JTklUSUFMID0gNAotICAgIH07Ci0K
LSAgICBDU1NWYWx1ZSgpIDogU3R5bGVCYXNlKDApIHsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NfQ1VTVE9NOyB9Ci0gICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIHNldENzc1RleHQo
Y29uc3QgU3RyaW5nJikgeyB9IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNG
b250VmFsdWUoKSB7IHJldHVybiBmYWxzZTsgfQotfTsKLQotY2xhc3MgQ1NTSW5oZXJpdGVkVmFs
dWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNo
b3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLX07Ci0KLWNsYXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewot
cHVibGljOgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTVmFs
dWVMaXN0IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTVmFs
dWVMaXN0KCk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5jb3VudCgpOyB9Ci0gICAgQ1NTVmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlcy5hdChpbmRleCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlTGlzdCgp
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVU
eXBlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVw
cmVjYXRlZFB0ckxpc3Q8Q1NTVmFsdWU+IG1fdmFsdWVzOwotfTsKLQotCi1jbGFzcyBDU1NQcmlt
aXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5
cGVzIHsKLSAgICAgICAgQ1NTX1VOS05PV04gPSAwLAotICAgICAgICBDU1NfTlVNQkVSID0gMSwK
LSAgICAgICAgQ1NTX1BFUkNFTlRBR0UgPSAyLAotICAgICAgICBDU1NfRU1TID0gMywKLSAgICAg
ICAgQ1NTX0VYUyA9IDQsCi0gICAgICAgIENTU19QWCA9IDUsCi0gICAgICAgIENTU19DTSA9IDYs
Ci0gICAgICAgIENTU19NTSA9IDcsCi0gICAgICAgIENTU19JTiA9IDgsCi0gICAgICAgIENTU19Q
VCA9IDksCi0gICAgICAgIENTU19QQyA9IDEwLAotICAgICAgICBDU1NfREVHID0gMTEsCi0gICAg
ICAgIENTU19SQUQgPSAxMiwKLSAgICAgICAgQ1NTX0dSQUQgPSAxMywKLSAgICAgICAgQ1NTX01T
ID0gMTQsCi0gICAgICAgIENTU19TID0gMTUsCi0gICAgICAgIENTU19IWiA9IDE2LAotICAgICAg
ICBDU1NfS0haID0gMTcsCi0gICAgICAgIENTU19ESU1FTlNJT04gPSAxOCwKLSAgICAgICAgQ1NT
X1NUUklORyA9IDE5LAotICAgICAgICBDU1NfVVJJID0gMjAsCi0gICAgICAgIENTU19JREVOVCA9
IDIxLAotICAgICAgICBDU1NfQVRUUiA9IDIyLAotICAgICAgICBDU1NfQ09VTlRFUiA9IDIzLAot
ICAgICAgICBDU1NfUkVDVCA9IDI0LAotICAgICAgICBDU1NfUkdCQ09MT1IgPSAyNSwKLSAgICAg
ICAgQ1NTX1BBSVIgPSAxMDAsIC8vIFdlIGVudmlzaW9uIHRoaXMgYmVpbmcgZXhwb3NlZCBhcyBh
IG1lYW5zIG9mIGdldHRpbmcgY29tcHV0ZWQgc3R5bGUgdmFsdWVzIGZvciBwYWlycyAoYm9yZGVy
LXNwYWNpbmcvcmFkaXVzLCBiYWNrZ3JvdW5kLXBvc2l0aW9uLCBldGMuKQotICAgICAgICBDU1Nf
REFTSEJPQVJEX1JFR0lPTiA9IDEwMSAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0aGlzIGRv
aW5nIGFzIGEgcHJpbWl0aXZlIHZhbHVlPyBJdCBzaG91bGQgbm90IGJlIQotICAgIH07Ci0KLSAg
ICAvLyBGSVhNRTogaW50IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0b28gdHJpY2t5IGZv
ciBjb2xvciB2cy4gaWRlbnQKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKGludCBpZGVudCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlLCBVbml0
VHlwZXMpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYsIFVuaXRUeXBlcyk7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxSZWN0SW1wbD4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KHVuc2lnbmVkIGNvbG9yKTsgLy8gUkdCIHZhbHVlCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFz
c1JlZlB0cjxQYWlyPik7Ci0KLSNpZiBfX0FQUExFX18KLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQ
YXNzUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4pOyAvLyBGSVhNRTogV2h5IGlzIGRhc2hib2FyZCBy
ZWdpb24gYSBwcmltaXRpdmUgdmFsdWU/IFRoaXMgbWFrZXMgbm8gc2Vuc2UuCi0jZW5kaWYKLQot
ICAgIHZpcnR1YWwgfkNTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0KLSAgICB2b2lkIGNsZWFudXAoKTsK
LQotICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLQotICAgIC8qCi0gICAgICogY29tcHV0ZXMgYSBsZW5ndGggaW4gcGl4ZWxzIG91dCBv
ZiB0aGUgZ2l2ZW4gQ1NTVmFsdWUuIE5lZWQgdGhlIFJlbmRlclN0eWxlIHRvIGdldAotICAgICAq
IHRoZSBmb250aW5mbyBpbiBjYXNlIHZhbCBpcyBkZWZpbmVkIGluIGVtIG9yIGV4LgotICAgICAq
Ci0gICAgICogVGhlIG1ldHJpY3MgaGF2ZSB0byBiZSBhIGJpdCBkaWZmZXJlbnQgZm9yIHNjcmVl
biBhbmQgcHJpbnRlciBvdXRwdXQuCi0gICAgICogRm9yIHNjcmVlbiBvdXRwdXQgd2UgYXNzdW1l
IDEgaW5jaCA9PSA3MiBweCwgZm9yIHByaW50ZXIgd2UgYXNzdW1lIDMwMCBkcGkKLSAgICAgKgot
ICAgICAqIHRoaXMgaXMgc2NyZWVuL3ByaW50ZXIgZGVwZW5kZW50LCBzbyB3ZSBwcm9iYWJseSBu
ZWVkIGEgY29uZmlnIG9wdGlvbiBmb3IgdGhpcywKLSAgICAgKiBhbmQgc29tZSB0b29sIHRvIGNh
bGlicmF0ZS4KLSAgICAgKi8KLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSop
OwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxp
ZXIpOwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKik7Ci0g
ICAgaW50IGNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVs
dGlwbGllcik7Ci0gICAgc2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKik7Ci0g
ICAgc2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxp
ZXIpOwotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqLCBib29sIGFw
cGx5Wm9vbUZhY3RvciA9IHRydWUpOwotCi0gICAgLy8gdXNlIHdpdGggY2FyZSEhIQotICAgIHZv
aWQgc2V0UHJpbWl0aXZlVHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7
IH0KLSAgICB2b2lkIHNldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJs
ZSBmbG9hdFZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUo
dW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKCkgeyBy
ZXR1cm4gbV92YWx1ZS5udW07IH0KLQotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUodW5zaWduZWQg
c2hvcnQgc3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIAotICAgIENvdW50
ZXIqIGdldENvdW50ZXJWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0g
Q1NTX0NPVU5URVIgPyAwIDogbV92YWx1ZS5jb3VudGVyOwotICAgIH0KLQotICAgIFJlY3RJbXBs
KiBnZXRSZWN0VmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19S
RUNUID8gMCA6IG1fdmFsdWUucmVjdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRSR0JDb2xv
clZhbHVlKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SR0JDT0xPUiA/
IDAgOiBtX3ZhbHVlLnJnYmNvbG9yOwotICAgIH0KLQotICAgIFBhaXIqIGdldFBhaXJWYWx1ZSgp
IGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUEFJUiA/IDAgOiBtX3ZhbHVl
LnBhaXI7Ci0gICAgfQotCi0jaWYgX19BUFBMRV9fCi0gICAgRGFzaGJvYXJkUmVnaW9uICpnZXRE
YXNoYm9hcmRSZWdpb25WYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0g
Q1NTX0RBU0hCT0FSRF9SRUdJT04gPyAwIDogbV92YWx1ZS5yZWdpb247Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQcmltaXRpdmVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0Owot
Ci0gICAgaW50IGdldElkZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJiwgYm9vbCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7
IH0KLQotcHJvdGVjdGVkOgotICAgIGludCBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBp
bnQgaWRlbnQ7Ci0gICAgICAgIGRvdWJsZSBudW07Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmlu
ZzsKLSAgICAgICAgQ291bnRlciogY291bnRlcjsKLSAgICAgICAgUmVjdEltcGwqIHJlY3Q7Ci0g
ICAgICAgIHVuc2lnbmVkIHJnYmNvbG9yOwotICAgICAgICBQYWlyKiBwYWlyOwotI2lmIF9fQVBQ
TEVfXwotICAgICAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbjsKLSNlbmRpZgotICAgIH0gbV92
YWx1ZTsKLX07Ci0KLS8vIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5IG1hcmdp
bnMgaW4gcmVmbG93IHJvb3RzIChib2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgotLy8gVGhl
IGJhc2ljIGlkZWEgaXMgdGhhdCBhIHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0g
KGZvciBxdWlya3kgZW0pIGluc3RlYWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4gIFdoZW4g
dGhlIHF1aXJreSB2YWx1ZSBpcyB1c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZSBt
YXJnaW4gd2lsbAotLy8gY29sbGFwc2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgotY2xhc3Mg
Q1NTUXVpcmtQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVi
bGljOgotICAgIENTU1F1aXJrUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5
cGUpCi0gICAgICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUobnVtLCB0eXBlKSB7fQotCi0gICAgdmly
dHVhbCBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLWNsYXNzIENv
dW50ZXIgOiBwdWJsaWMgU2hhcmVkPENvdW50ZXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmcgaWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIFN0cmluZyBsaXN0
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xpc3RTdHlsZTsgfQotICAgIFN0cmluZyBzZXBhcmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX3NlcGFyYXRvcjsgfQotCi0gICAgU3RyaW5nIG1faWRlbnRp
ZmllcjsKLSAgICBTdHJpbmcgbV9saXN0U3R5bGU7Ci0gICAgU3RyaW5nIG1fc2VwYXJhdG9yOwot
fTsKLQotY2xhc3MgUmVjdEltcGwgOiBwdWJsaWMgU2hhcmVkPFJlY3RJbXBsPiB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB+UmVjdEltcGwoKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3Ao
KSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBy
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogYm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b20uZ2V0KCk7IH0KLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdC5nZXQoKTsgfQotCi0g
ICAgdm9pZCBzZXRUb3AoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9w
ID0gdG9wOyB9Ci0gICAgdm9pZCBzZXRSaWdodChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiByaWdodCkgeyBtX3JpZ2h0ID0gcmlnaHQ7IH0KLSAgICB2b2lkIHNldEJvdHRvbShQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBib3R0b20pIHsgbV9ib3R0b20gPSBib3R0b207IH0KLSAg
ICB2b2lkIHNldExlZnQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xl
ZnQgPSBsZWZ0OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fdG9wOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKLSAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm90dG9tOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gbV9sZWZ0OwotfTsKLQotLy8gQSBwcmltaXRpdmUgdmFsdWUgcmVwcmVzZW50aW5nIGEg
cGFpci4gIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9wZXJ0aWVzIGxpa2UgYm9yZGVyLXJhZGl1cywg
YmFja2dyb3VuZC1zaXplL3Bvc2l0aW9uLAotLy8gYW5kIGJvcmRlci1zcGFjaW5nIChhbGwgb2Yg
d2hpY2ggYXJlIHNwYWNlLXNlcGFyYXRlZCBzZXRzIG9mIHR3byB2YWx1ZXMpLiAgQXQgdGhlIG1v
bWVudCB3ZSBhcmUgb25seSB1c2luZyBpdCBmb3IKLS8vIGJvcmRlci1yYWRpdXMgYW5kIGJhY2tn
cm91bmQtc2l6ZSwgYnV0IChGSVhNRSkgYm9yZGVyLXNwYWNpbmcgYW5kIGJhY2tncm91bmQtcG9z
aXRpb24gY291bGQgYmUgY29udmVydGVkIG92ZXIgdG8gdXNlCi0vLyBpdCAoZWxpbWluYXRpbmcg
c29tZSBleHRyYSAtd2Via2l0LSBpbnRlcm5hbCBwcm9wZXJ0aWVzKS4KLWNsYXNzIFBhaXIgOiBw
dWJsaWMgU2hhcmVkPFBhaXI+IHsKLXB1YmxpYzoKLSAgICBQYWlyKCkgOiBtX2ZpcnN0KDApLCBt
X3NlY29uZCgwKSB7IH0KLSAgICBQYWlyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZp
cnN0LCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpCi0gICAgICAgIDogbV9m
aXJzdChmaXJzdCksIG1fc2Vjb25kKHNlY29uZCkgeyB9Ci0gICAgdmlydHVhbCB+UGFpcigpOwot
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdC5n
ZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBt
X3NlY29uZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRGaXJzdChQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBmaXJzdCkgeyBtX2ZpcnN0ID0gZmlyc3Q7IH0KLSAgICB2b2lkIHNldFNlY29u
ZChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpIHsgbV9zZWNvbmQgPSBzZWNv
bmQ7IH0KLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJz
dDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kOwotfTsKLQotY2xhc3Mg
RGFzaGJvYXJkUmVnaW9uIDogcHVibGljIFJlY3RJbXBsIHsKLXB1YmxpYzoKLSAgICBEYXNoYm9h
cmRSZWdpb24oKSA6IG1faXNDaXJjbGUoMCksIG1faXNSZWN0YW5nbGUoMCkgeyB9Ci0KLSAgICBS
ZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiBtX25leHQ7Ci0gICAgU3RyaW5nIG1fbGFiZWw7Ci0gICAg
U3RyaW5nIG1fZ2VvbWV0cnlUeXBlOwotICAgIGJvb2wgbV9pc0NpcmNsZSA6IDE7Ci0gICAgYm9v
bCBtX2lzUmVjdGFuZ2xlIDogMTsKLX07Ci0KLWNsYXNzIENTU0ltYWdlVmFsdWUgOiBwdWJsaWMg
Q1NTUHJpbWl0aXZlVmFsdWUsIHB1YmxpYyBDYWNoZWRPYmplY3RDbGllbnQKLXsKLXB1YmxpYzoK
LSAgICBDU1NJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJpbmcmIHVy
bCwgU3R5bGVCYXNlKik7Ci0gICAgdmlydHVhbCB+Q1NTSW1hZ2VWYWx1ZSgpOwotCi0gICAgQ2Fj
aGVkSW1hZ2UqIGltYWdlKERvY0xvYWRlciopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2FjaGVkSW1h
Z2UqIG1faW1hZ2U7Ci0gICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7Ci19OwogCiBjbGFzcyBDU1NC
b3JkZXJJbWFnZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCiB7CiBwdWJsaWM6CiAgICAgQ1NTQm9y
ZGVySW1hZ2VWYWx1ZSgpOwotICAgIENTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJ
bWFnZVZhbHVlPiwKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4sIGludCBob3Jpem9udGFs
UnVsZSwgaW50IHZlcnRpY2FsUnVsZSk7CisgICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVm
UHRyPENTU0ltYWdlVmFsdWU+LCBQYXNzUmVmUHRyPFJlY3RJbXBsPiwgaW50IGhvcml6b250YWxS
dWxlLCBpbnQgdmVydGljYWxSdWxlKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKIApAQCAtMzk2LDE2NSArNTEsNiBAQAogICAgIGludCBtX3ZlcnRpY2FsU2l6ZVJ1bGU7
IC8vIFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIGhlaWdodHMgb2YgdGhlIGxlZnQvbWlkZGxl
L3JpZ2h0CiB9OwogCi1jbGFzcyBGb250RmFtaWx5VmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZl
VmFsdWUKLXsKLXB1YmxpYzoKLSAgICBGb250RmFtaWx5VmFsdWUoIGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJnN0cmluZyk7Ci0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZm9udE5hbWUoKSBj
b25zdCB7IHJldHVybiBwYXJzZWRGb250TmFtZTsgfQotICAgIGludCBnZW5lcmljRmFtaWx5VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIF9nZW5lcmljRmFtaWx5VHlwZTsgfQotCi0gICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXJzZWRGb250
TmFtZTsKLXByaXZhdGU6Ci0gICAgaW50IF9nZW5lcmljRmFtaWx5VHlwZTsKLX07Ci0KLWNsYXNz
IEZvbnRWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxl
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFyaWFudDsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHdlaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNp
emU7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lSGVpZ2h0OwotICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGZhbWlseTsKLX07Ci0KLS8vIFVzZWQgZm9yIHRleHQtc2hhZG93IGFu
ZCBib3gtc2hhZG93Ci1jbGFzcyBTaGFkb3dWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVi
bGljOgotICAgIFNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHgsCi0g
ICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHksCi0gICAgICAgIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXIsCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbG9yKTsKLSAgICAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHg7Ci0gICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB5OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9yOwotfTsKLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLS8vIGFub3RoZXIgaGVscGVyIGNsYXNzCi1jbGFzcyBDU1NQcm9wZXJ0eQot
ewotcHVibGljOgotICAgIENTU1Byb3BlcnR5KGludCBwcm9wSUQsIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBpbnQgc2hvcnRoYW5kSUQgPSAwLCBi
b29sIGltcGxpY2l0ID0gZmFsc2UpCi0gICAgICAgIDogbV9pZChwcm9wSUQpLCBtX3Nob3J0aGFu
ZElEKHNob3J0aGFuZElEKSwgbV9pbXBvcnRhbnQoaW1wb3J0YW50KSwgbV9pbXBsaWNpdChpbXBs
aWNpdCksIG1fdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDU1NQcm9wZXJ0
eSAmb3BlcmF0b3I9KGNvbnN0IENTU1Byb3BlcnR5JiBvKQotICAgIHsKLSAgICAgICAgbV9pZCA9
IG8ubV9pZDsKLSAgICAgICAgbV9zaG9ydGhhbmRJRCA9IG8ubV9zaG9ydGhhbmRJRDsKLSAgICAg
ICAgbV9pbXBvcnRhbnQgPSBvLm1faW1wb3J0YW50OwotICAgICAgICBtX3ZhbHVlID0gby5tX3Zh
bHVlOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAotICAgIGludCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBpbnQgc2hvcnRoYW5kSUQoKSBjb25zdCB7IHJldHVy
biBtX3Nob3J0aGFuZElEOyB9Ci0gICAgCi0gICAgYm9vbCBpc0ltcG9ydGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1faW1wb3J0YW50OyB9Ci0gICAgYm9vbCBpc0ltcGxpY2l0KCkgY29uc3QgeyByZXR1
cm4gbV9pbXBsaWNpdDsgfQotCi0gICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZS5nZXQoKTsgfQotICAgIAotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAg
ICAvLyBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBmaXRzIGluIDQgYnl0ZXMuCi0gICAgaW50IG1f
aWQ7Ci0gICAgaW50IG1fc2hvcnRoYW5kSUQ7ICAvLyBJZiB0aGlzIHByb3BlcnR5IHdhcyBzZXQg
YXMgcGFydCBvZiBhIHNob3J0aGFuZCwgZ2l2ZXMgdGhlIHNob3J0aGFuZC4KLSAgICBib29sIG1f
aW1wb3J0YW50IDogMTsKLSAgICBib29sIG1faW1wbGljaXQgOiAxOyAvLyBXaGV0aGVyIG9yIG5v
dCB0aGUgcHJvcGVydHkgd2FzIHNldCBpbXBsaWNpdGx5IGFzIHRoZSByZXN1bHQgb2YgYSBzaG9y
dGhhbmQuCi0KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5ICYs
IGNvbnN0IENTU1Byb3BlcnR5ICYpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtX3ZhbHVlOwot
fTsKLQotY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVE
ZWNsYXJhdGlvbgotewotcHVibGljOgotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7
Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSk7Ci0g
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3Qg
RGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gJik7Ci0gICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25z
dCAqLCBpbnQgbnVtUHJvcGVydGllcyk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biAmb3BlcmF0b3I9KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICYpOwotCi0gICAg
dm9pZCBzZXROb2RlKE5vZGUqIG5vZGUpIHsgbV9ub2RlID0gbm9kZTsgfQotCi0gICAgdmlydHVh
bCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5
VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0
eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9w
ZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
UHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wg
aW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJv
cGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUo
KTsKLQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiB2
YWx1ZXNJdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KLQotICAg
IGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSk7Ci0gICAgYm9vbCBzZXRQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQs
IGJvb2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgc2V0UHJvcGVy
dHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0g
ZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpCi0gICAgICAgIHsgRXhjZXB0aW9uQ29k
ZSBlYzsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLCBpbXBvcnRhbnQsIG5v
dGlmeUNoYW5nZWQsIGVjKTsgfQotCi0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9w
ZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcg
cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUp
Ci0gICAgICAgIHsgRXhjZXB0aW9uQ29kZSBlYzsgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3Bl
cnR5SUQsIG5vdGlmeUNoYW5nZWQsIGVjKTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAg
dm9pZCBzZXRDaGFuZ2VkKCk7Ci0gCi0gICAgLy8gc2V0TGVuZ3RoUHJvcGVydHkgdHJlYXRzIGlu
dGVnZXJzIGFzIHBpeGVscyEgKE5lZWRlZCBmb3IgY29udmVyc2lvbiBvZiBIVE1MIGF0dHJpYnV0
ZXMuKQotICAgIHZvaWQgc2V0TGVuZ3RoUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG11bHRpTGVuZ3RoID0gZmFsc2UpOwot
ICAgIHZvaWQgc2V0U3RyaW5nUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYg
dmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMsIGJvb2wgaW1wb3J0YW50ID0gZmFs
c2UpOyAvLyBwYXJzZWQgc3RyaW5nIHZhbHVlCi0gICAgdm9pZCBzZXRJbWFnZVByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7
Ci0gCi0gICAgLy8gVGhlIGZvbGxvd2luZyBwYXJzZXMgYW4gZW50aXJlIG5ldyBzdHlsZSBkZWNs
YXJhdGlvbi4KLSAgICB2b2lkIHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURl
Y2xhcmF0aW9uKTsKLQotICAgIC8vIEJlc2lkZXMgYWRkaW5nIHRoZSBwcm9wZXJ0aWVzLCB0aGlz
IGFsc28gcmVtb3ZlcyBhbnkgZXhpc3RpbmcgcHJvcGVydGllcyB3aXRoIHRoZXNlIElEcy4KLSAg
ICAvLyBJdCBkb2VzIG5vIG5vdGlmaWNhdGlvbiBzaW5jZSBpdCdzIGNhbGxlZCBieSB0aGUgcGFy
c2VyLgotICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNv
bnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKLSAKLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgdm9pZCBy
ZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJlbW92ZUluaGVyaXRhYmxlUHJvcGVy
dGllcygpOwotICAgIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdm9pZCBtZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiosIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwotIAotcHJpdmF0ZToK
LSAgICBTdHJpbmcgZ2V0U2hvcnRIYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQg
bnVtYmVyKSBjb25zdDsKLSAgICBTdHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRp
ZXMpIGNvbnN0OwotIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IG1fdmFs
dWVzOwotICAgIE5vZGUqIG1fbm9kZTsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJ
bmRleDogY3NzL0NTU0luaXRpYWxWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0luaXRp
YWxWYWx1ZS5jcHAJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU0luaXRpYWxWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5LDY0NSArMTksMTEgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJjc3NfdmFsdWVpbXBsLmgiCi0KLSNpbmNsdWRlICJDYWNoZS5oIgotI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJjc3NwYXJzZXIuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0j
aW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIK
LSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiUmVndWxhckV4cHJlc3Np
b24uaCIKLQotI2lmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRpZXMuaCIK
LSNlbmRpZgotCi0vLyBOb3QgaW4gYW55IGhlYWRlciwgc28ganVzdCBkZWNsYXJlIGl0IGhlcmUg
Zm9yIG5vdy4KLVdlYkNvcmU6OlN0cmluZyBnZXRQcm9wZXJ0eU5hbWUodW5zaWduZWQgc2hvcnQg
aWQpOworI2luY2x1ZGUgIkNTU0luaXRpYWxWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLS8vIERlZmluZWQgaW4gQ1NTR3JhbW1hci55LCBidXQgbm90IGluIGFueSBoZWFkZXIsIHNv
IGp1c3QgZGVjbGFyZSBpdCBoZXJlIGZvciBub3cuCi1pbnQgZ2V0UHJvcGVydHlJRChjb25zdCBj
aGFyKiBzdHIsIGludCBsZW4pOwotCi1zdGF0aWMgaW50IHByb3BlcnR5SUQoY29uc3QgU3RyaW5n
JiBzKQotewotICAgIGNoYXIgYnVmZmVyW21heENTU1Byb3BlcnR5TmFtZUxlbmd0aF07Ci0KLSAg
ICB1bnNpZ25lZCBsZW4gPSBzLmxlbmd0aCgpOwotICAgIGlmIChsZW4gPiBtYXhDU1NQcm9wZXJ0
eU5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSAhPSBsZW47ICsraSkgewotICAgICAgICBVQ2hhciBjID0gc1tpXTsKLSAgICAgICAgaWYg
KGMgPT0gMCB8fCBjID49IDB4N0YpCi0gICAgICAgICAgICByZXR1cm4gMDsgLy8gaWxsZWdhbCBj
aGFyYWN0ZXIKLSAgICAgICAgYnVmZmVyW2ldID0gYzsKLSAgICB9Ci0KLSAgICBpbnQgaWQgPSBn
ZXRQcm9wZXJ0eUlEKGJ1ZmZlciwgbGVuKTsKLSNpZiBTVkdfU1VQUE9SVAotICAgIGlmIChpZCA9
PSAwKQotICAgICAgICBpZCA9IFNWRzo6Z2V0U1ZHQ1NTUHJvcGVydHlJRChidWZmZXIsIGxlbik7
Ci0jZW5kaWYKLSAgICByZXR1cm4gaWQ7Ci19Ci0KLQotLy8gUXVvdGVzIHRoZSBzdHJpbmcgaWYg
aXQgbmVlZHMgcXVvdGluZy4KLS8vIFdlIHVzZSBzaW5nbGUgcXVvdGVzIGZvciBub3cgYmVhdXNl
IG1hcmt1cC5jcHAgdXNlcyBkb3VibGUgcXVvdGVzLgotc3RhdGljIFN0cmluZyBxdW90ZVN0cmlu
Z0lmTmVlZGVkKGNvbnN0IFN0cmluZyAmc3RyaW5nKQotewotICAgIC8vIEZvciBub3csIGp1c3Qg
ZG8gdGhpcyBmb3Igc3RyaW5ncyB0aGF0IHN0YXJ0IHdpdGggIiMiIHRvIGZpeCBLb3JlYW4gZm9u
dCBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggIiMiLgotICAgIC8vIFBvc3QtVGlnZXIsIHdlIHNob3Vs
ZCBpc0xlZ2FsSWRlbnRpZmllciBpbnN0ZWFkIGFmdGVyIHdvcmtpbmcgb3V0IGFsbCB0aGUgYW5j
aWxsYXJ5IGlzc3Vlcy4KLSAgICBpZiAoc3RyaW5nWzBdICE9ICcjJykKLSAgICAgICAgcmV0dXJu
IHN0cmluZzsKLQotICAgIC8vIEZJWE1FOiBBbHNvIG5lZWQgdG8gdHJhbnNmb3JtIGNvbnRyb2wg
Y2hhcmFjdGVycyBpbnRvIFwgc2VxdWVuY2VzLgotICAgIFN0cmluZyBzID0gc3RyaW5nOwotICAg
IHMucmVwbGFjZSgnXFwnLCAiXFxcXCIpOwotICAgIHMucmVwbGFjZSgnXCcnLCAiXFwnIik7Ci0g
ICAgcmV0dXJuICInIiArIHMgKyAiJyI7Ci19Ci0KLUNTU1N0eWxlRGVjbGFyYXRpb246OkNTU1N0
eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSAqcGFyZW50KQotICAgIDogU3R5bGVCYXNlKHBhcmVudCkK
LXsKLX0KLQotYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1N0eWxlRGVjbGFyYXRpb24oKQot
ewotICAgIHJldHVybiB0cnVlOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYg
KCFwcm9wSUQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1Zh
bHVlKHByb3BJRCk7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBw
cm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOwotfQotCi1T
dHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJp
bmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0
eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5UHJpb3JpdHkocHJvcElEKSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19
Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25z
dCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChw
cm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgaW50IHNob3J0aGFuZElEID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAg
ICBpZiAoIXNob3J0aGFuZElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IGdldFByb3BlcnR5TmFtZShzaG9ydGhhbmRJRCk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJh
dGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewot
ICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9w
SUQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxpY2l0
KHByb3BJRCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGludCBwcm9wSUQgPSBwcm9w
ZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpIC8vIHNldCBleGNlcHRpb24/
Ci0gICAgICAgIHJldHVybjsKLSAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImlt
cG9ydGFudCIsIDAsIGZhbHNlKSAhPSAtMTsKLSAgICBzZXRQcm9wZXJ0eShwcm9wSUQsIHZhbHVl
LCBpbXBvcnRhbnQsIGVjKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92
ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICgh
cHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3Bl
cnR5KHByb3BJRCwgZWMpOwotfQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVy
dHlOYW1lKGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBwcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bigpCi0gICAgOiBtX25vZGUoMCkKLXsKLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6IENTU1N0
eWxlRGVjbGFyYXRpb24ocGFyZW50KSwgbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQs
IGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+ICZ2YWx1ZXMpCi0gICAgOiBD
U1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fdmFsdWVzKHZhbHVlcyksIG1fbm9kZSgwKQot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KLX0KLQot
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENT
U1J1bGUgKnBhcmVudCwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqcHJvcGVydGllcywgaW50
IG51bVByb3BlcnRpZXMpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9k
ZSgwKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQotICAg
ICAgICBtX3ZhbHVlcy5hcHBlbmQoKnByb3BlcnRpZXNbaV0pOwotICAgIC8vIEZJWE1FOiBUaGlz
IGFsbG93cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24mIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24mIG8pCi17Ci0gICAgLy8gZG9uJ3QgYXR0YWNoIGl0IHRvIHRo
ZSBzYW1lIG5vZGUsIGp1c3QgbGVhdmUgdGhlIGN1cnJlbnQgbV9ub2RlIHZhbHVlCi0gICAgbV92
YWx1ZXMgPSBvLm1fdmFsdWVzOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotU3RyaW5nIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBj
b25zdAotewotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVl
KHByb3BlcnR5SUQpOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NU
ZXh0KCk7Ci0KLSAgICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKLSAgICBz
d2l0Y2ggKCBwcm9wZXJ0eUlEICkgewotICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJ
VElPTjoKLSAgICB7Ci0gICAgICAgIC8vICMjIElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4g
Y3NzcGFyc2VyLmNwcCBpcyBjb25mdXNpbmcKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
Ml0gPSB7IENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWSB9OwotICAg
ICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDIgKTsKLSAgICB9Ci0g
ICAgY2FzZSBDU1NfUFJPUF9CQUNLR1JPVU5EOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHBy
b3BlcnRpZXNbNV0gPSB7IENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIENTU19QUk9QX0JBQ0tH
Uk9VTkRfUkVQRUFULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BS
T1BfQkFDS0dST1VORF9BVFRBQ0hNRU5ULCBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9D
T0xPUiB9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDUg
KTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVI6Ci0gICAgewotICAgICAgICBjb25z
dCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX1dJRFRILCBDU1NfUFJPUF9C
T1JERVJfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJP
UF9CT1JERVJfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9w
ZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1RPUDoKLSAgICB7
Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfVE9Q
X1dJRFRILCBDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTX1BST1BfQk9SREVSX1RPUF9DT0xPUn07Ci0gICAgICAgIHJldHVy
biBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENT
U19QUk9QX0JPUkRFUl9SSUdIVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzNdID0geyBDU1NfUFJPUF9CT1JERVJfUklHSFRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdI
VF9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JP
UkRFUl9SSUdIVF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJv
cGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9CT1RUT006Ci0g
ICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVS
X0JPVFRPTV9XSURUSCwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09MT1J9Owot
ICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9
Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JERVJfTEVGVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCwgQ1NTX1BST1Bf
Qk9SREVSX0xFRlRfU1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NfUFJPUF9CT1JERVJfTEVGVF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRW
YWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX09VVExJTkU6
Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfT1VU
TElORV9XSURUSCwgQ1NTX1BST1BfT1VUTElORV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU19QUk9QX09VVExJTkVfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJu
IGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NT
X1BST1BfQk9SREVSX0NPTE9SOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
NF0gPSB7IENTU19QUk9QX0JPUkRFUl9UT1BfQ09MT1IsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9D
T0xPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRF
Ul9CT1RUT01fQ09MT1IsIENTU19QUk9QX0JPUkRFUl9MRUZUX0NPTE9SIH07Ci0gICAgICAgIHJl
dHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1Bf
Qk9SREVSX1dJRFRIOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7
IENTU19QUk9QX0JPUkRFUl9UT1BfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RU
T01fV0lEVEgsIENTU19QUk9QX0JPUkRFUl9MRUZUX1dJRFRIIH07Ci0gICAgICAgIHJldHVybiBn
ZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVS
X1NUWUxFOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19Q
Uk9QX0JPUkRFUl9UT1BfU1RZTEUsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZ
TEUsIENTU19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFs
dWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTUFSR0lOOgotICAg
IHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX01BUkdJTl9U
T1AsIENTU19QUk9QX01BUkdJTl9SSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU19QUk9QX01BUkdJTl9CT1RUT00sIENTU19QUk9QX01BUkdJTl9MRUZUIH07Ci0g
ICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2Ug
Q1NTX1BST1BfUEFERElORzoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRd
ID0geyBDU1NfUFJPUF9QQURESU5HX1RPUCwgQ1NTX1BST1BfUEFERElOR19SSUdIVCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX1BBRERJTkdfQk9UVE9NLCBD
U1NfUFJPUF9QQURESU5HX0xFRlQgfTsKLSAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHByb3Bl
cnRpZXMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9MSVNUX1NUWUxFOgotICAgIHsKLSAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQ
RSwgQ1NTX1BST1BfTElTVF9TVFlMRV9QT1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0xJU1RfU1RZTEVfSU1BR0UgfTsKLSAgICAgICAgcmV0dXJu
IGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0NFZhbHVlcyggY29uc3QgaW50KiBwcm9wZXJ0aWVzICkgY29uc3QKLXsKLSAgICBTdHJpbmcg
cmVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQ
cm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAg
ICAgICAgIGlmICghdmFsdWUpIC8vIGFwcGFyZW50bHkgYWxsIDQgcHJvcGVydGllcyBtdXN0IGJl
IHNwZWNpZmllZC4KLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAg
ICBpZiAoIXJlcy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAg
ICAgICAgcmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRTaG9y
dEhhbmRWYWx1ZSggY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyICkgY29uc3QKLXsK
LSAgICBTdHJpbmcgcmVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpIHsK
LSAgICAgICAgaWYgKCFpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnRpZXNbaV0pOwotICAgICAgICAgICAgaWYgKHZhbHVlKSB7IC8vIFRPRE8gcHJvdmlkZSBkZWZh
dWx0IHZhbHVlIGlmICF2YWx1ZQotICAgICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgICAgIHJlcyArPSB2
YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiByZXM7Ci19Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAg
IERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAg
Zm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBt
X3ZhbHVlcy5mcm9tTGFzdCgpOyBpdCAhPSBlbmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0
eUlEID09ICgqaXQpLm1faWQpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWUoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1v
dmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBEZXBy
ZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJl
Y2F0ZWRWYWx1ZUxpc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFz
dCgpOyBpdCAhPSBlbmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1f
aWQpIHsKLSAgICAgICAgICAgIHZhbHVlID0gKCppdCkudmFsdWUoKS0+Y3NzVGV4dCgpOwotICAg
ICAgICAgICAgbV92YWx1ZXMucmVtb3ZlKGl0KTsKLSAgICAgICAgICAgIGlmIChub3RpZnlDaGFu
Z2VkKQotICAgICAgICAgICAgICAgIHNldENoYW5nZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNsZWFyKCkKLXsKLSAgICBtX3ZhbHVlcy5jbGVhcigpOwotICAgIHNldENo
YW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q2hhbmdl
ZCgpCi17Ci0gICAgaWYgKG1fbm9kZSkgewotICAgICAgICBtX25vZGUtPnNldENoYW5nZWQoKTsK
LSAgICAgICAgLy8gRklYTUU6IElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRl
ciBhbmQgdGhlcmUKLSAgICAgICAgLy8gc2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24ganVzdAotICAgICAgICAvLyBmb3IgaW5saW5lIHN0eWxlIGRlY2xh
cmF0aW9ucyB0aGF0IGhhbmRsZXMgdGhpcwotICAgICAgICBpZiAobV9ub2RlLT5pc1N0eWxlZEVs
ZW1lbnQoKSAmJiB0aGlzID09IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQgKj4obV9ub2RlKS0+
aW5saW5lU3R5bGVEZWNsKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50
ICo+KG1fbm9kZSktPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gIyMjIHF1aWNrJmRpcnR5IGhhY2sgZm9yIEtERSAzLjAuLi4gbWFr
ZSB0aGlzIE1VQ0ggYmV0dGVyISAoRGlyaykKLSAgICBTdHlsZUJhc2UgKnJvb3QgPSB0aGlzOwot
ICAgIHdoaWxlIChTdHlsZUJhc2UgKnBhcmVudCA9IHJvb3QtPnBhcmVudCgpKQotICAgICAgICBy
b290ID0gcGFyZW50OwotICAgIGlmIChyb290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2MoKS0+dXBkYXRlU3R5bGVTZWxl
Y3RvcigpOwotfQotCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gKCppdCkuaXNJbXBvcnRhbnQoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWludCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhh
bmQoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiAoKml0KS5zaG9ydGhhbmRJRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBw
cm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y
PENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVy
YXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gKCppdCkuaXNJbXBsaWNpdCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyAmdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlLCBlYyk7Ci19
Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50
IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiByZW1vdmVQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB0cnVlLCBlYyk7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVl
LCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0KLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLQotICAg
IENTU1BhcnNlciBwYXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBwYXJzZXIucGFyc2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsK
LSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIH0gZWxz
ZSBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIHJldHVybiBz
dWNjZXNzOwotfQotCi1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlD
aGFuZ2VkKQotewotICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwotICAgIG1fdmFsdWVz
LmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpLCBpbXBvcnRhbnQpKTsKLSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hh
bmdlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpzZXRTdHJpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZ2
YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGltcG9ydGFudCkK
LXsKLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQo
Q1NTUHJvcGVydHkocHJvcGVydHlJZCwgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBl
KSwgaW1wb3J0YW50KSk7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpzZXRJbWFnZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBT
dHJpbmcgJlVSTCwgYm9vbCBpbXBvcnRhbnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVy
dHlJZCk7Ci0gICAgbV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBD
U1NJbWFnZVZhbHVlKFVSTCwgdGhpcyksIGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsK
LX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cGFyc2VEZWNsYXJhdGlvbihj
b25zdCBTdHJpbmcgJnN0eWxlRGVjbGFyYXRpb24pCi17Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsK
LSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBh
cnNlRGVjbGFyYXRpb24odGhpcywgc3R5bGVEZWNsYXJhdGlvbik7Ci0gICAgc2V0Q2hhbmdlZCgp
OwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0
aWVzKGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0
aWVzKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0g
ICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0tPmlkKCksIGZhbHNlKTsKLSAgICAg
ICAgbV92YWx1ZXMuYXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6
IFRoaXMgcHJvYmFibHkgc2hvdWxkIGhhdmUgYSBjYWxsIHRvIHNldENoYW5nZWQoKSBpZiBzb21l
dGhpbmcgY2hhbmdlZC4gV2UgbWF5IGFsc28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5vdGlmeUNo
YW5nZWQgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90
aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGNsYXNzLgotfQotCi12b2lkIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpzZXRMZW5ndGhQcm9wZXJ0eShpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUs
IGJvb2wgaW1wb3J0YW50LCBib29sIC8qIG11bHRpTGVuZ3RoKi8pCi17Ci0gICAgYm9vbCBwYXJz
ZU1vZGUgPSB1c2VTdHJpY3RQYXJzaW5nKCk7Ci0gICAgc2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7
Ci0gICAgc2V0UHJvcGVydHkoaWQsIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgIHNldFN0cmljdFBh
cnNpbmcocGFyc2VNb2RlKTsKLX0KLQotdW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWVzLmNvdW50KCk7Ci19Ci0K
LVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25z
dAotewotICAgIGlmIChpID49IG1fdmFsdWVzLmNvdW50KCkpCi0gICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUobV92YWx1ZXNbaV0uaWQoKSk7Ci19Ci0K
LUNTU1J1bGUgKkNTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAg
IHJldHVybiAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENT
U1J1bGUgKj4ocGFyZW50KCkpIDogMDsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAg
Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsK
LSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBp
dCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0ICs9
ICgqaXQpLmNzc1RleHQoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAg
ICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNl
RGVjbGFyYXRpb24odGhpcywgdGV4dCk7Ci0gICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJy
b3JzIGFuZCBzZXQgZWMuCi0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjptZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqb3RoZXIs
IGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCkKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVl
TGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gb3RoZXItPnZhbHVlc0l0ZXJhdG9y
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVy
dHkgPSAqaXQ7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNT
U1ZhbHVlKHByb3BlcnR5LmlkKCkpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAg
IGlmICghYXJnT3ZlcnJpZGVzT25Db25mbGljdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LmlkKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fdmFsdWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBU
aGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBzZXRDaGFuZ2VkKCkgaWYgc29tZXRo
aW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFu
Z2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhl
ciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9u
OjpkaWZmKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSkgY29uc3QKLXsKLSAgICBp
ZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PGlu
dD4gcHJvcGVydGllczsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGl0KHN0eWxlLT52YWx1ZXNJdGVyYXRvcigpKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5ICZwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQo
KSk7Ci0gICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS52
YWx1ZSgpLT5jc3NUZXh0KCkpKQotICAgICAgICAgICAgcHJvcGVydGllcy5hcHBlbmQocHJvcGVy
dHkuaWQoKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJh
dG9yPGludD4gaXQocHJvcGVydGllcy5iZWdpbigpKTsgaXQgIT0gcHJvcGVydGllcy5lbmQoKTsg
KytpdCkKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KCppdCk7Ci19Ci0KLS8vIFRoaXMg
aXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlJbmhl
cml0YWJsZVByb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBpbnRlcnNlY3Rpb24g
b2YgdGhlIGxpc3Qgb2YgaW5oZXJpdGVkIENTUyBwcm9wZXJ0aWVzIGFuZCB0aGUKLS8vIHByb3Bl
cnRpZXMgZm9yIHdoaWNoIHdlIGhhdmUgYSBjb21wdXRlZCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlz
IGZpbGUuCi1jb25zdCBpbnQgaW5oZXJpdGFibGVQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BS
T1BfQk9SREVSX0NPTExBUFNFLAotICAgIENTU19QUk9QX0JPUkRFUl9TUEFDSU5HLAotICAgIENT
U19QUk9QX0NPTE9SLAotICAgIENTU19QUk9QX0ZPTlRfRkFNSUxZLAotICAgIENTU19QUk9QX0ZP
TlRfU0laRSwKLSAgICBDU1NfUFJPUF9GT05UX1NUWUxFLAotICAgIENTU19QUk9QX0ZPTlRfVkFS
SUFOVCwKLSAgICBDU1NfUFJPUF9GT05UX1dFSUdIVCwKLSAgICBDU1NfUFJPUF9MRVRURVJfU1BB
Q0lORywKLSAgICBDU1NfUFJPUF9MSU5FX0hFSUdIVCwKLSAgICBDU1NfUFJPUF9URVhUX0FMSUdO
LAotICAgIENTU19QUk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsCi0gICAg
Q1NTX1BST1BfVEVYVF9JTkRFTlQsCi0gICAgQ1NTX1BST1BfX1dFQktJVF9URVhUX1NJWkVfQURK
VVNULAotICAgIENTU19QUk9QX1RFWFRfVFJBTlNGT1JNLAotICAgIENTU19QUk9QX09SUEhBTlMs
Ci0gICAgQ1NTX1BST1BfV0hJVEVfU1BBQ0UsCi0gICAgQ1NTX1BST1BfV0lET1dTLAotICAgIENT
U19QUk9QX1dPUkRfU1BBQ0lORywKLX07Ci0KLWNvbnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxl
UHJvcGVydGllcyA9IHNpemVvZihpbmhlcml0YWJsZVByb3BlcnRpZXMpIC8gc2l6ZW9mKGluaGVy
aXRhYmxlUHJvcGVydGllc1swXSk7Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGll
cyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBmdW5jdGlvbi4K
LS8vIEl0IGlzIHRoZSBsaXN0IG9mIENTUyBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgc3BlY2lhbGx5
IHRvIGJsb2NrLWxldmVsIGVsZW1lbnRzLgotc3RhdGljIGNvbnN0IGludCBibG9ja1Byb3BlcnRp
ZXNbXSA9IHsKLSAgICBDU1NfUFJPUF9PUlBIQU5TLAotICAgIENTU19QUk9QX09WRVJGTE9XLCAv
LyBUaGlzIGNhbiBiZSBhbHNvIGJlIGFwcGxpZWQgdG8gcmVwbGFjZWQgZWxlbWVudHMKLSAgICBD
U1NfUFJPUF9QQUdFX0JSRUFLX0FGVEVSLAotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfQkVGT1JF
LAotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfSU5TSURFLAotICAgIENTU19QUk9QX1RFWFRfQUxJ
R04sCi0gICAgQ1NTX1BST1BfVEVYVF9JTkRFTlQsCi0gICAgQ1NTX1BST1BfV0lET1dTCi19Owot
Ci1jb25zdCB1bnNpZ25lZCBudW1CbG9ja1Byb3BlcnRpZXMgPSBzaXplb2YoYmxvY2tQcm9wZXJ0
aWVzKSAvIHNpemVvZihibG9ja1Byb3BlcnRpZXNbMF0pOwotCi1QYXNzUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weUJsb2Nr
UHJvcGVydGllcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxv
Y2tQcm9wZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVBy
b3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0K
LXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUluaGVyaXRhYmxlUHJvcGVy
dGllcygpCi17Ci0gICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGluaGVyaXRhYmxlUHJvcGVydGll
cywgbnVtSW5oZXJpdGFibGVQcm9wZXJ0aWVzKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNl
dChjb25zdCBpbnQgKnNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewotICAgIERlcHJlY2F0
ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IGxpc3Q7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAg
IGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkp
OwotICAgIH0KLSAgICByZXR1cm4gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIGxp
c3QpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUo
c2V0W2ldKTsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZW1v
dmUoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2hhbmdlZCkK
LSAgICAgICAgc2V0Q2hhbmdlZCgpOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQotewot
ICAgIHJldHVybiB0aGlzOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigwLCBtX3ZhbHVlcyk7Ci19Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXVuc2lnbmVkIHNob3J0IENTU0luaGVy
aXRlZFZhbHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfSU5IRVJJ
VDsKLX0KLQotU3RyaW5nIENTU0luaGVyaXRlZFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gImluaGVyaXQiOwotfQotCiB1bnNpZ25lZCBzaG9ydCBDU1NJbml0aWFsVmFsdWU6
OmNzc1ZhbHVlVHlwZSgpIGNvbnN0CiB7IAogICAgIHJldHVybiBDU1NfSU5JVElBTDsgCkBAIC02
NjgsNjg4ICszNCw0IEBACiAgICAgcmV0dXJuICJpbml0aWFsIjsKIH0KIAotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NWYWx1ZUxpc3Q6On5DU1NWYWx1ZUxpc3QoKQot
ewotICAgIGZvciAoQ1NTVmFsdWUgKnZhbCA9IG1fdmFsdWVzLmZpcnN0KCk7IHZhbDsgdmFsID0g
bV92YWx1ZXMubmV4dCgpKQotICAgICAgICB2YWwtPmRlcmVmKCk7Ci19Ci0KLXVuc2lnbmVkIHNo
b3J0IENTU1ZhbHVlTGlzdDo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NT
X1ZBTFVFX0xJU1Q7Ci19Ci0KLXZvaWQgQ1NTVmFsdWVMaXN0OjphcHBlbmQoUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gdmFsKQotewotICAgIG1fdmFsdWVzLmFwcGVuZCh2YWwucmVsZWFzZSgpKTsKLX0K
LQotU3RyaW5nIENTU1ZhbHVlTGlzdDo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJl
c3VsdCA9ICIiOwotCi0gICAgZm9yIChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPENTU1ZhbHVl
PiBpdGVyYXRvcihtX3ZhbHVlcyk7IGl0ZXJhdG9yLmN1cnJlbnQoKTsgKytpdGVyYXRvcikgewot
ICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiwg
IjsKLSAgICAgICAgcmVzdWx0ICs9IGl0ZXJhdG9yLmN1cnJlbnQoKS0+Y3NzVGV4dCgpOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZSgpCi17Ci0g
ICAgbV90eXBlID0gMDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVl
KGludCBpZGVudCkKLXsKLSAgICBtX3ZhbHVlLmlkZW50ID0gaWRlbnQ7Ci0gICAgbV90eXBlID0g
Q1NTX0lERU5UOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoZG91
YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi17Ci0gICAgbV92YWx1ZS5udW0gPSBudW07Ci0gICAg
bV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVl
KGNvbnN0IFN0cmluZyYgc3RyLCBVbml0VHlwZXMgdHlwZSkKLXsKLSAgICBpZiAoKG1fdmFsdWUu
c3RyaW5nID0gc3RyLmltcGwoKSkpCi0gICAgICAgIG1fdmFsdWUuc3RyaW5nLT5yZWYoKTsKLSAg
ICBtX3R5cGUgPSB0eXBlOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFs
dWUoUGFzc1JlZlB0cjxDb3VudGVyPiBjKQotewotICAgIG1fdmFsdWUuY291bnRlciA9IGMucmVs
ZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19DT1VOVEVSOwotfQotCi1DU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxSZWN0SW1wbD4gcikKLXsKLSAgICBtX3Zh
bHVlLnJlY3QgPSByLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfUkVDVDsKLX0KLQotI2lm
IF9fQVBQTEVfXwotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQ
dHI8RGFzaGJvYXJkUmVnaW9uPiByKQotewotICAgIG1fdmFsdWUucmVnaW9uID0gci5yZWxlYXNl
KCk7Ci0gICAgbV90eXBlID0gQ1NTX0RBU0hCT0FSRF9SRUdJT047Ci19Ci0jZW5kaWYKLQotQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFJHQkEzMiBjb2xvcikKLXsKLSAgICBt
X3ZhbHVlLnJnYmNvbG9yID0gY29sb3I7Ci0gICAgbV90eXBlID0gQ1NTX1JHQkNPTE9SOwotfQot
Ci1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxQYWlyPiBw
KQotewotICAgIG1fdmFsdWUucGFpciA9IHAucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19Q
QUlSOwotfQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6fkNTU1ByaW1pdGl2ZVZhbHVlKCkKLXsKLSAg
ICBjbGVhbnVwKCk7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNsZWFudXAoKQotewot
ICAgIHN3aXRjaChtX3R5cGUpIHsKLSAgICBjYXNlIENTU19TVFJJTkc6Ci0gICAgY2FzZSBDU1Nf
VVJJOgotICAgIGNhc2UgQ1NTX0FUVFI6Ci0gICAgICAgIGlmIChtX3ZhbHVlLnN0cmluZykKLSAg
ICAgICAgICAgIG1fdmFsdWUuc3RyaW5nLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU19DT1VOVEVSOgotICAgICAgICBtX3ZhbHVlLmNvdW50ZXItPmRlcmVmKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1JFQ1Q6Ci0gICAgICAgIG1fdmFsdWUucmVjdC0+ZGVy
ZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfUEFJUjoKLSAgICAgICAgbV92YWx1
ZS5wYWlyLT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAgICBjYXNl
IENTU19EQVNIQk9BUkRfUkVHSU9OOgotICAgICAgICBpZiAobV92YWx1ZS5yZWdpb24pCi0gICAg
ICAgICAgICBtX3ZhbHVlLnJlZ2lvbi0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3R5cGUgPSAwOwot
fQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUg
KnN0eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUp
OwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3Vs
dGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdv
IGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdl
ciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAg
Ci0gICAgaWYgKHJlc3VsdCA+IElOVF9NQVggfHwgcmVzdWx0IDwgSU5UX01JTikKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgICAKLX0KLQotaW50IENTU1ByaW1p
dGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11
bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVu
Z3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNp
c2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAg
ICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8g
dGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAx
IDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IElOVF9NQVggfHwgcmVzdWx0IDwgSU5U
X01JTikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgCi19Ci0K
LWNvbnN0IGludCBpbnRNYXhGb3JMZW5ndGggPSAweDdmZmZmZmY7IC8vIG1heCB2YWx1ZSBmb3Ig
YSAyOC1iaXQgaW50Ci1jb25zdCBpbnQgaW50TWluRm9yTGVuZ3RoID0gKC0weDdmZmZmZmYtMSk7
IC8vIG1pbiB2YWx1ZSBmb3IgYSAyOC1iaXQgaW50Ci0KLS8vIExlbmd0aHMgZXhwZWN0IGFuIGlu
dCB0aGF0IGlzIG9ubHkgMjgtYml0cywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3IgYSBkaWZmZXJl
bnQgb3ZlcmZsb3cuCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JM
ZW5ndGgoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBjb21wdXRl
TGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXBy
ZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UK
LSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2Ug
dG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0w
LjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IGludE1heEZvckxlbmd0aCB8fCBy
ZXN1bHQgPCBpbnRNaW5Gb3JMZW5ndGgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAo
aW50KXJlc3VsdDsgICAgCi19Ci0KLS8vIExlbmd0aHMgZXhwZWN0IGFuIGludCB0aGF0IGlzIG9u
bHkgMjgtYml0cywgc28gd2UgaGF2ZSB0byBjaGVjayBmb3IgYSBkaWZmZXJlbnQgb3ZlcmZsb3cu
Ci1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVy
U3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0g
bXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhGbG9hdChzdHlsZSk7Ci0gICAgCi0gICAgLy8gVGhp
cyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiwg
ZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlm
IHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBpbnRlZ2VyIHZhbHVlLgotICAgIHJlc3Vs
dCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsKLSAgICAKLSAgICBpZiAocmVzdWx0ID4g
aW50TWF4Rm9yTGVuZ3RoIHx8IHJlc3VsdCA8IGludE1pbkZvckxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIChpbnQpcmVzdWx0OyAgCi19Ci0KLXNob3J0IENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUgKnN0eWxlKQotewotICAgIGRv
dWJsZSByZXN1bHQgPSBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRo
aXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2Ys
IGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBp
ZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1
bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+
IFNIUlRfTUFYIHx8IHJlc3VsdCA8IFNIUlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gKHNob3J0KXJlc3VsdDsgICAgCi19Ci0KLXNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpj
b21wdXRlTGVuZ3RoU2hvcnQoUmVuZGVyU3R5bGUgKnN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikK
LXsKLSAgICBkb3VibGUgcmVzdWx0ID0gbXVsdGlwbGllciAqIGNvbXB1dGVMZW5ndGhGbG9hdChz
dHlsZSk7Ci0gICAgCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIGltcHJlY2lzZSwgb2Z0ZW4g
cmVzdWx0aW5nIGluIHZhbHVlcyBvZiwgZS5nLiwgNDQuOTk5OTguICBXZQotICAgIC8vIG5lZWQg
dG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBjbG9zZSB0byB0aGUgbmV4dCBp
bnRlZ2VyIHZhbHVlLgotICAgIHJlc3VsdCArPSByZXN1bHQgPCAwID8gLTAuMDEgOiArMC4wMTsK
LSAgICAKLSAgICBpZiAocmVzdWx0ID4gU0hSVF9NQVggfHwgcmVzdWx0IDwgU0hSVF9NSU4pCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoc2hvcnQpcmVzdWx0OyAgCi19Ci0KLWRvdWJs
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEZsb2F0KFJlbmRlclN0eWxlICpzdHls
ZSwgYm9vbCBhcHBseVpvb21GYWN0b3IpCi17Ci0gICAgdW5zaWduZWQgc2hvcnQgdHlwZSA9IHBy
aW1pdGl2ZVR5cGUoKTsKLQotICAgIC8vIFdlIGFsd2F5cyBhc3N1bWUgOTYgQ1NTIHBpeGVscyBp
biBhIENTUyBpbmNoLiBUaGlzIGlzIHRoZSBjb2xkIGhhcmQgdHJ1dGggb2YgdGhlIFdlYi4KLSAg
ICAvLyBBdCBoaWdoIERQSSwgd2UgbWF5IHNjYWxlIGEgQ1NTIHBpeGVsLCBidXQgdGhlIHJhdGlv
IG9mIHRoZSBDU1MgcGl4ZWwgdG8gdGhlIHNvLWNhbGxlZAotICAgIC8vICJhYnNvbHV0ZSIgQ1NT
IGxlbmd0aCB1bml0cyBsaWtlIGluY2ggYW5kIHB0IGlzIGFsd2F5cyBmaXhlZCBhbmQgbmV2ZXIg
Y2hhbmdlcy4KLSAgICBkb3VibGUgY3NzUGl4ZWxzUGVySW5jaCA9IDk2LjsKLQotICAgIGRvdWJs
ZSBmYWN0b3IgPSAxLjsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2UgQ1NTX0VNUzoKLSAg
ICAgICAgZmFjdG9yID0gYXBwbHlab29tRmFjdG9yID8KLSAgICAgICAgICBzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCkgOgotICAgICAgICAgIHN0eWxlLT5mb250RGVzY3Jp
cHRpb24oKS5zcGVjaWZpZWRTaXplKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0VY
UzogewotICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSBhIGJ1ZyByaWdodCBub3cgd2hlcmUgdGhl
IHpvb20gd2lsbCBiZSBhcHBsaWVkIG11bHRpcGxlIHRpbWVzIHRvIEVYIHVuaXRzLgotICAgICAg
ICAvLyBXZSByZWFsbHkgbmVlZCB0byBjb21wdXRlIEVYIHVzaW5nIGZvbnRNZXRyaWNzIGZvciB0
aGUgb3JpZ2luYWwgc3BlY2lmaWVkU2l6ZSBhbmQgbm90IHVzZQotICAgICAgICAvLyBvdXIgYWN0
dWFsIGNvbnN0cnVjdGVkIHJlbmRlcmluZyBmb250LgotICAgICAgICBmYWN0b3IgPSBzdHlsZS0+
Zm9udCgpLnhIZWlnaHQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BY
OgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19DTToKLSAgICAgICAgZmFjdG9yID0gY3Nz
UGl4ZWxzUGVySW5jaC8yLjU0OyAvLyAoMi41NCBjbS9pbikKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NfTU06Ci0gICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gvMjUuNDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfSU46Ci0gICAgICAgIGZhY3RvciA9IGNzc1BpeGVs
c1BlckluY2g7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICBmYWN0
b3IgPSBjc3NQaXhlbHNQZXJJbmNoLzcyLjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1Nf
UEM6Ci0gICAgICAgIC8vIDEgcGMgPT0gMTIgcHQKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxz
UGVySW5jaCoxMi4vNzIuOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldEZsb2F0VmFsdWUoKSAqIGZhY3RvcjsK
LX0KLQotdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0RmxvYXRWYWx1ZSggdW5zaWduZWQgc2hv
cnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9hdFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBlYyA9IDA7Ci0gICAgY2xlYW51cCgpOwotICAgIC8vICMjIyBjaGVjayBpZiBwcm9wZXJ0eSBz
dXBwb3J0cyB0aGlzIHR5cGUKLSAgICBpZiAobV90eXBlID4gQ1NTX0RJTUVOU0lPTikgewotICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy9pZiht
X3R5cGUgPiBDU1NfRElNRU5TSU9OKSB0aHJvdyBET01FeGNlcHRpb24oSU5WQUxJRF9BQ0NFU1Nf
RVJSKTsKLSAgICBtX3ZhbHVlLm51bSA9IGZsb2F0VmFsdWU7Ci0gICAgbV90eXBlID0gdW5pdFR5
cGU7Ci19Ci0KLWRvdWJsZSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24odW5zaWduZWQgc2hvcnQg
dW5pdFR5cGUpCi17Ci0gICAgZG91YmxlIGNzc1BpeGVsc1BlckluY2ggPSA5Ni4wOwotICAgIGRv
dWJsZSBmYWN0b3IgPSAxLjA7Ci0gICAgCi0gICAgc3dpdGNoKHVuaXRUeXBlKSB7Ci0gICAgICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ006Ci0gICAgICAgICAgICBmYWN0b3Ig
PSBjc3NQaXhlbHNQZXJJbmNoIC8gMi41NDsgLy8gKDIuNTQgY20vaW4pCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01NOgotICAgICAgICAg
ICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgotICAgICAgICAgICAgZmFj
dG9yID0gY3NzUGl4ZWxzUGVySW5jaDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFQ6Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhl
bHNQZXJJbmNoIC8gNzIuMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEM6Ci0gICAgICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJ
bmNoICogMTIuMCAvIDcyLjA7IC8vIDEgcGMgPT0gMTIgcHQKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiBmYWN0b3I7Ci19Ci0KLWRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0RmxvYXRWYWx1
ZSh1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkKLXsKLSAgICBpZiAodW5pdFR5cGUgPT0gbV90eXBl
IHx8IHVuaXRUeXBlIDwgQ1NTX1BYIHx8IHVuaXRUeXBlID4gQ1NTX1BDKQotICAgICAgICByZXR1
cm4gbV92YWx1ZS5udW07Ci0gICAgCi0gICAgZG91YmxlIGNvbnZlcnRlZFZhbHVlID0gbV92YWx1
ZS5udW07Ci0gICAgCi0gICAgLy8gRmlyc3QgY29udmVydCB0aGUgdmFsdWUgZnJvbSBtX3R5cGUg
aW50byBDU1NQaXhlbHMKLSAgICBkb3VibGUgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JDb252ZXJz
aW9uKG1fdHlwZSk7Ci0gICAgY29udmVydGVkVmFsdWUgKj0gZmFjdG9yOwotICAgIAotICAgIC8v
IE5vdyBjb252ZXJ0IGZyb20gQ1NTUGl4ZWxzIHRvIHRoZSBzcGVjaWZpZWQgdW5pdFR5cGUKLSAg
ICBmYWN0b3IgPSBzY2FsZUZhY3RvckZvckNvbnZlcnNpb24odW5pdFR5cGUpOwotICAgIGNvbnZl
cnRlZFZhbHVlIC89IGZhY3RvcjsKLSAgICAKLSAgICByZXR1cm4gY29udmVydGVkVmFsdWU7Ci19
Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldFN0cmluZ1ZhbHVlKCB1bnNpZ25lZCBzaG9y
dCBzdHJpbmdUeXBlLCBjb25zdCBTdHJpbmcgJnN0cmluZ1ZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBlYyA9IDA7Ci0gICAgY2xlYW51cCgpOwotICAgIC8vaWYobV90eXBlIDwgQ1NT
X1NUUklORykgdGhyb3cgRE9NRXhjZXB0aW9uKElOVkFMSURfQUNDRVNTX0VSUik7Ci0gICAgLy9p
ZihtX3R5cGUgPiBDU1NfQVRUUikgdGhyb3cgRE9NRXhjZXB0aW9uKElOVkFMSURfQUNDRVNTX0VS
Uik7Ci0gICAgaWYgKG1fdHlwZSA8IENTU19TVFJJTkcgfHwgbV90eXBlID4gQ1NTX0FUVFIpIHsK
LSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChzdHJpbmdUeXBlICE9IENTU19JREVOVCkgewotICAgICAgICBtX3ZhbHVlLnN0cmluZyA9IHN0
cmluZ1ZhbHVlLmltcGwoKTsKLSAgICAgICAgbV92YWx1ZS5zdHJpbmctPnJlZigpOwotICAgICAg
ICBtX3R5cGUgPSBzdHJpbmdUeXBlOwotICAgIH0KLSAgICAvLyAjIyMgcGFyc2UgaWRlbnQKLX0K
LQotU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0Ci17Ci0g
ICAgc3dpdGNoIChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAgICAgICBj
YXNlIENTU19BVFRSOgotICAgICAgICBjYXNlIENTU19VUkk6Ci0gICAgICAgICAgICByZXR1cm4g
bV92YWx1ZS5zdHJpbmc7Ci0gICAgICAgIGNhc2UgQ1NTX0lERU5UOgotICAgICAgICAgICAgcmV0
dXJuIGdldFZhbHVlTmFtZShtX3ZhbHVlLmlkZW50KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgQ1NTIDIuMSBzcGVjIHNheXMgeW91IHNob3VsZCB0aHJvdyBh
biBleGNlcHRpb24gaGVyZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpj
c3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfUFJJTUlUSVZFX1ZBTFVFOwot
fQotCi1ib29sIENTU1ByaW1pdGl2ZVZhbHVlOjpwYXJzZVN0cmluZyggY29uc3QgU3RyaW5nICYv
KnN0cmluZyovLCBib29sICkKLXsKLSAgICAvLyAjIyMKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SWRlbnQoKQotewotICAgIGlmKG1fdHlwZSAhPSBD
U1NfSURFTlQpIHJldHVybiAwOwotICAgIHJldHVybiBtX3ZhbHVlLmlkZW50OwotfQotCi1TdHJp
bmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vICMjIyByZXR1
cm4gdGhlIG9yaWdpbmFsIHZhbHVlIGluc3RlYWQgb2YgYSBnZW5lcmF0ZWQgb25lIChlLmcuIGNv
bG9yCi0gICAgLy8gbmFtZSBpZiBpdCB3YXMgc3BlY2lmaWVkKSAtIGNoZWNrIHdoYXQgc3BlYyBz
YXlzIGFib3V0IHRoaXMKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBzd2l0Y2ggKCBtX3R5cGUgKSB7
Ci0gICAgICAgIGNhc2UgQ1NTX1VOS05PV046Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19OVU1CRVI6Ci0gICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIo
bV92YWx1ZS5udW0pICsgIiUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
X0VNUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAi
ZW0iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0VYUzoKLSAgICAgICAg
ICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZXgiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BYOgotICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJweCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NfQ006Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgImNtIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19NTToK
LSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAibW0iOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICAgICAgdGV4
dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJpbiI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NfUFQ6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1i
ZXIobV92YWx1ZS5udW0pICsgInB0IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU19QQzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkg
KyAicGMiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0RFRzoKLSAgICAg
ICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiZGVnIjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19SQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgInJhZCI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NfR1JBRDoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJl
cihtX3ZhbHVlLm51bSkgKyAiZ3JhZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NfTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgIm1zIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19TOgotICAgICAg
ICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJzIjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19IWjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJp
bmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaHoiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ1NTX0tIWjoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3Zh
bHVlLm51bSkgKyAia2h6IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19E
SU1FTlNJT046Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU19TVFJJTkc6Ci0gICAgICAgICAgICB0ZXh0ID0gcXVvdGVTdHJpbmdJZk5lZWRl
ZChtX3ZhbHVlLnN0cmluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1Nf
VVJJOgotICAgICAgICAgICAgdGV4dCA9ICJ1cmwoIiArIFN0cmluZyhtX3ZhbHVlLnN0cmluZykg
KyAiKSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSURFTlQ6Ci0gICAg
ICAgICAgICB0ZXh0ID0gZ2V0VmFsdWVOYW1lKG1fdmFsdWUuaWRlbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0FUVFI6Ci0gICAgICAgICAgICAvLyAjIyMKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19DT1VOVEVSOgotICAgICAgICAgICAgLy8g
IyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUkVDVDogewotICAgICAg
ICAgICAgUmVjdEltcGwqIHJlY3RWYWwgPSBnZXRSZWN0VmFsdWUoKTsKLSAgICAgICAgICAgIHRl
eHQgPSAicmVjdCgiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT50b3AoKS0+Y3NzVGV4
dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5yaWdodCgpLT5jc3NUZXh0
KCkgKyAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RWYWwtPmJvdHRvbSgpLT5jc3NUZXh0
KCkgKyAiICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IHJlY3RWYWwtPmxlZnQoKS0+Y3NzVGV4dCgp
ICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1Nf
UkdCQ09MT1I6IHsKLSAgICAgICAgICAgIENvbG9yIGNvbG9yKG1fdmFsdWUucmdiY29sb3IpOwot
ICAgICAgICAgICAgaWYgKGNvbG9yLmFscGhhKCkgPCAweEZGKQotICAgICAgICAgICAgICAgIHRl
eHQgPSAicmdiYSgiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRleHQgPSAi
cmdiKCI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLnJlZCgpKSAr
ICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLmdyZWVuKCkp
ICsgIiwgIjsKLSAgICAgICAgICAgIHRleHQgKz0gU3RyaW5nOjpudW1iZXIoY29sb3IuYmx1ZSgp
KTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwgMHhGRikKLSAgICAgICAgICAgICAg
ICB0ZXh0ICs9ICIsICIgKyBTdHJpbmc6Om51bWJlcigoZmxvYXQpY29sb3IuYWxwaGEoKSAvIDB4
RkYpOwotICAgICAgICAgICAgdGV4dCArPSAiKSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIENTU19QQUlSOgotICAgICAgICAgICAgdGV4dCA9IG1fdmFsdWUu
cGFpci0+Zmlyc3QoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAg
ICAgICAgICB0ZXh0ICs9IG1fdmFsdWUucGFpci0+c2Vjb25kKCktPmNzc1RleHQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotI2lmIF9fQVBQTEVfXwotICAgICAgICBjYXNlIENTU19EQVNIQk9BUkRf
UkVHSU9OOgotICAgICAgICAgICAgZm9yIChEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbiA9IGdldERh
c2hib2FyZFJlZ2lvblZhbHVlKCk7IHJlZ2lvbjsgcmVnaW9uID0gcmVnaW9uLT5tX25leHQuZ2V0
KCkpIHsKLSAgICAgICAgICAgICAgICB0ZXh0ID0gImRhc2hib2FyZC1yZWdpb24oIjsKLSAgICAg
ICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bV9sYWJlbDsKLSAgICAgICAgICAgICAgICBpZiAo
cmVnaW9uLT5tX2lzQ2lyY2xlKQotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICIgY2lyY2xl
ICI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQotICAg
ICAgICAgICAgICAgICAgICB0ZXh0ICs9ICIgcmVjdGFuZ2xlICI7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9
IHJlZ2lvbi0+dG9wKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9
IHJlZ2lvbi0+cmlnaHQoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgICAgIHRleHQg
Kz0gcmVnaW9uLT5ib3R0b20oKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgICAgIHRl
eHQgKz0gcmVnaW9uLT5sZWZ0KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgICAgICB0ZXh0ICs9
ICIpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgfQot
ICAgIHJldHVybiB0ZXh0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWN0SW1wbDo6flJlY3RJbXBs
KCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFpcjo6flBhaXIoKQotewotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1DU1NJbWFnZVZhbHVlOjpDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdXJsLCBT
dHlsZUJhc2UgKnN0eWxlKQotICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUodXJsLCBDU1NfVVJJKSwg
bV9pbWFnZSgwKSwgbV9hY2Nlc3NlZEltYWdlKGZhbHNlKQotewotfQotCi1DU1NJbWFnZVZhbHVl
OjpDU1NJbWFnZVZhbHVlKCkKLSAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKENTU19WQUxfTk9ORSks
IG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZSh0cnVlKQotewotfQotCi1DU1NJbWFnZVZhbHVl
Ojp+Q1NTSW1hZ2VWYWx1ZSgpCi17Ci0gICAgaWYgKG1faW1hZ2UpCi0gICAgICAgIG1faW1hZ2Ut
PmRlcmVmKHRoaXMpOwotfQotCi1DYWNoZWRJbWFnZSogQ1NTSW1hZ2VWYWx1ZTo6aW1hZ2UoRG9j
TG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgaWYgKCFtX2FjY2Vzc2VkSW1hZ2UpIHsKLSAgICAgICAg
bV9hY2Nlc3NlZEltYWdlID0gdHJ1ZTsKLQotICAgICAgICBpZiAobG9hZGVyKQotICAgICAgICAg
ICAgbV9pbWFnZSA9IGxvYWRlci0+cmVxdWVzdEltYWdlKGdldFN0cmluZ1ZhbHVlKCkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2ltYWdlID0gQ2FjaGU6OnJlcXVlc3RJbWFnZSgwLCBn
ZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX2ltYWdlKQotICAgICAg
ICAgICAgbV9pbWFnZS0+cmVmKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9pbWFn
ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU0JvcmRlckltYWdlVmFsdWU6OkNTU0Jv
cmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiBpbWFnZSwKLSAgICBQYXNz
UmVmUHRyPFJlY3RJbXBsPiBpbWFnZVJlY3QsIGludCBob3Jpem9udGFsUnVsZSwgaW50IHZlcnRp
Y2FsUnVsZSkKLSAgICA6IG1faW1hZ2UoaW1hZ2UpLCBtX2ltYWdlU2xpY2VSZWN0KGltYWdlUmVj
dCkKLSAgICAsIG1faG9yaXpvbnRhbFNpemVSdWxlKGhvcml6b250YWxSdWxlKSwgbV92ZXJ0aWNh
bFNpemVSdWxlKHZlcnRpY2FsUnVsZSkKLXsKLX0KLQotU3RyaW5nIENTU0JvcmRlckltYWdlVmFs
dWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIC8vIEltYWdlIGZpcnN0LgotICAgIFN0cmluZyB0
ZXh0KG1faW1hZ2UtPmNzc1RleHQoKSk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgCi0gICAgLy8g
Tm93IHRoZSByZWN0LCBidXQgaXQgaXNuJ3QgcmVhbGx5IGEgcmVjdCwgc28gd2UgZHVtcCBtYW51
YWxseQotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+dG9wKCktPmNzc1RleHQoKTsKLSAg
ICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPnJpZ2h0KCktPmNz
c1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3Qt
PmJvdHRvbSgpLT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2lt
YWdlU2xpY2VSZWN0LT5sZWZ0KCktPmNzc1RleHQoKTsKLSAgICAKLSAgICAvLyBOb3cgdGhlIGtl
eXdvcmRzLgotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gQ1NTUHJpbWl0aXZlVmFsdWUo
bV9ob3Jpem9udGFsU2l6ZVJ1bGUpLmNzc1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0
ZXh0ICs9IENTU1ByaW1pdGl2ZVZhbHVlKG1fdmVydGljYWxTaXplUnVsZSkuY3NzVGV4dCgpOwot
Ci0gICAgcmV0dXJuIHRleHQ7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Gb250RmFtaWx5
VmFsdWU6OkZvbnRGYW1pbHlWYWx1ZShjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHJpbmcpCi0g
ICAgOiBDU1NQcmltaXRpdmVWYWx1ZShTdHJpbmcoKSwgQ1NTX1NUUklORykKLXsKLSAgICBzdGF0
aWMgY29uc3QgUmVndWxhckV4cHJlc3Npb24gcGFyZW5SZWcoIiBcXCguKlxcKSQiKTsKLSAgICBz
dGF0aWMgY29uc3QgUmVndWxhckV4cHJlc3Npb24gYnJhY2VSZWcoIiBcXFsuKlxcXSQiKTsKLQot
ICAgIHBhcnNlZEZvbnROYW1lID0gc3RyaW5nOwotICAgIC8vIGEgbGFuZ3VhZ2UgdGFnIGlzIG9m
dGVuIGFkZGVkIGluIGJyYWNlcyBhdCB0aGUgZW5kLiBSZW1vdmUgaXQuCi0gICAgcGFyc2VkRm9u
dE5hbWUucmVwbGFjZShwYXJlblJlZywgIiIpOwotICAgIC8vIHJlbW92ZSBbWGZ0XSBxdWFsaWZp
ZXJzCi0gICAgcGFyc2VkRm9udE5hbWUucmVwbGFjZShicmFjZVJlZywgIiIpOwotfQotCi1TdHJp
bmcgRm9udEZhbWlseVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcXVvdGVT
dHJpbmdJZk5lZWRlZChwYXJzZWRGb250TmFtZSk7Ci19Ci0KLVN0cmluZyBGb250VmFsdWU6OmNz
c1RleHQoKSBjb25zdAotewotICAgIC8vIGZvbnQgdmFyaWFudCB3ZWlnaHQgc2l6ZSAvIGxpbmUt
aGVpZ2h0IGZhbWlseSAKLQotICAgIFN0cmluZyByZXN1bHQoIiIpOwotCi0gICAgaWYgKHN0eWxl
KSB7Ci0gICAgICAgIHJlc3VsdCArPSBzdHlsZS0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAo
dmFyaWFudCkgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gdmFyaWFudC0+Y3NzVGV4dCgpOwotICAg
IH0KLSAgICBpZiAod2VpZ2h0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJlc3VsdCArPSAiICI7Ci0gICAgICAgIHJlc3VsdCArPSB3ZWlnaHQtPmNzc1Rl
eHQoKTsKLSAgICB9Ci0gICAgaWYgKHNpemUpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IHNpemUt
PmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKGxpbmVIZWlnaHQpIHsKLSAgICAgICAgaWYgKCFz
aXplKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9ICIvIjsK
LSAgICAgICAgcmVzdWx0ICs9IGxpbmVIZWlnaHQtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYg
KGZhbWlseSkgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gZmFtaWx5LT5jc3NUZXh0KCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLQotLy8gVXNlZCBmb3IgdGV4dC1zaGFk
b3cgYW5kIGJveC1zaGFkb3cKLVNoYWRvd1ZhbHVlOjpTaGFkb3dWYWx1ZShQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBfeCwKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBf
eSwKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfYmx1ciwKLSAgICBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBfY29sb3IpCi0gICAgOiB4KF94KSwgeShfeSksIGJsdXIo
X2JsdXIpLCBjb2xvcihfY29sb3IpCi17Ci19Ci0KLVN0cmluZyBTaGFkb3dWYWx1ZTo6Y3NzVGV4
dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHRleHQoIiIpOwotCi0gICAgaWYgKGNvbG9yKQotICAg
ICAgICB0ZXh0ICs9IGNvbG9yLT5jc3NUZXh0KCk7Ci0gICAgaWYgKHgpIHsKLSAgICAgICAgaWYg
KCF0ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0
ICs9IHgtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHkpIHsKLSAgICAgICAgaWYgKCF0ZXh0
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9IHkt
PmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKGJsdXIpIHsKLSAgICAgICAgaWYgKCF0ZXh0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwotICAgICAgICB0ZXh0ICs9IGJsdXIt
PmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotU3RyaW5nIENTU1By
b3BlcnR5Ojpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlOYW1lKGlk
KCkpICsgIjogIiArIG1fdmFsdWUtPmNzc1RleHQoKQotICAgICAgICArIChpc0ltcG9ydGFudCgp
ID8gIiAhaW1wb3J0YW50IiA6ICIiKSArICI7ICI7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25z
dCBDU1NQcm9wZXJ0eSAmYSwgY29uc3QgQ1NTUHJvcGVydHkgJmIpCi17Ci0gICAgcmV0dXJuIGEu
bV9pZCA9PSBiLm1faWQgJiYgYS5tX2ltcG9ydGFudCA9PSBiLm1faW1wb3J0YW50ICYmIGEubV92
YWx1ZSA9PSBiLm1fdmFsdWU7Ci19Ci0KIH0KSW5kZXg6IGNzcy9DU1NRdWlya1ByaW1pdGl2ZVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1F1aXJrUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNp
b24gMTQ0MDApCisrKyBjc3MvQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMCwyNjggKzIwLDEzIEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAq
LwogCi0jaWZuZGVmIENTU19jc3NfdmFsdWVpbXBsX2hfCi0jZGVmaW5lIENTU19jc3NfdmFsdWVp
bXBsX2hfCisjaWZuZGVmIENTU1F1aXJrUHJpbWl0aXZlVmFsdWVfSAorI2RlZmluZSBDU1NRdWly
a1ByaW1pdGl2ZVZhbHVlX0gKIAotI2luY2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudC5oIgotI2lu
Y2x1ZGUgImNzc19iYXNlLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNs
dWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5o
IgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLWNsYXNzIFFQYWludERldmljZU1ldHJp
Y3M7CisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKLWNsYXNzIENhY2hlZEltYWdl
OwotY2xhc3MgQ291bnRlcjsKLWNsYXNzIERvY0xvYWRlcjsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBQ
YWlyOwotY2xhc3MgUmVjdEltcGw7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotI2lmIF9fQVBQTEVf
XwotY2xhc3MgRGFzaGJvYXJkUmVnaW9uOwotI2VuZGlmCi0KLXR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7Ci0KLWV4dGVybiBjb25zdCBpbnQgaW5oZXJpdGFibGVQcm9wZXJ0aWVzW107Ci1leHRl
cm4gY29uc3QgdW5zaWduZWQgbnVtSW5oZXJpdGFibGVQcm9wZXJ0aWVzOwotCi1jbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uIDogcHVibGljIFN0eWxlQmFzZSB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCBib29sIGlzU3R5bGVEZWNsYXJhdGlvbigpOwotCi0gICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0
eU5hbWUoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotCi0gICAgQ1NTUnVsZSogcGFyZW50
UnVsZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
JikgPSAwOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwotCi0gICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0
cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IGdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGdldFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0eVNob3J0aGFuZChpbnQgcHJvcGVy
dHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50
IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQgc2V0UHJvcGVydHkoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJp
b3JpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVBy
b3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJikgPSAwOwotCi0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5KCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFr
ZU11dGFibGUoKSA9IDA7Ci0gCi0gICAgdm9pZCBkaWZmKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKikgY29uc3Q7Ci0KLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJl
bnRSdWxlID0gMCk7Ci0KLXByaXZhdGU6Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBD
U1NTdHlsZURlY2xhcmF0aW9uICYpOwotICAgIENTU1N0eWxlRGVjbGFyYXRpb24mIG9wZXJhdG9y
PShjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICYpOwotfTsKLQotY2xhc3MgQ1NTVmFsdWUgOiBw
dWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBVbml0VHlwZXMgewotICAgICAg
ICBDU1NfSU5IRVJJVCA9IDAsCi0gICAgICAgIENTU19QUklNSVRJVkVfVkFMVUUgPSAxLAotICAg
ICAgICBDU1NfVkFMVUVfTElTVCA9IDIsCi0gICAgICAgIENTU19DVVNUT00gPSAzLAotICAgICAg
ICBDU1NfSU5JVElBTCA9IDQKLSAgICB9OwotCi0gICAgQ1NTVmFsdWUoKSA6IFN0eWxlQmFzZSgw
KSB7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Qg
eyByZXR1cm4gQ1NTX0NVU1RPTTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25z
dCA9IDA7Ci0gICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYpIHsgfSAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkLgotCi0gICAgdmlydHVhbCBib29sIGlzVmFsdWUoKSB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0K
LX07Ci0KLWNsYXNzIENTU0luaGVyaXRlZFZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci19OwotCi1jbGFzcyBDU1NJbml0aWFs
VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVk
IHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU1ZhbHVlTGlzdCA6IHB1YmxpYyBDU1NWYWx1ZQotewot
cHVibGljOgotICAgIHZpcnR1YWwgfkNTU1ZhbHVlTGlzdCgpOwotCi0gICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuY291bnQoKTsgfQotICAgIENTU1ZhbHVlKiBp
dGVtICh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXMuYXQoaW5kZXgpOyB9Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAgdm9pZCBhcHBl
bmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIERlcHJlY2F0ZWRQdHJMaXN0PENTU1ZhbHVlPiBtX3Zh
bHVlczsKLX07Ci0KLQotY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUK
LXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRUeXBlcyB7Ci0gICAgICAgIENTU19VTktOT1dOID0g
MCwKLSAgICAgICAgQ1NTX05VTUJFUiA9IDEsCi0gICAgICAgIENTU19QRVJDRU5UQUdFID0gMiwK
LSAgICAgICAgQ1NTX0VNUyA9IDMsCi0gICAgICAgIENTU19FWFMgPSA0LAotICAgICAgICBDU1Nf
UFggPSA1LAotICAgICAgICBDU1NfQ00gPSA2LAotICAgICAgICBDU1NfTU0gPSA3LAotICAgICAg
ICBDU1NfSU4gPSA4LAotICAgICAgICBDU1NfUFQgPSA5LAotICAgICAgICBDU1NfUEMgPSAxMCwK
LSAgICAgICAgQ1NTX0RFRyA9IDExLAotICAgICAgICBDU1NfUkFEID0gMTIsCi0gICAgICAgIENT
U19HUkFEID0gMTMsCi0gICAgICAgIENTU19NUyA9IDE0LAotICAgICAgICBDU1NfUyA9IDE1LAot
ICAgICAgICBDU1NfSFogPSAxNiwKLSAgICAgICAgQ1NTX0tIWiA9IDE3LAotICAgICAgICBDU1Nf
RElNRU5TSU9OID0gMTgsCi0gICAgICAgIENTU19TVFJJTkcgPSAxOSwKLSAgICAgICAgQ1NTX1VS
SSA9IDIwLAotICAgICAgICBDU1NfSURFTlQgPSAyMSwKLSAgICAgICAgQ1NTX0FUVFIgPSAyMiwK
LSAgICAgICAgQ1NTX0NPVU5URVIgPSAyMywKLSAgICAgICAgQ1NTX1JFQ1QgPSAyNCwKLSAgICAg
ICAgQ1NTX1JHQkNPTE9SID0gMjUsCi0gICAgICAgIENTU19QQUlSID0gMTAwLCAvLyBXZSBlbnZp
c2lvbiB0aGlzIGJlaW5nIGV4cG9zZWQgYXMgYSBtZWFucyBvZiBnZXR0aW5nIGNvbXB1dGVkIHN0
eWxlIHZhbHVlcyBmb3IgcGFpcnMgKGJvcmRlci1zcGFjaW5nL3JhZGl1cywgYmFja2dyb3VuZC1w
b3NpdGlvbiwgZXRjLikKLSAgICAgICAgQ1NTX0RBU0hCT0FSRF9SRUdJT04gPSAxMDEgLy8gRklY
TUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBkb2luZyBhcyBhIHByaW1pdGl2ZSB2YWx1ZT8gSXQg
c2hvdWxkIG5vdCBiZSEKLSAgICB9OwotCi0gICAgLy8gRklYTUU6IGludCB2cy4gdW5zaWduZWQg
b3ZlcmxvYWRpbmcgaXMgdG9vIHRyaWNreSBmb3IgY29sb3IgdnMuIGlkZW50Ci0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUoKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShpbnQgaWRlbnQpOwotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKGRvdWJsZSwgVW5pdFR5cGVzKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1
ZShjb25zdCBTdHJpbmcmLCBVbml0VHlwZXMpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NS
ZWZQdHI8Q291bnRlcj4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdElt
cGw+KTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSh1bnNpZ25lZCBjb2xvcik7IC8vIFJHQiB2YWx1
ZQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UGFpcj4pOwotCi0jaWYgX19BUFBM
RV9fCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxEYXNoYm9hcmRSZWdpb24+KTsg
Ly8gRklYTUU6IFdoeSBpcyBkYXNoYm9hcmQgcmVnaW9uIGEgcHJpbWl0aXZlIHZhbHVlPyBUaGlz
IG1ha2VzIG5vIHNlbnNlLgotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIH5DU1NQcmltaXRpdmVWYWx1
ZSgpOwotCi0gICAgdm9pZCBjbGVhbnVwKCk7Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBwcmltaXRp
dmVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICAvKgotICAgICAqIGNvbXB1
dGVzIGEgbGVuZ3RoIGluIHBpeGVscyBvdXQgb2YgdGhlIGdpdmVuIENTU1ZhbHVlLiBOZWVkIHRo
ZSBSZW5kZXJTdHlsZSB0byBnZXQKLSAgICAgKiB0aGUgZm9udGluZm8gaW4gY2FzZSB2YWwgaXMg
ZGVmaW5lZCBpbiBlbSBvciBleC4KLSAgICAgKgotICAgICAqIFRoZSBtZXRyaWNzIGhhdmUgdG8g
YmUgYSBiaXQgZGlmZmVyZW50IGZvciBzY3JlZW4gYW5kIHByaW50ZXIgb3V0cHV0LgotICAgICAq
IEZvciBzY3JlZW4gb3V0cHV0IHdlIGFzc3VtZSAxIGluY2ggPT0gNzIgcHgsIGZvciBwcmludGVy
IHdlIGFzc3VtZSAzMDAgZHBpCi0gICAgICoKLSAgICAgKiB0aGlzIGlzIHNjcmVlbi9wcmludGVy
IGRlcGVuZGVudCwgc28gd2UgcHJvYmFibHkgbmVlZCBhIGNvbmZpZyBvcHRpb24gZm9yIHRoaXMs
Ci0gICAgICogYW5kIHNvbWUgdG9vbCB0byBjYWxpYnJhdGUuCi0gICAgICovCi0gICAgaW50IGNv
bXB1dGVMZW5ndGhJbnQoUmVuZGVyU3R5bGUqKTsKLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludChS
ZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBpbnQgY29tcHV0ZUxlbmd0aElu
dEZvckxlbmd0aChSZW5kZXJTdHlsZSopOwotICAgIGludCBjb21wdXRlTGVuZ3RoSW50Rm9yTGVu
Z3RoKFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIHNob3J0IGNvbXB1dGVM
ZW5ndGhTaG9ydChSZW5kZXJTdHlsZSopOwotICAgIHNob3J0IGNvbXB1dGVMZW5ndGhTaG9ydChS
ZW5kZXJTdHlsZSosIGRvdWJsZSBtdWx0aXBsaWVyKTsKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0
aEZsb2F0KFJlbmRlclN0eWxlKiwgYm9vbCBhcHBseVpvb21GYWN0b3IgPSB0cnVlKTsKLQotICAg
IC8vIHVzZSB3aXRoIGNhcmUhISEKLSAgICB2b2lkIHNldFByaW1pdGl2ZVR5cGUodW5zaWduZWQg
c2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0gICAgdm9pZCBzZXRGbG9hdFZhbHVlKHVu
c2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKTsKLSAg
ICBkb3VibGUgZ2V0RmxvYXRWYWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWUubnVtOyB9Ci0KLSAgICB2
b2lkIHNldFN0cmluZ1ZhbHVlKHVuc2lnbmVkIHNob3J0IHN0cmluZ1R5cGUsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nVmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgZ2V0U3RyaW5nVmFs
dWUoKSBjb25zdDsKLSAgICAKLSAgICBDb3VudGVyKiBnZXRDb3VudGVyVmFsdWUgKCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19DT1VOVEVSID8gMCA6IG1fdmFsdWUuY291
bnRlcjsKLSAgICB9Ci0KLSAgICBSZWN0SW1wbCogZ2V0UmVjdFZhbHVlICgpIGNvbnN0IHsKLSAg
ICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkVDVCA/IDAgOiBtX3ZhbHVlLnJlY3Q7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgZ2V0UkdCQ29sb3JWYWx1ZSgpIGNvbnN0IHsKLSAgICAgICAgcmV0
dXJuIG1fdHlwZSAhPSBDU1NfUkdCQ09MT1IgPyAwIDogbV92YWx1ZS5yZ2Jjb2xvcjsKLSAgICB9
Ci0KLSAgICBQYWlyKiBnZXRQYWlyVmFsdWUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5
cGUgIT0gQ1NTX1BBSVIgPyAwIDogbV92YWx1ZS5wYWlyOwotICAgIH0KLQotI2lmIF9fQVBQTEVf
XwotICAgIERhc2hib2FyZFJlZ2lvbiAqZ2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUgKCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19EQVNIQk9BUkRfUkVHSU9OID8gMCA6IG1f
dmFsdWUucmVnaW9uOwotICAgIH0KLSNlbmRpZgotCi0gICAgdmlydHVhbCBib29sIGlzUHJpbWl0
aXZlVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBz
aG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQotICAgIGludCBnZXRJZGVudCgpOwotCi0gICAg
dmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgPSBmYWxzZSk7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIGlz
UXVpcmtWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBpbnQgbV90
eXBlOwotICAgIHVuaW9uIHsKLSAgICAgICAgaW50IGlkZW50OwotICAgICAgICBkb3VibGUgbnVt
OwotICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7Ci0gICAgICAgIENvdW50ZXIqIGNvdW50ZXI7
Ci0gICAgICAgIFJlY3RJbXBsKiByZWN0OwotICAgICAgICB1bnNpZ25lZCByZ2Jjb2xvcjsKLSAg
ICAgICAgUGFpciogcGFpcjsKLSNpZiBfX0FQUExFX18KLSAgICAgICAgRGFzaGJvYXJkUmVnaW9u
KiByZWdpb247Ci0jZW5kaWYKLSAgICB9IG1fdmFsdWU7Ci19OwotCiAvLyBUaGlzIHZhbHVlIGlz
IHVzZWQgdG8gaGFuZGxlIHF1aXJreSBtYXJnaW5zIGluIHJlZmxvdyByb290cyAoYm9keSwgdGQs
IGFuZCB0aCkgbGlrZSBXaW5JRS4KIC8vIFRoZSBiYXNpYyBpZGVhIGlzIHRoYXQgYSBzdHlsZXNo
ZWV0IGNhbiB1c2UgdGhlIHZhbHVlIF9fcWVtIChmb3IgcXVpcmt5IGVtKSBpbnN0ZWFkIG9mIGVt
CiAvLyBpbiBhIHN0eWxlc2hlZXQuICBXaGVuIHRoZSBxdWlya3kgdmFsdWUgaXMgdXNlZCwgaWYg
eW91J3JlIGluIHF1aXJrcyBtb2RlLCB0aGUgbWFyZ2luIHdpbGwKQEAgLTI5NSwyNjYgKzQwLDYg
QEAKICAgICB2aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogfTsK
IAotY2xhc3MgQ291bnRlciA6IHB1YmxpYyBTaGFyZWQ8Q291bnRlcj4gewotcHVibGljOgotICAg
IFN0cmluZyBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9Ci0gICAg
U3RyaW5nIGxpc3RTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFN0eWxlOyB9Ci0gICAgU3Ry
aW5nIHNlcGFyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VwYXJhdG9yOyB9Ci0KLSAgICBTdHJp
bmcgbV9pZGVudGlmaWVyOwotICAgIFN0cmluZyBtX2xpc3RTdHlsZTsKLSAgICBTdHJpbmcgbV9z
ZXBhcmF0b3I7Ci19OwotCi1jbGFzcyBSZWN0SW1wbCA6IHB1YmxpYyBTaGFyZWQ8UmVjdEltcGw+
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5SZWN0SW1wbCgpOwotCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodC5nZXQoKTsgfQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbS5nZXQoKTsg
fQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0Lmdl
dCgpOyB9Ci0KLSAgICB2b2lkIHNldFRvcChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0
b3ApIHsgbV90b3AgPSB0b3A7IH0KLSAgICB2b2lkIHNldFJpZ2h0KFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHJpZ2h0KSB7IG1fcmlnaHQgPSByaWdodDsgfQotICAgIHZvaWQgc2V0Qm90
dG9tKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvdHRvbSkgeyBtX2JvdHRvbSA9IGJv
dHRvbTsgfQotICAgIHZvaWQgc2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBs
ZWZ0KSB7IG1fbGVmdCA9IGxlZnQ7IH0KLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbV90b3A7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207Ci0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Ci19OwotCi0vLyBBIHByaW1pdGl2ZSB2YWx1ZSByZXBy
ZXNlbnRpbmcgYSBwYWlyLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHByb3BlcnRpZXMgbGlrZSBib3Jk
ZXItcmFkaXVzLCBiYWNrZ3JvdW5kLXNpemUvcG9zaXRpb24sCi0vLyBhbmQgYm9yZGVyLXNwYWNp
bmcgKGFsbCBvZiB3aGljaCBhcmUgc3BhY2Utc2VwYXJhdGVkIHNldHMgb2YgdHdvIHZhbHVlcyku
ICBBdCB0aGUgbW9tZW50IHdlIGFyZSBvbmx5IHVzaW5nIGl0IGZvcgotLy8gYm9yZGVyLXJhZGl1
cyBhbmQgYmFja2dyb3VuZC1zaXplLCBidXQgKEZJWE1FKSBib3JkZXItc3BhY2luZyBhbmQgYmFj
a2dyb3VuZC1wb3NpdGlvbiBjb3VsZCBiZSBjb252ZXJ0ZWQgb3ZlciB0byB1c2UKLS8vIGl0IChl
bGltaW5hdGluZyBzb21lIGV4dHJhIC13ZWJraXQtIGludGVybmFsIHByb3BlcnRpZXMpLgotY2xh
c3MgUGFpciA6IHB1YmxpYyBTaGFyZWQ8UGFpcj4gewotcHVibGljOgotICAgIFBhaXIoKSA6IG1f
Zmlyc3QoMCksIG1fc2Vjb25kKDApIHsgfQotICAgIFBhaXIoUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gZmlyc3QsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkKLSAg
ICAgICAgOiBtX2ZpcnN0KGZpcnN0KSwgbV9zZWNvbmQoc2Vjb25kKSB7IH0KLSAgICB2aXJ0dWFs
IH5QYWlyKCk7Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QoKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0LmdldCgpOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vjb25kLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldEZpcnN0KFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0KSB7IG1fZmlyc3QgPSBmaXJzdDsgfQotICAgIHZv
aWQgc2V0U2Vjb25kKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlY29uZCkgeyBtX3Nl
Y29uZCA9IHNlY29uZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX2ZpcnN0OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmQ7Ci19
OwotCi1jbGFzcyBEYXNoYm9hcmRSZWdpb24gOiBwdWJsaWMgUmVjdEltcGwgewotcHVibGljOgot
ICAgIERhc2hib2FyZFJlZ2lvbigpIDogbV9pc0NpcmNsZSgwKSwgbV9pc1JlY3RhbmdsZSgwKSB7
IH0KLQotICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IG1fbmV4dDsKLSAgICBTdHJpbmcgbV9s
YWJlbDsKLSAgICBTdHJpbmcgbV9nZW9tZXRyeVR5cGU7Ci0gICAgYm9vbCBtX2lzQ2lyY2xlIDog
MTsKLSAgICBib29sIG1faXNSZWN0YW5nbGUgOiAxOwotfTsKLQotY2xhc3MgQ1NTSW1hZ2VWYWx1
ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZSwgcHVibGljIENhY2hlZE9iamVjdENsaWVudAot
ewotcHVibGljOgotICAgIENTU0ltYWdlVmFsdWUoKTsKLSAgICBDU1NJbWFnZVZhbHVlKGNvbnN0
IFN0cmluZyYgdXJsLCBTdHlsZUJhc2UqKTsKLSAgICB2aXJ0dWFsIH5DU1NJbWFnZVZhbHVlKCk7
Ci0KLSAgICBDYWNoZWRJbWFnZSogaW1hZ2UoRG9jTG9hZGVyKik7Ci0KLXByb3RlY3RlZDoKLSAg
ICBDYWNoZWRJbWFnZSogbV9pbWFnZTsKLSAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKLX07Ci0K
LWNsYXNzIENTU0JvcmRlckltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoK
LSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNz
UmVmUHRyPENTU0ltYWdlVmFsdWU+LAotICAgICAgICBQYXNzUmVmUHRyPFJlY3RJbXBsPiwgaW50
IGhvcml6b250YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKTsKLQotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLQotcHVibGljOgotICAgIC8vIFRoZSBib3JkZXIgaW1hZ2UuCi0g
ICAgUmVmUHRyPENTU0ltYWdlVmFsdWU+IG1faW1hZ2U7Ci0KLSAgICAvLyBUaGVzZSBmb3VyIHZh
bHVlcyBhcmUgdXNlZCB0byBtYWtlICJjdXRzIiBpbiB0aGUgaW1hZ2UuICBUaGV5IGNhbiBiZSBu
dW1iZXJzCi0gICAgLy8gb3IgcGVyY2VudGFnZXMuCi0gICAgUmVmUHRyPFJlY3RJbXBsPiBtX2lt
YWdlU2xpY2VSZWN0OwotICAgIAotICAgIC8vIFZhbHVlcyBmb3IgaG93IHRvIGhhbmRsZSB0aGUg
c2NhbGluZy9zdHJldGNoaW5nL3RpbGluZyBvZiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgIGludCBt
X2hvcml6b250YWxTaXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgd2lkdGhz
IG9mIHRoZSB0b3AvbWlkZGxlL2JvdHRvbQotICAgIGludCBtX3ZlcnRpY2FsU2l6ZVJ1bGU7IC8v
IFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIGhlaWdodHMgb2YgdGhlIGxlZnQvbWlkZGxlL3Jp
Z2h0Ci19OwotCi1jbGFzcyBGb250RmFtaWx5VmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFs
dWUKLXsKLXB1YmxpYzoKLSAgICBGb250RmFtaWx5VmFsdWUoIGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJnN0cmluZyk7Ci0gICAgY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgZm9udE5hbWUoKSBjb25z
dCB7IHJldHVybiBwYXJzZWRGb250TmFtZTsgfQotICAgIGludCBnZW5lcmljRmFtaWx5VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIF9nZW5lcmljRmFtaWx5VHlwZTsgfQotCi0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgRGVwcmVjYXRlZFN0cmluZyBwYXJzZWRGb250TmFt
ZTsKLXByaXZhdGU6Ci0gICAgaW50IF9nZW5lcmljRmFtaWx5VHlwZTsKLX07Ci0KLWNsYXNzIEZv
bnRWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7
IHJldHVybiB0cnVlOyB9Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0eWxlOwot
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFyaWFudDsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHdlaWdodDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemU7
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaW5lSGVpZ2h0OwotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGZhbWlseTsKLX07Ci0KLS8vIFVzZWQgZm9yIHRleHQtc2hhZG93IGFuZCBi
b3gtc2hhZG93Ci1jbGFzcyBTaGFkb3dWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGlj
OgotICAgIFNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHgsCi0gICAg
ICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHksCi0gICAgICAgIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXIsCi0gICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNvbG9yKTsKLSAgICAKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0KLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHg7Ci0gICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiB5OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9yOwotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLS8vIGFub3RoZXIgaGVscGVyIGNsYXNzCi1jbGFzcyBDU1NQcm9wZXJ0eQotewot
cHVibGljOgotICAgIENTU1Byb3BlcnR5KGludCBwcm9wSUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBpbnQgc2hvcnRoYW5kSUQgPSAwLCBib29s
IGltcGxpY2l0ID0gZmFsc2UpCi0gICAgICAgIDogbV9pZChwcm9wSUQpLCBtX3Nob3J0aGFuZElE
KHNob3J0aGFuZElEKSwgbV9pbXBvcnRhbnQoaW1wb3J0YW50KSwgbV9pbXBsaWNpdChpbXBsaWNp
dCksIG1fdmFsdWUodmFsdWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBDU1NQcm9wZXJ0eSAm
b3BlcmF0b3I9KGNvbnN0IENTU1Byb3BlcnR5JiBvKQotICAgIHsKLSAgICAgICAgbV9pZCA9IG8u
bV9pZDsKLSAgICAgICAgbV9zaG9ydGhhbmRJRCA9IG8ubV9zaG9ydGhhbmRJRDsKLSAgICAgICAg
bV9pbXBvcnRhbnQgPSBvLm1faW1wb3J0YW50OwotICAgICAgICBtX3ZhbHVlID0gby5tX3ZhbHVl
OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIAotICAgIGludCBpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faWQ7IH0KLSAgICBpbnQgc2hvcnRoYW5kSUQoKSBjb25zdCB7IHJldHVybiBt
X3Nob3J0aGFuZElEOyB9Ci0gICAgCi0gICAgYm9vbCBpc0ltcG9ydGFudCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1wb3J0YW50OyB9Ci0gICAgYm9vbCBpc0ltcGxpY2l0KCkgY29uc3QgeyByZXR1cm4g
bV9pbXBsaWNpdDsgfQotCi0gICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZS5nZXQoKTsgfQotICAgIAotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICAv
LyBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBmaXRzIGluIDQgYnl0ZXMuCi0gICAgaW50IG1faWQ7
Ci0gICAgaW50IG1fc2hvcnRoYW5kSUQ7ICAvLyBJZiB0aGlzIHByb3BlcnR5IHdhcyBzZXQgYXMg
cGFydCBvZiBhIHNob3J0aGFuZCwgZ2l2ZXMgdGhlIHNob3J0aGFuZC4KLSAgICBib29sIG1faW1w
b3J0YW50IDogMTsKLSAgICBib29sIG1faW1wbGljaXQgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB0
aGUgcHJvcGVydHkgd2FzIHNldCBpbXBsaWNpdGx5IGFzIHRoZSByZXN1bHQgb2YgYSBzaG9ydGhh
bmQuCi0KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5ICYsIGNv
bnN0IENTU1Byb3BlcnR5ICYpOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBtX3ZhbHVlOwotfTsK
LQotY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNs
YXJhdGlvbgotewotcHVibGljOgotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0g
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSk7Ci0gICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgRGVw
cmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4gJik7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAq
LCBpbnQgbnVtUHJvcGVydGllcyk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAm
b3BlcmF0b3I9KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uICYpOwotCi0gICAgdm9p
ZCBzZXROb2RlKE5vZGUqIG5vZGUpIHsgbV9ub2RlID0gbm9kZTsgfQotCi0gICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWUo
aW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBnZXRQcm9wZXJ0eVBy
aW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBnZXRQcm9wZXJ0
eVNob3J0aGFuZChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJv
cGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsK
LQotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiB2YWx1
ZXNJdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KLQotICAgIGJv
b2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQg
PSBmYWxzZSwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJv
b2wgbm90aWZ5Q2hhbmdlZCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wgc2V0UHJvcGVydHko
aW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFs
c2UsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpCi0gICAgICAgIHsgRXhjZXB0aW9uQ29kZSBl
YzsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLCBpbXBvcnRhbnQsIG5vdGlm
eUNoYW5nZWQsIGVjKTsgfQotCi0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0
eUlELCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgcmVt
b3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpCi0g
ICAgICAgIHsgRXhjZXB0aW9uQ29kZSBlYzsgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5
SUQsIG5vdGlmeUNoYW5nZWQsIGVjKTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgdm9p
ZCBzZXRDaGFuZ2VkKCk7Ci0gCi0gICAgLy8gc2V0TGVuZ3RoUHJvcGVydHkgdHJlYXRzIGludGVn
ZXJzIGFzIHBpeGVscyEgKE5lZWRlZCBmb3IgY29udmVyc2lvbiBvZiBIVE1MIGF0dHJpYnV0ZXMu
KQotICAgIHZvaWQgc2V0TGVuZ3RoUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG11bHRpTGVuZ3RoID0gZmFsc2UpOwotICAg
IHZvaWQgc2V0U3RyaW5nUHJvcGVydHkoaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2Up
OyAvLyBwYXJzZWQgc3RyaW5nIHZhbHVlCi0gICAgdm9pZCBzZXRJbWFnZVByb3BlcnR5KGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7Ci0g
Ci0gICAgLy8gVGhlIGZvbGxvd2luZyBwYXJzZXMgYW4gZW50aXJlIG5ldyBzdHlsZSBkZWNsYXJh
dGlvbi4KLSAgICB2b2lkIHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xh
cmF0aW9uKTsKLQotICAgIC8vIEJlc2lkZXMgYWRkaW5nIHRoZSBwcm9wZXJ0aWVzLCB0aGlzIGFs
c28gcmVtb3ZlcyBhbnkgZXhpc3RpbmcgcHJvcGVydGllcyB3aXRoIHRoZXNlIElEcy4KLSAgICAv
LyBJdCBkb2VzIG5vIG5vdGlmaWNhdGlvbiBzaW5jZSBpdCdzIGNhbGxlZCBieSB0aGUgcGFyc2Vy
LgotICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eSAqIGNvbnN0
ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKLSAKLSAgICBQYXNzUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3Q7Ci0gICAgdm9pZCByZW1v
dmVCbG9ja1Byb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGll
cygpOwotICAgIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwotCi0gICAgdm9pZCBtZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biosIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwotIAotcHJpdmF0ZToKLSAg
ICBTdHJpbmcgZ2V0U2hvcnRIYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVt
YmVyKSBjb25zdDsKLSAgICBTdHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMp
IGNvbnN0OwotIAotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+IG1fdmFsdWVz
OwotICAgIE5vZGUqIG1fbm9kZTsKLX07Ci0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRl
eDogY3NzL2Nzc19ydWxlaW1wbC5jcHAgKGRlbGV0ZWQpCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IGNzcy9D
U1NVbmtub3duUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NVbmtub3duUnVsZS5oCShyZXZp
c2lvbiAxNDQwMCkKKysrIGNzcy9DU1NVbmtub3duUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwyMDMgKzIxLDE0IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0j
aWZuZGVmIENTU19jc3NfcnVsZWltcGxfaF8KLSNkZWZpbmUgQ1NTX2Nzc19ydWxlaW1wbF9oXwor
I2lmbmRlZiBDU1NVbmtub3duUnVsZV9ICisjZGVmaW5lIENTU1Vua25vd25SdWxlX0gKIAotI2lu
Y2x1ZGUgImNzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU1N0eWxl
U2hlZXQ7Ci1jbGFzcyBNZWRpYUxpc3Q7Ci0KLWNsYXNzIENTU1J1bGUgOiBwdWJsaWMgU3R5bGVC
YXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBDU1NSdWxlVHlwZSB7IAotICAgICAgICBVTktOT1dO
X1JVTEUsIAotICAgICAgICBTVFlMRV9SVUxFLCAKLSAgICAgICAgQ0hBUlNFVF9SVUxFLCAKLSAg
ICAgICAgSU1QT1JUX1JVTEUsIAotICAgICAgICBNRURJQV9SVUxFLCAKLSAgICAgICAgRk9OVF9G
QUNFX1JVTEUsIAotICAgICAgICBQQUdFX1JVTEUgCi0gICAgfTsKLSAgICAKLSAgICBDU1NSdWxl
KFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAgICA6IFN0eWxlQmFzZShwYXJlbnQpLCBtX3R5cGUo
VU5LTk9XTl9SVUxFKSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgQ1NT
UnVsZSAqcGFyZW50UnVsZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgp
IGNvbnN0OwotICAgIHZvaWQgc2V0Q3NzVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsKLQotcHJv
dGVjdGVkOgotICAgIENTU1J1bGVUeXBlIG1fdHlwZTsKLX07Ci0KLQotY2xhc3MgQ1NTQ2hhcnNl
dFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU0NoYXJzZXRSdWxlKFN0
eWxlQmFzZSAqcGFyZW50KQotICAgICAgICA6IENTU1J1bGUocGFyZW50KSB7IG1fdHlwZSA9IENI
QVJTRVRfUlVMRTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgU3Ry
aW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQotICAgIHZvaWQgc2V0
RW5jb2RpbmcoU3RyaW5nIF9lbmNvZGluZykgeyBtX2VuY29kaW5nID0gX2VuY29kaW5nOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBTdHJpbmcgbV9lbmNvZGluZzsKLX07Ci0KLQotY2xhc3MgQ1NTRm9u
dEZhY2VSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NGb250RmFjZVJ1
bGUoU3R5bGVCYXNlICpwYXJlbnQpOwotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwot
Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBtX3N0eWxlOwotfTsKLQotCi1jbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVibGlj
IENhY2hlZE9iamVjdENsaWVudCwgcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NJ
bXBvcnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlz
dCopOwotICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKLQotICAgIFN0cmluZyBocmVmKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJIcmVmOyB9Ci0gICAgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0
IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7IH0KLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5n
IGNzc1RleHQoKSBjb25zdDsKLSAgCi0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLQotICAg
IC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hl
ZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2hlZXQpOwotCi0gICAgdmlydHVh
bCB2b2lkIGluc2VydGVkSW50b1BhcmVudCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1f
c3RySHJlZjsKLSAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1lZGlhOwotICAgIFJlZlB0cjxD
U1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7Ci0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogbV9j
YWNoZWRTaGVldDsKLSAgICBib29sIG1fbG9hZGluZzsKLX07Ci0KLWNsYXNzIE1lZGlhTGlzdDsK
LQotY2xhc3MgQ1NTUnVsZUxpc3QgOiBwdWJsaWMgU2hhcmVkPENTU1J1bGVMaXN0PgotewotcHVi
bGljOgotICAgIENTU1J1bGVMaXN0KCkgeyB9Ci0gICAgQ1NTUnVsZUxpc3QoU3R5bGVMaXN0ICop
OwotICAgIH5DU1NSdWxlTGlzdCgpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sc3RDU1NSdWxlcy5jb3VudCgpOyB9Ci0gICAgQ1NTUnVsZSAqaXRlbSAoIHVuc2ln
bmVkIGluZGV4ICkgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5hdCggaW5kZXggKTsgfQotCi0gICAg
Lyogbm90IHBhcnQgb2YgdGhlIERPTSAqLwotICAgIHVuc2lnbmVkIGluc2VydFJ1bGUgKCBDU1NS
dWxlICpydWxlLCB1bnNpZ25lZCBpbmRleCApOwotICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2ln
bmVkIGluZGV4ICk7Ci0gICAgdm9pZCBhcHBlbmQoIENTU1J1bGUgKnJ1bGUgKTsKLQotcHJvdGVj
dGVkOgotICAgIERlcHJlY2F0ZWRQdHJMaXN0PENTU1J1bGU+IG1fbHN0Q1NTUnVsZXM7Ci19Owot
Ci1jbGFzcyBDU1NNZWRpYVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENT
U01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQgKTsKLSAgICBDU1NNZWRpYVJ1bGUoIFN0eWxl
QmFzZSAqcGFyZW50LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcgJm1lZGlhICk7Ci0gICAgQ1NTTWVk
aWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgTWVkaWFMaXN0ICptZWRpYUxpc3QsIENTU1J1bGVM
aXN0ICpydWxlTGlzdCApOwotICAgIHZpcnR1YWwgfkNTU01lZGlhUnVsZSgpOwotCi0gICAgTWVk
aWFMaXN0ICptZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7IH0KLSAgICBD
U1NSdWxlTGlzdCAqY3NzUnVsZXMoKSB7IHJldHVybiBtX2xzdENTU1J1bGVzLmdldCgpOyB9Ci0K
LSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlICggY29uc3QgV2ViQ29yZTo6U3RyaW5nICZydWxlLCB1
bnNpZ25lZCBpbmRleCApOwotICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVkIGluZGV4ICkg
eyBtX2xzdENTU1J1bGVzLT5kZWxldGVSdWxlKCBpbmRleCApOyB9Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNNZWRpYVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwotCi0gICAgLyogTm90IHBhcnQgb2YgdGhlIERPTSAqLwotICAgIHVuc2ln
bmVkIGFwcGVuZCggQ1NTUnVsZSAqcnVsZSApOwotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxNZWRp
YUxpc3Q+IG1fbHN0TWVkaWE7Ci0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xzdENTU1J1bGVz
OwotfTsKLQotCi1jbGFzcyBDU1NQYWdlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1wdWJsaWM6
Ci0gICAgQ1NTUGFnZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpOwotICAgIHZpcnR1YWwgfkNTU1Bh
Z2VSdWxlKCk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQYWdlUnVs
ZSgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFdlYkNvcmU6OlN0cmluZyBzZWxlY3RvclRleHQo
KSBjb25zdDsKLSAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsK
LQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9z
dHlsZTsKLX07Ci0KLWNsYXNzIENTU0ltcG9ydGFudFJ1bGU7Ci0KLWNsYXNzIENTU1N0eWxlUnVs
ZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTU3R5bGVSdWxlKFN0eWxlQmFz
ZSogcGFyZW50KTsKLSAgICB2aXJ0dWFsIH5DU1NTdHlsZVJ1bGUoKTsKLQotICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICBXZWJDb3JlOjpTdHJpbmcg
c2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RvclRleHQoV2ViQ29yZTo6
U3RyaW5nIHN0cik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoIGNvbnN0IFN0cmlu
ZyAmc3RyaW5nLCBib29sID0gZmFsc2UgKTsKLQotICAgIHZvaWQgc2V0U2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKSB7IG1fc2VsZWN0b3IgPSBzZWxlY3RvcjsgfQotICAgIHZvaWQgc2V0
RGVjbGFyYXRpb24oUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4pOwotCi0g
ICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgeyByZXR1cm4gbV9zZWxlY3RvcjsgfQotICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbigpIHsgcmV0dXJuIG1fc3R5bGUu
Z2V0KCk7IH0KLSAKLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IG1fc3R5bGU7Ci0gICAgQ1NTU2VsZWN0b3IqIG1fc2VsZWN0b3I7Ci19OwotCi1jbGFz
cyBDU1NVbmtub3duUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17CitjbGFzcyBDU1NVbmtub3duUnVs
ZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKICAgICBDU1NVbmtub3duUnVsZShTdHlsZUJh
c2UgKnBhcmVudCkgOiBDU1NSdWxlKHBhcmVudCkge30KIApJbmRleDogY3NzL0ZvbnRGYW1pbHlW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0ZvbnRGYW1pbHlWYWx1ZS5jcHAJKHJldmlzaW9u
IDE0NDAwKQorKysgY3NzL0ZvbnRGYW1pbHlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
LDU5ICsxOSwxMyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CiAgKi8KLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIK
KyNpbmNsdWRlICJGb250RmFtaWx5VmFsdWUuaCIKIAotI2luY2x1ZGUgIkNhY2hlLmgiCi0jaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJEb2NMb2FkZXIuaCIKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgotI2luY2x1ZGUgImNzc3BhcnNlci5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKLSNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJSZWd1bGFy
RXhwcmVzc2lvbi5oIgogCi0jaWYgU1ZHX1NVUFBPUlQKLSNpbmNsdWRlICJrc3ZnY3NzcHJvcGVy
dGllcy5oIgotI2VuZGlmCi0KLS8vIE5vdCBpbiBhbnkgaGVhZGVyLCBzbyBqdXN0IGRlY2xhcmUg
aXQgaGVyZSBmb3Igbm93LgotV2ViQ29yZTo6U3RyaW5nIGdldFByb3BlcnR5TmFtZSh1bnNpZ25l
ZCBzaG9ydCBpZCk7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRGVmaW5lZCBpbiBDU1NH
cmFtbWFyLnksIGJ1dCBub3QgaW4gYW55IGhlYWRlciwgc28ganVzdCBkZWNsYXJlIGl0IGhlcmUg
Zm9yIG5vdy4KLWludCBnZXRQcm9wZXJ0eUlEKGNvbnN0IGNoYXIqIHN0ciwgaW50IGxlbik7Ci0K
LXN0YXRpYyBpbnQgcHJvcGVydHlJRChjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgY2hhciBidWZm
ZXJbbWF4Q1NTUHJvcGVydHlOYW1lTGVuZ3RoXTsKLQotICAgIHVuc2lnbmVkIGxlbiA9IHMubGVu
Z3RoKCk7Ci0gICAgaWYgKGxlbiA+IG1heENTU1Byb3BlcnR5TmFtZUxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbjsgKytpKSB7Ci0g
ICAgICAgIFVDaGFyIGMgPSBzW2ldOwotICAgICAgICBpZiAoYyA9PSAwIHx8IGMgPj0gMHg3RikK
LSAgICAgICAgICAgIHJldHVybiAwOyAvLyBpbGxlZ2FsIGNoYXJhY3RlcgotICAgICAgICBidWZm
ZXJbaV0gPSBjOwotICAgIH0KLQotICAgIGludCBpZCA9IGdldFByb3BlcnR5SUQoYnVmZmVyLCBs
ZW4pOwotI2lmIFNWR19TVVBQT1JUCi0gICAgaWYgKGlkID09IDApCi0gICAgICAgIGlkID0gU1ZH
OjpnZXRTVkdDU1NQcm9wZXJ0eUlEKGJ1ZmZlciwgbGVuKTsKLSNlbmRpZgotICAgIHJldHVybiBp
ZDsKLX0KLQotCiAvLyBRdW90ZXMgdGhlIHN0cmluZyBpZiBpdCBuZWVkcyBxdW90aW5nLgogLy8g
V2UgdXNlIHNpbmdsZSBxdW90ZXMgZm9yIG5vdyBiZWF1c2UgbWFya3VwLmNwcCB1c2VzIGRvdWJs
ZSBxdW90ZXMuCiBzdGF0aWMgU3RyaW5nIHF1b3RlU3RyaW5nSWZOZWVkZWQoY29uc3QgU3RyaW5n
ICZzdHJpbmcpCkBAIC04OCwxMTY3ICs0Miw2IEBACiAgICAgcmV0dXJuICInIiArIHMgKyAiJyI7
CiB9CiAKLUNTU1N0eWxlRGVjbGFyYXRpb246OkNTU1N0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSAq
cGFyZW50KQotICAgIDogU3R5bGVCYXNlKHBhcmVudCkKLXsKLX0KLQotYm9vbCBDU1NTdHlsZURl
Y2xhcmF0aW9uOjppc1N0eWxlRGVjbGFyYXRpb24oKQotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNT
U1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBw
cm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJRCk7Ci19Ci0KLVN0cmlu
ZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyAmcHJv
cGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7
Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4g
Z2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsKLSAg
ICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElE
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5UHJpb3Jp
dHkocHJvcElEKSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkK
LXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICgh
cHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaW50IHNob3J0aGFuZElEID0g
Z2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAgICBpZiAoIXNob3J0aGFuZElEKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzaG9ydGhh
bmRJRCk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0
KGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BJRCk7Ci19Ci0KLXZvaWQgQ1NT
U3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKCFwcm9wSUQpIC8vIHNldCBleGNlcHRpb24/Ci0gICAgICAgIHJldHVybjsKLSAgICBi
b29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSAt
MTsKLSAgICBzZXRQcm9wZXJ0eShwcm9wSUQsIHZhbHVlLCBpbXBvcnRhbnQsIGVjKTsKLX0KLQot
U3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQgcHJvcElEID0gcHJv
cGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BJRCwgZWMpOwotfQotCi1i
b29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyAmcHJv
cGVydHlOYW1lKQotewotICAgIHJldHVybiBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpCi0gICAgOiBtX25vZGUoMCkKLXsK
LX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KSwg
bV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxp
c3Q8Q1NTUHJvcGVydHk+ICZ2YWx1ZXMpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVu
dCksIG1fdmFsdWVzKHZhbHVlcyksIG1fbm9kZSgwKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGFs
bG93cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCwgY29uc3QgQ1NT
UHJvcGVydHkgKiBjb25zdCAqcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCi0gICAgOiBD
U1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQotewotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQotICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoKnBy
b3BlcnRpZXNbaV0pOwotICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyBkdXBsaWNhdGUgcHJvcGVy
dGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIG8p
Ci17Ci0gICAgLy8gZG9uJ3QgYXR0YWNoIGl0IHRvIHRoZSBzYW1lIG5vZGUsIGp1c3QgbGVhdmUg
dGhlIGN1cnJlbnQgbV9ub2RlIHZhbHVlCi0gICAgbV92YWx1ZXMgPSBvLm1fdmFsdWVzOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAgIGlmICh2
YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7Ci0KLSAgICAvLyBTaG9ydGhh
bmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKLSAgICBzd2l0Y2ggKCBwcm9wZXJ0eUlEICkgewot
ICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTjoKLSAgICB7Ci0gICAgICAgIC8v
ICMjIElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4gY3NzcGFyc2VyLmNwcCBpcyBjb25mdXNp
bmcKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU19QUk9QX0JBQ0tHUk9V
TkRfUE9TSVRJT05fWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWSB9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRIYW5k
VmFsdWUoIHByb3BlcnRpZXMsIDIgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CQUNLR1JP
VU5EOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNV0gPSB7IENTU19QUk9Q
X0JBQ0tHUk9VTkRfSU1BR0UsIENTU19QUk9QX0JBQ0tHUk9VTkRfUkVQRUFULAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9BVFRBQ0hNRU5U
LCBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiB9OwotICAgICAgICByZXR1cm4g
Z2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDUgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1Nf
UFJPUF9CT1JERVI6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsg
Q1NTX1BST1BfQk9SREVSX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfU1RZTEUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfQ09MT1IgfTsKLSAgICAg
ICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAg
IGNhc2UgQ1NTX1BST1BfQk9SREVSX1RPUDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfUFJPUF9CT1JERVJf
VE9QX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1Bf
Qk9SREVSX1RPUF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJv
cGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9SSUdIVDoKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJf
UklHSFRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9SSUdIVF9DT0xPUn07Ci0gICAg
ICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAg
ICBjYXNlIENTU19QUk9QX0JPUkRFUl9CT1RUT006Ci0gICAgewotICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURUSCwgQ1NTX1BST1Bf
Qk9SREVSX0JPVFRPTV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09MT1J9OwotICAgICAgICByZXR1cm4gZ2V0U2hvcnRI
YW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9CT1JE
RVJfTEVGVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1Nf
UFJPUF9CT1JERVJfTEVGVF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX0xFRlRfU1RZTEUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfTEVGVF9DT0xP
Un07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyApOwot
ICAgIH0KLSAgICBjYXNlIENTU19QUk9QX09VVExJTkU6Ci0gICAgewotICAgICAgICBjb25zdCBp
bnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfT1VUTElORV9XSURUSCwgQ1NTX1BST1BfT1VU
TElORV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9Q
X09VVExJTkVfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9w
ZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX0NPTE9SOgotICAg
IHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JPUkRFUl9U
T1BfQ09MT1IsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9DT0xPUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09MT1IsIENTU19QUk9Q
X0JPUkRFUl9MRUZUX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0
aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1dJRFRIOgotICAgIHsKLSAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JPUkRFUl9UT1BfV0lE
VEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgsIENTU19QUk9QX0JPUkRF
Ul9MRUZUX1dJRFRIIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7
Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1NUWUxFOgotICAgIHsKLSAgICAgICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JPUkRFUl9UT1BfU1RZTEUsIENT
U19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19QUk9QX0JPUkRFUl9MRUZU
X1NUWUxFIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAg
fQotICAgIGNhc2UgQ1NTX1BST1BfTUFSR0lOOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHBy
b3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX01BUkdJTl9UT1AsIENTU19QUk9QX01BUkdJTl9SSUdI
VCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX01BUkdJTl9C
T1RUT00sIENTU19QUk9QX01BUkdJTl9MRUZUIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVz
KCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfUEFERElORzoKLSAgICB7
Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJPUF9QQURESU5HX1RP
UCwgQ1NTX1BST1BfUEFERElOR19SSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU19QUk9QX1BBRERJTkdfQk9UVE9NLCBDU1NfUFJPUF9QQURESU5HX0xFRlQgfTsK
LSAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAgICB9Ci0gICAgY2Fz
ZSBDU1NfUFJPUF9MSVNUX1NUWUxFOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRp
ZXNbM10gPSB7IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1BST1BfTElTVF9TVFlMRV9Q
T1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0xJ
U1RfU1RZTEVfSU1BR0UgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9w
ZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0NFZhbHVlcyggY29uc3QgaW50KiBw
cm9wZXJ0aWVzICkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnRp
ZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpIC8vIGFw
cGFyZW50bHkgYWxsIDQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZC4KLSAgICAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgcmVzICs9IHZhbHVlLT5jc3NU
ZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotU3RyaW5nIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRTaG9ydEhhbmRWYWx1ZSggY29uc3QgaW50KiBw
cm9wZXJ0aWVzLCBpbnQgbnVtYmVyICkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpIHsKLSAgICAgICAgaWYgKCFpc1Byb3BlcnR5
SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAg
aWYgKHZhbHVlKSB7IC8vIFRPRE8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlIGlmICF2YWx1ZQotICAg
ICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXMg
Kz0gIiAiOwotICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLVBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25z
dEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgpOyBpdCAh
PSBlbmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1faWQpCi0gICAg
ICAgICAgICByZXR1cm4gKCppdCkudmFsdWUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5n
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
RCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7
Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0SXRlcmF0b3I8
Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RJdGVyYXRvcjxD
U1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgpOyBpdCAhPSBlbmQ7IC0taXQpCi0g
ICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1faWQpIHsKLSAgICAgICAgICAgIHZhbHVl
ID0gKCppdCkudmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgbV92YWx1ZXMucmVtb3Zl
KGl0KTsKLSAgICAgICAgICAgIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICAgICAgICAgIHNl
dENoYW5nZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4g
dmFsdWU7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNsZWFyKCkKLXsK
LSAgICBtX3ZhbHVlcy5jbGVhcigpOwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fbm9kZSkg
ewotICAgICAgICBtX25vZGUtPnNldENoYW5nZWQoKTsKLSAgICAgICAgLy8gRklYTUU6IElkZWFs
bHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRlciBhbmQgdGhlcmUKLSAgICAgICAgLy8g
c2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24ganVzdAot
ICAgICAgICAvLyBmb3IgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9ucyB0aGF0IGhhbmRsZXMgdGhp
cwotICAgICAgICBpZiAobV9ub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSAmJiB0aGlzID09IHN0YXRp
Y19jYXN0PFN0eWxlZEVsZW1lbnQgKj4obV9ub2RlKS0+aW5saW5lU3R5bGVEZWNsKCkpCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50ICo+KG1fbm9kZSktPmludmFsaWRhdGVT
dHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gIyMjIHF1
aWNrJmRpcnR5IGhhY2sgZm9yIEtERSAzLjAuLi4gbWFrZSB0aGlzIE1VQ0ggYmV0dGVyISAoRGly
aykKLSAgICBTdHlsZUJhc2UgKnJvb3QgPSB0aGlzOwotICAgIHdoaWxlIChTdHlsZUJhc2UgKnBh
cmVudCA9IHJvb3QtPnBhcmVudCgpKQotICAgICAgICByb290ID0gcGFyZW50OwotICAgIGlmIChy
b290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCo+KHJvb3QpLT5kb2MoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotfQotCi1ib29sIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlE
KSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3Bl
cnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCku
aXNJbXBvcnRhbnQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0
Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVu
ZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5
PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKHBy
b3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAoKml0KS5zaG9ydGhh
bmRJRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAg
IERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAg
Zm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBt
X3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlE
ID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuaXNJbXBsaWNpdCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlE
LCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlLCBlYyk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCB0cnVlLCBl
Yyk7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBu
b3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0KLSAgICBy
ZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLQotICAgIENTU1BhcnNlciBwYXJzZXIodXNlU3Ry
aWN0UGFyc2luZygpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZXIucGFyc2VWYWx1ZSh0aGlz
LCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAg
ICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIH0gZWxzZSBpZiAobm90aWZ5Q2hhbmdlZCkKLSAg
ICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi1ib29sIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgaW50IHZh
bHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQotewotICAgIHJlbW92ZVBy
b3BlcnR5KHByb3BlcnR5SUQpOwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9w
ZXJ0eUlELCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLCBpbXBvcnRhbnQpKTsKLSAgICBp
ZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRTdHJpbmdQcm9wZXJ0
eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyB0eXBlLCBib29sIGltcG9ydGFudCkKLXsKLSAgICByZW1vdmVQcm9wZXJ0eShw
cm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwg
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSwgaW1wb3J0YW50KSk7Ci0gICAgc2V0
Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRJbWFn
ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcgJlVSTCwgYm9vbCBpbXBvcnRh
bnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0gICAgbV92YWx1ZXMuYXBw
ZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NJbWFnZVZhbHVlKFVSTCwgdGhpcyks
IGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcgJnN0eWxlRGVjbGFy
YXRpb24pCi17Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVz
ZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywgc3R5
bGVEZWNsYXJhdGlvbik7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5ICog
Y29uc3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQotewotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgIHJlbW92ZVByb3BlcnR5KHBy
b3BlcnRpZXNbaV0tPmlkKCksIGZhbHNlKTsKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKCpwcm9w
ZXJ0aWVzW2ldKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGhh
dmUgYSBjYWxsIHRvIHNldENoYW5nZWQoKSBpZiBzb21ldGhpbmcgY2hhbmdlZC4gV2UgbWF5IGFs
c28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJndW1lbnQgdG8gdGhpcyBm
dW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGNs
YXNzLgotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRMZW5ndGhQcm9w
ZXJ0eShpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIC8q
IG11bHRpTGVuZ3RoKi8pCi17Ci0gICAgYm9vbCBwYXJzZU1vZGUgPSB1c2VTdHJpY3RQYXJzaW5n
KCk7Ci0gICAgc2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7Ci0gICAgc2V0UHJvcGVydHkoaWQsIHZh
bHVlLCBpbXBvcnRhbnQpOwotICAgIHNldFN0cmljdFBhcnNpbmcocGFyc2VNb2RlKTsKLX0KLQot
dW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fdmFsdWVzLmNvdW50KCk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAotewotICAgIGlmIChpID49IG1fdmFs
dWVzLmNvdW50KCkpCi0gICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBnZXRQcm9w
ZXJ0eU5hbWUobV92YWx1ZXNbaV0uaWQoKSk7Ci19Ci0KLUNTU1J1bGUgKkNTU1N0eWxlRGVjbGFy
YXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiAocGFyZW50KCkgJiYgcGFy
ZW50KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENTU1J1bGUgKj4ocGFyZW50KCkpIDogMDsK
LX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QK
LXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAgCi0gICAgRGVwcmVjYXRlZFZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1
ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0ICs9ICgqaXQpLmNzc1RleHQoKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNl
dENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBl
YyA9IDA7Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0
cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywgdGV4dCk7
Ci0gICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCi0gICAgc2V0
Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptZXJnZShD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25m
bGljdCkKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0
eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJv
cGVydHk+IGl0ID0gb3RoZXItPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LmlkKCkpOwot
ICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIGlmICghYXJnT3ZlcnJpZGVzT25Db25m
bGljdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlbW92ZVByb3Bl
cnR5KHByb3BlcnR5LmlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZChw
cm9wZXJ0eSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZl
IGEgY2FsbCB0byBzZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNv
IHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVu
Y3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFz
cy4KLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWZmKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uICpzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PGludD4gcHJvcGVydGllczsKLSAgICBEZXBy
ZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAo
RGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0KHN0eWxlLT52
YWx1ZXNJdGVyYXRvcigpKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IENTU1By
b3BlcnR5ICZwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7Ci0gICAgICAgIGlmICh2YWx1ZSAm
JiAodmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCkpKQotICAg
ICAgICAgICAgcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkuaWQoKSk7Ci0gICAgfQotICAgIAot
ICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPGludD4gaXQocHJvcGVydGllcy5i
ZWdpbigpKTsgaXQgIT0gcHJvcGVydGllcy5lbmQoKTsgKytpdCkKLSAgICAgICAgc3R5bGUtPnJl
bW92ZVByb3BlcnR5KCppdCk7Ci19Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGll
cyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlJbmhlcml0YWJsZVByb3BlcnRpZXMoKSBmdW5j
dGlvbi4KLS8vIEl0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpc3Qgb2YgaW5oZXJpdGVk
IENTUyBwcm9wZXJ0aWVzIGFuZCB0aGUKLS8vIHByb3BlcnRpZXMgZm9yIHdoaWNoIHdlIGhhdmUg
YSBjb21wdXRlZCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGZpbGUuCi1jb25zdCBpbnQgaW5oZXJp
dGFibGVQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfQk9SREVSX0NPTExBUFNFLAotICAg
IENTU19QUk9QX0JPUkRFUl9TUEFDSU5HLAotICAgIENTU19QUk9QX0NPTE9SLAotICAgIENTU19Q
Uk9QX0ZPTlRfRkFNSUxZLAotICAgIENTU19QUk9QX0ZPTlRfU0laRSwKLSAgICBDU1NfUFJPUF9G
T05UX1NUWUxFLAotICAgIENTU19QUk9QX0ZPTlRfVkFSSUFOVCwKLSAgICBDU1NfUFJPUF9GT05U
X1dFSUdIVCwKLSAgICBDU1NfUFJPUF9MRVRURVJfU1BBQ0lORywKLSAgICBDU1NfUFJPUF9MSU5F
X0hFSUdIVCwKLSAgICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAgIENTU19QUk9QX19XRUJLSVRf
VEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsCi0gICAgQ1NTX1BST1BfVEVYVF9JTkRFTlQsCi0g
ICAgQ1NTX1BST1BfX1dFQktJVF9URVhUX1NJWkVfQURKVVNULAotICAgIENTU19QUk9QX1RFWFRf
VFJBTlNGT1JNLAotICAgIENTU19QUk9QX09SUEhBTlMsCi0gICAgQ1NTX1BST1BfV0hJVEVfU1BB
Q0UsCi0gICAgQ1NTX1BST1BfV0lET1dTLAotICAgIENTU19QUk9QX1dPUkRfU1BBQ0lORywKLX07
Ci0KLWNvbnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyA9IHNpemVvZihpbmhl
cml0YWJsZVByb3BlcnRpZXMpIC8gc2l6ZW9mKGluaGVyaXRhYmxlUHJvcGVydGllc1swXSk7Ci0K
LS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhl
IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBsaXN0IG9mIENT
UyBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxldmVsIGVsZW1lbnRz
Lgotc3RhdGljIGNvbnN0IGludCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKLSAgICBDU1NfUFJPUF9P
UlBIQU5TLAotICAgIENTU19QUk9QX09WRVJGTE9XLCAvLyBUaGlzIGNhbiBiZSBhbHNvIGJlIGFw
cGxpZWQgdG8gcmVwbGFjZWQgZWxlbWVudHMKLSAgICBDU1NfUFJPUF9QQUdFX0JSRUFLX0FGVEVS
LAotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfQkVGT1JFLAotICAgIENTU19QUk9QX1BBR0VfQlJF
QUtfSU5TSURFLAotICAgIENTU19QUk9QX1RFWFRfQUxJR04sCi0gICAgQ1NTX1BST1BfVEVYVF9J
TkRFTlQsCi0gICAgQ1NTX1BST1BfV0lET1dTCi19OwotCi1jb25zdCB1bnNpZ25lZCBudW1CbG9j
a1Byb3BlcnRpZXMgPSBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzKSAvIHNpemVvZihibG9ja1Byb3Bl
cnRpZXNbMF0pOwotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9ja1By
b3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVC
bG9ja1Byb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNldChibG9ja1Byb3Bl
cnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygpCi17Ci0gICAgcmVtb3ZlUHJv
cGVydGllc0luU2V0KGluaGVyaXRhYmxlUHJvcGVydGllcywgbnVtSW5oZXJpdGFibGVQcm9wZXJ0
aWVzKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQgKnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+
IGxpc3Q7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7
Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKENTU1Byb3BlcnR5
KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwotICAgIH0KLSAgICByZXR1cm4gbmV3
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIGxpc3QpOwotfQotCi12b2lkIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50ICpzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKLSAgICAgICAgaWYgKHZh
bHVlKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZW1vdmUoQ1NTUHJvcGVydHkoc2V0W2ldLCB2
YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBpZiAoY2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwot
fQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQotewotICAgIHJldHVybiB0aGlzOwotfQotCi1Q
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y29weSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5ldyBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbigwLCBtX3ZhbHVlcyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLXVuc2lnbmVkIHNob3J0IENTU0luaGVyaXRlZFZhbHVlOjpjc3NWYWx1ZVR5cGUo
KSBjb25zdAotewotICAgIHJldHVybiBDU1NfSU5IRVJJVDsKLX0KLQotU3RyaW5nIENTU0luaGVy
aXRlZFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gImluaGVyaXQiOwotfQot
Ci11bnNpZ25lZCBzaG9ydCBDU1NJbml0aWFsVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17
IAotICAgIHJldHVybiBDU1NfSU5JVElBTDsgCi19Ci0KLVN0cmluZyBDU1NJbml0aWFsVmFsdWU6
OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVybiAiaW5pdGlhbCI7Ci19Ci0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTVmFsdWVMaXN0Ojp+Q1NTVmFsdWVMaXN0
KCkKLXsKLSAgICBmb3IgKENTU1ZhbHVlICp2YWwgPSBtX3ZhbHVlcy5maXJzdCgpOyB2YWw7IHZh
bCA9IG1fdmFsdWVzLm5leHQoKSkKLSAgICAgICAgdmFsLT5kZXJlZigpOwotfQotCi11bnNpZ25l
ZCBzaG9ydCBDU1NWYWx1ZUxpc3Q6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IENTU19WQUxVRV9MSVNUOwotfQotCi12b2lkIENTU1ZhbHVlTGlzdDo6YXBwZW5kKFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IHZhbCkKLXsKLSAgICBtX3ZhbHVlcy5hcHBlbmQodmFsLnJlbGVhc2UoKSk7
Ci19Ci0KLVN0cmluZyBDU1NWYWx1ZUxpc3Q6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmlu
ZyByZXN1bHQgPSAiIjsKLQotICAgIGZvciAoRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxDU1NW
YWx1ZT4gaXRlcmF0b3IobV92YWx1ZXMpOyBpdGVyYXRvci5jdXJyZW50KCk7ICsraXRlcmF0b3Ip
IHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9
ICIsICI7Ci0gICAgICAgIHJlc3VsdCArPSBpdGVyYXRvci5jdXJyZW50KCktPmNzc1RleHQoKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoKQot
ewotICAgIG1fdHlwZSA9IDA7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVW
YWx1ZShpbnQgaWRlbnQpCi17Ci0gICAgbV92YWx1ZS5pZGVudCA9IGlkZW50OwotICAgIG1fdHlw
ZSA9IENTU19JREVOVDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVl
KGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotewotICAgIG1fdmFsdWUubnVtID0gbnVtOwot
ICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVW
YWx1ZShjb25zdCBTdHJpbmcmIHN0ciwgVW5pdFR5cGVzIHR5cGUpCi17Ci0gICAgaWYgKChtX3Zh
bHVlLnN0cmluZyA9IHN0ci5pbXBsKCkpKQotICAgICAgICBtX3ZhbHVlLnN0cmluZy0+cmVmKCk7
Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2
ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4gYykKLXsKLSAgICBtX3ZhbHVlLmNvdW50ZXIgPSBj
LnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfQ09VTlRFUjsKLX0KLQotQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdEltcGw+IHIpCi17Ci0gICAg
bV92YWx1ZS5yZWN0ID0gci5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NTX1JFQ1Q7Ci19Ci0K
LSNpZiBfX0FQUExFX18KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShQYXNz
UmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gcikKLXsKLSAgICBtX3ZhbHVlLnJlZ2lvbiA9IHIucmVs
ZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19EQVNIQk9BUkRfUkVHSU9OOwotfQotI2VuZGlmCi0K
LUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShSR0JBMzIgY29sb3IpCi17Ci0g
ICAgbV92YWx1ZS5yZ2Jjb2xvciA9IGNvbG9yOwotICAgIG1fdHlwZSA9IENTU19SR0JDT0xPUjsK
LX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UGFp
cj4gcCkKLXsKLSAgICBtX3ZhbHVlLnBhaXIgPSBwLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBD
U1NfUEFJUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6On5DU1NQcmltaXRpdmVWYWx1ZSgpCi17
Ci0gICAgY2xlYW51cCgpOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpjbGVhbnVwKCkK
LXsKLSAgICBzd2l0Y2gobV90eXBlKSB7Ci0gICAgY2FzZSBDU1NfU1RSSU5HOgotICAgIGNhc2Ug
Q1NTX1VSSToKLSAgICBjYXNlIENTU19BVFRSOgotICAgICAgICBpZiAobV92YWx1ZS5zdHJpbmcp
Ci0gICAgICAgICAgICBtX3ZhbHVlLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NfQ09VTlRFUjoKLSAgICAgICAgbV92YWx1ZS5jb3VudGVyLT5kZXJlZigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19SRUNUOgotICAgICAgICBtX3ZhbHVlLnJlY3Qt
PmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1BBSVI6Ci0gICAgICAgIG1f
dmFsdWUucGFpci0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgX19BUFBMRV9fCi0gICAg
Y2FzZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgaWYgKG1fdmFsdWUucmVnaW9uKQot
ICAgICAgICAgICAgbV92YWx1ZS5yZWdpb24tPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbV90eXBlID0g
MDsKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0
eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0
eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiBy
ZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0
byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGlu
dGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwot
ICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFYIHx8IHJlc3VsdCA8IElOVF9NSU4pCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgICAgCi19Ci0KLWludCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSAqc3R5bGUsIGRvdWJs
ZSBtdWx0aXBsaWVyKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBtdWx0aXBsaWVyICogY29tcHV0
ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1w
cmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdl
Ci0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3Nl
IHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAt
MC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFYIHx8IHJlc3VsdCA8
IElOVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgIAot
fQotCi1jb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZmZmZmOyAvLyBtYXggdmFsdWUg
Zm9yIGEgMjgtYml0IGludAotY29uc3QgaW50IGludE1pbkZvckxlbmd0aCA9ICgtMHg3ZmZmZmZm
LTEpOyAvLyBtaW4gdmFsdWUgZm9yIGEgMjgtYml0IGludAotCi0vLyBMZW5ndGhzIGV4cGVjdCBh
biBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGEgZGlm
ZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50
Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29t
cHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMg
aW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4g
IFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNs
b3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAg
PyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBpbnRNYXhGb3JMZW5ndGgg
fHwgcmVzdWx0IDwgaW50TWluRm9yTGVuZ3RoKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gKGludClyZXN1bHQ7ICAgIAotfQotCi0vLyBMZW5ndGhzIGV4cGVjdCBhbiBpbnQgdGhhdCBp
cyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGEgZGlmZmVyZW50IG92ZXJm
bG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJl
bmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3Vs
dCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8v
IFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMg
b2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3Vu
ZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICBy
ZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3Vs
dCA+IGludE1heEZvckxlbmd0aCB8fCByZXN1bHQgPCBpbnRNaW5Gb3JMZW5ndGgpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgIAotfQotCi1zaG9ydCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAg
ICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAv
LyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVz
IG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91
bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAg
cmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1
bHQgPiBTSFJUX01BWCB8fCByZXN1bHQgPCBTSFJUX01JTikKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIChzaG9ydClyZXN1bHQ7ICAgIAotfQotCi1zaG9ydCBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxp
ZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxv
YXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9m
dGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBu
ZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5l
eHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAu
MDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IFNIUlRfTUFYIHx8IHJlc3VsdCA8IFNIUlRfTUlO
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKHNob3J0KXJlc3VsdDsgIAotfQotCi1k
b3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhGbG9hdChSZW5kZXJTdHlsZSAq
c3R5bGUsIGJvb2wgYXBwbHlab29tRmFjdG9yKQotewotICAgIHVuc2lnbmVkIHNob3J0IHR5cGUg
PSBwcmltaXRpdmVUeXBlKCk7Ci0KLSAgICAvLyBXZSBhbHdheXMgYXNzdW1lIDk2IENTUyBwaXhl
bHMgaW4gYSBDU1MgaW5jaC4gVGhpcyBpcyB0aGUgY29sZCBoYXJkIHRydXRoIG9mIHRoZSBXZWIu
Ci0gICAgLy8gQXQgaGlnaCBEUEksIHdlIG1heSBzY2FsZSBhIENTUyBwaXhlbCwgYnV0IHRoZSBy
YXRpbyBvZiB0aGUgQ1NTIHBpeGVsIHRvIHRoZSBzby1jYWxsZWQKLSAgICAvLyAiYWJzb2x1dGUi
IENTUyBsZW5ndGggdW5pdHMgbGlrZSBpbmNoIGFuZCBwdCBpcyBhbHdheXMgZml4ZWQgYW5kIG5l
dmVyIGNoYW5nZXMuCi0gICAgZG91YmxlIGNzc1BpeGVsc1BlckluY2ggPSA5Ni47Ci0KLSAgICBk
b3VibGUgZmFjdG9yID0gMS47Ci0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBjYXNlIENTU19FTVM6
Ci0gICAgICAgIGZhY3RvciA9IGFwcGx5Wm9vbUZhY3RvciA/Ci0gICAgICAgICAgc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIDoKLSAgICAgICAgICBzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U19FWFM6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBidWcgcmlnaHQgbm93IHdoZXJl
IHRoZSB6b29tIHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lcyB0byBFWCB1bml0cy4KLSAg
ICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgdG8gY29tcHV0ZSBFWCB1c2luZyBmb250TWV0cmljcyBm
b3IgdGhlIG9yaWdpbmFsIHNwZWNpZmllZFNpemUgYW5kIG5vdCB1c2UKLSAgICAgICAgLy8gb3Vy
IGFjdHVhbCBjb25zdHJ1Y3RlZCByZW5kZXJpbmcgZm9udC4KLSAgICAgICAgZmFjdG9yID0gc3R5
bGUtPmZvbnQoKS54SGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENT
U19QWDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ006Ci0gICAgICAgIGZhY3RvciA9
IGNzc1BpeGVsc1BlckluY2gvMi41NDsgLy8gKDIuNTQgY20vaW4pCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTX01NOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoLzI1LjQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICBmYWN0b3IgPSBjc3NQ
aXhlbHNQZXJJbmNoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19QVDoKLSAgICAgICAg
ZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC83Mi47Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTX1BDOgotICAgICAgICAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAgIGZhY3RvciA9IGNzc1Bp
eGVsc1BlckluY2gqMTIuLzcyLjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiBnZXRGbG9hdFZhbHVlKCkgKiBmYWN0
b3I7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldEZsb2F0VmFsdWUoIHVuc2lnbmVk
IHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAvLyAjIyMgY2hlY2sgaWYgcHJvcGVy
dHkgc3VwcG9ydHMgdGhpcyB0eXBlCi0gICAgaWYgKG1fdHlwZSA+IENTU19ESU1FTlNJT04pIHsK
LSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8v
aWYobV90eXBlID4gQ1NTX0RJTUVOU0lPTikgdGhyb3cgRE9NRXhjZXB0aW9uKElOVkFMSURfQUND
RVNTX0VSUik7Ci0gICAgbV92YWx1ZS5udW0gPSBmbG9hdFZhbHVlOwotICAgIG1fdHlwZSA9IHVu
aXRUeXBlOwotfQotCi1kb3VibGUgc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuc2lnbmVkIHNo
b3J0IHVuaXRUeXBlKQotewotICAgIGRvdWJsZSBjc3NQaXhlbHNQZXJJbmNoID0gOTYuMDsKLSAg
ICBkb3VibGUgZmFjdG9yID0gMS4wOwotICAgIAotICAgIHN3aXRjaCh1bml0VHlwZSkgewotICAg
ICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAgICAgICAgICAgZmFj
dG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDIuNTQ7IC8vICgyLjU0IGNtL2luKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTToKLSAgICAg
ICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyAyNS40OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTjoKLSAgICAgICAgICAg
IGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgICAgICAgICAgZmFjdG9yID0gY3Nz
UGl4ZWxzUGVySW5jaCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDOgotICAgICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxz
UGVySW5jaCAqIDEyLjAgLyA3Mi4wOyAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gZmFjdG9yOwotfQotCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldEZsb2F0
VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCi17Ci0gICAgaWYgKHVuaXRUeXBlID09IG1f
dHlwZSB8fCB1bml0VHlwZSA8IENTU19QWCB8fCB1bml0VHlwZSA+IENTU19QQykKLSAgICAgICAg
cmV0dXJuIG1fdmFsdWUubnVtOwotICAgIAotICAgIGRvdWJsZSBjb252ZXJ0ZWRWYWx1ZSA9IG1f
dmFsdWUubnVtOwotICAgIAotICAgIC8vIEZpcnN0IGNvbnZlcnQgdGhlIHZhbHVlIGZyb20gbV90
eXBlIGludG8gQ1NTUGl4ZWxzCi0gICAgZG91YmxlIGZhY3RvciA9IHNjYWxlRmFjdG9yRm9yQ29u
dmVyc2lvbihtX3R5cGUpOwotICAgIGNvbnZlcnRlZFZhbHVlICo9IGZhY3RvcjsKLSAgICAKLSAg
ICAvLyBOb3cgY29udmVydCBmcm9tIENTU1BpeGVscyB0byB0aGUgc3BlY2lmaWVkIHVuaXRUeXBl
Ci0gICAgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuaXRUeXBlKTsKLSAgICBj
b252ZXJ0ZWRWYWx1ZSAvPSBmYWN0b3I7Ci0gICAgCi0gICAgcmV0dXJuIGNvbnZlcnRlZFZhbHVl
OwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRTdHJpbmdWYWx1ZSggdW5zaWduZWQg
c2hvcnQgc3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nICZzdHJpbmdWYWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAvL2lmKG1fdHlwZSA8
IENTU19TVFJJTkcpIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElEX0FDQ0VTU19FUlIpOwotICAg
IC8vaWYobV90eXBlID4gQ1NTX0FUVFIpIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElEX0FDQ0VT
U19FUlIpOwotICAgIGlmIChtX3R5cGUgPCBDU1NfU1RSSU5HIHx8IG1fdHlwZSA+IENTU19BVFRS
KSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoc3RyaW5nVHlwZSAhPSBDU1NfSURFTlQpIHsKLSAgICAgICAgbV92YWx1ZS5zdHJpbmcg
PSBzdHJpbmdWYWx1ZS5pbXBsKCk7Ci0gICAgICAgIG1fdmFsdWUuc3RyaW5nLT5yZWYoKTsKLSAg
ICAgICAgbV90eXBlID0gc3RyaW5nVHlwZTsKLSAgICB9Ci0gICAgLy8gIyMjIHBhcnNlIGlkZW50
Ci19Ci0KLVN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0U3RyaW5nVmFsdWUoKSBjb25zdAot
ewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTX1NUUklORzoKLSAgICAg
ICAgY2FzZSBDU1NfQVRUUjoKLSAgICAgICAgY2FzZSBDU1NfVVJJOgotICAgICAgICAgICAgcmV0
dXJuIG1fdmFsdWUuc3RyaW5nOwotICAgICAgICBjYXNlIENTU19JREVOVDoKLSAgICAgICAgICAg
IHJldHVybiBnZXRWYWx1ZU5hbWUobV92YWx1ZS5pZGVudCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogVGhlIENTUyAyLjEgc3BlYyBzYXlzIHlvdSBzaG91bGQgdGhy
b3cgYW4gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIFN0cmluZygpOwotfQotCi11bnNpZ25lZCBzaG9ydCBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NTX1BSSU1JVElWRV9WQUxV
RTsKLX0KLQotYm9vbCBDU1NQcmltaXRpdmVWYWx1ZTo6cGFyc2VTdHJpbmcoIGNvbnN0IFN0cmlu
ZyAmLypzdHJpbmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElkZW50KCkKLXsKLSAgICBpZihtX3R5cGUg
IT0gQ1NTX0lERU5UKSByZXR1cm4gMDsKLSAgICByZXR1cm4gbV92YWx1ZS5pZGVudDsKLX0KLQot
U3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAvLyAjIyMg
cmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbnN0ZWFkIG9mIGEgZ2VuZXJhdGVkIG9uZSAoZS5n
LiBjb2xvcgotICAgIC8vIG5hbWUgaWYgaXQgd2FzIHNwZWNpZmllZCkgLSBjaGVjayB3aGF0IHNw
ZWMgc2F5cyBhYm91dCB0aGlzCi0gICAgU3RyaW5nIHRleHQ7Ci0gICAgc3dpdGNoICggbV90eXBl
ICkgewotICAgICAgICBjYXNlIENTU19VTktOT1dOOgotICAgICAgICAgICAgLy8gIyMjCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfTlVNQkVSOgotICAgICAgICAgICAgdGV4
dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUubnVtKSArICIlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU19FTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgImVtIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19FWFM6Ci0gICAg
ICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImV4IjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QWDoKLSAgICAgICAgICAgIHRleHQgPSBT
dHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHgiOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1f
dmFsdWUubnVtKSArICJjbSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1Nf
TU06Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgIm1t
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19JTjoKLSAgICAgICAgICAg
IHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaW4iOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6
bnVtYmVyKG1fdmFsdWUubnVtKSArICJwdCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NfUEM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5u
dW0pICsgInBjIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19ERUc6Ci0g
ICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImRlZyI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUkFEOgotICAgICAgICAgICAgdGV4
dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpu
dW1iZXIobV92YWx1ZS5udW0pICsgImdyYWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTX01TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUu
bnVtKSArICJtcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUzoKLSAg
ICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicyI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSFo6Ci0gICAgICAgICAgICB0ZXh0ID0g
U3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImh6IjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU19LSFo6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIo
bV92YWx1ZS5udW0pICsgImtoeiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NfRElNRU5TSU9OOgotICAgICAgICAgICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAgICAgICAgICAgdGV4dCA9IHF1b3RlU3RyaW5nSWZO
ZWVkZWQobV92YWx1ZS5zdHJpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTX1VSSToKLSAgICAgICAgICAgIHRleHQgPSAidXJsKCIgKyBTdHJpbmcobV92YWx1ZS5zdHJp
bmcpICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0lERU5UOgot
ICAgICAgICAgICAgdGV4dCA9IGdldFZhbHVlTmFtZShtX3ZhbHVlLmlkZW50KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19BVFRSOgotICAgICAgICAgICAgLy8gIyMjCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQ09VTlRFUjoKLSAgICAgICAgICAg
IC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1JFQ1Q6IHsKLSAg
ICAgICAgICAgIFJlY3RJbXBsKiByZWN0VmFsID0gZ2V0UmVjdFZhbHVlKCk7Ci0gICAgICAgICAg
ICB0ZXh0ID0gInJlY3QoIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZhbC0+dG9wKCktPmNz
c1RleHQoKSArICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZhbC0+cmlnaHQoKS0+Y3Nz
VGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5ib3R0b20oKS0+Y3Nz
VGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5sZWZ0KCktPmNzc1Rl
eHQoKSArICIpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q1NTX1JHQkNPTE9SOiB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcihtX3ZhbHVlLnJnYmNvbG9y
KTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwgMHhGRikKLSAgICAgICAgICAgICAg
ICB0ZXh0ID0gInJnYmEoIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0ZXh0
ID0gInJnYigiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xvci5yZWQo
KSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJlcihjb2xvci5ncmVl
bigpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVtYmVyKGNvbG9yLmJs
dWUoKSk7Ci0gICAgICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA8IDB4RkYpCi0gICAgICAgICAg
ICAgICAgdGV4dCArPSAiLCAiICsgU3RyaW5nOjpudW1iZXIoKGZsb2F0KWNvbG9yLmFscGhhKCkg
LyAweEZGKTsKLSAgICAgICAgICAgIHRleHQgKz0gIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NfUEFJUjoKLSAgICAgICAgICAgIHRleHQgPSBtX3Zh
bHVlLnBhaXItPmZpcnN0KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIHRleHQgKz0gIiAiOwot
ICAgICAgICAgICAgdGV4dCArPSBtX3ZhbHVlLnBhaXItPnNlY29uZCgpLT5jc3NUZXh0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAgICAgICAgY2FzZSBDU1NfREFTSEJP
QVJEX1JFR0lPTjoKLSAgICAgICAgICAgIGZvciAoRGFzaGJvYXJkUmVnaW9uKiByZWdpb24gPSBn
ZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOyByZWdpb247IHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0
LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICJkYXNoYm9hcmQtcmVnaW9uKCI7Ci0g
ICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fbGFiZWw7Ci0gICAgICAgICAgICAgICAg
aWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIGNp
cmNsZSAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSkK
LSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIHJlY3RhbmdsZSAiOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgdGV4
dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAgICAgICAgICAgdGV4
dCArPSByZWdpb24tPnJpZ2h0KCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgICAgICB0
ZXh0ICs9IHJlZ2lvbi0+Ym90dG9tKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgICAg
ICB0ZXh0ICs9IHJlZ2lvbi0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICAgICAgdGV4
dCArPSAiKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAg
IH0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVjdEltcGw6On5SZWN0
SW1wbCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhaXI6On5QYWlyKCkKLXsKLX0KLQotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJpbmcmIHVy
bCwgU3R5bGVCYXNlICpzdHlsZSkKLSAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKHVybCwgQ1NTX1VS
SSksIG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKLXsKLX0KLQotQ1NTSW1hZ2VW
YWx1ZTo6Q1NTSW1hZ2VWYWx1ZSgpCi0gICAgOiBDU1NQcmltaXRpdmVWYWx1ZShDU1NfVkFMX05P
TkUpLCBtX2ltYWdlKDApLCBtX2FjY2Vzc2VkSW1hZ2UodHJ1ZSkKLXsKLX0KLQotQ1NTSW1hZ2VW
YWx1ZTo6fkNTU0ltYWdlVmFsdWUoKQotewotICAgIGlmIChtX2ltYWdlKQotICAgICAgICBtX2lt
YWdlLT5kZXJlZih0aGlzKTsKLX0KLQotQ2FjaGVkSW1hZ2UqIENTU0ltYWdlVmFsdWU6OmltYWdl
KERvY0xvYWRlciogbG9hZGVyKQotewotICAgIGlmICghbV9hY2Nlc3NlZEltYWdlKSB7Ci0gICAg
ICAgIG1fYWNjZXNzZWRJbWFnZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGxvYWRlcikKLSAgICAg
ICAgICAgIG1faW1hZ2UgPSBsb2FkZXItPnJlcXVlc3RJbWFnZShnZXRTdHJpbmdWYWx1ZSgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pbWFnZSA9IENhY2hlOjpyZXF1ZXN0SW1hZ2Uo
MCwgZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9pbWFnZSkKLSAg
ICAgICAgICAgIG1faW1hZ2UtPnJlZih0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1f
aW1hZ2U7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NCb3JkZXJJbWFnZVZhbHVlOjpD
U1NCb3JkZXJJbWFnZVZhbHVlKFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4gaW1hZ2UsCi0gICAg
UGFzc1JlZlB0cjxSZWN0SW1wbD4gaW1hZ2VSZWN0LCBpbnQgaG9yaXpvbnRhbFJ1bGUsIGludCB2
ZXJ0aWNhbFJ1bGUpCi0gICAgOiBtX2ltYWdlKGltYWdlKSwgbV9pbWFnZVNsaWNlUmVjdChpbWFn
ZVJlY3QpCi0gICAgLCBtX2hvcml6b250YWxTaXplUnVsZShob3Jpem9udGFsUnVsZSksIG1fdmVy
dGljYWxTaXplUnVsZSh2ZXJ0aWNhbFJ1bGUpCi17Ci19Ci0KLVN0cmluZyBDU1NCb3JkZXJJbWFn
ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAvLyBJbWFnZSBmaXJzdC4KLSAgICBTdHJp
bmcgdGV4dChtX2ltYWdlLT5jc3NUZXh0KCkpOwotICAgIHRleHQgKz0gIiAiOwotICAgIAotICAg
IC8vIE5vdyB0aGUgcmVjdCwgYnV0IGl0IGlzbid0IHJlYWxseSBhIHJlY3QsIHNvIHdlIGR1bXAg
bWFudWFsbHkKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3QtPnRvcCgpLT5jc3NUZXh0KCk7
Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2ltYWdlU2xpY2VSZWN0LT5yaWdodCgp
LT5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBtX2ltYWdlU2xpY2VS
ZWN0LT5ib3R0b20oKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0g
bV9pbWFnZVNsaWNlUmVjdC0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0gICAgCi0gICAgLy8gTm93IHRo
ZSBrZXl3b3Jkcy4KLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IENTU1ByaW1pdGl2ZVZh
bHVlKG1faG9yaXpvbnRhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0gICAgdGV4dCArPSAiICI7Ci0g
ICAgdGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX3ZlcnRpY2FsU2l6ZVJ1bGUpLmNzc1RleHQo
KTsKLQotICAgIHJldHVybiB0ZXh0OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogRm9udEZh
bWlseVZhbHVlOjpGb250RmFtaWx5VmFsdWUoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyaW5n
KQogICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUoU3RyaW5nKCksIENTU19TVFJJTkcpCiB7CkBAIC0x
MjY3LDg5ICs2MCw0IEBACiAgICAgcmV0dXJuIHF1b3RlU3RyaW5nSWZOZWVkZWQocGFyc2VkRm9u
dE5hbWUpOwogfQogCi1TdHJpbmcgRm9udFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICAv
LyBmb250IHZhcmlhbnQgd2VpZ2h0IHNpemUgLyBsaW5lLWhlaWdodCBmYW1pbHkgCi0KLSAgICBT
dHJpbmcgcmVzdWx0KCIiKTsKLQotICAgIGlmIChzdHlsZSkgewotICAgICAgICByZXN1bHQgKz0g
c3R5bGUtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHZhcmlhbnQpIHsKLSAgICAgICAgaWYg
KCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAg
cmVzdWx0ICs9IHZhcmlhbnQtPmNzc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKHdlaWdodCkgewot
ICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAi
OwotICAgICAgICByZXN1bHQgKz0gd2VpZ2h0LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmIChz
aXplKSB7Ci0gICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3Vs
dCArPSAiICI7Ci0gICAgICAgIHJlc3VsdCArPSBzaXplLT5jc3NUZXh0KCk7Ci0gICAgfQotICAg
IGlmIChsaW5lSGVpZ2h0KSB7Ci0gICAgICAgIGlmICghc2l6ZSkKLSAgICAgICAgICAgIHJlc3Vs
dCArPSAiICI7Ci0gICAgICAgIHJlc3VsdCArPSAiLyI7Ci0gICAgICAgIHJlc3VsdCArPSBsaW5l
SGVpZ2h0LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmIChmYW1pbHkpIHsKLSAgICAgICAgaWYg
KCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAg
cmVzdWx0ICs9IGZhbWlseS0+Y3NzVGV4dCgpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0gICAgCi0KLS8vIFVzZWQgZm9yIHRleHQtc2hhZG93IGFuZCBib3gtc2hhZG93Ci1TaGFk
b3dWYWx1ZTo6U2hhZG93VmFsdWUoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gX3gsCi0g
ICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gX3ksCi0gICAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gX2JsdXIsCi0gICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
X2NvbG9yKQotICAgIDogeChfeCksIHkoX3kpLCBibHVyKF9ibHVyKSwgY29sb3IoX2NvbG9yKQot
ewotfQotCi1TdHJpbmcgU2hhZG93VmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmlu
ZyB0ZXh0KCIiKTsKLQotICAgIGlmIChjb2xvcikKLSAgICAgICAgdGV4dCArPSBjb2xvci0+Y3Nz
VGV4dCgpOwotICAgIGlmICh4KSB7Ci0gICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICB0ZXh0ICs9ICIgIjsKLSAgICAgICAgdGV4dCArPSB4LT5jc3NUZXh0KCk7Ci0gICAg
fQotICAgIGlmICh5KSB7Ci0gICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICB0ZXh0ICs9ICIgIjsKLSAgICAgICAgdGV4dCArPSB5LT5jc3NUZXh0KCk7Ci0gICAgfQotICAg
IGlmIChibHVyKSB7Ci0gICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICB0
ZXh0ICs9ICIgIjsKLSAgICAgICAgdGV4dCArPSBibHVyLT5jc3NUZXh0KCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRleHQ7Ci19Ci0KLVN0cmluZyBDU1NQcm9wZXJ0eTo6Y3NzVGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShpZCgpKSArICI6ICIgKyBtX3ZhbHVlLT5j
c3NUZXh0KCkKLSAgICAgICAgKyAoaXNJbXBvcnRhbnQoKSA/ICIgIWltcG9ydGFudCIgOiAiIikg
KyAiOyAiOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTUHJvcGVydHkgJmEsIGNvbnN0
IENTU1Byb3BlcnR5ICZiKQotewotICAgIHJldHVybiBhLm1faWQgPT0gYi5tX2lkICYmIGEubV9p
bXBvcnRhbnQgPT0gYi5tX2ltcG9ydGFudCAmJiBhLm1fdmFsdWUgPT0gYi5tX3ZhbHVlOwotfQot
CiB9CkluZGV4OiBjc3MvQ1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1N0eWxl
UnVsZS5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9DU1NTdHlsZVJ1bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEsMTczICsyMSwxNCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CiAgKi8KIAotI2lmbmRlZiBDU1NfY3NzX3J1bGVpbXBsX2hfCi0jZGVmaW5lIENTU19jc3NfcnVs
ZWltcGxfaF8KKyNpZm5kZWYgQ1NTU3R5bGVSdWxlX0gKKyNkZWZpbmUgQ1NTU3R5bGVSdWxlX0gK
IAotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENT
U1N0eWxlU2hlZXQ7Ci1jbGFzcyBNZWRpYUxpc3Q7Ci0KLWNsYXNzIENTU1J1bGUgOiBwdWJsaWMg
U3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51bSBDU1NSdWxlVHlwZSB7IAotICAgICAgICBV
TktOT1dOX1JVTEUsIAotICAgICAgICBTVFlMRV9SVUxFLCAKLSAgICAgICAgQ0hBUlNFVF9SVUxF
LCAKLSAgICAgICAgSU1QT1JUX1JVTEUsIAotICAgICAgICBNRURJQV9SVUxFLCAKLSAgICAgICAg
Rk9OVF9GQUNFX1JVTEUsIAotICAgICAgICBQQUdFX1JVTEUgCi0gICAgfTsKLSAgICAKLSAgICBD
U1NSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAgICA6IFN0eWxlQmFzZShwYXJlbnQpLCBt
X3R5cGUoVU5LTk9XTl9SVUxFKSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0g
ICAgQ1NTUnVsZSAqcGFyZW50UnVsZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3Nz
VGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q3NzVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsK
LQotcHJvdGVjdGVkOgotICAgIENTU1J1bGVUeXBlIG1fdHlwZTsKLX07Ci0KLQotY2xhc3MgQ1NT
Q2hhcnNldFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU0NoYXJzZXRS
dWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAgICA6IENTU1J1bGUocGFyZW50KSB7IG1fdHlw
ZSA9IENIQVJTRVRfUlVMRTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7
IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0g
ICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQotICAgIHZv
aWQgc2V0RW5jb2RpbmcoU3RyaW5nIF9lbmNvZGluZykgeyBtX2VuY29kaW5nID0gX2VuY29kaW5n
OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcgbV9lbmNvZGluZzsKLX07Ci0KLQotY2xhc3Mg
Q1NTRm9udEZhY2VSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NGb250
RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpOwotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlUnVs
ZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKnN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxl
KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotfTsKLQotCi1jbGFzcyBDU1NJbXBvcnRSdWxlIDog
cHVibGljIENhY2hlZE9iamVjdENsaWVudCwgcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAg
ICBDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIE1l
ZGlhTGlzdCopOwotICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKLQotICAgIFN0cmluZyBo
cmVmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVmOyB9Ci0gICAgTWVkaWFMaXN0KiBtZWRpYSgp
IGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7IH0KLSAgICBDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgCi0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsK
LQotICAgIC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0
eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2hlZXQpOwotCi0gICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b1BhcmVudCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3Ry
aW5nIG1fc3RySHJlZjsKLSAgICBSZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1lZGlhOwotICAgIFJl
ZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7Ci0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVl
dCogbV9jYWNoZWRTaGVldDsKLSAgICBib29sIG1fbG9hZGluZzsKLX07Ci0KLWNsYXNzIE1lZGlh
TGlzdDsKLQotY2xhc3MgQ1NTUnVsZUxpc3QgOiBwdWJsaWMgU2hhcmVkPENTU1J1bGVMaXN0Pgot
ewotcHVibGljOgotICAgIENTU1J1bGVMaXN0KCkgeyB9Ci0gICAgQ1NTUnVsZUxpc3QoU3R5bGVM
aXN0ICopOwotICAgIH5DU1NSdWxlTGlzdCgpOwotCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5jb3VudCgpOyB9Ci0gICAgQ1NTUnVsZSAqaXRlbSAo
IHVuc2lnbmVkIGluZGV4ICkgeyByZXR1cm4gbV9sc3RDU1NSdWxlcy5hdCggaW5kZXggKTsgfQot
Ci0gICAgLyogbm90IHBhcnQgb2YgdGhlIERPTSAqLwotICAgIHVuc2lnbmVkIGluc2VydFJ1bGUg
KCBDU1NSdWxlICpydWxlLCB1bnNpZ25lZCBpbmRleCApOwotICAgIHZvaWQgZGVsZXRlUnVsZSAo
IHVuc2lnbmVkIGluZGV4ICk7Ci0gICAgdm9pZCBhcHBlbmQoIENTU1J1bGUgKnJ1bGUgKTsKLQot
cHJvdGVjdGVkOgotICAgIERlcHJlY2F0ZWRQdHJMaXN0PENTU1J1bGU+IG1fbHN0Q1NTUnVsZXM7
Ci19OwotCi1jbGFzcyBDU1NNZWRpYVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgot
ICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQgKTsKLSAgICBDU1NNZWRpYVJ1bGUo
IFN0eWxlQmFzZSAqcGFyZW50LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcgJm1lZGlhICk7Ci0gICAg
Q1NTTWVkaWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgTWVkaWFMaXN0ICptZWRpYUxpc3QsIENT
U1J1bGVMaXN0ICpydWxlTGlzdCApOwotICAgIHZpcnR1YWwgfkNTU01lZGlhUnVsZSgpOwotCi0g
ICAgTWVkaWFMaXN0ICptZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7IH0K
LSAgICBDU1NSdWxlTGlzdCAqY3NzUnVsZXMoKSB7IHJldHVybiBtX2xzdENTU1J1bGVzLmdldCgp
OyB9Ci0KLSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlICggY29uc3QgV2ViQ29yZTo6U3RyaW5nICZy
dWxlLCB1bnNpZ25lZCBpbmRleCApOwotICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVkIGlu
ZGV4ICkgeyBtX2xzdENTU1J1bGVzLT5kZWxldGVSdWxlKCBpbmRleCApOyB9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNNZWRpYVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLyogTm90IHBhcnQgb2YgdGhlIERPTSAqLwotICAg
IHVuc2lnbmVkIGFwcGVuZCggQ1NTUnVsZSAqcnVsZSApOwotcHJvdGVjdGVkOgotICAgIFJlZlB0
cjxNZWRpYUxpc3Q+IG1fbHN0TWVkaWE7Ci0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xzdENT
U1J1bGVzOwotfTsKLQotCi1jbGFzcyBDU1NQYWdlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1w
dWJsaWM6Ci0gICAgQ1NTUGFnZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpOwotICAgIHZpcnR1YWwg
fkNTU1BhZ2VSdWxlKCk7Ci0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
YWdlUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIFdlYkNvcmU6OlN0cmluZyBzZWxlY3Rv
clRleHQoKSBjb25zdDsKLSAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChXZWJDb3JlOjpTdHJpbmcg
c3RyKTsKLQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbV9zdHlsZTsKLX07Ci0KLWNsYXNzIENTU0ltcG9ydGFudFJ1bGU7CiAKIGNsYXNzIENTU1N0
eWxlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCiB7CkBAIC0yMDAsMTAgKzQxLDEwIEBACiAgICAgdmly
dHVhbCBib29sIGlzU3R5bGVSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKIAotICAgIFdlYkNvcmU6OlN0cmluZyBzZWxlY3RvclRleHQo
KSBjb25zdDsKLSAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsK
KyAgICBTdHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWxlY3RvclRl
eHQoU3RyaW5nKTsKIAotICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyggY29uc3QgU3RyaW5n
ICZzdHJpbmcsIGJvb2wgPSBmYWxzZSApOworICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhj
b25zdCBTdHJpbmcmLCBib29sID0gZmFsc2UpOwogCiAgICAgdm9pZCBzZXRTZWxlY3RvcihDU1NT
ZWxlY3Rvciogc2VsZWN0b3IpIHsgbV9zZWxlY3RvciA9IHNlbGVjdG9yOyB9CiAgICAgdm9pZCBz
ZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7CkBA
IC0yMTYsMTQgKzU3LDYgQEAKICAgICBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKIH07CiAKLWNs
YXNzIENTU1Vua25vd25SdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NV
bmtub3duUnVsZShTdHlsZUJhc2UgKnBhcmVudCkgOiBDU1NSdWxlKHBhcmVudCkge30KLQotICAg
IHZpcnR1YWwgYm9vbCBpc1Vua25vd25SdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotfTsKLQogfSAv
LyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9D
U1NJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNTUgKzIwLDE3IEBACiAgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwotCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiY3NzX3J1bGVpbXBsLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0
UnVsZS5oIgogCi0jaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNo
ZWV0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5o
IgorI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKLSNpbmNsdWRlICJj
c3NwYXJzZXIuaCIKLSNpbmNsdWRlIDxLVVJMLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q1NTU3R5bGVTaGVldCogQ1NTUnVsZTo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpID8gc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KLUNTU1J1bGUqIENTU1J1
bGU6OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiAocGFyZW50KCkgJiYgcGFyZW50
KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENTU1J1bGUqPihwYXJlbnQoKSkgOiAwOwotfQot
Ci1TdHJpbmcgQ1NTUnVsZTo6Y3NzVGV4dCgpIGNvbnN0Ci17Ci0gICAgLy8gIyMjCi0gICAgcmV0
dXJuIFN0cmluZygpOwotfQotCi12b2lkIENTU1J1bGU6OnNldENzc1RleHQoU3RyaW5nIC8qc3Ry
Ki8pCi17Ci0gICAgLy8gIyMjCi19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NGb250
RmFjZVJ1bGU6OkNTU0ZvbnRGYWNlUnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICA6IENTU1J1
bGUocGFyZW50KQotewotICAgIG1fdHlwZSA9IEZPTlRfRkFDRV9SVUxFOwotfQotCi1DU1NGb250
RmFjZVJ1bGU6On5DU1NGb250RmFjZVJ1bGUoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCiBDU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25z
dCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlzdCogbWVkaWEpCiAgICAgOiBDU1NSdWxlKHBhcmVudCkK
ICAgICAsIG1fc3RySHJlZihocmVmKQpAQCAtMTU5LDIwOCArMTIxLDQgQEAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ1NTTWVkaWFSdWxlOjpDU1NNZWRp
YVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50LCBNZWRpYUxpc3QgKm1lZGlhTGlzdCwgQ1NTUnVsZUxp
c3QgKnJ1bGVMaXN0ICkKLSAgICA6ICAgQ1NTUnVsZSggcGFyZW50ICkKLXsKLSAgICBtX3R5cGUg
PSBNRURJQV9SVUxFOwotICAgIG1fbHN0TWVkaWEgPSBtZWRpYUxpc3Q7Ci0gICAgbV9sc3RDU1NS
dWxlcyA9IHJ1bGVMaXN0OwotfQotCi1DU1NNZWRpYVJ1bGU6OkNTU01lZGlhUnVsZShTdHlsZUJh
c2UgKnBhcmVudCkKLSAgICA6ICAgQ1NTUnVsZSggcGFyZW50ICkKLXsKLSAgICBtX3R5cGUgPSBN
RURJQV9SVUxFOwotICAgIG1fbHN0TWVkaWEgPSAwOwotICAgIG1fbHN0Q1NTUnVsZXMgPSBuZXcg
Q1NTUnVsZUxpc3QoKTsKLX0KLQotQ1NTTWVkaWFSdWxlOjpDU1NNZWRpYVJ1bGUoIFN0eWxlQmFz
ZSAqcGFyZW50LCBjb25zdCBTdHJpbmcgJm1lZGlhICkKLTogICBDU1NSdWxlKCBwYXJlbnQgKQot
ewotICAgIG1fdHlwZSA9IE1FRElBX1JVTEU7Ci0gICAgbV9sc3RNZWRpYSA9IG5ldyBNZWRpYUxp
c3QoIHRoaXMsIG1lZGlhICk7Ci0gICAgbV9sc3RDU1NSdWxlcyA9IG5ldyBDU1NSdWxlTGlzdCgp
OwotfQotCi1DU1NNZWRpYVJ1bGU6On5DU1NNZWRpYVJ1bGUoKQotewotICAgIGlmKG1fbHN0TWVk
aWEpCi0gICAgICAgIG1fbHN0TWVkaWEtPnNldFBhcmVudCgwKTsKLQotICAgIGludCBsZW5ndGgg
PSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKQotICAgICAgICBtX2xzdENTU1J1bGVzLT5pdGVtKGkpLT5zZXRQYXJlbnQoMCk7Ci19
Ci0KLXVuc2lnbmVkIENTU01lZGlhUnVsZTo6YXBwZW5kKCBDU1NSdWxlICpydWxlICkKLXsKLSAg
ICBpZiAoIXJ1bGUpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcnVsZS0+c2V0
UGFyZW50KHRoaXMpOwotICAgIHJldHVybiBtX2xzdENTU1J1bGVzLT5pbnNlcnRSdWxlKCBydWxl
LCBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKSApOwotfQotCi11bnNpZ25lZCBDU1NNZWRpYVJ1bGU6
Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBD
U1NQYXJzZXIgcCh1c2VTdHJpY3RQYXJzaW5nKCkpOwotICAgIFJlZlB0cjxDU1NSdWxlPiBuZXdS
dWxlID0gcC5wYXJzZVJ1bGUocGFyZW50U3R5bGVTaGVldCgpLCBydWxlKTsKLSAgICBpZiAoIW5l
d1J1bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIG5ld1J1bGUtPnNldFBhcmVudCh0aGlzKTsK
LSAgICByZXR1cm4gbV9sc3RDU1NSdWxlcy0+aW5zZXJ0UnVsZShuZXdSdWxlLmdldCgpLCBpbmRl
eCk7Ci19Ci0KLVN0cmluZyBDU1NNZWRpYVJ1bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0
cmluZyByZXN1bHQgPSAiQG1lZGlhICI7Ci0gICAgaWYgKG1fbHN0TWVkaWEpIHsKLSAgICAgICAg
cmVzdWx0ICs9IG1fbHN0TWVkaWEtPm1lZGlhVGV4dCgpOwotICAgICAgICByZXN1bHQgKz0gIiAi
OwotICAgIH0KLSAgICByZXN1bHQgKz0gInsgXG4iOwotICAgIAotICAgIGlmIChtX2xzdENTU1J1
bGVzKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbiA9IG1fbHN0Q1NTUnVsZXMtPmxlbmd0aCgpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAg
IHJlc3VsdCArPSAiICAiOwotICAgICAgICAgICAgcmVzdWx0ICs9IG1fbHN0Q1NTUnVsZXMtPml0
ZW0oaSktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIHJlc3VsdCArPSAiXG4iOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHJlc3VsdCArPSAifSI7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU1J1bGVMaXN0OjpDU1NSdWxlTGlzdChTdHls
ZUxpc3QgKmxzdCkKLXsKLSAgICBpZiAobHN0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGxlbiA9IGxz
dC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkg
ewotICAgICAgICAgICAgU3R5bGVCYXNlICpzdHlsZSA9IGxzdC0+aXRlbShpKTsKLSAgICAgICAg
ICAgIGlmIChzdHlsZS0+aXNSdWxlKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kKHN0YXRpY19j
YXN0PENTU1J1bGUqPihzdHlsZSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1DU1NSdWxlTGlz
dDo6fkNTU1J1bGVMaXN0KCkKLXsKLSAgICBDU1NSdWxlKiBydWxlOwotICAgIHdoaWxlICggIW1f
bHN0Q1NTUnVsZXMuaXNFbXB0eSgpICYmICggcnVsZSA9IG1fbHN0Q1NTUnVsZXMudGFrZSggMCAp
ICkgKQotICAgICAgICBydWxlLT5kZXJlZigpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotQ1NTUGFnZVJ1bGU6OkNTU1BhZ2VSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgIDogQ1NT
UnVsZShwYXJlbnQpCi17Ci0gICAgbV90eXBlID0gUEFHRV9SVUxFOwotfQotCi1DU1NQYWdlUnVs
ZTo6fkNTU1BhZ2VSdWxlKCkKLXsKLX0KLQotU3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRl
eHQoKSBjb25zdAotewotICAgIC8vICMjIwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9p
ZCBDU1NQYWdlUnVsZTo6c2V0U2VsZWN0b3JUZXh0KFN0cmluZyAvKnN0ciovKQotewotICAgIC8v
ICMjIwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NTdHlsZVJ1bGU6OkNTU1N0eWxl
UnVsZShTdHlsZUJhc2UgKnBhcmVudCkKLSAgICA6IENTU1J1bGUocGFyZW50KQotewotICAgIG1f
dHlwZSA9IFNUWUxFX1JVTEU7Ci0gICAgbV9zZWxlY3RvciA9IDA7Ci19Ci0KLUNTU1N0eWxlUnVs
ZTo6fkNTU1N0eWxlUnVsZSgpCi17Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUt
PnNldFBhcmVudCgwKTsKLSAgICBkZWxldGUgbV9zZWxlY3RvcjsKLX0KLQotU3RyaW5nIENTU1N0
eWxlUnVsZTo6c2VsZWN0b3JUZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9zZWxlY3Rvcikgewot
ICAgICAgICBTdHJpbmcgc3RyOwotICAgICAgICBmb3IgKENTU1NlbGVjdG9yICpzID0gbV9zZWxl
Y3RvcjsgczsgcyA9IHMtPm5leHQoKSkgewotICAgICAgICAgICAgaWYgKHMgIT0gbV9zZWxlY3Rv
cikKLSAgICAgICAgICAgICAgICBzdHIgKz0gIiwgIjsKLSAgICAgICAgICAgIHN0ciArPSBzLT5z
ZWxlY3RvclRleHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RyOwotICAgIH0KLSAg
ICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgQ1NTU3R5bGVSdWxlOjpzZXRTZWxlY3RvclRl
eHQoU3RyaW5nIC8qc3RyKi8pCi17Ci0gICAgLy8gIyMjCi19Ci0KLVN0cmluZyBDU1NTdHlsZVJ1
bGU6OmNzc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSBzZWxlY3RvclRleHQo
KTsKLSAgICAKLSAgICByZXN1bHQgKz0gIiB7ICI7Ci0gICAgcmVzdWx0ICs9IG1fc3R5bGUtPmNz
c1RleHQoKTsKLSAgICByZXN1bHQgKz0gIn0iOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWJvb2wgQ1NTU3R5bGVSdWxlOjpwYXJzZVN0cmluZyggY29uc3QgU3RyaW5nICYvKnN0cmlu
ZyovLCBib29sICkKLXsKLSAgICAvLyAjIyMKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
Q1NTU3R5bGVSdWxlOjpzZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBzdHlsZSkKLXsKLSAgICBtX3N0eWxlID0gc3R5bGU7Ci19Ci0KLXZvaWQgQ1NT
UnVsZUxpc3Q6OmRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBpbmRleCApCi17Ci0gICAgQ1NTUnVsZSAq
cnVsZSA9IG1fbHN0Q1NTUnVsZXMudGFrZSggaW5kZXggKTsKLSAgICBpZiggcnVsZSApCi0gICAg
ICAgIHJ1bGUtPmRlcmVmKCk7Ci0gICAgZWxzZQotICAgICAgICA7IC8vICMjIyBUaHJvdyBJTkRF
WF9TSVpFX0VSUiBleGNlcHRpb24gaGVyZSAoVE9ETykKLX0KLQotdm9pZCBDU1NSdWxlTGlzdDo6
YXBwZW5kKCBDU1NSdWxlICpydWxlICkKLXsKLSAgICBpbnNlcnRSdWxlKCBydWxlLCBtX2xzdENT
U1J1bGVzLmNvdW50KCkgKSA7Ci19Ci0KLXVuc2lnbmVkIENTU1J1bGVMaXN0OjppbnNlcnRSdWxl
KCBDU1NSdWxlICpydWxlLCB1bnNpZ25lZCBpbmRleCApCi17Ci0gICAgaWYoIHJ1bGUgJiYgbV9s
c3RDU1NSdWxlcy5pbnNlcnQoIGluZGV4LCBydWxlICkgKQotICAgIHsKLSAgICAgICAgcnVsZS0+
cmVmKCk7Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0KLSAgICAvLyAjIyMgU2hvdWxk
IHRocm93IElOREVYX1NJWkVfRVJSIGV4Y2VwdGlvbiBpbnN0ZWFkISAoVE9ETykKLSAgICByZXR1
cm4gMDsKLX0KLQogfQpJbmRleDogY3NzL2Nzc192YWx1ZWltcGwuaCAoZGVsZXRlZCkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpJbmRleDogY3NzL0NTU1J1bGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1J1bGVM
aXN0LmgJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU1J1bGVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDExNSArMjEsMjEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgog
ICovCiAKLSNpZm5kZWYgQ1NTX2Nzc19ydWxlaW1wbF9oXwotI2RlZmluZSBDU1NfY3NzX3J1bGVp
bXBsX2hfCisjaWZuZGVmIENTU1J1bGVMaXN0X0gKKyNkZWZpbmUgQ1NTUnVsZUxpc3RfSAogCi0j
aW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUg
IkRlcHJlY2F0ZWRQdHJMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2Fj
aGVkQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xh
c3MgQ1NTU3R5bGVTaGVldDsKLWNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBNZWRpYUxpc3Q7
Ci0KLWNsYXNzIENTU1J1bGUgOiBwdWJsaWMgU3R5bGVCYXNlCi17Ci1wdWJsaWM6Ci0gICAgZW51
bSBDU1NSdWxlVHlwZSB7IAotICAgICAgICBVTktOT1dOX1JVTEUsIAotICAgICAgICBTVFlMRV9S
VUxFLCAKLSAgICAgICAgQ0hBUlNFVF9SVUxFLCAKLSAgICAgICAgSU1QT1JUX1JVTEUsIAotICAg
ICAgICBNRURJQV9SVUxFLCAKLSAgICAgICAgRk9OVF9GQUNFX1JVTEUsIAotICAgICAgICBQQUdF
X1JVTEUgCi0gICAgfTsKLSAgICAKLSAgICBDU1NSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAg
ICAgICA6IFN0eWxlQmFzZShwYXJlbnQpLCBtX3R5cGUoVU5LTk9XTl9SVUxFKSB7fQotCi0gICAg
dmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB1bnNpZ25lZCBzaG9y
dCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICpw
YXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0gICAgQ1NTUnVsZSAqcGFyZW50UnVsZSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q3Nz
VGV4dChXZWJDb3JlOjpTdHJpbmcgc3RyKTsKLQotcHJvdGVjdGVkOgotICAgIENTU1J1bGVUeXBl
IG1fdHlwZTsKLX07Ci0KLQotY2xhc3MgQ1NTQ2hhcnNldFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQot
ewotcHVibGljOgotICAgIENTU0NoYXJzZXRSdWxlKFN0eWxlQmFzZSAqcGFyZW50KQotICAgICAg
ICA6IENTU1J1bGUocGFyZW50KSB7IG1fdHlwZSA9IENIQVJTRVRfUlVMRTsgfQotCi0gICAgdmly
dHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmNvZGluZzsgfQotICAgIHZvaWQgc2V0RW5jb2RpbmcoU3RyaW5nIF9lbmNvZGlu
ZykgeyBtX2VuY29kaW5nID0gX2VuY29kaW5nOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBTdHJpbmcg
bV9lbmNvZGluZzsKLX07Ci0KLQotY2xhc3MgQ1NTRm9udEZhY2VSdWxlIDogcHVibGljIENTU1J1
bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NGb250RmFjZVJ1bGUoU3R5bGVCYXNlICpwYXJlbnQpOwot
ICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24gKnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAg
dmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotfTsK
LQotCi1jbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVibGljIENhY2hlZE9iamVjdENsaWVudCwgcHVi
bGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSogcGFy
ZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlzdCopOwotICAgIHZpcnR1YWwgfkNTU0lt
cG9ydFJ1bGUoKTsKLQotICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVm
OyB9Ci0gICAgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0
KCk7IH0KLSAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZVNoZWV0LmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgCi0g
ICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLQotICAgIC8vIGZyb20gQ2FjaGVkT2JqZWN0Q2xp
ZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgc2hlZXQpOwotCi0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1BhcmVu
dCgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3RyaW5nIG1fc3RySHJlZjsKLSAgICBSZWZQdHI8TWVk
aWFMaXN0PiBtX2xzdE1lZGlhOwotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3N0eWxlU2hl
ZXQ7Ci0gICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogbV9jYWNoZWRTaGVldDsKLSAgICBib29sIG1f
bG9hZGluZzsKLX07Ci0KLWNsYXNzIE1lZGlhTGlzdDsKK2NsYXNzIENTU1J1bGU7CitjbGFzcyBT
dHlsZUxpc3Q7CiAKIGNsYXNzIENTU1J1bGVMaXN0IDogcHVibGljIFNoYXJlZDxDU1NSdWxlTGlz
dD4KIHsKIHB1YmxpYzoKLSAgICBDU1NSdWxlTGlzdCgpIHsgfQorICAgIENTU1J1bGVMaXN0KCk7
CiAgICAgQ1NTUnVsZUxpc3QoU3R5bGVMaXN0ICopOwogICAgIH5DU1NSdWxlTGlzdCgpOwogCkBA
IC0xNDUsODUgKzUxLDYgQEAKICAgICBEZXByZWNhdGVkUHRyTGlzdDxDU1NSdWxlPiBtX2xzdENT
U1J1bGVzOwogfTsKIAotY2xhc3MgQ1NTTWVkaWFSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1
YmxpYzoKLSAgICBDU1NNZWRpYVJ1bGUoIFN0eWxlQmFzZSAqcGFyZW50ICk7Ci0gICAgQ1NTTWVk
aWFSdWxlKCBTdHlsZUJhc2UgKnBhcmVudCwgY29uc3QgV2ViQ29yZTo6U3RyaW5nICZtZWRpYSAp
OwotICAgIENTU01lZGlhUnVsZSggU3R5bGVCYXNlICpwYXJlbnQsIE1lZGlhTGlzdCAqbWVkaWFM
aXN0LCBDU1NSdWxlTGlzdCAqcnVsZUxpc3QgKTsKLSAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGUo
KTsKLQotICAgIE1lZGlhTGlzdCAqbWVkaWEoKSBjb25zdCB7IHJldHVybiBtX2xzdE1lZGlhLmdl
dCgpOyB9Ci0gICAgQ1NTUnVsZUxpc3QgKmNzc1J1bGVzKCkgeyByZXR1cm4gbV9sc3RDU1NSdWxl
cy5nZXQoKTsgfQotCi0gICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IFdlYkNvcmU6OlN0
cmluZyAmcnVsZSwgdW5zaWduZWQgaW5kZXggKTsKLSAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNp
Z25lZCBpbmRleCApIHsgbV9sc3RDU1NSdWxlcy0+ZGVsZXRlUnVsZSggaW5kZXggKTsgfQotCi0g
ICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAgIC8qIE5vdCBwYXJ0IG9mIHRoZSBET00g
Ki8KLSAgICB1bnNpZ25lZCBhcHBlbmQoIENTU1J1bGUgKnJ1bGUgKTsKLXByb3RlY3RlZDoKLSAg
ICBSZWZQdHI8TWVkaWFMaXN0PiBtX2xzdE1lZGlhOwotICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4g
bV9sc3RDU1NSdWxlczsKLX07Ci0KLQotY2xhc3MgQ1NTUGFnZVJ1bGUgOiBwdWJsaWMgQ1NTUnVs
ZQotewotcHVibGljOgotICAgIENTU1BhZ2VSdWxlKFN0eWxlQmFzZSAqcGFyZW50KTsKLSAgICB2
aXJ0dWFsIH5DU1NQYWdlUnVsZSgpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24g
KnN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBi
b29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBXZWJDb3JlOjpTdHJpbmcg
c2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RvclRleHQoV2ViQ29yZTo6
U3RyaW5nIHN0cik7Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IG1fc3R5bGU7Ci19OwotCi1jbGFzcyBDU1NJbXBvcnRhbnRSdWxlOwotCi1jbGFz
cyBDU1NTdHlsZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1N0eWxl
UnVsZShTdHlsZUJhc2UqIHBhcmVudCk7Ci0gICAgdmlydHVhbCB+Q1NTU3R5bGVSdWxlKCk7Ci0K
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0eWxlLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVJ1bGUoKSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgV2Vi
Q29yZTo6U3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VsZWN0b3JU
ZXh0KFdlYkNvcmU6OlN0cmluZyBzdHIpOwotCi0gICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5n
KCBjb25zdCBTdHJpbmcgJnN0cmluZywgYm9vbCA9IGZhbHNlICk7Ci0KLSAgICB2b2lkIHNldFNl
bGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvcikgeyBtX3NlbGVjdG9yID0gc2VsZWN0b3I7IH0K
LSAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+KTsKLQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIHsgcmV0dXJuIG1fc2VsZWN0
b3I7IH0KLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24oKSB7IHJl
dHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gCi1wcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwotICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9y
OwotfTsKLQotY2xhc3MgQ1NTVW5rbm93blJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGlj
OgotICAgIENTU1Vua25vd25SdWxlKFN0eWxlQmFzZSAqcGFyZW50KSA6IENTU1J1bGUocGFyZW50
KSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzVW5rbm93blJ1bGUoKSB7IHJldHVybiB0cnVlOyB9
Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGNzcy9SZWN0SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNzcy9SZWN0SW1wbC5oCShyZXZpc2lvbiAxNDQwMCkKKysrIGNzcy9SZWN0
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwyOTUgKzIwLDE4IEBACiAgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaWZuZGVmIENTU19jc3NfdmFsdWVpbXBsX2hfCi0j
ZGVmaW5lIENTU19jc3NfdmFsdWVpbXBsX2hfCisjaWZuZGVmIFJlY3RJbXBsX0gKKyNkZWZpbmUg
UmVjdEltcGxfSAogCi0jaW5jbHVkZSAiQ2FjaGVkT2JqZWN0Q2xpZW50LmgiCi0jaW5jbHVkZSAi
Y3NzX2Jhc2UuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRl
cHJlY2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCisjaW5j
bHVkZSAiU2hhcmVkLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogCi1jbGFzcyBRUGFpbnREZXZpY2VNZXRyaWNzOwotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xh
c3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDb3VudGVyOwotY2xhc3MgRG9jTG9hZGVyOwotY2xhc3Mg
Tm9kZTsKLWNsYXNzIFBhaXI7Ci1jbGFzcyBSZWN0SW1wbDsKLWNsYXNzIFJlbmRlclN0eWxlOwot
Ci0jaWYgX19BUFBMRV9fCi1jbGFzcyBEYXNoYm9hcmRSZWdpb247Ci0jZW5kaWYKLQotdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotZXh0ZXJuIGNvbnN0IGludCBpbmhlcml0YWJsZVByb3Bl
cnRpZXNbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBudW1Jbmhlcml0YWJsZVByb3BlcnRpZXM7
Ci0KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgU3R5bGVCYXNlIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURlY2xhcmF0aW9uKCk7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0KLSAgICBD
U1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9
IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHko
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0
aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgYm9vbCBpc1Byb3BlcnR5SW1w
bGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAgIAotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3BlcnR5
SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQg
cHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50IGdldFByb3BlcnR5U2hvcnRo
YW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVy
dHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBzZXRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyByZW1vdmVQ
cm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNv
cHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAKLSAgICB2b2lkIGRpZmYoQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2ln
bmVkIGxlbmd0aCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQotcHJpdmF0ZToKLSAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci0gICAgQ1NTU3R5bGVEZWNsYXJh
dGlvbiYgb3BlcmF0b3I9KGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJik7Ci19OwotCi1jbGFz
cyBDU1NWYWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UKLXsKLXB1YmxpYzoKLSAgICBlbnVtIFVuaXRU
eXBlcyB7Ci0gICAgICAgIENTU19JTkhFUklUID0gMCwKLSAgICAgICAgQ1NTX1BSSU1JVElWRV9W
QUxVRSA9IDEsCi0gICAgICAgIENTU19WQUxVRV9MSVNUID0gMiwKLSAgICAgICAgQ1NTX0NVU1RP
TSA9IDMsCi0gICAgICAgIENTU19JTklUSUFMID0gNAotICAgIH07Ci0KLSAgICBDU1NWYWx1ZSgp
IDogU3R5bGVCYXNlKDApIHsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NfQ1VTVE9NOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5nJikg
eyB9IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi0KLSAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1
ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJl
dHVybiBmYWxzZTsgfQotfTsKLQotY2xhc3MgQ1NTSW5oZXJpdGVkVmFsdWUgOiBwdWJsaWMgQ1NT
VmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlw
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLX07Ci0KLWNs
YXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIHZp
cnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTVmFsdWVMaXN0IDogcHVibGlj
IENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTVmFsdWVMaXN0KCk7Ci0KLSAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5jb3VudCgpOyB9Ci0g
ICAgQ1NTVmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ZhbHVlcy5hdChp
bmRleCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlTGlzdCgpIHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0K
LSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7Ci0gICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8
Q1NTVmFsdWU+IG1fdmFsdWVzOwotfTsKLQotCi1jbGFzcyBDU1NQcmltaXRpdmVWYWx1ZSA6IHB1
YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5cGVzIHsKLSAgICAgICAg
Q1NTX1VOS05PV04gPSAwLAotICAgICAgICBDU1NfTlVNQkVSID0gMSwKLSAgICAgICAgQ1NTX1BF
UkNFTlRBR0UgPSAyLAotICAgICAgICBDU1NfRU1TID0gMywKLSAgICAgICAgQ1NTX0VYUyA9IDQs
Ci0gICAgICAgIENTU19QWCA9IDUsCi0gICAgICAgIENTU19DTSA9IDYsCi0gICAgICAgIENTU19N
TSA9IDcsCi0gICAgICAgIENTU19JTiA9IDgsCi0gICAgICAgIENTU19QVCA9IDksCi0gICAgICAg
IENTU19QQyA9IDEwLAotICAgICAgICBDU1NfREVHID0gMTEsCi0gICAgICAgIENTU19SQUQgPSAx
MiwKLSAgICAgICAgQ1NTX0dSQUQgPSAxMywKLSAgICAgICAgQ1NTX01TID0gMTQsCi0gICAgICAg
IENTU19TID0gMTUsCi0gICAgICAgIENTU19IWiA9IDE2LAotICAgICAgICBDU1NfS0haID0gMTcs
Ci0gICAgICAgIENTU19ESU1FTlNJT04gPSAxOCwKLSAgICAgICAgQ1NTX1NUUklORyA9IDE5LAot
ICAgICAgICBDU1NfVVJJID0gMjAsCi0gICAgICAgIENTU19JREVOVCA9IDIxLAotICAgICAgICBD
U1NfQVRUUiA9IDIyLAotICAgICAgICBDU1NfQ09VTlRFUiA9IDIzLAotICAgICAgICBDU1NfUkVD
VCA9IDI0LAotICAgICAgICBDU1NfUkdCQ09MT1IgPSAyNSwKLSAgICAgICAgQ1NTX1BBSVIgPSAx
MDAsIC8vIFdlIGVudmlzaW9uIHRoaXMgYmVpbmcgZXhwb3NlZCBhcyBhIG1lYW5zIG9mIGdldHRp
bmcgY29tcHV0ZWQgc3R5bGUgdmFsdWVzIGZvciBwYWlycyAoYm9yZGVyLXNwYWNpbmcvcmFkaXVz
LCBiYWNrZ3JvdW5kLXBvc2l0aW9uLCBldGMuKQotICAgICAgICBDU1NfREFTSEJPQVJEX1JFR0lP
TiA9IDEwMSAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0aGlzIGRvaW5nIGFzIGEgcHJpbWl0
aXZlIHZhbHVlPyBJdCBzaG91bGQgbm90IGJlIQotICAgIH07Ci0KLSAgICAvLyBGSVhNRTogaW50
IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0b28gdHJpY2t5IGZvciBjb2xvciB2cy4gaWRl
bnQKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGludCBp
ZGVudCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlLCBVbml0VHlwZXMpOwotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYsIFVuaXRUeXBlcyk7Ci0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFz
c1JlZlB0cjxSZWN0SW1wbD4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKHVuc2lnbmVkIGNvbG9y
KTsgLy8gUkdCIHZhbHVlCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxQYWlyPik7
Ci0KLSNpZiBfX0FQUExFX18KLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPERhc2hi
b2FyZFJlZ2lvbj4pOyAvLyBGSVhNRTogV2h5IGlzIGRhc2hib2FyZCByZWdpb24gYSBwcmltaXRp
dmUgdmFsdWU/IFRoaXMgbWFrZXMgbm8gc2Vuc2UuCi0jZW5kaWYKLQotICAgIHZpcnR1YWwgfkNT
U1ByaW1pdGl2ZVZhbHVlKCk7Ci0KLSAgICB2b2lkIGNsZWFudXAoKTsKLQotICAgIHVuc2lnbmVk
IHNob3J0IHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIC8q
Ci0gICAgICogY29tcHV0ZXMgYSBsZW5ndGggaW4gcGl4ZWxzIG91dCBvZiB0aGUgZ2l2ZW4gQ1NT
VmFsdWUuIE5lZWQgdGhlIFJlbmRlclN0eWxlIHRvIGdldAotICAgICAqIHRoZSBmb250aW5mbyBp
biBjYXNlIHZhbCBpcyBkZWZpbmVkIGluIGVtIG9yIGV4LgotICAgICAqCi0gICAgICogVGhlIG1l
dHJpY3MgaGF2ZSB0byBiZSBhIGJpdCBkaWZmZXJlbnQgZm9yIHNjcmVlbiBhbmQgcHJpbnRlciBv
dXRwdXQuCi0gICAgICogRm9yIHNjcmVlbiBvdXRwdXQgd2UgYXNzdW1lIDEgaW5jaCA9PSA3MiBw
eCwgZm9yIHByaW50ZXIgd2UgYXNzdW1lIDMwMCBkcGkKLSAgICAgKgotICAgICAqIHRoaXMgaXMg
c2NyZWVuL3ByaW50ZXIgZGVwZW5kZW50LCBzbyB3ZSBwcm9iYWJseSBuZWVkIGEgY29uZmlnIG9w
dGlvbiBmb3IgdGhpcywKLSAgICAgKiBhbmQgc29tZSB0b29sIHRvIGNhbGlicmF0ZS4KLSAgICAg
Ki8KLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSopOwotICAgIGludCBjb21w
dXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIGludCBj
b21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKik7Ci0gICAgaW50IGNvbXB1dGVM
ZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGllcik7Ci0gICAg
c2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKik7Ci0gICAgc2hvcnQgY29tcHV0
ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwotICAgIGRvdWJs
ZSBjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqLCBib29sIGFwcGx5Wm9vbUZhY3RvciA9
IHRydWUpOwotCi0gICAgLy8gdXNlIHdpdGggY2FyZSEhIQotICAgIHZvaWQgc2V0UHJpbWl0aXZl
VHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KLSAgICB2b2lkIHNl
dEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9hdFZhbHVlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQg
dW5pdFR5cGUpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZS5u
dW07IH0KLQotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUodW5zaWduZWQgc2hvcnQgc3RyaW5nVHlw
ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmlu
ZyBnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIAotICAgIENvdW50ZXIqIGdldENvdW50ZXJW
YWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0NPVU5URVIgPyAw
IDogbV92YWx1ZS5jb3VudGVyOwotICAgIH0KLQotICAgIFJlY3RJbXBsKiBnZXRSZWN0VmFsdWUg
KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SRUNUID8gMCA6IG1fdmFs
dWUucmVjdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRSR0JDb2xvclZhbHVlKCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SR0JDT0xPUiA/IDAgOiBtX3ZhbHVlLnJn
YmNvbG9yOwotICAgIH0KLQotICAgIFBhaXIqIGdldFBhaXJWYWx1ZSgpIGNvbnN0IHsKLSAgICAg
ICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUEFJUiA/IDAgOiBtX3ZhbHVlLnBhaXI7Ci0gICAgfQot
Ci0jaWYgX19BUFBMRV9fCi0gICAgRGFzaGJvYXJkUmVnaW9uICpnZXREYXNoYm9hcmRSZWdpb25W
YWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0RBU0hCT0FSRF9S
RUdJT04gPyAwIDogbV92YWx1ZS5yZWdpb247Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNQcmltaXRpdmVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAgaW50IGdldElk
ZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9v
bCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJvdGVjdGVk
OgotICAgIGludCBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBpbnQgaWRlbnQ7Ci0gICAg
ICAgIGRvdWJsZSBudW07Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgQ291
bnRlciogY291bnRlcjsKLSAgICAgICAgUmVjdEltcGwqIHJlY3Q7Ci0gICAgICAgIHVuc2lnbmVk
IHJnYmNvbG9yOwotICAgICAgICBQYWlyKiBwYWlyOwotI2lmIF9fQVBQTEVfXwotICAgICAgICBE
YXNoYm9hcmRSZWdpb24qIHJlZ2lvbjsKLSNlbmRpZgotICAgIH0gbV92YWx1ZTsKLX07Ci0KLS8v
IFRoaXMgdmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5IG1hcmdpbnMgaW4gcmVmbG93IHJv
b3RzIChib2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgotLy8gVGhlIGJhc2ljIGlkZWEgaXMg
dGhhdCBhIHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0gKGZvciBxdWlya3kgZW0p
IGluc3RlYWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4gIFdoZW4gdGhlIHF1aXJreSB2YWx1
ZSBpcyB1c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZSBtYXJnaW4gd2lsbAotLy8g
Y29sbGFwc2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgotY2xhc3MgQ1NTUXVpcmtQcmltaXRp
dmVWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgotICAgIENTU1F1
aXJrUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi0gICAgICAgIDog
Q1NTUHJpbWl0aXZlVmFsdWUobnVtLCB0eXBlKSB7fQotCi0gICAgdmlydHVhbCBib29sIGlzUXVp
cmtWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLWNsYXNzIENvdW50ZXIgOiBwdWJsaWMg
U2hhcmVkPENvdW50ZXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmcgaWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIFN0cmluZyBsaXN0U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX2xpc3RTdHlsZTsgfQotICAgIFN0cmluZyBzZXBhcmF0b3IoKSBjb25zdCB7IHJl
dHVybiBtX3NlcGFyYXRvcjsgfQotCi0gICAgU3RyaW5nIG1faWRlbnRpZmllcjsKLSAgICBTdHJp
bmcgbV9saXN0U3R5bGU7Ci0gICAgU3RyaW5nIG1fc2VwYXJhdG9yOwotfTsKLQogY2xhc3MgUmVj
dEltcGwgOiBwdWJsaWMgU2hhcmVkPFJlY3RJbXBsPiB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
UmVjdEltcGwoKTsKKyAgICB2aXJ0dWFsIH5SZWN0SW1wbCgpIHsgfQogCiAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodC5nZXQoKTsgfQpAQCAt
MzI3LDIzNCArNTAsNiBAQAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0Owog
fTsKIAotLy8gQSBwcmltaXRpdmUgdmFsdWUgcmVwcmVzZW50aW5nIGEgcGFpci4gIFRoaXMgaXMg
dXNlZnVsIGZvciBwcm9wZXJ0aWVzIGxpa2UgYm9yZGVyLXJhZGl1cywgYmFja2dyb3VuZC1zaXpl
L3Bvc2l0aW9uLAotLy8gYW5kIGJvcmRlci1zcGFjaW5nIChhbGwgb2Ygd2hpY2ggYXJlIHNwYWNl
LXNlcGFyYXRlZCBzZXRzIG9mIHR3byB2YWx1ZXMpLiAgQXQgdGhlIG1vbWVudCB3ZSBhcmUgb25s
eSB1c2luZyBpdCBmb3IKLS8vIGJvcmRlci1yYWRpdXMgYW5kIGJhY2tncm91bmQtc2l6ZSwgYnV0
IChGSVhNRSkgYm9yZGVyLXNwYWNpbmcgYW5kIGJhY2tncm91bmQtcG9zaXRpb24gY291bGQgYmUg
Y29udmVydGVkIG92ZXIgdG8gdXNlCi0vLyBpdCAoZWxpbWluYXRpbmcgc29tZSBleHRyYSAtd2Vi
a2l0LSBpbnRlcm5hbCBwcm9wZXJ0aWVzKS4KLWNsYXNzIFBhaXIgOiBwdWJsaWMgU2hhcmVkPFBh
aXI+IHsKLXB1YmxpYzoKLSAgICBQYWlyKCkgOiBtX2ZpcnN0KDApLCBtX3NlY29uZCgwKSB7IH0K
LSAgICBQYWlyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0LCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpCi0gICAgICAgIDogbV9maXJzdChmaXJzdCksIG1f
c2Vjb25kKHNlY29uZCkgeyB9Ci0gICAgdmlydHVhbCB+UGFpcigpOwotCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdC5nZXQoKTsgfQotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBtX3NlY29uZC5nZXQoKTsg
fQotCi0gICAgdm9pZCBzZXRGaXJzdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmaXJz
dCkgeyBtX2ZpcnN0ID0gZmlyc3Q7IH0KLSAgICB2b2lkIHNldFNlY29uZChQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpIHsgbV9zZWNvbmQgPSBzZWNvbmQ7IH0KLQotcHJvdGVj
dGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdDsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kOwotfTsKLQotY2xhc3MgRGFzaGJvYXJkUmVnaW9u
IDogcHVibGljIFJlY3RJbXBsIHsKLXB1YmxpYzoKLSAgICBEYXNoYm9hcmRSZWdpb24oKSA6IG1f
aXNDaXJjbGUoMCksIG1faXNSZWN0YW5nbGUoMCkgeyB9Ci0KLSAgICBSZWZQdHI8RGFzaGJvYXJk
UmVnaW9uPiBtX25leHQ7Ci0gICAgU3RyaW5nIG1fbGFiZWw7Ci0gICAgU3RyaW5nIG1fZ2VvbWV0
cnlUeXBlOwotICAgIGJvb2wgbV9pc0NpcmNsZSA6IDE7Ci0gICAgYm9vbCBtX2lzUmVjdGFuZ2xl
IDogMTsKLX07Ci0KLWNsYXNzIENTU0ltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTUHJpbWl0aXZlVmFs
dWUsIHB1YmxpYyBDYWNoZWRPYmplY3RDbGllbnQKLXsKLXB1YmxpYzoKLSAgICBDU1NJbWFnZVZh
bHVlKCk7Ci0gICAgQ1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJpbmcmIHVybCwgU3R5bGVCYXNlKik7
Ci0gICAgdmlydHVhbCB+Q1NTSW1hZ2VWYWx1ZSgpOwotCi0gICAgQ2FjaGVkSW1hZ2UqIGltYWdl
KERvY0xvYWRlciopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2FjaGVkSW1hZ2UqIG1faW1hZ2U7Ci0g
ICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7Ci19OwotCi1jbGFzcyBDU1NCb3JkZXJJbWFnZVZhbHVl
IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZSgp
OwotICAgIENTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiwKLSAg
ICAgICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4sIGludCBob3Jpem9udGFsUnVsZSwgaW50IHZlcnRp
Y2FsUnVsZSk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLXB1Ymxp
YzoKLSAgICAvLyBUaGUgYm9yZGVyIGltYWdlLgotICAgIFJlZlB0cjxDU1NJbWFnZVZhbHVlPiBt
X2ltYWdlOwotCi0gICAgLy8gVGhlc2UgZm91ciB2YWx1ZXMgYXJlIHVzZWQgdG8gbWFrZSAiY3V0
cyIgaW4gdGhlIGltYWdlLiAgVGhleSBjYW4gYmUgbnVtYmVycwotICAgIC8vIG9yIHBlcmNlbnRh
Z2VzLgotICAgIFJlZlB0cjxSZWN0SW1wbD4gbV9pbWFnZVNsaWNlUmVjdDsKLSAgICAKLSAgICAv
LyBWYWx1ZXMgZm9yIGhvdyB0byBoYW5kbGUgdGhlIHNjYWxpbmcvc3RyZXRjaGluZy90aWxpbmcg
b2YgdGhlIGltYWdlIHNsaWNlcy4KLSAgICBpbnQgbV9ob3Jpem9udGFsU2l6ZVJ1bGU7IC8vIFJ1
bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIHdpZHRocyBvZiB0aGUgdG9wL21pZGRsZS9ib3R0b20K
LSAgICBpbnQgbV92ZXJ0aWNhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8gYWRqdXN0IHRo
ZSBoZWlnaHRzIG9mIHRoZSBsZWZ0L21pZGRsZS9yaWdodAotfTsKLQotY2xhc3MgRm9udEZhbWls
eVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgRm9udEZh
bWlseVZhbHVlKCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpOwotICAgIGNvbnN0IERl
cHJlY2F0ZWRTdHJpbmcmIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gcGFyc2VkRm9udE5hbWU7
IH0KLSAgICBpbnQgZ2VuZXJpY0ZhbWlseVR5cGUoKSBjb25zdCB7IHJldHVybiBfZ2VuZXJpY0Zh
bWlseVR5cGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLQotICAg
IERlcHJlY2F0ZWRTdHJpbmcgcGFyc2VkRm9udE5hbWU7Ci1wcml2YXRlOgotICAgIGludCBfZ2Vu
ZXJpY0ZhbWlseVR5cGU7Ci19OwotCi1jbGFzcyBGb250VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUK
LXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCi0g
ICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHZhcmlhbnQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB3ZWlnaHQ7Ci0gICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gbGluZUhlaWdodDsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmYW1pbHk7Ci19Owot
Ci0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotY2xhc3MgU2hhZG93VmFs
dWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBTaGFkb3dWYWx1ZShQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4LAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB5LAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBibHVyLAot
ICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcik7Ci0gICAgCi0gICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiB4OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geTsKLSAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXI7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBj
b2xvcjsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBhbm90aGVyIGhlbHBl
ciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkKLXsKLXB1YmxpYzoKLSAgICBDU1NQcm9wZXJ0eShp
bnQgcHJvcElELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBm
YWxzZSwgaW50IHNob3J0aGFuZElEID0gMCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKQotICAgICAg
ICA6IG1faWQocHJvcElEKSwgbV9zaG9ydGhhbmRJRChzaG9ydGhhbmRJRCksIG1faW1wb3J0YW50
KGltcG9ydGFudCksIG1faW1wbGljaXQoaW1wbGljaXQpLCBtX3ZhbHVlKHZhbHVlKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgQ1NTUHJvcGVydHkgJm9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0
eSYgbykKLSAgICB7Ci0gICAgICAgIG1faWQgPSBvLm1faWQ7Ci0gICAgICAgIG1fc2hvcnRoYW5k
SUQgPSBvLm1fc2hvcnRoYW5kSUQ7Ci0gICAgICAgIG1faW1wb3J0YW50ID0gby5tX2ltcG9ydGFu
dDsKLSAgICAgICAgbV92YWx1ZSA9IG8ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
ICAgIH0KLSAgICAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgaW50
IHNob3J0aGFuZElEKCkgY29uc3QgeyByZXR1cm4gbV9zaG9ydGhhbmRJRDsgfQotICAgIAotICAg
IGJvb2wgaXNJbXBvcnRhbnQoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFudDsgfQotICAgIGJv
b2wgaXNJbXBsaWNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbGljaXQ7IH0KLQotICAgIENTU1Zh
bHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLSAgICAKLSAgICBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLy8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcg
Zml0cyBpbiA0IGJ5dGVzLgotICAgIGludCBtX2lkOwotICAgIGludCBtX3Nob3J0aGFuZElEOyAg
Ly8gSWYgdGhpcyBwcm9wZXJ0eSB3YXMgc2V0IGFzIHBhcnQgb2YgYSBzaG9ydGhhbmQsIGdpdmVz
IHRoZSBzaG9ydGhhbmQuCi0gICAgYm9vbCBtX2ltcG9ydGFudCA6IDE7Ci0gICAgYm9vbCBtX2lt
cGxpY2l0IDogMTsgLy8gV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHdhcyBzZXQgaW1wbGlj
aXRseSBhcyB0aGUgcmVzdWx0IG9mIGEgc2hvcnRoYW5kLgotCi0gICAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAmLCBjb25zdCBDU1NQcm9wZXJ0eSAmKTsKLQotICAg
IFJlZlB0cjxDU1NWYWx1ZT4gbV92YWx1ZTsKLX07Ci0KLWNsYXNzIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24KLXsKLXB1YmxpYzoKLSAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVy
dHk+ICYpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1
bGUsIGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotCi0g
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gJm9wZXJhdG9yPShjb25zdCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiAmKTsKLQotICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKSB7IG1f
bm9kZSA9IG5vZGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3Ry
aW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5
SUQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlk
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IGNvcHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCk7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gdmFsdWVzSXRlcmF0b3IoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5iZWdpbigpOyB9Ci0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0
eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdl
ZCA9IHRydWUpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNoYW5nZWQgPSB0
cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiBzZXRQcm9wZXJ0eShwcm9w
ZXJ0eUlkLCB2YWx1ZSwgaW1wb3J0YW50LCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0KLQotICAgIFN0
cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7
IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0K
LQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHZvaWQgc2V0Q2hhbmdlZCgpOwotIAotICAgIC8v
IHNldExlbmd0aFByb3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChOZWVkZWQgZm9y
IGNvbnZlcnNpb24gb2YgSFRNTCBhdHRyaWJ1dGVzLikKLSAgICB2b2lkIHNldExlbmd0aFByb3Bl
cnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwg
Ym9vbCBtdWx0aUxlbmd0aCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldFN0cmluZ1Byb3BlcnR5KGlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsgLy8gcGFyc2VkIHN0cmluZyB2YWx1ZQot
ICAgIHZvaWQgc2V0SW1hZ2VQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBV
UkwsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwotIAotICAgIC8vIFRoZSBmb2xsb3dpbmcgcGFy
c2VzIGFuIGVudGlyZSBuZXcgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgdm9pZCBwYXJzZURlY2xh
cmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbik7Ci0KLSAgICAvLyBCZXNpZGVz
IGFkZGluZyB0aGUgcHJvcGVydGllcywgdGhpcyBhbHNvIHJlbW92ZXMgYW55IGV4aXN0aW5nIHBy
b3BlcnRpZXMgd2l0aCB0aGVzZSBJRHMuCi0gICAgLy8gSXQgZG9lcyBubyBub3RpZmljYXRpb24g
c2luY2UgaXQncyBjYWxsZWQgYnkgdGhlIHBhcnNlci4KLSAgICB2b2lkIGFkZFBhcnNlZFByb3Bl
cnRpZXMoY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJvcGVydGllcyk7Ci0g
Ci0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUJsb2NrUHJv
cGVydGllcygpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7Ci0gICAg
dm9pZCByZW1vdmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJlbW92ZVByb3Bl
cnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHZvaWQg
bWVyZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBib29sIGFyZ092ZXJyaWRlc09uQ29u
ZmxpY3QgPSB0cnVlKTsKLSAKLXByaXZhdGU6Ci0gICAgU3RyaW5nIGdldFNob3J0SGFuZFZhbHVl
KGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bWJlcikgY29uc3Q7Ci0gICAgU3RyaW5nIGdl
dDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0aWVzKSBjb25zdDsKLSAKLSAgICBEZXByZWNhdGVk
VmFsdWVMaXN0PENTU1Byb3BlcnR5PiBtX3ZhbHVlczsKLSAgICBOb2RlKiBtX25vZGU7Ci19Owot
CiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGNzcy9DU1NJbWFnZVZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDE0NDAwKQorKysg
Y3NzL0NTU0ltYWdlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMTc1ICsxOSwyNyBA
QAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
IC0gU3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJD
U1NJbWFnZVZhbHVlLmgiCiAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCi0jaW5jbHVkZSAiRG9jTG9hZGVyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJjc3NwYXJzZXIuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVk
ZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIK
LQotI2lmIFNWR19TVVBQT1JUCi0jaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRpZXMuaCIKLSNlbmRp
ZgotCi0vLyBOb3QgaW4gYW55IGhlYWRlciwgc28ganVzdCBkZWNsYXJlIGl0IGhlcmUgZm9yIG5v
dy4KLVdlYkNvcmU6OlN0cmluZyBnZXRQcm9wZXJ0eU5hbWUodW5zaWduZWQgc2hvcnQgaWQpOwor
I2luY2x1ZGUgIkRvY0xvYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIERlZmlu
ZWQgaW4gQ1NTR3JhbW1hci55LCBidXQgbm90IGluIGFueSBoZWFkZXIsIHNvIGp1c3QgZGVjbGFy
ZSBpdCBoZXJlIGZvciBub3cuCi1pbnQgZ2V0UHJvcGVydHlJRChjb25zdCBjaGFyKiBzdHIsIGlu
dCBsZW4pOwotCi1zdGF0aWMgaW50IHByb3BlcnR5SUQoY29uc3QgU3RyaW5nJiBzKQotewotICAg
IGNoYXIgYnVmZmVyW21heENTU1Byb3BlcnR5TmFtZUxlbmd0aF07Ci0KLSAgICB1bnNpZ25lZCBs
ZW4gPSBzLmxlbmd0aCgpOwotICAgIGlmIChsZW4gPiBtYXhDU1NQcm9wZXJ0eU5hbWVMZW5ndGgp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW47
ICsraSkgewotICAgICAgICBVQ2hhciBjID0gc1tpXTsKLSAgICAgICAgaWYgKGMgPT0gMCB8fCBj
ID49IDB4N0YpCi0gICAgICAgICAgICByZXR1cm4gMDsgLy8gaWxsZWdhbCBjaGFyYWN0ZXIKLSAg
ICAgICAgYnVmZmVyW2ldID0gYzsKLSAgICB9Ci0KLSAgICBpbnQgaWQgPSBnZXRQcm9wZXJ0eUlE
KGJ1ZmZlciwgbGVuKTsKLSNpZiBTVkdfU1VQUE9SVAotICAgIGlmIChpZCA9PSAwKQotICAgICAg
ICBpZCA9IFNWRzo6Z2V0U1ZHQ1NTUHJvcGVydHlJRChidWZmZXIsIGxlbik7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gaWQ7Ci19Ci0KLQotLy8gUXVvdGVzIHRoZSBzdHJpbmcgaWYgaXQgbmVlZHMgcXVv
dGluZy4KLS8vIFdlIHVzZSBzaW5nbGUgcXVvdGVzIGZvciBub3cgYmVhdXNlIG1hcmt1cC5jcHAg
dXNlcyBkb3VibGUgcXVvdGVzLgotc3RhdGljIFN0cmluZyBxdW90ZVN0cmluZ0lmTmVlZGVkKGNv
bnN0IFN0cmluZyAmc3RyaW5nKQotewotICAgIC8vIEZvciBub3csIGp1c3QgZG8gdGhpcyBmb3Ig
c3RyaW5ncyB0aGF0IHN0YXJ0IHdpdGggIiMiIHRvIGZpeCBLb3JlYW4gZm9udCBuYW1lcyB0aGF0
IHN0YXJ0IHdpdGggIiMiLgotICAgIC8vIFBvc3QtVGlnZXIsIHdlIHNob3VsZCBpc0xlZ2FsSWRl
bnRpZmllciBpbnN0ZWFkIGFmdGVyIHdvcmtpbmcgb3V0IGFsbCB0aGUgYW5jaWxsYXJ5IGlzc3Vl
cy4KLSAgICBpZiAoc3RyaW5nWzBdICE9ICcjJykKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQot
ICAgIC8vIEZJWE1FOiBBbHNvIG5lZWQgdG8gdHJhbnNmb3JtIGNvbnRyb2wgY2hhcmFjdGVycyBp
bnRvIFwgc2VxdWVuY2VzLgotICAgIFN0cmluZyBzID0gc3RyaW5nOwotICAgIHMucmVwbGFjZSgn
XFwnLCAiXFxcXCIpOwotICAgIHMucmVwbGFjZSgnXCcnLCAiXFwnIik7Ci0gICAgcmV0dXJuICIn
IiArIHMgKyAiJyI7Ci19Ci0KLUNTU1N0eWxlRGVjbGFyYXRpb246OkNTU1N0eWxlRGVjbGFyYXRp
b24oQ1NTUnVsZSAqcGFyZW50KQotICAgIDogU3R5bGVCYXNlKHBhcmVudCkKLXsKLX0KLQotYm9v
bCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1N0eWxlRGVjbGFyYXRpb24oKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGlu
dCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BJRCk7
Ci19Ci0KLVN0cmluZyBDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGNvbnN0
IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHBy
b3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShwcm9wSUQpOwotfQotCi1TdHJpbmcgQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcgJnByb3BlcnR5
TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAg
IGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFBy
b3BlcnR5UHJpb3JpdHkocHJvcElEKSA/ICJpbXBvcnRhbnQiIDogIiI7Ci19Ci0KLVN0cmluZyBD
U1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcgJnBy
b3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUp
OwotICAgIGlmICghcHJvcElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaW50IHNo
b3J0aGFuZElEID0gZ2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcElEKTsKLSAgICBpZiAoIXNob3J0
aGFuZElEKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5
TmFtZShzaG9ydGhhbmRJRCk7Ci19Ci0KLWJvb2wgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9w
ZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9w
SUQgPSBwcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BJRCk7Ci19
Ci0KLXZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGNvbnN0IFN0cmluZyYgcHJpb3JpdHks
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGludCBwcm9wSUQgPSBwcm9wZXJ0eUlEKHByb3Bl
cnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wSUQpIC8vIHNldCBleGNlcHRpb24/Ci0gICAgICAgIHJl
dHVybjsKLSAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAs
IGZhbHNlKSAhPSAtMTsKLSAgICBzZXRQcm9wZXJ0eShwcm9wSUQsIHZhbHVlLCBpbXBvcnRhbnQs
IGVjKTsKLX0KLQotU3RyaW5nIENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnR5KGNv
bnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQg
cHJvcElEID0gcHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcElEKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIHJlbW92ZVByb3BlcnR5KHByb3BJRCwg
ZWMpOwotfQotCi1ib29sIENTU1N0eWxlRGVjbGFyYXRpb246OmlzUHJvcGVydHlOYW1lKGNvbnN0
IFN0cmluZyAmcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBwcm9wZXJ0eUlEKHByb3BlcnR5
TmFtZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpCi0gICAgOiBt
X25vZGUoMCkKLXsKLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVudCkKLSAgICA6IENTU1N0eWxlRGVjbGFyYXRp
b24ocGFyZW50KSwgbV9ub2RlKDApCi17Ci19Ci0KLUNTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlICpwYXJlbnQsIGNvbnN0IERlcHJl
Y2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+ICZ2YWx1ZXMpCi0gICAgOiBDU1NTdHlsZURlY2xh
cmF0aW9uKHBhcmVudCksIG1fdmFsdWVzKHZhbHVlcyksIG1fbm9kZSgwKQotewotICAgIC8vIEZJ
WE1FOiBUaGlzIGFsbG93cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUgKnBhcmVu
dCwgY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqcHJvcGVydGllcywgaW50IG51bVByb3BlcnRp
ZXMpCi0gICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCksIG1fbm9kZSgwKQotewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQotICAgICAgICBtX3ZhbHVl
cy5hcHBlbmQoKnByb3BlcnRpZXNbaV0pOwotICAgIC8vIEZJWE1FOiBUaGlzIGFsbG93cyBkdXBs
aWNhdGUgcHJvcGVydGllcy4KLX0KLQotQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24mIG8pCi17Ci0gICAgLy8gZG9uJ3QgYXR0YWNoIGl0IHRvIHRoZSBzYW1lIG5vZGUs
IGp1c3QgbGVhdmUgdGhlIGN1cnJlbnQgbV9ub2RlIHZhbHVlCi0gICAgbV92YWx1ZXMgPSBvLm1f
dmFsdWVzOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQp
OwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7Ci0KLSAg
ICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVzIHByb3BlcnRpZXMKLSAgICBzd2l0Y2ggKCBwcm9w
ZXJ0eUlEICkgewotICAgIGNhc2UgQ1NTX1BST1BfQkFDS0dST1VORF9QT1NJVElPTjoKLSAgICB7
Ci0gICAgICAgIC8vICMjIElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4gY3NzcGFyc2VyLmNw
cCBpcyBjb25mdXNpbmcKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU19Q
Uk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU19QUk9QX0JBQ0tHUk9VTkRfUE9TSVRJT05fWSB9OwotICAgICAgICByZXR1cm4g
Z2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDIgKTsKLSAgICB9Ci0gICAgY2FzZSBDU1Nf
UFJPUF9CQUNLR1JPVU5EOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNV0g
PSB7IENTU19QUk9QX0JBQ0tHUk9VTkRfSU1BR0UsIENTU19QUk9QX0JBQ0tHUk9VTkRfUkVQRUFU
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VO
RF9BVFRBQ0hNRU5ULCBDU1NfUFJPUF9CQUNLR1JPVU5EX1BPU0lUSU9OLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTX1BST1BfQkFDS0dST1VORF9DT0xPUiB9OwotICAg
ICAgICByZXR1cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDUgKTsKLSAgICB9Ci0g
ICAgY2FzZSBDU1NfUFJPUF9CT1JERVI6Ci0gICAgewotICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX1dJRFRILCBDU1NfUFJPUF9CT1JERVJfU1RZTEUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JERVJfQ09M
T1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFuZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7
Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1RPUDoKLSAgICB7Ci0gICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1Nf
UFJPUF9CT1JERVJfVE9QX1NUWUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTX1BST1BfQk9SREVSX1RPUF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhh
bmRWYWx1ZSggcHJvcGVydGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRF
Ul9SSUdIVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1Nf
UFJPUF9CT1JERVJfUklHSFRfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9SSUdIVF9D
T0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVydGllcywgMyAp
OwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9CT1RUT006Ci0gICAgewotICAgICAg
ICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9XSURU
SCwgQ1NTX1BST1BfQk9SREVSX0JPVFRPTV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09MT1J9OwotICAgICAgICByZXR1
cm4gZ2V0U2hvcnRIYW5kVmFsdWUoIHByb3BlcnRpZXMsIDMgKTsKLSAgICB9Ci0gICAgY2FzZSBD
U1NfUFJPUF9CT1JERVJfTEVGVDoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzNdID0geyBDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCwgQ1NTX1BST1BfQk9SREVSX0xFRlRf
U1RZTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NfUFJPUF9CT1JE
RVJfTEVGVF9DT0xPUn07Ci0gICAgICAgIHJldHVybiBnZXRTaG9ydEhhbmRWYWx1ZSggcHJvcGVy
dGllcywgMyApOwotICAgIH0KLSAgICBjYXNlIENTU19QUk9QX09VVExJTkU6Ci0gICAgewotICAg
ICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsgQ1NTX1BST1BfT1VUTElORV9XSURUSCwg
Q1NTX1BST1BfT1VUTElORV9TVFlMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENTU19QUk9QX09VVExJTkVfQ09MT1IgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFu
ZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVS
X0NPTE9SOgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19Q
Uk9QX0JPUkRFUl9UT1BfQ09MT1IsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9DT0xPUiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fQ09M
T1IsIENTU19QUk9QX0JPUkRFUl9MRUZUX0NPTE9SIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFs
dWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1dJRFRI
OgotICAgIHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JP
UkRFUl9UT1BfV0lEVEgsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9XSURUSCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fV0lEVEgsIENT
U19QUk9QX0JPUkRFUl9MRUZUX1dJRFRIIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBw
cm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfQk9SREVSX1NUWUxFOgotICAg
IHsKLSAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX0JPUkRFUl9U
T1BfU1RZTEUsIENTU19QUk9QX0JPUkRFUl9SSUdIVF9TVFlMRSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19QUk9Q
X0JPUkRFUl9MRUZUX1NUWUxFIH07Ci0gICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKCBwcm9wZXJ0
aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfTUFSR0lOOgotICAgIHsKLSAgICAgICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU19QUk9QX01BUkdJTl9UT1AsIENTU19QUk9Q
X01BUkdJTl9SSUdIVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU19Q
Uk9QX01BUkdJTl9CT1RUT00sIENTU19QUk9QX01BUkdJTl9MRUZUIH07Ci0gICAgICAgIHJldHVy
biBnZXQ0VmFsdWVzKCBwcm9wZXJ0aWVzICk7Ci0gICAgfQotICAgIGNhc2UgQ1NTX1BST1BfUEFE
RElORzoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NfUFJP
UF9QQURESU5HX1RPUCwgQ1NTX1BST1BfUEFERElOR19SSUdIVCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU19QUk9QX1BBRERJTkdfQk9UVE9NLCBDU1NfUFJPUF9QQURE
SU5HX0xFRlQgfTsKLSAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMoIHByb3BlcnRpZXMgKTsKLSAg
ICB9Ci0gICAgY2FzZSBDU1NfUFJPUF9MSVNUX1NUWUxFOgotICAgIHsKLSAgICAgICAgY29uc3Qg
aW50IHByb3BlcnRpZXNbM10gPSB7IENTU19QUk9QX0xJU1RfU1RZTEVfVFlQRSwgQ1NTX1BST1Bf
TElTVF9TVFlMRV9QT1NJVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU19QUk9QX0xJU1RfU1RZTEVfSU1BR0UgfTsKLSAgICAgICAgcmV0dXJuIGdldFNob3J0SGFu
ZFZhbHVlKCBwcm9wZXJ0aWVzLCAzICk7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLVN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0NFZhbHVlcygg
Y29uc3QgaW50KiBwcm9wZXJ0aWVzICkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghaXNQcm9wZXJ0eUltcGxp
Y2l0KHByb3BlcnRpZXNbaV0pKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
ID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgIGlmICgh
dmFsdWUpIC8vIGFwcGFyZW50bHkgYWxsIDQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZC4K
LSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoIXJlcy5p
c051bGwoKSkKLSAgICAgICAgICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgcmVzICs9
IHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0K
LQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRTaG9ydEhhbmRWYWx1ZSgg
Y29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtYmVyICkgY29uc3QKLXsKLSAgICBTdHJpbmcg
cmVzOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpIHsKLSAgICAgICAgaWYg
KCFpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tpXSkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwot
ICAgICAgICAgICAgaWYgKHZhbHVlKSB7IC8vIFRPRE8gcHJvdmlkZSBkZWZhdWx0IHZhbHVlIGlm
ICF2YWx1ZQotICAgICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXMgKz0gIiAiOwotICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4
dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19
Ci0KLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNh
dGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9t
TGFzdCgpOyBpdCAhPSBlbmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQp
Lm1faWQpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkudmFsdWUoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShp
bnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBlYyA9IDA7Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVM
aXN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxp
c3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5mcm9tTGFzdCgpOyBpdCAhPSBl
bmQ7IC0taXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLm1faWQpIHsKLSAgICAg
ICAgICAgIHZhbHVlID0gKCppdCkudmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgICAgICAgICAgbV92
YWx1ZXMucmVtb3ZlKGl0KTsKLSAgICAgICAgICAgIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAg
ICAgICAgICAgIHNldENoYW5nZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNsZWFyKCkKLXsKLSAgICBtX3ZhbHVlcy5jbGVhcigpOwotICAgIHNldENoYW5nZWQoKTsKLX0K
LQotdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q2hhbmdlZCgpCi17Ci0gICAg
aWYgKG1fbm9kZSkgewotICAgICAgICBtX25vZGUtPnNldENoYW5nZWQoKTsKLSAgICAgICAgLy8g
RklYTUU6IElkZWFsbHksIHRoaXMgc2hvdWxkIGJlIGZhY3RvcmVkIGJldHRlciBhbmQgdGhlcmUK
LSAgICAgICAgLy8gc2hvdWxkIGJlIGEgc3ViY2xhc3Mgb2YgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24ganVzdAotICAgICAgICAvLyBmb3IgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9ucyB0aGF0
IGhhbmRsZXMgdGhpcwotICAgICAgICBpZiAobV9ub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSAmJiB0
aGlzID09IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQgKj4obV9ub2RlKS0+aW5saW5lU3R5bGVE
ZWNsKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50ICo+KG1fbm9kZSkt
PmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gIyMjIHF1aWNrJmRpcnR5IGhhY2sgZm9yIEtERSAzLjAuLi4gbWFrZSB0aGlzIE1VQ0gg
YmV0dGVyISAoRGlyaykKLSAgICBTdHlsZUJhc2UgKnJvb3QgPSB0aGlzOwotICAgIHdoaWxlIChT
dHlsZUJhc2UgKnBhcmVudCA9IHJvb3QtPnBhcmVudCgpKQotICAgICAgICByb290ID0gcGFyZW50
OwotICAgIGlmIChyb290LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2MoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwotfQot
Ci1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVByaW9yaXR5KGlu
dCBwcm9wZXJ0eUlEKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJh
dG9yPENTU1Byb3BlcnR5PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJ
dGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGlmIChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gKCppdCkuaXNJbXBvcnRhbnQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3Bl
cnR5SUQpIGNvbnN0Ci17Ci0gICAgRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NT
UHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y
PENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgaWYgKHByb3BlcnR5SUQgPT0gKCppdCkuaWQoKSkKLSAgICAgICAgICAgIHJldHVybiAo
Kml0KS5zaG9ydGhhbmRJRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBj
b25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5
PiBlbmQ7Ci0gICAgZm9yIChEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9w
ZXJ0eT4gaXQgPSBtX3ZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGlm
IChwcm9wZXJ0eUlEID09ICgqaXQpLmlkKCkpCi0gICAgICAgICAgICByZXR1cm4gKCppdCkuaXNJ
bXBsaWNpdCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyAmdmFs
dWUsIGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRQcm9wZXJ0
eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlLCBlYyk7Ci19Ci0KLVN0cmluZyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
eUlELCB0cnVlLCBlYyk7Ci19Ci0KLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNl
dFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcgJnZhbHVlLCBib29sIGltcG9y
dGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9
IDA7Ci0KLSAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLQotICAgIENTU1BhcnNlciBw
YXJzZXIodXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZXIucGFy
c2VWYWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICBpZiAoIXN1
Y2Nlc3MpIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgIH0gZWxzZSBpZiAobm90aWZ5
Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQot
Ci1ib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShpbnQgcHJvcGVy
dHlJRCwgaW50IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQotewot
ICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOwotICAgIG1fdmFsdWVzLmFwcGVuZChDU1NQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLCBpbXBvcnRh
bnQpKTsKLSAgICBpZiAobm90aWZ5Q2hhbmdlZCkKLSAgICAgICAgc2V0Q2hhbmdlZCgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRT
dHJpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGltcG9ydGFudCkKLXsKLSAgICByZW1v
dmVQcm9wZXJ0eShwcm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHko
cHJvcGVydHlJZCwgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSwgaW1wb3J0YW50
KSk7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpzZXRJbWFnZVByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcgJlVSTCwg
Ym9vbCBpbXBvcnRhbnQpCi17Ci0gICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHlJZCk7Ci0gICAg
bV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIG5ldyBDU1NJbWFnZVZhbHVl
KFVSTCwgdGhpcyksIGltcG9ydGFudCkpOwotICAgIHNldENoYW5nZWQoKTsKLX0KLQotdm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcg
JnN0eWxlRGVjbGFyYXRpb24pCi17Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJz
ZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRp
b24odGhpcywgc3R5bGVEZWNsYXJhdGlvbik7Ci0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lk
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENT
U1Byb3BlcnR5ICogY29uc3QgKnByb3BlcnRpZXMsIGludCBudW1Qcm9wZXJ0aWVzKQotewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7Ci0gICAgICAgIHJlbW92
ZVByb3BlcnR5KHByb3BlcnRpZXNbaV0tPmlkKCksIGZhbHNlKTsKLSAgICAgICAgbV92YWx1ZXMu
YXBwZW5kKCpwcm9wZXJ0aWVzW2ldKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFRoaXMgcHJvYmFi
bHkgc2hvdWxkIGhhdmUgYSBjYWxsIHRvIHNldENoYW5nZWQoKSBpZiBzb21ldGhpbmcgY2hhbmdl
ZC4gV2UgbWF5IGFsc28gd2lzaCB0byBhZGQKLSAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJndW1l
bnQgdG8gdGhpcyBmdW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0aW9u
cyBpbiB0aGlzIGNsYXNzLgotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpz
ZXRMZW5ndGhQcm9wZXJ0eShpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUsIGJvb2wgaW1wb3J0
YW50LCBib29sIC8qIG11bHRpTGVuZ3RoKi8pCi17Ci0gICAgYm9vbCBwYXJzZU1vZGUgPSB1c2VT
dHJpY3RQYXJzaW5nKCk7Ci0gICAgc2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7Ci0gICAgc2V0UHJv
cGVydHkoaWQsIHZhbHVlLCBpbXBvcnRhbnQpOwotICAgIHNldFN0cmljdFBhcnNpbmcocGFyc2VN
b2RlKTsKLX0KLQotdW5zaWduZWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omxlbmd0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWVzLmNvdW50KCk7Ci19Ci0KLVN0cmluZyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAotewotICAgIGlm
IChpID49IG1fdmFsdWVzLmNvdW50KCkpCi0gICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJl
dHVybiBnZXRQcm9wZXJ0eU5hbWUobV92YWx1ZXNbaV0uaWQoKSk7Ci19Ci0KLUNTU1J1bGUgKkNT
U1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAotewotICAgIHJldHVybiAocGFy
ZW50KCkgJiYgcGFyZW50KCktPmlzUnVsZSgpKSA/IHN0YXRpY19jYXN0PENTU1J1bGUgKj4ocGFy
ZW50KCkpIDogMDsKLX0KLQotU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NU
ZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAgCi0gICAgRGVwcmVj
YXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKLSAgICBmb3IgKERl
cHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IG1fdmFsdWVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0ICs9ICgqaXQpLmNzc1Rl
eHQoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBlYyA9IDA7Ci0gICAgbV92YWx1ZXMuY2xlYXIoKTsKLSAgICBDU1NQYXJzZXIg
cGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24o
dGhpcywgdGV4dCk7Ci0gICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBzZXQg
ZWMuCi0gICAgc2V0Q2hhbmdlZCgpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjptZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAqb3RoZXIsIGJvb2wgYXJnT3Zl
cnJpZGVzT25Db25mbGljdCkKLXsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRv
cjxDU1NQcm9wZXJ0eT4gZW5kOwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRl
cmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gb3RoZXItPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSAmcHJvcGVydHkgPSAqaXQ7Ci0g
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnR5LmlkKCkpOwotICAgICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgICAgIGlmICghYXJnT3Zl
cnJpZGVzT25Db25mbGljdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LmlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fdmFs
dWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5
IHNob3VsZCBoYXZlIGEgY2FsbCB0byBzZXRDaGFuZ2VkKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQu
IFdlIG1heSBhbHNvIHdpc2ggdG8gYWRkCi0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50
IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9sbG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMg
aW4gdGhpcyBjbGFzcy4KLX0KLQotdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWZmKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uICpzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0PGludD4gcHJvcGVydGll
czsKLSAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gZW5k
OwotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+
IGl0KHN0eWxlLT52YWx1ZXNJdGVyYXRvcigpKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IENTU1Byb3BlcnR5ICZwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7Ci0gICAgICAg
IGlmICh2YWx1ZSAmJiAodmFsdWUtPmNzc1RleHQoKSA9PSBwcm9wZXJ0eS52YWx1ZSgpLT5jc3NU
ZXh0KCkpKQotICAgICAgICAgICAgcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkuaWQoKSk7Ci0g
ICAgfQotICAgIAotICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJhdG9yPGludD4gaXQo
cHJvcGVydGllcy5iZWdpbigpKTsgaXQgIT0gcHJvcGVydGllcy5lbmQoKTsgKytpdCkKLSAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KCppdCk7Ci19Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qg
b2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkgaW4gdGhlIGNvcHlJbmhlcml0YWJsZVByb3Bl
cnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpc3Qg
b2YgaW5oZXJpdGVkIENTUyBwcm9wZXJ0aWVzIGFuZCB0aGUKLS8vIHByb3BlcnRpZXMgZm9yIHdo
aWNoIHdlIGhhdmUgYSBjb21wdXRlZCBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGZpbGUuCi1jb25z
dCBpbnQgaW5oZXJpdGFibGVQcm9wZXJ0aWVzW10gPSB7Ci0gICAgQ1NTX1BST1BfQk9SREVSX0NP
TExBUFNFLAotICAgIENTU19QUk9QX0JPUkRFUl9TUEFDSU5HLAotICAgIENTU19QUk9QX0NPTE9S
LAotICAgIENTU19QUk9QX0ZPTlRfRkFNSUxZLAotICAgIENTU19QUk9QX0ZPTlRfU0laRSwKLSAg
ICBDU1NfUFJPUF9GT05UX1NUWUxFLAotICAgIENTU19QUk9QX0ZPTlRfVkFSSUFOVCwKLSAgICBD
U1NfUFJPUF9GT05UX1dFSUdIVCwKLSAgICBDU1NfUFJPUF9MRVRURVJfU1BBQ0lORywKLSAgICBD
U1NfUFJPUF9MSU5FX0hFSUdIVCwKLSAgICBDU1NfUFJPUF9URVhUX0FMSUdOLAotICAgIENTU19Q
Uk9QX19XRUJLSVRfVEVYVF9ERUNPUkFUSU9OU19JTl9FRkZFQ1QsCi0gICAgQ1NTX1BST1BfVEVY
VF9JTkRFTlQsCi0gICAgQ1NTX1BST1BfX1dFQktJVF9URVhUX1NJWkVfQURKVVNULAotICAgIENT
U19QUk9QX1RFWFRfVFJBTlNGT1JNLAotICAgIENTU19QUk9QX09SUEhBTlMsCi0gICAgQ1NTX1BS
T1BfV0hJVEVfU1BBQ0UsCi0gICAgQ1NTX1BST1BfV0lET1dTLAotICAgIENTU19QUk9QX1dPUkRf
U1BBQ0lORywKLX07Ci0KLWNvbnN0IHVuc2lnbmVkIG51bUluaGVyaXRhYmxlUHJvcGVydGllcyA9
IHNpemVvZihpbmhlcml0YWJsZVByb3BlcnRpZXMpIC8gc2l6ZW9mKGluaGVyaXRhYmxlUHJvcGVy
dGllc1swXSk7Ci0KLS8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRv
IGNvcHkgaW4gdGhlIGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBmdW5jdGlvbi4KLS8vIEl0IGlzIHRo
ZSBsaXN0IG9mIENTUyBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxl
dmVsIGVsZW1lbnRzLgotc3RhdGljIGNvbnN0IGludCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKLSAg
ICBDU1NfUFJPUF9PUlBIQU5TLAotICAgIENTU19QUk9QX09WRVJGTE9XLCAvLyBUaGlzIGNhbiBi
ZSBhbHNvIGJlIGFwcGxpZWQgdG8gcmVwbGFjZWQgZWxlbWVudHMKLSAgICBDU1NfUFJPUF9QQUdF
X0JSRUFLX0FGVEVSLAotICAgIENTU19QUk9QX1BBR0VfQlJFQUtfQkVGT1JFLAotICAgIENTU19Q
Uk9QX1BBR0VfQlJFQUtfSU5TSURFLAotICAgIENTU19QUk9QX1RFWFRfQUxJR04sCi0gICAgQ1NT
X1BST1BfVEVYVF9JTkRFTlQsCi0gICAgQ1NTX1BST1BfV0lET1dTCi19OwotCi1jb25zdCB1bnNp
Z25lZCBudW1CbG9ja1Byb3BlcnRpZXMgPSBzaXplb2YoYmxvY2tQcm9wZXJ0aWVzKSAvIHNpemVv
ZihibG9ja1Byb3BlcnRpZXNbMF0pOwotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weUJsb2NrUHJvcGVydGllcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVz
LCBudW1CbG9ja1Byb3BlcnRpZXMpOwotfQotCi12b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQotewotICAgIHJlbW92ZVByb3BlcnRpZXNJblNl
dChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0KLXZvaWQgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZUluaGVyaXRhYmxlUHJvcGVydGllcygpCi17Ci0g
ICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGluaGVyaXRhYmxlUHJvcGVydGllcywgbnVtSW5oZXJp
dGFibGVQcm9wZXJ0aWVzKTsKLX0KLQotUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQg
KnNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAotewotICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
Q1NTUHJvcGVydHk+IGxpc3Q7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1Zh
bHVlKHNldFtpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5k
KENTU1Byb3BlcnR5KHNldFtpXSwgdmFsdWUucmVsZWFzZSgpLCBmYWxzZSkpOwotICAgIH0KLSAg
ICByZXR1cm4gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKDAsIGxpc3QpOwotfQotCi12
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29u
c3QgaW50ICpzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBib29sIGNoYW5nZWQgPSBmYWxz
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2V0W2ldKTsKLSAg
ICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBtX3ZhbHVlcy5yZW1vdmUoQ1NTUHJvcGVy
dHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Ci0gICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoY2hhbmdlZCkKLSAgICAgICAgc2V0
Q2hhbmdlZCgpOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQotewotICAgIHJldHVybiB0
aGlzOwotfQotCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5ldyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbigwLCBtX3ZhbHVlcyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLXVuc2lnbmVkIHNob3J0IENTU0luaGVyaXRlZFZhbHVlOjpj
c3NWYWx1ZVR5cGUoKSBjb25zdAotewotICAgIHJldHVybiBDU1NfSU5IRVJJVDsKLX0KLQotU3Ry
aW5nIENTU0luaGVyaXRlZFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gImlu
aGVyaXQiOwotfQotCi11bnNpZ25lZCBzaG9ydCBDU1NJbml0aWFsVmFsdWU6OmNzc1ZhbHVlVHlw
ZSgpIGNvbnN0Ci17IAotICAgIHJldHVybiBDU1NfSU5JVElBTDsgCi19Ci0KLVN0cmluZyBDU1NJ
bml0aWFsVmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVybiAiaW5pdGlhbCI7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ1NTVmFsdWVMaXN0Ojp+
Q1NTVmFsdWVMaXN0KCkKLXsKLSAgICBmb3IgKENTU1ZhbHVlICp2YWwgPSBtX3ZhbHVlcy5maXJz
dCgpOyB2YWw7IHZhbCA9IG1fdmFsdWVzLm5leHQoKSkKLSAgICAgICAgdmFsLT5kZXJlZigpOwot
fQotCi11bnNpZ25lZCBzaG9ydCBDU1NWYWx1ZUxpc3Q6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENTU19WQUxVRV9MSVNUOwotfQotCi12b2lkIENTU1ZhbHVlTGlzdDo6YXBw
ZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbCkKLXsKLSAgICBtX3ZhbHVlcy5hcHBlbmQodmFs
LnJlbGVhc2UoKSk7Ci19Ci0KLVN0cmluZyBDU1NWYWx1ZUxpc3Q6OmNzc1RleHQoKSBjb25zdAot
ewotICAgIFN0cmluZyByZXN1bHQgPSAiIjsKLQotICAgIGZvciAoRGVwcmVjYXRlZFB0ckxpc3RJ
dGVyYXRvcjxDU1NWYWx1ZT4gaXRlcmF0b3IobV92YWx1ZXMpOyBpdGVyYXRvci5jdXJyZW50KCk7
ICsraXRlcmF0b3IpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmVzdWx0ICs9ICIsICI7Ci0gICAgICAgIHJlc3VsdCArPSBpdGVyYXRvci5jdXJyZW50KCkt
PmNzc1RleHQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0
aXZlVmFsdWUoKQotewotICAgIG1fdHlwZSA9IDA7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShpbnQgaWRlbnQpCi17Ci0gICAgbV92YWx1ZS5pZGVudCA9IGlkZW50
OwotICAgIG1fdHlwZSA9IENTU19JREVOVDsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1By
aW1pdGl2ZVZhbHVlKGRvdWJsZSBudW0sIFVuaXRUeXBlcyB0eXBlKQotewotICAgIG1fdmFsdWUu
bnVtID0gbnVtOwotICAgIG1fdHlwZSA9IHR5cGU7Ci19Ci0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NQcmltaXRpdmVWYWx1ZShjb25zdCBTdHJpbmcmIHN0ciwgVW5pdFR5cGVzIHR5cGUpCi17Ci0g
ICAgaWYgKChtX3ZhbHVlLnN0cmluZyA9IHN0ci5pbXBsKCkpKQotICAgICAgICBtX3ZhbHVlLnN0
cmluZy0+cmVmKCk7Ci0gICAgbV90eXBlID0gdHlwZTsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8Q291bnRlcj4gYykKLXsKLSAgICBtX3ZhbHVl
LmNvdW50ZXIgPSBjLnJlbGVhc2UoKTsKLSAgICBtX3R5cGUgPSBDU1NfQ09VTlRFUjsKLX0KLQot
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBhc3NSZWZQdHI8UmVjdEltcGw+
IHIpCi17Ci0gICAgbV92YWx1ZS5yZWN0ID0gci5yZWxlYXNlKCk7Ci0gICAgbV90eXBlID0gQ1NT
X1JFQ1Q7Ci19Ci0KLSNpZiBfX0FQUExFX18KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRp
dmVWYWx1ZShQYXNzUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gcikKLXsKLSAgICBtX3ZhbHVlLnJl
Z2lvbiA9IHIucmVsZWFzZSgpOwotICAgIG1fdHlwZSA9IENTU19EQVNIQk9BUkRfUkVHSU9OOwot
fQotI2VuZGlmCi0KLUNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShSR0JBMzIg
Y29sb3IpCi17Ci0gICAgbV92YWx1ZS5yZ2Jjb2xvciA9IGNvbG9yOwotICAgIG1fdHlwZSA9IENT
U19SR0JDT0xPUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKFBh
c3NSZWZQdHI8UGFpcj4gcCkKLXsKLSAgICBtX3ZhbHVlLnBhaXIgPSBwLnJlbGVhc2UoKTsKLSAg
ICBtX3R5cGUgPSBDU1NfUEFJUjsKLX0KLQotQ1NTUHJpbWl0aXZlVmFsdWU6On5DU1NQcmltaXRp
dmVWYWx1ZSgpCi17Ci0gICAgY2xlYW51cCgpOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVl
OjpjbGVhbnVwKCkKLXsKLSAgICBzd2l0Y2gobV90eXBlKSB7Ci0gICAgY2FzZSBDU1NfU1RSSU5H
OgotICAgIGNhc2UgQ1NTX1VSSToKLSAgICBjYXNlIENTU19BVFRSOgotICAgICAgICBpZiAobV92
YWx1ZS5zdHJpbmcpCi0gICAgICAgICAgICBtX3ZhbHVlLnN0cmluZy0+ZGVyZWYoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ09VTlRFUjoKLSAgICAgICAgbV92YWx1ZS5jb3VudGVy
LT5kZXJlZigpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19SRUNUOgotICAgICAgICBt
X3ZhbHVlLnJlY3QtPmRlcmVmKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX1BBSVI6
Ci0gICAgICAgIG1fdmFsdWUucGFpci0+ZGVyZWYoKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgX19B
UFBMRV9fCi0gICAgY2FzZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgaWYgKG1fdmFs
dWUucmVnaW9uKQotICAgICAgICAgICAgbV92YWx1ZS5yZWdpb24tPmRlcmVmKCk7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgbV90eXBlID0gMDsKLX0KLQotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3Ro
SW50KFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxl
bmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVj
aXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0g
ICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRv
IHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4w
MSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFYIHx8IHJlc3VsdCA8IElO
VF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgICAgCi19
Ci0KLWludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSAq
c3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGRvdWJsZSByZXN1bHQgPSBtdWx0aXBs
aWVyICogY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNvbnZl
cnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0
NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2UncmUg
cmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9IHJl
c3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBJTlRfTUFY
IHx8IHJlc3VsdCA8IElOVF9NSU4pCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50
KXJlc3VsdDsgIAotfQotCi1jb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZmZmZmOyAv
LyBtYXggdmFsdWUgZm9yIGEgMjgtYml0IGludAotY29uc3QgaW50IGludE1pbkZvckxlbmd0aCA9
ICgtMHg3ZmZmZmZmLTEpOyAvLyBtaW4gdmFsdWUgZm9yIGEgMjgtYml0IGludAotCi0vLyBMZW5n
dGhzIGV4cGVjdCBhbiBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hl
Y2sgZm9yIGEgZGlmZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSkKLXsKLSAgICBkb3VibGUg
cmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsKLSAgICAKLSAgICAvLyBUaGlzIGNv
bnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mLCBlLmcu
LCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBhaGVhZCBhbmQgcm91bmQgaWYgd2Un
cmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIgdmFsdWUuCi0gICAgcmVzdWx0ICs9
IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAotICAgIGlmIChyZXN1bHQgPiBpbnRN
YXhGb3JMZW5ndGggfHwgcmVzdWx0IDwgaW50TWluRm9yTGVuZ3RoKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gKGludClyZXN1bHQ7ICAgIAotfQotCi0vLyBMZW5ndGhzIGV4cGVjdCBh
biBpbnQgdGhhdCBpcyBvbmx5IDI4LWJpdHMsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGEgZGlm
ZmVyZW50IG92ZXJmbG93LgotaW50IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoSW50
Rm9yTGVuZ3RoKFJlbmRlclN0eWxlICpzdHlsZSwgZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAg
ZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwot
ICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBpbXByZWNpc2UsIG9mdGVuIHJlc3VsdGlu
ZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAgV2UKLSAgICAvLyBuZWVkIHRvIGdvIGFo
ZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xvc2UgdG8gdGhlIG5leHQgaW50ZWdlciB2
YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0g
ICAgaWYgKHJlc3VsdCA+IGludE1heEZvckxlbmd0aCB8fCByZXN1bHQgPCBpbnRNaW5Gb3JMZW5n
dGgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAoaW50KXJlc3VsdDsgIAotfQotCi1z
aG9ydCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpz
dHlsZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKTsK
LSAgICAKLSAgICAvLyBUaGlzIGNvbnZlcnNpb24gaXMgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRp
bmcgaW4gdmFsdWVzIG9mLCBlLmcuLCA0NC45OTk5OC4gIFdlCi0gICAgLy8gbmVlZCB0byBnbyBh
aGVhZCBhbmQgcm91bmQgaWYgd2UncmUgcmVhbGx5IGNsb3NlIHRvIHRoZSBuZXh0IGludGVnZXIg
dmFsdWUuCi0gICAgcmVzdWx0ICs9IHJlc3VsdCA8IDAgPyAtMC4wMSA6ICswLjAxOwotICAgIAot
ICAgIGlmIChyZXN1bHQgPiBTSFJUX01BWCB8fCByZXN1bHQgPCBTSFJUX01JTikKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIChzaG9ydClyZXN1bHQ7ICAgIAotfQotCi1zaG9ydCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlICpzdHlsZSwgZG91
YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgZG91YmxlIHJlc3VsdCA9IG11bHRpcGxpZXIgKiBjb21w
dXRlTGVuZ3RoRmxvYXQoc3R5bGUpOwotICAgIAotICAgIC8vIFRoaXMgY29udmVyc2lvbiBpcyBp
bXByZWNpc2UsIG9mdGVuIHJlc3VsdGluZyBpbiB2YWx1ZXMgb2YsIGUuZy4sIDQ0Ljk5OTk4LiAg
V2UKLSAgICAvLyBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSByZWFsbHkgY2xv
c2UgdG8gdGhlIG5leHQgaW50ZWdlciB2YWx1ZS4KLSAgICByZXN1bHQgKz0gcmVzdWx0IDwgMCA/
IC0wLjAxIDogKzAuMDE7Ci0gICAgCi0gICAgaWYgKHJlc3VsdCA+IFNIUlRfTUFYIHx8IHJlc3Vs
dCA8IFNIUlRfTUlOKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gKHNob3J0KXJlc3Vs
dDsgIAotfQotCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhGbG9hdChS
ZW5kZXJTdHlsZSAqc3R5bGUsIGJvb2wgYXBwbHlab29tRmFjdG9yKQotewotICAgIHVuc2lnbmVk
IHNob3J0IHR5cGUgPSBwcmltaXRpdmVUeXBlKCk7Ci0KLSAgICAvLyBXZSBhbHdheXMgYXNzdW1l
IDk2IENTUyBwaXhlbHMgaW4gYSBDU1MgaW5jaC4gVGhpcyBpcyB0aGUgY29sZCBoYXJkIHRydXRo
IG9mIHRoZSBXZWIuCi0gICAgLy8gQXQgaGlnaCBEUEksIHdlIG1heSBzY2FsZSBhIENTUyBwaXhl
bCwgYnV0IHRoZSByYXRpbyBvZiB0aGUgQ1NTIHBpeGVsIHRvIHRoZSBzby1jYWxsZWQKLSAgICAv
LyAiYWJzb2x1dGUiIENTUyBsZW5ndGggdW5pdHMgbGlrZSBpbmNoIGFuZCBwdCBpcyBhbHdheXMg
Zml4ZWQgYW5kIG5ldmVyIGNoYW5nZXMuCi0gICAgZG91YmxlIGNzc1BpeGVsc1BlckluY2ggPSA5
Ni47Ci0KLSAgICBkb3VibGUgZmFjdG9yID0gMS47Ci0gICAgc3dpdGNoKHR5cGUpIHsKLSAgICBj
YXNlIENTU19FTVM6Ci0gICAgICAgIGZhY3RvciA9IGFwcGx5Wm9vbUZhY3RvciA/Ci0gICAgICAg
ICAgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpIDoKLSAgICAgICAgICBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU19FWFM6IHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBidWcgcmln
aHQgbm93IHdoZXJlIHRoZSB6b29tIHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lcyB0byBF
WCB1bml0cy4KLSAgICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgdG8gY29tcHV0ZSBFWCB1c2luZyBm
b250TWV0cmljcyBmb3IgdGhlIG9yaWdpbmFsIHNwZWNpZmllZFNpemUgYW5kIG5vdCB1c2UKLSAg
ICAgICAgLy8gb3VyIGFjdHVhbCBjb25zdHJ1Y3RlZCByZW5kZXJpbmcgZm9udC4KLSAgICAgICAg
ZmFjdG9yID0gc3R5bGUtPmZvbnQoKS54SGVpZ2h0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIENTU19QWDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NfQ006Ci0gICAg
ICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2gvMi41NDsgLy8gKDIuNTQgY20vaW4pCi0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX01NOgotICAgICAgICBmYWN0b3IgPSBjc3NQaXhlbHNQ
ZXJJbmNoLzI1LjQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTX0lOOgotICAgICAgICBm
YWN0b3IgPSBjc3NQaXhlbHNQZXJJbmNoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU19Q
VDoKLSAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaC83Mi47Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTX1BDOgotICAgICAgICAvLyAxIHBjID09IDEyIHB0Ci0gICAgICAgIGZh
Y3RvciA9IGNzc1BpeGVsc1BlckluY2gqMTIuLzcyLjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHJldHVybiBnZXRGbG9hdFZh
bHVlKCkgKiBmYWN0b3I7Ci19Ci0KLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldEZsb2F0VmFs
dWUoIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBkb3VibGUgZmxvYXRWYWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAvLyAjIyMgY2hl
Y2sgaWYgcHJvcGVydHkgc3VwcG9ydHMgdGhpcyB0eXBlCi0gICAgaWYgKG1fdHlwZSA+IENTU19E
SU1FTlNJT04pIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIC8vaWYobV90eXBlID4gQ1NTX0RJTUVOU0lPTikgdGhyb3cgRE9NRXhjZXB0aW9u
KElOVkFMSURfQUNDRVNTX0VSUik7Ci0gICAgbV92YWx1ZS5udW0gPSBmbG9hdFZhbHVlOwotICAg
IG1fdHlwZSA9IHVuaXRUeXBlOwotfQotCi1kb3VibGUgc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9u
KHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQotewotICAgIGRvdWJsZSBjc3NQaXhlbHNQZXJJbmNo
ID0gOTYuMDsKLSAgICBkb3VibGUgZmFjdG9yID0gMS4wOwotICAgIAotICAgIHN3aXRjaCh1bml0
VHlwZSkgewotICAgICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgotICAg
ICAgICAgICAgZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDIuNTQ7IC8vICgyLjU0IGNtL2lu
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19NTToKLSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2ggLyAyNS40OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTjoK
LSAgICAgICAgICAgIGZhY3RvciA9IGNzc1BpeGVsc1BlckluY2g7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgotICAgICAgICAgICAg
ZmFjdG9yID0gY3NzUGl4ZWxzUGVySW5jaCAvIDcyLjA7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDOgotICAgICAgICAgICAgZmFjdG9y
ID0gY3NzUGl4ZWxzUGVySW5jaCAqIDEyLjAgLyA3Mi4wOyAvLyAxIHBjID09IDEyIHB0Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gZmFjdG9yOwotfQotCi1kb3VibGUgQ1NTUHJpbWl0aXZlVmFs
dWU6OmdldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpCi17Ci0gICAgaWYgKHVu
aXRUeXBlID09IG1fdHlwZSB8fCB1bml0VHlwZSA8IENTU19QWCB8fCB1bml0VHlwZSA+IENTU19Q
QykKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUubnVtOwotICAgIAotICAgIGRvdWJsZSBjb252ZXJ0
ZWRWYWx1ZSA9IG1fdmFsdWUubnVtOwotICAgIAotICAgIC8vIEZpcnN0IGNvbnZlcnQgdGhlIHZh
bHVlIGZyb20gbV90eXBlIGludG8gQ1NTUGl4ZWxzCi0gICAgZG91YmxlIGZhY3RvciA9IHNjYWxl
RmFjdG9yRm9yQ29udmVyc2lvbihtX3R5cGUpOwotICAgIGNvbnZlcnRlZFZhbHVlICo9IGZhY3Rv
cjsKLSAgICAKLSAgICAvLyBOb3cgY29udmVydCBmcm9tIENTU1BpeGVscyB0byB0aGUgc3BlY2lm
aWVkIHVuaXRUeXBlCi0gICAgZmFjdG9yID0gc2NhbGVGYWN0b3JGb3JDb252ZXJzaW9uKHVuaXRU
eXBlKTsKLSAgICBjb252ZXJ0ZWRWYWx1ZSAvPSBmYWN0b3I7Ci0gICAgCi0gICAgcmV0dXJuIGNv
bnZlcnRlZFZhbHVlOwotfQotCi12b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRTdHJpbmdWYWx1
ZSggdW5zaWduZWQgc2hvcnQgc3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nICZzdHJpbmdWYWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGNsZWFudXAoKTsKLSAgICAv
L2lmKG1fdHlwZSA8IENTU19TVFJJTkcpIHRocm93IERPTUV4Y2VwdGlvbihJTlZBTElEX0FDQ0VT
U19FUlIpOwotICAgIC8vaWYobV90eXBlID4gQ1NTX0FUVFIpIHRocm93IERPTUV4Y2VwdGlvbihJ
TlZBTElEX0FDQ0VTU19FUlIpOwotICAgIGlmIChtX3R5cGUgPCBDU1NfU1RSSU5HIHx8IG1fdHlw
ZSA+IENTU19BVFRSKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoc3RyaW5nVHlwZSAhPSBDU1NfSURFTlQpIHsKLSAgICAgICAgbV92
YWx1ZS5zdHJpbmcgPSBzdHJpbmdWYWx1ZS5pbXBsKCk7Ci0gICAgICAgIG1fdmFsdWUuc3RyaW5n
LT5yZWYoKTsKLSAgICAgICAgbV90eXBlID0gc3RyaW5nVHlwZTsKLSAgICB9Ci0gICAgLy8gIyMj
IHBhcnNlIGlkZW50Ci19Ci0KLVN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0U3RyaW5nVmFs
dWUoKSBjb25zdAotewotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgICAgIGNhc2UgQ1NTX1NU
UklORzoKLSAgICAgICAgY2FzZSBDU1NfQVRUUjoKLSAgICAgICAgY2FzZSBDU1NfVVJJOgotICAg
ICAgICAgICAgcmV0dXJuIG1fdmFsdWUuc3RyaW5nOwotICAgICAgICBjYXNlIENTU19JREVOVDoK
LSAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZU5hbWUobV92YWx1ZS5pZGVudCk7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIENTUyAyLjEgc3BlYyBzYXlzIHlv
dSBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmUuCi0gICAgICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi11bnNpZ25lZCBzaG9ydCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NTX1BS
SU1JVElWRV9WQUxVRTsKLX0KLQotYm9vbCBDU1NQcmltaXRpdmVWYWx1ZTo6cGFyc2VTdHJpbmco
IGNvbnN0IFN0cmluZyAmLypzdHJpbmcqLywgYm9vbCApCi17Ci0gICAgLy8gIyMjCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1pbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElkZW50KCkKLXsKLSAg
ICBpZihtX3R5cGUgIT0gQ1NTX0lERU5UKSByZXR1cm4gMDsKLSAgICByZXR1cm4gbV92YWx1ZS5p
ZGVudDsKLX0KLQotU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsK
LSAgICAvLyAjIyMgcmV0dXJuIHRoZSBvcmlnaW5hbCB2YWx1ZSBpbnN0ZWFkIG9mIGEgZ2VuZXJh
dGVkIG9uZSAoZS5nLiBjb2xvcgotICAgIC8vIG5hbWUgaWYgaXQgd2FzIHNwZWNpZmllZCkgLSBj
aGVjayB3aGF0IHNwZWMgc2F5cyBhYm91dCB0aGlzCi0gICAgU3RyaW5nIHRleHQ7Ci0gICAgc3dp
dGNoICggbV90eXBlICkgewotICAgICAgICBjYXNlIENTU19VTktOT1dOOgotICAgICAgICAgICAg
Ly8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfTlVNQkVSOgotICAg
ICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU19QRVJDRU5UQUdFOgotICAgICAgICAgICAgdGV4dCA9
IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICIlIjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU19FTVM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIo
bV92YWx1ZS5udW0pICsgImVtIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U19FWFM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsg
ImV4IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19QWDoKLSAgICAgICAg
ICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAicHgiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0NNOgotICAgICAgICAgICAgdGV4dCA9IFN0cmlu
Zzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJjbSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NfTU06Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1
ZS5udW0pICsgIm1tIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19JTjoK
LSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkgKyAiaW4iOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX1BUOgotICAgICAgICAgICAgdGV4
dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJwdCI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NfUEM6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1i
ZXIobV92YWx1ZS5udW0pICsgInBjIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU19ERUc6Ci0gICAgICAgICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0p
ICsgImRlZyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfUkFEOgotICAg
ICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG1fdmFsdWUubnVtKSArICJyYWQiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTX0dSQUQ6Ci0gICAgICAgICAgICB0ZXh0
ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImdyYWQiOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTX01TOgotICAgICAgICAgICAgdGV4dCA9IFN0cmluZzo6bnVt
YmVyKG1fdmFsdWUubnVtKSArICJtcyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDU1NfUzoKLSAgICAgICAgICAgIHRleHQgPSBTdHJpbmc6Om51bWJlcihtX3ZhbHVlLm51bSkg
KyAicyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfSFo6Ci0gICAgICAg
ICAgICB0ZXh0ID0gU3RyaW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImh6IjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19LSFo6Ci0gICAgICAgICAgICB0ZXh0ID0gU3Ry
aW5nOjpudW1iZXIobV92YWx1ZS5udW0pICsgImtoeiI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NfRElNRU5TSU9OOgotICAgICAgICAgICAgLy8gIyMjCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfU1RSSU5HOgotICAgICAgICAgICAgdGV4dCA9IHF1
b3RlU3RyaW5nSWZOZWVkZWQobV92YWx1ZS5zdHJpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTX1VSSToKLSAgICAgICAgICAgIHRleHQgPSAidXJsKCIgKyBTdHJpbmco
bV92YWx1ZS5zdHJpbmcpICsgIikiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTX0lERU5UOgotICAgICAgICAgICAgdGV4dCA9IGdldFZhbHVlTmFtZShtX3ZhbHVlLmlkZW50
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU19BVFRSOgotICAgICAgICAg
ICAgLy8gIyMjCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NfQ09VTlRFUjoK
LSAgICAgICAgICAgIC8vICMjIwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
X1JFQ1Q6IHsKLSAgICAgICAgICAgIFJlY3RJbXBsKiByZWN0VmFsID0gZ2V0UmVjdFZhbHVlKCk7
Ci0gICAgICAgICAgICB0ZXh0ID0gInJlY3QoIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZh
bC0+dG9wKCktPmNzc1RleHQoKSArICIgIjsKLSAgICAgICAgICAgIHRleHQgKz0gcmVjdFZhbC0+
cmlnaHQoKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5i
b3R0b20oKS0+Y3NzVGV4dCgpICsgIiAiOwotICAgICAgICAgICAgdGV4dCArPSByZWN0VmFsLT5s
ZWZ0KCktPmNzc1RleHQoKSArICIpIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQ1NTX1JHQkNPTE9SOiB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcihtX3Zh
bHVlLnJnYmNvbG9yKTsKLSAgICAgICAgICAgIGlmIChjb2xvci5hbHBoYSgpIDwgMHhGRikKLSAg
ICAgICAgICAgICAgICB0ZXh0ID0gInJnYmEoIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB0ZXh0ID0gInJnYigiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJl
cihjb2xvci5yZWQoKSkgKyAiLCAiOwotICAgICAgICAgICAgdGV4dCArPSBTdHJpbmc6Om51bWJl
cihjb2xvci5ncmVlbigpKSArICIsICI7Ci0gICAgICAgICAgICB0ZXh0ICs9IFN0cmluZzo6bnVt
YmVyKGNvbG9yLmJsdWUoKSk7Ci0gICAgICAgICAgICBpZiAoY29sb3IuYWxwaGEoKSA8IDB4RkYp
Ci0gICAgICAgICAgICAgICAgdGV4dCArPSAiLCAiICsgU3RyaW5nOjpudW1iZXIoKGZsb2F0KWNv
bG9yLmFscGhhKCkgLyAweEZGKTsKLSAgICAgICAgICAgIHRleHQgKz0gIikiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NfUEFJUjoKLSAgICAgICAgICAg
IHRleHQgPSBtX3ZhbHVlLnBhaXItPmZpcnN0KCktPmNzc1RleHQoKTsKLSAgICAgICAgICAgIHRl
eHQgKz0gIiAiOwotICAgICAgICAgICAgdGV4dCArPSBtX3ZhbHVlLnBhaXItPnNlY29uZCgpLT5j
c3NUZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBfX0FQUExFX18KLSAgICAgICAgY2Fz
ZSBDU1NfREFTSEJPQVJEX1JFR0lPTjoKLSAgICAgICAgICAgIGZvciAoRGFzaGJvYXJkUmVnaW9u
KiByZWdpb24gPSBnZXREYXNoYm9hcmRSZWdpb25WYWx1ZSgpOyByZWdpb247IHJlZ2lvbiA9IHJl
Z2lvbi0+bV9uZXh0LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9ICJkYXNoYm9hcmQt
cmVnaW9uKCI7Ci0gICAgICAgICAgICAgICAgdGV4dCArPSByZWdpb24tPm1fbGFiZWw7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKLSAgICAgICAgICAgICAgICAgICAg
dGV4dCArPSAiIGNpcmNsZSAiOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZ2lvbi0+bV9p
c1JlY3RhbmdsZSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiIHJlY3RhbmdsZSAiOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgdGV4dCArPSByZWdpb24tPnRvcCgpLT5jc3NUZXh0KCkgKyAiICI7Ci0gICAgICAg
ICAgICAgICAgdGV4dCArPSByZWdpb24tPnJpZ2h0KCktPmNzc1RleHQoKSArICIgIjsKLSAgICAg
ICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+Ym90dG9tKCktPmNzc1RleHQoKSArICIgIjsKLSAg
ICAgICAgICAgICAgICB0ZXh0ICs9IHJlZ2lvbi0+bGVmdCgpLT5jc3NUZXh0KCk7Ci0gICAgICAg
ICAgICAgICAgdGV4dCArPSAiKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gdGV4dDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmVj
dEltcGw6On5SZWN0SW1wbCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhaXI6On5QYWlyKCkK
LXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VWYWx1ZShjb25z
dCBTdHJpbmcmIHVybCwgU3R5bGVCYXNlICpzdHlsZSkKLSAgICA6IENTU1ByaW1pdGl2ZVZhbHVl
KHVybCwgQ1NTX1VSSSksIG1faW1hZ2UoMCksIG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKKyAgICA6
IENTU1ByaW1pdGl2ZVZhbHVlKHVybCwgQ1NTX1VSSSkKKyAgICAsIG1faW1hZ2UoMCkKKyAgICAs
IG1fYWNjZXNzZWRJbWFnZShmYWxzZSkKIHsKIH0KIAogQ1NTSW1hZ2VWYWx1ZTo6Q1NTSW1hZ2VW
YWx1ZSgpCi0gICAgOiBDU1NQcmltaXRpdmVWYWx1ZShDU1NfVkFMX05PTkUpLCBtX2ltYWdlKDAp
LCBtX2FjY2Vzc2VkSW1hZ2UodHJ1ZSkKKyAgICA6IENTU1ByaW1pdGl2ZVZhbHVlKENTU19WQUxf
Tk9ORSkKKyAgICAsIG1faW1hZ2UoMCkKKyAgICAsIG1fYWNjZXNzZWRJbWFnZSh0cnVlKQogewog
fQogCkBAIC0xMjE0LDE0MiArNjYsNCBAQAogICAgIHJldHVybiBtX2ltYWdlOwogfQogCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Q1NTQm9yZGVySW1hZ2VWYWx1
ZShQYXNzUmVmUHRyPENTU0ltYWdlVmFsdWU+IGltYWdlLAotICAgIFBhc3NSZWZQdHI8UmVjdElt
cGw+IGltYWdlUmVjdCwgaW50IGhvcml6b250YWxSdWxlLCBpbnQgdmVydGljYWxSdWxlKQotICAg
IDogbV9pbWFnZShpbWFnZSksIG1faW1hZ2VTbGljZVJlY3QoaW1hZ2VSZWN0KQotICAgICwgbV9o
b3Jpem9udGFsU2l6ZVJ1bGUoaG9yaXpvbnRhbFJ1bGUpLCBtX3ZlcnRpY2FsU2l6ZVJ1bGUodmVy
dGljYWxSdWxlKQotewotfQotCi1TdHJpbmcgQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Y3NzVGV4dCgp
IGNvbnN0Ci17Ci0gICAgLy8gSW1hZ2UgZmlyc3QuCi0gICAgU3RyaW5nIHRleHQobV9pbWFnZS0+
Y3NzVGV4dCgpKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICAKLSAgICAvLyBOb3cgdGhlIHJlY3Qs
IGJ1dCBpdCBpc24ndCByZWFsbHkgYSByZWN0LCBzbyB3ZSBkdW1wIG1hbnVhbGx5Ci0gICAgdGV4
dCArPSBtX2ltYWdlU2xpY2VSZWN0LT50b3AoKS0+Y3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAi
OwotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+cmlnaHQoKS0+Y3NzVGV4dCgpOwotICAg
IHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gbV9pbWFnZVNsaWNlUmVjdC0+Ym90dG9tKCktPmNz
c1RleHQoKTsKLSAgICB0ZXh0ICs9ICIgIjsKLSAgICB0ZXh0ICs9IG1faW1hZ2VTbGljZVJlY3Qt
PmxlZnQoKS0+Y3NzVGV4dCgpOwotICAgIAotICAgIC8vIE5vdyB0aGUga2V5d29yZHMuCi0gICAg
dGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBDU1NQcmltaXRpdmVWYWx1ZShtX2hvcml6b250YWxT
aXplUnVsZSkuY3NzVGV4dCgpOwotICAgIHRleHQgKz0gIiAiOwotICAgIHRleHQgKz0gQ1NTUHJp
bWl0aXZlVmFsdWUobV92ZXJ0aWNhbFNpemVSdWxlKS5jc3NUZXh0KCk7Ci0KLSAgICByZXR1cm4g
dGV4dDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUZvbnRGYW1pbHlWYWx1ZTo6Rm9udEZh
bWlseVZhbHVlKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHN0cmluZykKLSAgICA6IENTU1ByaW1p
dGl2ZVZhbHVlKFN0cmluZygpLCBDU1NfU1RSSU5HKQotewotICAgIHN0YXRpYyBjb25zdCBSZWd1
bGFyRXhwcmVzc2lvbiBwYXJlblJlZygiIFxcKC4qXFwpJCIpOwotICAgIHN0YXRpYyBjb25zdCBS
ZWd1bGFyRXhwcmVzc2lvbiBicmFjZVJlZygiIFxcWy4qXFxdJCIpOwotCi0gICAgcGFyc2VkRm9u
dE5hbWUgPSBzdHJpbmc7Ci0gICAgLy8gYSBsYW5ndWFnZSB0YWcgaXMgb2Z0ZW4gYWRkZWQgaW4g
YnJhY2VzIGF0IHRoZSBlbmQuIFJlbW92ZSBpdC4KLSAgICBwYXJzZWRGb250TmFtZS5yZXBsYWNl
KHBhcmVuUmVnLCAiIik7Ci0gICAgLy8gcmVtb3ZlIFtYZnRdIHF1YWxpZmllcnMKLSAgICBwYXJz
ZWRGb250TmFtZS5yZXBsYWNlKGJyYWNlUmVnLCAiIik7Ci19Ci0KLVN0cmluZyBGb250RmFtaWx5
VmFsdWU6OmNzc1RleHQoKSBjb25zdAotewotICAgIHJldHVybiBxdW90ZVN0cmluZ0lmTmVlZGVk
KHBhcnNlZEZvbnROYW1lKTsKLX0KLQotU3RyaW5nIEZvbnRWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0
Ci17Ci0gICAgLy8gZm9udCB2YXJpYW50IHdlaWdodCBzaXplIC8gbGluZS1oZWlnaHQgZmFtaWx5
IAotCi0gICAgU3RyaW5nIHJlc3VsdCgiIik7Ci0KLSAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAg
cmVzdWx0ICs9IHN0eWxlLT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh2YXJpYW50KSB7Ci0g
ICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7
Ci0gICAgICAgIHJlc3VsdCArPSB2YXJpYW50LT5jc3NUZXh0KCk7Ci0gICAgfQotICAgIGlmICh3
ZWlnaHQpIHsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVz
dWx0ICs9ICIgIjsKLSAgICAgICAgcmVzdWx0ICs9IHdlaWdodC0+Y3NzVGV4dCgpOwotICAgIH0K
LSAgICBpZiAoc2l6ZSkgewotICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gc2l6ZS0+Y3NzVGV4dCgpOwot
ICAgIH0KLSAgICBpZiAobGluZUhlaWdodCkgewotICAgICAgICBpZiAoIXNpemUpCi0gICAgICAg
ICAgICByZXN1bHQgKz0gIiAiOwotICAgICAgICByZXN1bHQgKz0gIi8iOwotICAgICAgICByZXN1
bHQgKz0gbGluZUhlaWdodC0+Y3NzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoZmFtaWx5KSB7Ci0g
ICAgICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSAiICI7
Ci0gICAgICAgIHJlc3VsdCArPSBmYW1pbHktPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotICAgIAotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNo
YWRvdwotU2hhZG93VmFsdWU6OlNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IF94LAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF95LAotICAgIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IF9ibHVyLAotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IF9jb2xvcikKLSAgICA6IHgoX3gpLCB5KF95KSwgYmx1cihfYmx1ciksIGNvbG9y
KF9jb2xvcikKLXsKLX0KLQotU3RyaW5nIFNoYWRvd1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsK
LSAgICBTdHJpbmcgdGV4dCgiIik7Ci0KLSAgICBpZiAoY29sb3IpCi0gICAgICAgIHRleHQgKz0g
Y29sb3ItPmNzc1RleHQoKTsKLSAgICBpZiAoeCkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geC0+Y3NzVGV4
dCgpOwotICAgIH0KLSAgICBpZiAoeSkgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0geS0+Y3NzVGV4dCgpOwot
ICAgIH0KLSAgICBpZiAoYmx1cikgewotICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgdGV4dCArPSAiICI7Ci0gICAgICAgIHRleHQgKz0gYmx1ci0+Y3NzVGV4dCgpOwot
ICAgIH0KLQotICAgIHJldHVybiB0ZXh0OwotfQotCi1TdHJpbmcgQ1NTUHJvcGVydHk6OmNzc1Rl
eHQoKSBjb25zdAotewotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoaWQoKSkgKyAiOiAiICsg
bV92YWx1ZS0+Y3NzVGV4dCgpCi0gICAgICAgICsgKGlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRh
bnQiIDogIiIpICsgIjsgIjsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU1Byb3BlcnR5
ICZhLCBjb25zdCBDU1NQcm9wZXJ0eSAmYikKLXsKLSAgICByZXR1cm4gYS5tX2lkID09IGIubV9p
ZCAmJiBhLm1faW1wb3J0YW50ID09IGIubV9pbXBvcnRhbnQgJiYgYS5tX3ZhbHVlID09IGIubV92
YWx1ZTsKLX0KLQogfQpJbmRleDogY3NzL0NTU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NT
U1ZhbHVlLmgJKHJldmlzaW9uIDE0NDAwKQorKysgY3NzL0NTU1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDg0ICsyMCwxMyBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
Ki8KIAotI2lmbmRlZiBDU1NfY3NzX3ZhbHVlaW1wbF9oXwotI2RlZmluZSBDU1NfY3NzX3ZhbHVl
aW1wbF9oXworI2lmbmRlZiBDU1NWYWx1ZV9ICisjZGVmaW5lIENTU1ZhbHVlX0gKIAotI2luY2x1
ZGUgIkNhY2hlZE9iamVjdENsaWVudC5oIgotI2luY2x1ZGUgImNzc19iYXNlLmgiCi0jaW5jbHVk
ZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0j
aW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0KLWNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CisjaW5jbHVkZSAiY3NzX2Jhc2UuaCIg
Ly8gZm9yIFN0eWxlQmFzZQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDb3VudGVyOwot
Y2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgTm9kZTsKLWNsYXNzIFBhaXI7Ci1jbGFzcyBSZWN0SW1w
bDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0jaWYgX19BUFBMRV9fCi1jbGFzcyBEYXNoYm9hcmRS
ZWdpb247Ci0jZW5kaWYKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotZXh0ZXJuIGNv
bnN0IGludCBpbmhlcml0YWJsZVByb3BlcnRpZXNbXTsKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBu
dW1Jbmhlcml0YWJsZVByb3BlcnRpZXM7Ci0KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gOiBw
dWJsaWMgU3R5bGVCYXNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZURlY2xh
cmF0aW9uKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5TmFtZShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSk7Ci0KLSAgICBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7Ci0KLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICBTdHJp
bmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0gICAgU3Ry
aW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwotICAg
IFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7
Ci0gICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OwotICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NW
YWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFBy
b3BlcnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3Qg
PSAwOwotCi0gICAgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0eSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShpbnQgcHJv
cGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5
SUQsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAK
LSAgICB2b2lkIGRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKLQotICAg
IFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5T
ZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoK
LSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUgPSAwKTsKLQotcHJp
dmF0ZToKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24g
Jik7Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgb3BlcmF0b3I9KGNvbnN0IENTU1N0eWxlRGVj
bGFyYXRpb24gJik7Ci19OwotCiBjbGFzcyBDU1NWYWx1ZSA6IHB1YmxpYyBTdHlsZUJhc2UKIHsK
IHB1YmxpYzoKQEAgLTExOSw0NDIgKzQ4LDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb250VmFs
dWUoKSB7IHJldHVybiBmYWxzZTsgfQogfTsKIAotY2xhc3MgQ1NTSW5oZXJpdGVkVmFsdWUgOiBw
dWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNz
c1ZhbHVlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LX07Ci0KLWNsYXNzIENTU0luaXRpYWxWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGlj
OgotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTVmFsdWVMaXN0
IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q1NTVmFsdWVMaXN0
KCk7Ci0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5jb3Vu
dCgpOyB9Ci0gICAgQ1NTVmFsdWUqIGl0ZW0gKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3Zh
bHVlcy5hdChpbmRleCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlTGlzdCgpIHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENTU1ZhbHVlPik7Ci0gICAgdmly
dHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGVwcmVjYXRl
ZFB0ckxpc3Q8Q1NTVmFsdWU+IG1fdmFsdWVzOwotfTsKLQotCi1jbGFzcyBDU1NQcmltaXRpdmVW
YWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewotcHVibGljOgotICAgIGVudW0gVW5pdFR5cGVzIHsK
LSAgICAgICAgQ1NTX1VOS05PV04gPSAwLAotICAgICAgICBDU1NfTlVNQkVSID0gMSwKLSAgICAg
ICAgQ1NTX1BFUkNFTlRBR0UgPSAyLAotICAgICAgICBDU1NfRU1TID0gMywKLSAgICAgICAgQ1NT
X0VYUyA9IDQsCi0gICAgICAgIENTU19QWCA9IDUsCi0gICAgICAgIENTU19DTSA9IDYsCi0gICAg
ICAgIENTU19NTSA9IDcsCi0gICAgICAgIENTU19JTiA9IDgsCi0gICAgICAgIENTU19QVCA9IDks
Ci0gICAgICAgIENTU19QQyA9IDEwLAotICAgICAgICBDU1NfREVHID0gMTEsCi0gICAgICAgIENT
U19SQUQgPSAxMiwKLSAgICAgICAgQ1NTX0dSQUQgPSAxMywKLSAgICAgICAgQ1NTX01TID0gMTQs
Ci0gICAgICAgIENTU19TID0gMTUsCi0gICAgICAgIENTU19IWiA9IDE2LAotICAgICAgICBDU1Nf
S0haID0gMTcsCi0gICAgICAgIENTU19ESU1FTlNJT04gPSAxOCwKLSAgICAgICAgQ1NTX1NUUklO
RyA9IDE5LAotICAgICAgICBDU1NfVVJJID0gMjAsCi0gICAgICAgIENTU19JREVOVCA9IDIxLAot
ICAgICAgICBDU1NfQVRUUiA9IDIyLAotICAgICAgICBDU1NfQ09VTlRFUiA9IDIzLAotICAgICAg
ICBDU1NfUkVDVCA9IDI0LAotICAgICAgICBDU1NfUkdCQ09MT1IgPSAyNSwKLSAgICAgICAgQ1NT
X1BBSVIgPSAxMDAsIC8vIFdlIGVudmlzaW9uIHRoaXMgYmVpbmcgZXhwb3NlZCBhcyBhIG1lYW5z
IG9mIGdldHRpbmcgY29tcHV0ZWQgc3R5bGUgdmFsdWVzIGZvciBwYWlycyAoYm9yZGVyLXNwYWNp
bmcvcmFkaXVzLCBiYWNrZ3JvdW5kLXBvc2l0aW9uLCBldGMuKQotICAgICAgICBDU1NfREFTSEJP
QVJEX1JFR0lPTiA9IDEwMSAvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0aGlzIGRvaW5nIGFz
IGEgcHJpbWl0aXZlIHZhbHVlPyBJdCBzaG91bGQgbm90IGJlIQotICAgIH07Ci0KLSAgICAvLyBG
SVhNRTogaW50IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0b28gdHJpY2t5IGZvciBjb2xv
ciB2cy4gaWRlbnQKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKGludCBpZGVudCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoZG91YmxlLCBVbml0VHlwZXMp
OwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYsIFVuaXRUeXBlcyk7Ci0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUoUGFzc1JlZlB0cjxSZWN0SW1wbD4pOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKHVuc2ln
bmVkIGNvbG9yKTsgLy8gUkdCIHZhbHVlCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0
cjxQYWlyPik7Ci0KLSNpZiBfX0FQUExFX18KLSAgICBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVm
UHRyPERhc2hib2FyZFJlZ2lvbj4pOyAvLyBGSVhNRTogV2h5IGlzIGRhc2hib2FyZCByZWdpb24g
YSBwcmltaXRpdmUgdmFsdWU/IFRoaXMgbWFrZXMgbm8gc2Vuc2UuCi0jZW5kaWYKLQotICAgIHZp
cnR1YWwgfkNTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0KLSAgICB2b2lkIGNsZWFudXAoKTsKLQotICAg
IHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LQotICAgIC8qCi0gICAgICogY29tcHV0ZXMgYSBsZW5ndGggaW4gcGl4ZWxzIG91dCBvZiB0aGUg
Z2l2ZW4gQ1NTVmFsdWUuIE5lZWQgdGhlIFJlbmRlclN0eWxlIHRvIGdldAotICAgICAqIHRoZSBm
b250aW5mbyBpbiBjYXNlIHZhbCBpcyBkZWZpbmVkIGluIGVtIG9yIGV4LgotICAgICAqCi0gICAg
ICogVGhlIG1ldHJpY3MgaGF2ZSB0byBiZSBhIGJpdCBkaWZmZXJlbnQgZm9yIHNjcmVlbiBhbmQg
cHJpbnRlciBvdXRwdXQuCi0gICAgICogRm9yIHNjcmVlbiBvdXRwdXQgd2UgYXNzdW1lIDEgaW5j
aCA9PSA3MiBweCwgZm9yIHByaW50ZXIgd2UgYXNzdW1lIDMwMCBkcGkKLSAgICAgKgotICAgICAq
IHRoaXMgaXMgc2NyZWVuL3ByaW50ZXIgZGVwZW5kZW50LCBzbyB3ZSBwcm9iYWJseSBuZWVkIGEg
Y29uZmlnIG9wdGlvbiBmb3IgdGhpcywKLSAgICAgKiBhbmQgc29tZSB0b29sIHRvIGNhbGlicmF0
ZS4KLSAgICAgKi8KLSAgICBpbnQgY29tcHV0ZUxlbmd0aEludChSZW5kZXJTdHlsZSopOwotICAg
IGludCBjb21wdXRlTGVuZ3RoSW50KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwot
ICAgIGludCBjb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKFJlbmRlclN0eWxlKik7Ci0gICAgaW50
IGNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoUmVuZGVyU3R5bGUqLCBkb3VibGUgbXVsdGlwbGll
cik7Ci0gICAgc2hvcnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKik7Ci0gICAgc2hv
cnQgY29tcHV0ZUxlbmd0aFNob3J0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIpOwot
ICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoRmxvYXQoUmVuZGVyU3R5bGUqLCBib29sIGFwcGx5Wm9v
bUZhY3RvciA9IHRydWUpOwotCi0gICAgLy8gdXNlIHdpdGggY2FyZSEhIQotICAgIHZvaWQgc2V0
UHJpbWl0aXZlVHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KLSAg
ICB2b2lkIHNldEZsb2F0VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIGRvdWJsZSBmbG9h
dFZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0VmFsdWUodW5zaWdu
ZWQgc2hvcnQgdW5pdFR5cGUpOwotICAgIGRvdWJsZSBnZXRGbG9hdFZhbHVlKCkgeyByZXR1cm4g
bV92YWx1ZS5udW07IH0KLQotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUodW5zaWduZWQgc2hvcnQg
c3RyaW5nVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdWYWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIGNvbnN0OwotICAgIAotICAgIENvdW50ZXIqIGdl
dENvdW50ZXJWYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0NP
VU5URVIgPyAwIDogbV92YWx1ZS5jb3VudGVyOwotICAgIH0KLQotICAgIFJlY3RJbXBsKiBnZXRS
ZWN0VmFsdWUgKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SRUNUID8g
MCA6IG1fdmFsdWUucmVjdDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBnZXRSR0JDb2xvclZhbHVl
KCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90eXBlICE9IENTU19SR0JDT0xPUiA/IDAgOiBt
X3ZhbHVlLnJnYmNvbG9yOwotICAgIH0KLQotICAgIFBhaXIqIGdldFBhaXJWYWx1ZSgpIGNvbnN0
IHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUEFJUiA/IDAgOiBtX3ZhbHVlLnBhaXI7
Ci0gICAgfQotCi0jaWYgX19BUFBMRV9fCi0gICAgRGFzaGJvYXJkUmVnaW9uICpnZXREYXNoYm9h
cmRSZWdpb25WYWx1ZSAoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgIT0gQ1NTX0RB
U0hCT0FSRF9SRUdJT04gPyAwIDogbV92YWx1ZS5yZWdpb247Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNQcmltaXRpdmVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAg
aW50IGdldElkZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgYm9vbCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNRdWlya1ZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KLQot
cHJvdGVjdGVkOgotICAgIGludCBtX3R5cGU7Ci0gICAgdW5pb24gewotICAgICAgICBpbnQgaWRl
bnQ7Ci0gICAgICAgIGRvdWJsZSBudW07Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAg
ICAgICAgQ291bnRlciogY291bnRlcjsKLSAgICAgICAgUmVjdEltcGwqIHJlY3Q7Ci0gICAgICAg
IHVuc2lnbmVkIHJnYmNvbG9yOwotICAgICAgICBQYWlyKiBwYWlyOwotI2lmIF9fQVBQTEVfXwot
ICAgICAgICBEYXNoYm9hcmRSZWdpb24qIHJlZ2lvbjsKLSNlbmRpZgotICAgIH0gbV92YWx1ZTsK
LX07Ci0KLS8vIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5IG1hcmdpbnMgaW4g
cmVmbG93IHJvb3RzIChib2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgotLy8gVGhlIGJhc2lj
IGlkZWEgaXMgdGhhdCBhIHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0gKGZvciBx
dWlya3kgZW0pIGluc3RlYWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4gIFdoZW4gdGhlIHF1
aXJreSB2YWx1ZSBpcyB1c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZSBtYXJnaW4g
d2lsbAotLy8gY29sbGFwc2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgotY2xhc3MgQ1NTUXVp
cmtQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZQotewotcHVibGljOgot
ICAgIENTU1F1aXJrUHJpbWl0aXZlVmFsdWUoZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCi0g
ICAgICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUobnVtLCB0eXBlKSB7fQotCi0gICAgdmlydHVhbCBi
b29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLWNsYXNzIENvdW50ZXIg
OiBwdWJsaWMgU2hhcmVkPENvdW50ZXI+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmcgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotICAgIFN0cmluZyBsaXN0U3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX2xpc3RTdHlsZTsgfQotICAgIFN0cmluZyBzZXBhcmF0b3IoKSBj
b25zdCB7IHJldHVybiBtX3NlcGFyYXRvcjsgfQotCi0gICAgU3RyaW5nIG1faWRlbnRpZmllcjsK
LSAgICBTdHJpbmcgbV9saXN0U3R5bGU7Ci0gICAgU3RyaW5nIG1fc2VwYXJhdG9yOwotfTsKLQot
Y2xhc3MgUmVjdEltcGwgOiBwdWJsaWMgU2hhcmVkPFJlY3RJbXBsPiB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+UmVjdEltcGwoKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25z
dCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQuZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Ym90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9ib3R0b20uZ2V0KCk7IH0KLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdC5nZXQoKTsgfQotCi0gICAgdm9p
ZCBzZXRUb3AoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9wID0gdG9w
OyB9Ci0gICAgdm9pZCBzZXRSaWdodChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByaWdo
dCkgeyBtX3JpZ2h0ID0gcmlnaHQ7IH0KLSAgICB2b2lkIHNldEJvdHRvbShQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBib3R0b20pIHsgbV9ib3R0b20gPSBib3R0b207IH0KLSAgICB2b2lk
IHNldExlZnQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xlZnQgPSBs
ZWZ0OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9w
OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9yaWdodDsKLSAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IG1fYm90dG9tOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bV9sZWZ0OwotfTsKLQotLy8gQSBwcmltaXRpdmUgdmFsdWUgcmVwcmVzZW50aW5nIGEgcGFpci4g
IFRoaXMgaXMgdXNlZnVsIGZvciBwcm9wZXJ0aWVzIGxpa2UgYm9yZGVyLXJhZGl1cywgYmFja2dy
b3VuZC1zaXplL3Bvc2l0aW9uLAotLy8gYW5kIGJvcmRlci1zcGFjaW5nIChhbGwgb2Ygd2hpY2gg
YXJlIHNwYWNlLXNlcGFyYXRlZCBzZXRzIG9mIHR3byB2YWx1ZXMpLiAgQXQgdGhlIG1vbWVudCB3
ZSBhcmUgb25seSB1c2luZyBpdCBmb3IKLS8vIGJvcmRlci1yYWRpdXMgYW5kIGJhY2tncm91bmQt
c2l6ZSwgYnV0IChGSVhNRSkgYm9yZGVyLXNwYWNpbmcgYW5kIGJhY2tncm91bmQtcG9zaXRpb24g
Y291bGQgYmUgY29udmVydGVkIG92ZXIgdG8gdXNlCi0vLyBpdCAoZWxpbWluYXRpbmcgc29tZSBl
eHRyYSAtd2Via2l0LSBpbnRlcm5hbCBwcm9wZXJ0aWVzKS4KLWNsYXNzIFBhaXIgOiBwdWJsaWMg
U2hhcmVkPFBhaXI+IHsKLXB1YmxpYzoKLSAgICBQYWlyKCkgOiBtX2ZpcnN0KDApLCBtX3NlY29u
ZCgwKSB7IH0KLSAgICBQYWlyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZpcnN0LCBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpCi0gICAgICAgIDogbV9maXJzdChm
aXJzdCksIG1fc2Vjb25kKHNlY29uZCkgeyB9Ci0gICAgdmlydHVhbCB+UGFpcigpOwotCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdC5nZXQoKTsg
fQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBtX3NlY29u
ZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRGaXJzdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBmaXJzdCkgeyBtX2ZpcnN0ID0gZmlyc3Q7IH0KLSAgICB2b2lkIHNldFNlY29uZChQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpIHsgbV9zZWNvbmQgPSBzZWNvbmQ7IH0K
LQotcHJvdGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdDsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kOwotfTsKLQotY2xhc3MgRGFzaGJv
YXJkUmVnaW9uIDogcHVibGljIFJlY3RJbXBsIHsKLXB1YmxpYzoKLSAgICBEYXNoYm9hcmRSZWdp
b24oKSA6IG1faXNDaXJjbGUoMCksIG1faXNSZWN0YW5nbGUoMCkgeyB9Ci0KLSAgICBSZWZQdHI8
RGFzaGJvYXJkUmVnaW9uPiBtX25leHQ7Ci0gICAgU3RyaW5nIG1fbGFiZWw7Ci0gICAgU3RyaW5n
IG1fZ2VvbWV0cnlUeXBlOwotICAgIGJvb2wgbV9pc0NpcmNsZSA6IDE7Ci0gICAgYm9vbCBtX2lz
UmVjdGFuZ2xlIDogMTsKLX07Ci0KLWNsYXNzIENTU0ltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTUHJp
bWl0aXZlVmFsdWUsIHB1YmxpYyBDYWNoZWRPYmplY3RDbGllbnQKLXsKLXB1YmxpYzoKLSAgICBD
U1NJbWFnZVZhbHVlKCk7Ci0gICAgQ1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJpbmcmIHVybCwgU3R5
bGVCYXNlKik7Ci0gICAgdmlydHVhbCB+Q1NTSW1hZ2VWYWx1ZSgpOwotCi0gICAgQ2FjaGVkSW1h
Z2UqIGltYWdlKERvY0xvYWRlciopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ2FjaGVkSW1hZ2UqIG1f
aW1hZ2U7Ci0gICAgYm9vbCBtX2FjY2Vzc2VkSW1hZ2U7Ci19OwotCi1jbGFzcyBDU1NCb3JkZXJJ
bWFnZVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTQm9yZGVySW1h
Z2VWYWx1ZSgpOwotICAgIENTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NJbWFnZVZh
bHVlPiwKLSAgICAgICAgUGFzc1JlZlB0cjxSZWN0SW1wbD4sIGludCBob3Jpem9udGFsUnVsZSwg
aW50IHZlcnRpY2FsUnVsZSk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0KLXB1YmxpYzoKLSAgICAvLyBUaGUgYm9yZGVyIGltYWdlLgotICAgIFJlZlB0cjxDU1NJbWFn
ZVZhbHVlPiBtX2ltYWdlOwotCi0gICAgLy8gVGhlc2UgZm91ciB2YWx1ZXMgYXJlIHVzZWQgdG8g
bWFrZSAiY3V0cyIgaW4gdGhlIGltYWdlLiAgVGhleSBjYW4gYmUgbnVtYmVycwotICAgIC8vIG9y
IHBlcmNlbnRhZ2VzLgotICAgIFJlZlB0cjxSZWN0SW1wbD4gbV9pbWFnZVNsaWNlUmVjdDsKLSAg
ICAKLSAgICAvLyBWYWx1ZXMgZm9yIGhvdyB0byBoYW5kbGUgdGhlIHNjYWxpbmcvc3RyZXRjaGlu
Zy90aWxpbmcgb2YgdGhlIGltYWdlIHNsaWNlcy4KLSAgICBpbnQgbV9ob3Jpem9udGFsU2l6ZVJ1
bGU7IC8vIFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIHdpZHRocyBvZiB0aGUgdG9wL21pZGRs
ZS9ib3R0b20KLSAgICBpbnQgbV92ZXJ0aWNhbFNpemVSdWxlOyAvLyBSdWxlIGZvciBob3cgdG8g
YWRqdXN0IHRoZSBoZWlnaHRzIG9mIHRoZSBsZWZ0L21pZGRsZS9yaWdodAotfTsKLQotY2xhc3Mg
Rm9udEZhbWlseVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlCi17Ci1wdWJsaWM6Ci0g
ICAgRm9udEZhbWlseVZhbHVlKCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZzdHJpbmcpOwotICAg
IGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gcGFyc2Vk
Rm9udE5hbWU7IH0KLSAgICBpbnQgZ2VuZXJpY0ZhbWlseVR5cGUoKSBjb25zdCB7IHJldHVybiBf
Z2VuZXJpY0ZhbWlseVR5cGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKLQotICAgIERlcHJlY2F0ZWRTdHJpbmcgcGFyc2VkRm9udE5hbWU7Ci1wcml2YXRlOgotICAg
IGludCBfZ2VuZXJpY0ZhbWlseVR5cGU7Ci19OwotCi1jbGFzcyBGb250VmFsdWUgOiBwdWJsaWMg
Q1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7
Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZTsKLSAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHZhcmlhbnQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB3ZWln
aHQ7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplOwotICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodDsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmYW1p
bHk7Ci19OwotCi0vLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotY2xhc3Mg
U2hhZG93VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBTaGFkb3dWYWx1
ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4LAotICAgICAgICBQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB5LAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBibHVyLAotICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcik7Ci0g
ICAgCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB4OwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geTsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXI7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjb2xvcjsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBhbm90
aGVyIGhlbHBlciBjbGFzcwotY2xhc3MgQ1NTUHJvcGVydHkKLXsKLXB1YmxpYzoKLSAgICBDU1NQ
cm9wZXJ0eShpbnQgcHJvcElELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQgPSBmYWxzZSwgaW50IHNob3J0aGFuZElEID0gMCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNl
KQotICAgICAgICA6IG1faWQocHJvcElEKSwgbV9zaG9ydGhhbmRJRChzaG9ydGhhbmRJRCksIG1f
aW1wb3J0YW50KGltcG9ydGFudCksIG1faW1wbGljaXQoaW1wbGljaXQpLCBtX3ZhbHVlKHZhbHVl
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgQ1NTUHJvcGVydHkgJm9wZXJhdG9yPShjb25zdCBD
U1NQcm9wZXJ0eSYgbykKLSAgICB7Ci0gICAgICAgIG1faWQgPSBvLm1faWQ7Ci0gICAgICAgIG1f
c2hvcnRoYW5kSUQgPSBvLm1fc2hvcnRoYW5kSUQ7Ci0gICAgICAgIG1faW1wb3J0YW50ID0gby5t
X2ltcG9ydGFudDsKLSAgICAgICAgbV92YWx1ZSA9IG8ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLSAgICAKLSAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
Ci0gICAgaW50IHNob3J0aGFuZElEKCkgY29uc3QgeyByZXR1cm4gbV9zaG9ydGhhbmRJRDsgfQot
ICAgIAotICAgIGJvb2wgaXNJbXBvcnRhbnQoKSBjb25zdCB7IHJldHVybiBtX2ltcG9ydGFudDsg
fQotICAgIGJvb2wgaXNJbXBsaWNpdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbGljaXQ7IH0KLQot
ICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLSAg
ICAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLy8gbWFrZSBzdXJlIHRoZSBm
b2xsb3dpbmcgZml0cyBpbiA0IGJ5dGVzLgotICAgIGludCBtX2lkOwotICAgIGludCBtX3Nob3J0
aGFuZElEOyAgLy8gSWYgdGhpcyBwcm9wZXJ0eSB3YXMgc2V0IGFzIHBhcnQgb2YgYSBzaG9ydGhh
bmQsIGdpdmVzIHRoZSBzaG9ydGhhbmQuCi0gICAgYm9vbCBtX2ltcG9ydGFudCA6IDE7Ci0gICAg
Ym9vbCBtX2ltcGxpY2l0IDogMTsgLy8gV2hldGhlciBvciBub3QgdGhlIHByb3BlcnR5IHdhcyBz
ZXQgaW1wbGljaXRseSBhcyB0aGUgcmVzdWx0IG9mIGEgc2hvcnRoYW5kLgotCi0gICAgZnJpZW5k
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU1NQcm9wZXJ0eSAmLCBjb25zdCBDU1NQcm9wZXJ0eSAm
KTsKLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV92YWx1ZTsKLX07Ci0KLWNsYXNzIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24KLXsKLXB1Ymxp
YzoKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpOwotICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8
Q1NTUHJvcGVydHk+ICYpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUq
IHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5ICogY29uc3QgKiwgaW50IG51bVByb3BlcnRp
ZXMpOwotCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gJm9wZXJhdG9yPShjb25zdCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiAmKTsKLQotICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBu
b2RlKSB7IG1fbm9kZSA9IG5vZGU7IH0KLQotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlE
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVydHlQcmlvcml0eShpbnQgcHJvcGVy
dHlJRCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHBy
b3BlcnR5SUQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoaW50
IHByb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5KGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IGNvcHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCk7Ci0KLSAgICBEZXByZWNhdGVk
VmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gdmFsdWVzSXRlcmF0b3IoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9Ci0KLSAgICBib29sIHNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90
aWZ5Q2hhbmdlZCA9IHRydWUpOwotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIG5vdGlmeUNo
YW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlvbkNvZGUgZWM7IHJldHVybiBzZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZSwgaW1wb3J0YW50LCBub3RpZnlDaGFuZ2VkLCBlYyk7IH0K
LQotICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlD
aGFuZ2VkLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQgPSB0cnVlKQotICAgICAgICB7IEV4Y2VwdGlv
bkNvZGUgZWM7IHJldHVybiByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2Vk
LCBlYyk7IH0KLQotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIHZvaWQgc2V0Q2hhbmdlZCgpOwot
IAotICAgIC8vIHNldExlbmd0aFByb3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChO
ZWVkZWQgZm9yIGNvbnZlcnNpb24gb2YgSFRNTCBhdHRyaWJ1dGVzLikKLSAgICB2b2lkIHNldExl
bmd0aFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCwgYm9vbCBtdWx0aUxlbmd0aCA9IGZhbHNlKTsKLSAgICB2b2lkIHNldFN0cmluZ1By
b3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsgLy8gcGFyc2VkIHN0cmlu
ZyB2YWx1ZQotICAgIHZvaWQgc2V0SW1hZ2VQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3Qg
U3RyaW5nJiBVUkwsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwotIAotICAgIC8vIFRoZSBmb2xs
b3dpbmcgcGFyc2VzIGFuIGVudGlyZSBuZXcgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgdm9pZCBw
YXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbik7Ci0KLSAgICAv
LyBCZXNpZGVzIGFkZGluZyB0aGUgcHJvcGVydGllcywgdGhpcyBhbHNvIHJlbW92ZXMgYW55IGV4
aXN0aW5nIHByb3BlcnRpZXMgd2l0aCB0aGVzZSBJRHMuCi0gICAgLy8gSXQgZG9lcyBubyBub3Rp
ZmljYXRpb24gc2luY2UgaXQncyBjYWxsZWQgYnkgdGhlIHBhcnNlci4KLSAgICB2b2lkIGFkZFBh
cnNlZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkgKiBjb25zdCAqLCBpbnQgbnVtUHJvcGVy
dGllcyk7Ci0gCi0gICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29w
eUJsb2NrUHJvcGVydGllcygpIGNvbnN0OwotICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCk7Ci0gICAgdm9pZCByZW1vdmVJbmhlcml0YWJsZVByb3BlcnRpZXMoKTsKLSAgICB2b2lkIHJl
bW92ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQot
ICAgIHZvaWQgbWVyZ2UoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBib29sIGFyZ092ZXJy
aWRlc09uQ29uZmxpY3QgPSB0cnVlKTsKLSAKLXByaXZhdGU6Ci0gICAgU3RyaW5nIGdldFNob3J0
SGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bWJlcikgY29uc3Q7Ci0gICAg
U3RyaW5nIGdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9wZXJ0aWVzKSBjb25zdDsKLSAKLSAgICBE
ZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiBtX3ZhbHVlczsKLSAgICBOb2RlKiBtX25v
ZGU7Ci19OwotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGtzdmcyL3N2Zy9TVkdD
b2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdDb2xvci5oCShyZXZpc2lvbiAxNDQw
NikKKysrIGtzdmcyL3N2Zy9TVkdDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxNyArMjQs
MTMgQEAKICNkZWZpbmUgS1NWR19TVkdDb2xvckltcGxfSAogI2lmIFNWR19TVVBQT1JUCiAKKyNp
bmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAKLSNpbmNsdWRlICJjc3Nf
dmFsdWVpbXBsLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgUkdCQ29sb3I7
Ci19OwogCi1uYW1lc3BhY2UgV2ViQ29yZQotewogICAgIGNsYXNzIFNWR0NvbG9yIDogcHVibGlj
IENTU1ZhbHVlCiAgICAgewogICAgIHB1YmxpYzoKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRp
b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE0NDA2KQorKysga3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiU1ZHU3R5bGVk
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlhMaW5r
TmFtZXMuaCIKLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCiAjaW5jbHVkZSAia3N2Z2Nzc3By
b3BlcnRpZXMuaCIKICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgPG1hdGguaD4KSW5kZXg6
IGtzdmcyL3N2Zy9TVkdDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NvbG9y
LmNwcAkocmV2aXNpb24gMTQ0MDYpCisrKyBrc3ZnMi9zdmcvU1ZHQ29sb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJEZXBy
ZWNhdGVkU3RyaW5nTGlzdC5oIgogCi0jaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgogCiAjaW5j
bHVkZSAia3N2Zy5oIgogI2luY2x1ZGUgIlNWR0NvbG9yLmgiCkluZGV4OiBrc3ZnMi9zdmcvU1ZH
Q3Vyc29yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50
LmgJKHJldmlzaW9uIDE0NDA2KQorKysga3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlNWR1Rlc3RzLmgiCiAjaW5j
bHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5oIgorI2luY2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZQogewpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNDQwNikKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICAKICAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBRM1ZhbHVl
TGlzdDxmbG9hdD4gX3ZhbHVlczsKKyAgICBEZXByZWNhdGVkVmFsdWVMaXN0PGZsb2F0PiBfdmFs
dWVzOwogICAgIFNWR051bWJlckxpc3QgKm51bWJlcnMgPSB2YWx1ZXMoKS0+YmFzZVZhbCgpOwog
ICAgIHVuc2lnbmVkIGludCBuciA9IG51bWJlcnMtPm51bWJlck9mSXRlbXMoKTsKICAgICBmb3Io
dW5zaWduZWQgaW50IGkgPSAwO2kgPCBucjtpKyspCkluZGV4OiBrc3ZnMi9lY21hL0VjbWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL2VjbWEvRWNtYS5jcHAJKHJldmlzaW9uIDE0NDA2KQorKysg
a3N2ZzIvZWNtYS9FY21hLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2lmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSA8a2RvbS9OYW1lc3Bh
Y2UuaD4KLSNpbmNsdWRlICJjc3NfdmFsdWVpbXBsLmgiCiAjaW5jbHVkZSA8a2RvbS9ldmVudHMv
RXZlbnQuaD4KICNpbmNsdWRlIDxrZG9tL2NvcmUvTm9kZS5oPgogI2luY2x1ZGUgPGtkb20vZXZl
bnRzL0V2ZW50Lmg+CkluZGV4OiBrc3ZnMi9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ0MDYpCisrKyBrc3Zn
Mi9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsMTMgQEAK
ICNpbmNsdWRlICJrc3ZnLmgiCiAKICNpbmNsdWRlICJTVkdQYWludC5oIgorI2luY2x1ZGUgIkNT
U0luaGVyaXRlZFZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW5pdGlhbFZhbHVlLmgiCiAjaW5jbHVk
ZSAiY3NzcGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUg
IkNTU1F1aXJrUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAia3N2Z2Nzc3Byb3BlcnRpZXMu
YyIKICNpbmNsdWRlICJrc3ZnY3NzdmFsdWVzLmMiCiAKQEAgLTMxNiw4ICszMjAsNyBAQAogICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+
ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7CiAgICAgICAgIHZhbHVlTGlzdC0+
bmV4dCgpOwogICAgIH0KLSAgICBpZihwYXJzZWRWYWx1ZSkKLSAgICB7CisgICAgaWYgKHBhcnNl
ZFZhbHVlKSB7CiAgICAgICAgIGlmICghdmFsdWVMaXN0LT5jdXJyZW50KCkgfHwgaW5TaG9ydGhh
bmQoKSkgewogICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwYXJzZWRWYWx1ZSwgaW1w
b3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzMyLDggKzMzNSw3IEBACiAg
ICAgQ1NTVmFsdWVMaXN0ICpyZXQgPSBuZXcgQ1NTVmFsdWVMaXN0OwogICAgIEtET01DU1NWYWx1
ZSAqdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBib29sIHZhbGlkX3ByaW1pdGl2
ZSA9IHRydWU7Ci0gICAgd2hpbGUodmFsaWRfcHJpbWl0aXZlICYmIHZhbHVlKQotICAgIHsKKyAg
ICB3aGlsZSh2YWxpZF9wcmltaXRpdmUgJiYgdmFsdWUpIHsKICAgICAgICAgdmFsaWRfcHJpbWl0
aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQgfEZOb25OZWcsIGZhbHNl
KTsKICAgICAgICAgaWYodmFsdWUtPmlkICE9IDApCiAgICAgICAgICAgICByZXQtPmFwcGVuZChu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKSk7CkluZGV4OiBrc3ZnMi9jc3MvU1ZHUmVu
ZGVyU3R5bGVEZWZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvY3NzL1NWR1JlbmRlclN0eWxlRGVm
cy5oCShyZXZpc2lvbiAxNDQwNikKKysrIGtzdmcyL2Nzcy9TVkdSZW5kZXJTdHlsZURlZnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBLU1ZHX1NWR1JlbmRlclN0
eWxlRGVmc19ICiAjaWYgU1ZHX1NVUFBPUlQKIAorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcu
aCIKKwogLy8gSGVscGVyIG1hY3JvcyBmb3IgJ1NWR1JlbmRlclN0eWxlJwogI2RlZmluZSBTVkdf
UlNfREVGSU5FX0FUVFJJQlVURShEYXRhLCBUeXBlLCBOYW1lLCBJbml0aWFsKSBcCiAgICAgdm9p
ZCBzZXQjI1R5cGUoRGF0YSB2YWwpIHsgc3ZnX25vbmluaGVyaXRlZF9mbGFncy5mLl8jI05hbWUg
PSB2YWw7IH0gXApAQCAtMTEzLDYgKzExNSw4IEBACiAgICAgICAgIFBFX1ZJU0lCTEVfU1RST0tF
LCBQRV9WSVNJQkxFX0ZJTEwsIFBFX1ZJU0lCTEVfUEFJTlRFRCwgUEVfQUxMCiAgICAgfTsKIAor
ICAgIGNsYXNzIENTU1ZhbHVlTGlzdDsKKwogICAgIC8vIEluaGVyaXRlZC9Ob24tSW5oZXJpdGVk
IFN0eWxlIERhdGFzdHJ1Y3R1cmVzCiAgICAgY2xhc3MgU3R5bGVGaWxsRGF0YSA6IHB1YmxpYyBT
aGFyZWQ8U3R5bGVGaWxsRGF0YT4KICAgICB7CkluZGV4OiBrc3ZnMi9jc3MvU1ZHQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiAxNDQwNikKKysrIGtzdmcyL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGVEZWZzLmgiCiAjaW5jbHVkZSAiU1ZHU3R5
bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgImNzc19ydWxlaW1wbC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJrc3Zn
LmgiCiAjaW5jbHVkZSAia3N2Z2Nzc3ZhbHVlcy5oIgogI2luY2x1ZGUgImtzdmdjc3Nwcm9wZXJ0
aWVzLmgiCkBAIC0zNzEsOCArMzcxLDcgQEAKICAgICAgICAgY2FzZSBTVkdDU1NfUFJPUF9GSUxM
OgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChmaWxs
UGFpbnQsIEZpbGxQYWludCkKLSAgICAgICAgICAgIGlmKCFwcmltaXRpdmVWYWx1ZSAmJiB2YWx1
ZSkKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUgJiYgdmFs
dWUpIHsKICAgICAgICAgICAgICAgICBTVkdQYWludCAqcGFpbnQgPSBzdGF0aWNfY2FzdDxTVkdQ
YWludCAqPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYocGFpbnQpCiAgICAgICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQocGFpbnQpOwpAQCAtMzgzLDggKzM4Miw3IEBA
CiAgICAgICAgIGNhc2UgU1ZHQ1NTX1BST1BfU1RST0tFOgogICAgICAgICB7CiAgICAgICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdHJva2VQYWludCwgU3Ryb2tlUGFpbnQpCi0g
ICAgICAgICAgICBpZighcHJpbWl0aXZlVmFsdWUgJiYgdmFsdWUpCi0gICAgICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlICYmIHZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgU1ZHUGFpbnQgKnBhaW50ID0gc3RhdGljX2Nhc3Q8U1ZHUGFpbnQgKj4odmFsdWUpOwogICAg
ICAgICAgICAgICAgIGlmKHBhaW50KQogICAgICAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
U3Ryb2tlUGFpbnQocGFpbnQpOwpAQCAtNDA0LDggKzQwMiw3IEBACiAgICAgICAgIGNhc2UgU1ZH
Q1NTX1BST1BfU1RST0tFX0RBU0hBUlJBWToKICAgICAgICAgewogICAgICAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwoc3Ryb2tlRGFzaEFycmF5LCBTdHJva2VEYXNoQXJyYXkpCi0g
ICAgICAgICAgICBpZighcHJpbWl0aXZlVmFsdWUgJiYgdmFsdWUpCi0gICAgICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlICYmIHZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgQ1NTVmFsdWVMaXN0ICpkYXNoZXMgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QgKj4odmFs
dWUpOwogICAgICAgICAgICAgICAgIGlmKGRhc2hlcykKICAgICAgICAgICAgICAgICAgICAgc3Zn
c3R5bGUtPnNldFN0cm9rZURhc2hBcnJheShkYXNoZXMpOwpAQCAtNjQyLDE1ICs2MzksMTIgQEAK
ICAgICAgICAgY2FzZSBDU1NfUFJPUF9DT0xPUjogLy8gY29sb3JzIHx8IGluaGVyaXQKICAgICAg
ICAgewogICAgICAgICAgICAgQ29sb3IgY29sOwotICAgICAgICAgICAgaWYoaXNJbmhlcml0KQot
ICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0NPTkQoQ1NTX1BST1BfQ09MT1IsIGNvbG9yLCBDb2xvcikKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
KGlzSW5pdGlhbCkKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbml0aWFsKQogICAgICAgICAg
ICAgICAgIGNvbCA9IFJlbmRlclN0eWxlOjppbml0aWFsQ29sb3IoKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFNW
R0NvbG9yICpjID0gc3RhdGljX2Nhc3Q8U1ZHQ29sb3IgKj4odmFsdWUpOwogICAgICAgICAgICAg
ICAgIGlmKCFjKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlQcm9wZXJ0eShpZCwgdmFsdWUpOwpAQCAtNjY1LDE1ICs2NTksMTIgQEAKICAgICAgICAg
Y2FzZSBTVkdDU1NfUFJPUF9TVE9QX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICBDb2xv
ciBjb2w7Ci0gICAgICAgICAgICBpZihpc0luaGVyaXQpCi0gICAgICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldENvbG9yKHBh
cmVudFN0eWxlLT5jb2xvcigpKTsKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmKGlzSW5pdGlhbCkKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNJbml0aWFsKQogICAgICAgICAgICAgICAgIGNvbCA9IFNWR1JlbmRlclN0eWxlOjppbml0
aWFsU3RvcENvbG9yKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7CisgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBTVkdDb2xvciAqYyA9IHN0YXRpY19jYXN0PFNW
R0NvbG9yICo+KHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZighYykKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsK
QEAgLTcxMCw4ICs3MDEsNyBAQAogICAgICAgICAgICAgQ29sb3IgY29sOwogICAgICAgICAgICAg
aWYoaXNJbml0aWFsKQogICAgICAgICAgICAgICAgIGNvbCA9IFNWR1JlbmRlclN0eWxlOjppbml0
aWFsU3RvcENvbG9yKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7CisgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBTVkdDb2xvciAqYyA9IHN0YXRpY19jYXN0PFNW
R0NvbG9yICo+KHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZighYykKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsK
SW5kZXg6IGtzdmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE0NDA2KQor
Kysga3N2ZzIvbWlzYy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwyNiArMjQsMjMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpZiBTVkdfU1VQUE9SVAog
Ci0jaW5jbHVkZSA8UmVuZGVyT2JqZWN0Lmg+Ci0KLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNQ
YXRoLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgotI2lu
Y2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oPgotI2luY2x1ZGUg
PGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdTdHJva2VQYWludGVyLmg+Ci0jaW5jbHVkZSA8a2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyU29saWQuaD4KLSNpbmNsdWRlIDxrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oPgotI2luY2x1ZGUgPGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlci5oPgotCisjaW5jbHVkZSAiQ1NTVmFs
dWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJLQ2FudmFzUGF0aC5o
IgorI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgorI2luY2x1ZGUgIktSZW5kZXJp
bmdEZXZpY2UuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nRmlsbFBhaW50ZXIuaCIKKyNpbmNsdWRl
ICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIuaCIKKyNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudC5oIgorI2luY2x1ZGUgIktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkLmgiCisj
aW5jbHVkZSAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotI2luY2x1ZGUgInJlbmRlcl9zdHlsZS5oIgotI2luY2x1ZGUgImNzc192YWx1ZWlt
cGwuaCIKLQotI2luY2x1ZGUgImtzdmcuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJTVkdMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5j
bHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUu
aCIKKyNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAia3N2Zy5oIgorI2lu
Y2x1ZGUgInJlbmRlcl9zdHlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IGtz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvbWlz
Yy9LQ2FudmFzUmVuZGVyaW5nU3R5bGUuaAkocmV2aXNpb24gMTQ0MDYpCisrKyBrc3ZnMi9taXNj
L0tDYW52YXNSZW5kZXJpbmdTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBA
CiAjZGVmaW5lIEtTVkdfS0NhbnZhc1JlbmRlcmluZ1N0eWxlX0gKICNpZiBTVkdfU1VQUE9SVAog
Ci0jaW5jbHVkZSAiY3NzX3ZhbHVlaW1wbC5oIgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc01h
dHJpeC5oPgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00NSw4ICs0NSw5IEBACiAKIAogLy8gU3BlY2lhbCB0eXBlcwotdHlwZWRl
ZiBRM1ZhbHVlTGlzdDxmbG9hdD4gS0NEYXNoQXJyYXk7Cit0eXBlZGVmIERlcHJlY2F0ZWRWYWx1
ZUxpc3Q8ZmxvYXQ+IEtDRGFzaEFycmF5OwogCisgICAgY2xhc3MgQ1NTVmFsdWU7CiAgICAgY2xh
c3MgS1JlbmRlcmluZ0ZpbGxQYWludGVyOwogICAgIGNsYXNzIEtSZW5kZXJpbmdTdHJva2VQYWlu
dGVyOwogICAgIGNsYXNzIEtSZW5kZXJpbmdQYWludFNlcnZlcjsKSW5kZXg6IHBhZ2UvRE9NV2lu
ZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDE0NDA2
KQorKysgcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpJbmRl
eDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9u
IDE0NDA2KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNs
dWRlICJDU1NQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAiQ2FjaGVk
Q1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCkluZGV4OiBw
YWdlL0ZyYW1lUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWVQcml2YXRlLmgJKHJl
dmlzaW9uIDE0NDA2KQorKysgcGFnZS9GcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJjc3NfdmFsdWVp
bXBsLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAiS1dRS0lPR2xvYmFsLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
</data>
<flag name="review"
          id="2351"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>