<?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>9500</bug_id>
          
          <creation_ts>2006-06-18 17:45:58 -0700</creation_ts>
          <short_desc>Split dom2_eventsimpl.* into separate files (one class per file).</short_desc>
          <delta_ts>2006-06-19 20:04:54 -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>New Bugs</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>46205</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-06-18 17:45:58 -0700</bug_when>
    <thetext>Slice and dice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46210</commentid>
    <comment_count>1</comment_count>
      <attachid>8914</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-06-18 19:07:34 -0700</bug_when>
    <thetext>Created attachment 8914
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46331</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-06-19 20:04:54 -0700</bug_when>
    <thetext>Committed as revision 14916.

Please set the SVN_EDITOR environment variable to the path to WebKitTools/Scripts/commit-log-editor before you run &quot;svn commit&quot;.  That&apos;s how the nice commit messages are made!  :)
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8914</attachid>
            <date>2006-06-18 19:07:34 -0700</date>
            <delta_ts>2006-06-19 13:29:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>dom2eventsplit.diff</filename>
            <type>text/plain</type>
            <size>498155</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTU1IEBACisyMDA2LTA2LTE4ICBTYW0gV2VpbmlnICA8c2FtLndlaW5pZ0BnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSBmaXggZm9yIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTUwMAorICAgICAgICAgIFNwbGl0IGRvbTJfZXZlbnRzaW1wbC4qIGludG8gc2VwYXJhdGUgZmls
ZXMgKG9uZSBjbGFzcyBwZXIgZmlsZSkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19kb20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L2tqc19ldmVudHMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9v
YmpjL0RPTS5tbToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTUV2ZW50cy5tbToKKyAgICAg
ICAgKiBiaW5kaW5ncy9vYmpjL0RPTUludGVybmFsLm1tOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGJyaWRnZS9tYWMvRnJhbWVNYWMu
bW06CisgICAgICAgICogZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50Lmg6CisgICAgICAgICog
ZG9tL0JlZm9yZVVubG9hZEV2ZW50LmNwcDogQWRkZWQuCisgICAgICAgICogZG9tL0JlZm9yZVVu
bG9hZEV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmVmb3JlVW5sb2FkRXZlbnQ6
OnJlc3VsdCk6CisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuY3BwOgorICAgICAgICAqIGRv
bS9DbGlwYm9hcmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6On5DbGlw
Ym9hcmQpOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmRFdmVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkRXZlbnQ6OkNsaXBib2FyZEV2ZW50KToKKyAgICAgICAgKiBk
b20vQ2xpcGJvYXJkRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRF
dmVudDo6Y2xpcGJvYXJkKToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dDo6aW5pdEV2ZW50KToKKyAgICAgICAgKiBkb20vRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnQ6Oik6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6dGFyZ2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50OjpjdXJyZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50OjpzZXRDdXJyZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpldmVudFBo
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpzZXRFdmVudFBoYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50OjpidWJibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpjYW5j
ZWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Ojp0aW1lU3RhbXApOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnQ6OnN0b3BQcm9wYWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dDo6cHJvcGFnYXRpb25TdG9wcGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpkZWZhdWx0
UHJldmVudGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpzZXREZWZhdWx0SGFuZGxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6ZGVmYXVsdEhhbmRsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnQ6OnByZXZlbnREZWZhdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50Ojpz
ZXREZWZhdWx0UHJldmVudGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpzZXRDYW5jZWxC
dWJibGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnQ6OmdldENhbmNlbEJ1YmJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudDo6ZGlzcGF0Y2hlZCk6CisgICAgICAgICogZG9tL0V2ZW50VGFy
Z2V0Tm9kZS5jcHA6CisgICAgICAgICogZG9tL0tleWJvYXJkRXZlbnQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OktleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6aW5pdEtleWJvYXJkRXZlbnQpOgorICAgICAgICAqIGRv
bS9LZXlib2FyZEV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVu
dDo6KToKKyAgICAgICAgKFdlYkNvcmU6OktleWJvYXJkRXZlbnQ6OmtleUlkZW50aWZpZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6a2V5TG9jYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6YWx0R3JhcGhLZXkpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5Ym9hcmRFdmVudDo6a2V5RXZlbnQpOgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50OjpNb3VzZUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vdXNlRXZlbnQ6OmlzRHJhZ0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZl
bnQ6OnRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50Ojpmcm9tRWxlbWVu
dCk6CisgICAgICAgICogZG9tL01vdXNlRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpNb3VzZUV2ZW50OjpidXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VFdmVudDo6cmVs
YXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50OjpjbGlwYm9hcmQpOgor
ICAgICAgICAqIGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNlUmVsYXRlZEV2ZW50KToKKyAgICAgICAgKiBk
b20vTW91c2VSZWxhdGVkRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNb3VzZVJl
bGF0ZWRFdmVudDo6c2NyZWVuWCk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZVJlbGF0ZWRFdmVu
dDo6c2NyZWVuWSk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZVJlbGF0ZWRFdmVudDo6Y2xpZW50
WCk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZVJlbGF0ZWRFdmVudDo6Y2xpZW50WSk6CisgICAg
ICAgIChXZWJDb3JlOjpNb3VzZVJlbGF0ZWRFdmVudDo6bGF5ZXJYKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vdXNlUmVsYXRlZEV2ZW50OjpsYXllclkpOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VS
ZWxhdGVkRXZlbnQ6Om9mZnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VSZWxhdGVkRXZl
bnQ6Om9mZnNldFkpOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VSZWxhdGVkRXZlbnQ6OmlzU2lt
dWxhdGVkKToKKyAgICAgICAgKiBkb20vTXV0YXRpb25FdmVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudCk6CisgICAgICAgICogZG9tL011
dGF0aW9uRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkV2ZW50Ojop
OgorICAgICAgICAoV2ViQ29yZTo6TXV0YXRpb25FdmVudDo6cmVsYXRlZE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25FdmVudDo6cHJldlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok11dGF0aW9uRXZlbnQ6Om5ld1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uRXZl
bnQ6OmF0dHJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uRXZlbnQ6OmF0dHJDaGFu
Z2UpOgorICAgICAgICAqIGRvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OlJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGRv
bS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyOjpldmVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXI6Omxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyOjp1c2VDYXB0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyOjpyZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyOjpzZXRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9y
IT0pOgorICAgICAgICAqIGRvbS9VSUV2ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpVSUV2ZW50OjpVSUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlVJRXZlbnQ6OmluaXRVSUV2
ZW50KToKKyAgICAgICAgKiBkb20vVUlFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlVJRXZlbnQ6OnZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6VUlFdmVudDo6ZGV0YWlsKToKKyAg
ICAgICAgKiBkb20vVUlFdmVudFdpdGhLZXlTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlVJRXZlbnRXaXRoS2V5U3RhdGU6OlVJRXZlbnRXaXRoS2V5U3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VUlFdmVudFdpdGhLZXlTdGF0ZTo6Y3RybEtleSk6CisgICAgICAgIChXZWJDb3Jl
OjpVSUV2ZW50V2l0aEtleVN0YXRlOjpzaGlmdEtleSk6CisgICAgICAgIChXZWJDb3JlOjpVSUV2
ZW50V2l0aEtleVN0YXRlOjphbHRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6VUlFdmVudFdpdGhL
ZXlTdGF0ZTo6bWV0YUtleSk6CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnQ6OldoZWVsRXZlbnQpOgorICAgICAgICAqIGRv
bS9XaGVlbEV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2hlZWxFdmVudDo6aXNI
b3Jpem9udGFsKToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnQ6OndoZWVsRGVsdGEpOgor
ICAgICAgICAqIGRvbS9kb20yX2V2ZW50c2ltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRv
bS9kb20yX2V2ZW50c2ltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEJ1
dHRvbkVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAg
ICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAg
ICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9ldmVudHMvU1ZHWm9vbUV2ZW50Lmg6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcDoKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
UGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1Nb3Vz
ZUV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3Jt
TW91c2VFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmNwcDoKKyAgICAgICAgKiB4bWwveG1saHR0cHJlcXVlc3Qu
Y3BwOgorCiAyMDA2LTA2LTE4ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBraWx6ZXIubmV0Pgog
CiAgICAgICAgIFJldmlld2VkIGJ5IGRhcmluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0OTA5KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw2ICsyOTYs
MjggQEAKIAkJN0U2RkVFRDkwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNkZF
RUQ3MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0gKi87IH07CiAJ
CTgxMTY4OTVGMDlGMkE0QTAwMDc3MkNBMCAvKiBTVkdUUmVmRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MTE2ODk1RDA5RjJBNEEwMDA3
NzJDQTAgLyogU1ZHVFJlZkVsZW1lbnQuY3BwICovOyB9OwogCQk4MTE2ODk2MDA5RjJBNEEwMDA3
NzJDQTAgLyogU1ZHVFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgxMTY4OTVFMDlGMkE0QTAwMDc3MkNBMCAvKiBTVkdUUmVmRWxlbWVu
dC5oICovOyB9OworCQk4NTAzMUIzQzBBNDRFRkM3MDBGOTkyRTAgLyogQmVmb3JlVW5sb2FkRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUw
MzFCMjYwQTQ0RUZDNzAwRjk5MkUwIC8qIEJlZm9yZVVubG9hZEV2ZW50LmNwcCAqLzsgfTsKKwkJ
ODUwMzFCM0QwQTQ0RUZDNzAwRjk5MkUwIC8qIEJlZm9yZVVubG9hZEV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIyNzBBNDRFRkM3MDBG
OTkyRTAgLyogQmVmb3JlVW5sb2FkRXZlbnQuaCAqLzsgfTsKKwkJODUwMzFCM0UwQTQ0RUZDNzAw
Rjk5MkUwIC8qIENsaXBib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODUwMzFCMjgwQTQ0RUZDNzAwRjk5MkUwIC8qIENsaXBib2FyZC5oICovOyB9
OworCQk4NTAzMUIzRjBBNDRFRkM3MDBGOTkyRTAgLyogQ2xpcGJvYXJkRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMjkwQTQ0RUZD
NzAwRjk5MkUwIC8qIENsaXBib2FyZEV2ZW50LmNwcCAqLzsgfTsKKwkJODUwMzFCNDAwQTQ0RUZD
NzAwRjk5MkUwIC8qIENsaXBib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIyQTBBNDRFRkM3MDBGOTkyRTAgLyogQ2xpcGJvYXJk
RXZlbnQuaCAqLzsgfTsKKwkJODUwMzFCNDEwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjJCMEE0
NEVGQzcwMEY5OTJFMCAvKiBFdmVudC5jcHAgKi87IH07CisJCTg1MDMxQjQyMEE0NEVGQzcwMEY5
OTJFMCAvKiBFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODUwMzFCMkMwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmggKi87IH07CisJCTg1MDMx
QjQzMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjJEMEE0NEVGQzcwMEY5OTJFMCAv
KiBLZXlib2FyZEV2ZW50LmNwcCAqLzsgfTsKKwkJODUwMzFCNDQwQTQ0RUZDNzAwRjk5MkUwIC8q
IEtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1MDMxQjJFMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmggKi87IH07
CisJCTg1MDMxQjQ1MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZUV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjJGMEE0NEVGQzcwMEY5
OTJFMCAvKiBNb3VzZUV2ZW50LmNwcCAqLzsgfTsKKwkJODUwMzFCNDYwQTQ0RUZDNzAwRjk5MkUw
IC8qIE1vdXNlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1MDMxQjMwMEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZUV2ZW50LmggKi87IH07CisJ
CTg1MDMxQjQ3MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZVJlbGF0ZWRFdmVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIzMTBBNDRFRkM3
MDBGOTkyRTAgLyogTW91c2VSZWxhdGVkRXZlbnQuY3BwICovOyB9OworCQk4NTAzMUI0ODBBNDRF
RkM3MDBGOTkyRTAgLyogTW91c2VSZWxhdGVkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjMyMEE0NEVGQzcwMEY5OTJFMCAvKiBNb3Vz
ZVJlbGF0ZWRFdmVudC5oICovOyB9OworCQk4NTAzMUI0OTBBNDRFRkM3MDBGOTkyRTAgLyogTXV0
YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NTAzMUIzMzBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5jcHAgKi87IH07
CisJCTg1MDMxQjRBMEE0NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIzNDBBNDRFRkM3MDBG
OTkyRTAgLyogTXV0YXRpb25FdmVudC5oICovOyB9OworCQk4NTAzMUI0QjBBNDRFRkM3MDBGOTky
RTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmNwcCAqLzsgfTsKKwkJODUwMzFCNEMwQTQ0RUZDNzAwRjk5MkUw
IC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXIuaCAqLzsgfTsKKwkJODUwMzFCNEQwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJ
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODUwMzFCMzcwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuY3BwICovOyB9OworCQk4NTAzMUI0
RTBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzFCMzgwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQu
aCAqLzsgfTsKKwkJODUwMzFCNEYwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnRXaXRoS2V5U3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMx
QjM5MEE0NEVGQzcwMEY5OTJFMCAvKiBVSUV2ZW50V2l0aEtleVN0YXRlLmggKi87IH07CisJCTg1
MDMxQjUwMEE0NEVGQzcwMEY5OTJFMCAvKiBXaGVlbEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMxQjNBMEE0NEVGQzcwMEY5OTJFMCAv
KiBXaGVlbEV2ZW50LmNwcCAqLzsgfTsKKwkJODUwMzFCNTEwQTQ0RUZDNzAwRjk5MkUwIC8qIFdo
ZWVsRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg1MDMxQjNCMEE0NEVGQzcwMEY5OTJFMCAvKiBXaGVlbEV2ZW50LmggKi87IH07CiAJCTg1NEZF
NzMwMEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NEZFNzI2MEEyMjk3QkUwMDU4RDdBRCAvKiBO
b2RlRmlsdGVyLmNwcCAqLzsgfTsKIAkJODU0RkU3MzEwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVG
aWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1
NEZFNzI3MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggKi87IH07CiAJCTg1NEZFNzMy
MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1NEZFNzI4MEEyMjk3QkUwMDU4RDdB
RCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCAqLzsgfTsKQEAgLTQ5Niw3ICs1MTgsNiBAQAog
CQk5M0YxOThFRjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNB
IC8qIEhUTUxQYXJzZXIuaCAqLzsgfTsKIAkJOTNGMTk4RjAwODI0NUU1OTAwMUU5QUJDIC8qIEhU
TUxUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjUzMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MVG9rZW5pemVyLmggKi87IH07CiAJ
CTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFCQyAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyog
RGVjb2Rlci5oICovOyB9OwotCQk5M0YxOTkxNzA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tMl9ldmVu
dHNpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDMwMjAyREU0NDc2MDE4NjM1Q0EgLyogZG9tMl9ldmVudHNpbXBsLmggKi87IH07CiAJCTkz
RjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdl
LmggKi87IH07CiAJCTkzRjE5OTIxMDgyNDVFNTkwMDFFOUFCQyAvKiB4bWxfdG9rZW5pemVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwQTAy
REU0NDc2MDE4NjM1Q0EgLyogeG1sX3Rva2VuaXplci5oICovOyB9OwogCQk5M0YxOTkyOTA4MjQ1
RTU5MDAxRTlBQkMgLyogS1dRQ1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2ODMwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUNTdHJpbmcu
aCAqLzsgfTsKQEAgLTU4MSw3ICs2MDIsNiBAQAogCQk5M0YxOUE5QjA4MjQ1RTU5MDAxRTlBQkMg
LyogSFRNTFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTFBhcnNlci5jcHAgKi87IH07
CiAJCTkzRjE5QTlDMDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MVG9rZW5pemVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjUyMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MVG9rZW5pemVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBOUQwODI0NUU1OTAw
MUU5QUJDIC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUyM0QyNzgwMkRFNDNENzAxODYzNUNBIC8qIERlY29kZXIuY3BwICovOyB9
OwotCQk5M0YxOUFCODA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tMl9ldmVudHNpbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzAxMDJERTQ0
NzYwMTg2MzVDQSAvKiBkb20yX2V2ZW50c2ltcGwuY3BwICovOyB9OwogCQk5M0YxOUFCOTA4MjQ1
RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLzsg
fTsKIAkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIHhtbF90b2tlbml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDkwMkRFNDQ3
NjAxODYzNUNBIC8qIHhtbF90b2tlbml6ZXIuY3BwICovOyB9OwogCQk5M0YxOUFCRTA4MjQ1RTU5
MDAxRTlBQkMgLyogV2ViQ29yZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjVCMkE0RkQwMkUyMjIwRjAxODYzNUNCIC8qIFdlYkNvcmVDYWNo
ZS5tbSAqLzsgfTsKQEAgLTE5MjYsNiArMTk0NiwyOCBAQAogCQk4NEMwRkEyQzA1MkI5NjZEMDAw
NDQwQTEgLyogc291dGhXZXN0UmVzaXplQ3Vyc29yLnRpZmYgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBwYXRoID0gc291dGhXZXN0
UmVzaXplQ3Vyc29yLnRpZmY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0QzBGQTJE
MDUyQjk2NkQwMDA0NDBBMSAvKiB3YWl0Q3Vyc29yLnRpZmYgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBwYXRoID0gd2FpdEN1cnNv
ci50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NEMwRkEyRTA1MkI5NjZEMDAw
NDQwQTEgLyogd2VzdFJlc2l6ZUN1cnNvci50aWZmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UudGlmZjsgcGF0aCA9IHdlc3RSZXNpemVDdXJz
b3IudGlmZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUwMzFCMjYwQTQ0RUZDNzAw
Rjk5MkUwIC8qIEJlZm9yZVVubG9hZEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCZWZvcmVVbmxvYWRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg1MDMxQjI3MEE0NEVGQzcwMEY5OTJFMCAvKiBCZWZvcmVVbmxvYWRFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmVmb3JlVW5sb2FkRXZlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUwMzFCMjgwQTQ0RUZDNzAwRjk5MkUwIC8q
IENsaXBib2FyZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcGJvYXJk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1MDMxQjI5MEE0NEVGQzcwMEY5OTJF
MCAvKiBDbGlwYm9hcmRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2xpcGJvYXJkRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NTAzMUIyQTBBNDRFRkM3MDBGOTkyRTAgLyogQ2xpcGJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg1MDMxQjJCMEE0NEVGQzcwMEY5OTJFMCAvKiBFdmVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4NTAzMUIyQzBBNDRFRkM3MDBGOTkyRTAgLyogRXZlbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg1MDMxQjJEMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLZXlib2FyZEV2ZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUwMzFCMkUwQTQ0RUZDNzAwRjk5MkUw
IC8qIEtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtl
eWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUwMzFCMkYwQTQ0
RUZDNzAwRjk5MkUwIC8qIE1vdXNlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE1vdXNlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk4NTAzMUIzMDBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTW91c2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk4NTAzMUIzMTBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VSZWxhdGVkRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdXNlUmVsYXRlZEV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUwMzFCMzIwQTQ0RUZDNzAwRjk5
MkUwIC8qIE1vdXNlUmVsYXRlZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNb3VzZVJlbGF0ZWRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
NTAzMUIzMzBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg1MDMxQjM0MEE0NEVGQzcwMEY5OTJFMCAvKiBNdXRhdGlvbkV2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhdGlvbkV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1MDMxQjM1MEE0NEVGQzcwMEY5OTJFMCAv
KiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg1MDMxQjM3MEE0
NEVGQzcwMEY5OTJFMCAvKiBVSUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBVSUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUw
MzFCMzgwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVJRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUw
MzFCMzkwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVJRXZlbnRXaXRoS2V5U3RhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODUwMzFCM0EwQTQ0RUZDNzAwRjk5MkUwIC8qIFdoZWVsRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdoZWVsRXZlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NTAzMUIzQjBBNDRFRkM3MDBGOTky
RTAgLyogV2hlZWxFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2hl
ZWxFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NTRGRTcyNjBBMjI5N0JF
MDA1OEQ3QUQgLyogTm9kZUZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTm9kZUZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1
NEZFNzI3MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOb2RlRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg1NEZFNzI4MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlRmlsdGVyQ29uZGl0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyNTQsOCArMzI5Niw2IEBACiAJ
CUY1MjNEMjUzMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MVG9rZW5pemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxUb2tlbml6ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJ
CUY1MjNEMjc4MDJERTQzRDcwMTg2MzVDQSAvKiBEZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY29kZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUy
M0QyNzkwMkRFNDNENzAxODYzNUNBIC8qIERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QzMDEwMkRFNDQ3
NjAxODYzNUNBIC8qIGRvbTJfZXZlbnRzaW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkb20yX2V2ZW50c2ltcGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUy
M0QzMDIwMkRFNDQ3NjAxODYzNUNBIC8qIGRvbTJfZXZlbnRzaW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkb20yX2V2ZW50c2ltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJ
CUY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSYW5nZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDMw
NDAyREU0NDc2MDE4NjM1Q0EgLyogUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVD
QSAvKiB4bWxfdG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHhtbF90b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTUzMDQsNiArNTM0NCw4
IEBACiAJCQkJQThDNEE3RjkwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHJpYnV0ZS5oICovLAogCQkJ
CUFCMjNBMzI1MDlCQkE3RDAwMDY3Q0M1MyAvKiBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5jcHAg
Ki8sCiAJCQkJQUIyM0EzMjYwOUJCQTdEMDAwNjdDQzUzIC8qIEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50LmggKi8sCisJCQkJODUwMzFCMjYwQTQ0RUZDNzAwRjk5MkUwIC8qIEJlZm9yZVVubG9hZEV2
ZW50LmNwcCAqLywKKwkJCQk4NTAzMUIyNzBBNDRFRkM3MDBGOTkyRTAgLyogQmVmb3JlVW5sb2Fk
RXZlbnQuaCAqLywKIAkJCQk2NTUwQjY5MzA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9u
LmNwcCAqLywKIAkJCQk2NTUwQjY5NDA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9uLmgg
Ki8sCiAJCQkJNjU1MEI2OTUwOTlERjAyNzAwOTBENzgxIC8qIENoYXJhY3RlckRhdGEuY3BwICov
LApAQCAtNTMxMSw2ICs1MzUzLDkgQEAKIAkJCQk5M0VFQzFFNjA5QzI4Nzc3MDBDNTE1RDEgLyog
Q2hhcmFjdGVyRGF0YS5pZGwgKi8sCiAJCQkJQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENo
aWxkTm9kZUxpc3QuY3BwICovLAogCQkJCUE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGls
ZE5vZGVMaXN0LmggKi8sCisJCQkJODUwMzFCMjgwQTQ0RUZDNzAwRjk5MkUwIC8qIENsaXBib2Fy
ZC5oICovLAorCQkJCTg1MDMxQjI5MEE0NEVGQzcwMEY5OTJFMCAvKiBDbGlwYm9hcmRFdmVudC5j
cHAgKi8sCisJCQkJODUwMzFCMkEwQTQ0RUZDNzAwRjk5MkUwIC8qIENsaXBib2FyZEV2ZW50Lmgg
Ki8sCiAJCQkJNjU1MEI2OTcwOTlERjAyNzAwOTBENzgxIC8qIENvbW1lbnQuY3BwICovLAogCQkJ
CTY1NTBCNjk4MDk5REYwMjcwMDkwRDc4MSAvKiBDb21tZW50LmggKi8sCiAJCQkJQTgxODcyMTQw
OTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwICovLApAQCAtNTMyOCw4ICs1Mzcz
LDYgQEAKIAkJCQlBODE4NUYzMjA5NzY1NzY1MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlLmNwcCAq
LywKIAkJCQlBODE4NUYzMTA5NzY1NzY1MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlLmggKi8sCiAJ
CQkJOTNFRUMxRTgwOUMyODc3NzAwQzUxNUQxIC8qIERvY3VtZW50VHlwZS5pZGwgKi8sCi0JCQkJ
RjUyM0QzMDEwMkRFNDQ3NjAxODYzNUNBIC8qIGRvbTJfZXZlbnRzaW1wbC5jcHAgKi8sCi0JCQkJ
RjUyM0QzMDIwMkRFNDQ3NjAxODYzNUNBIC8qIGRvbTJfZXZlbnRzaW1wbC5oICovLAogCQkJCUE4
MTg1RjM2MDk3NjU3NjUwMDU4MjZEOSAvKiBET01JbXBsZW1lbnRhdGlvbi5jcHAgKi8sCiAJCQkJ
QTgxODVGMzMwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmggKi8sCiAJCQkJ
OTNFRUMxRTkwOUMyODc3NzAwQzUxNUQxIC8qIERPTUltcGxlbWVudGF0aW9uLmlkbCAqLywKQEAg
LTUzNDMsNiArNTM4Niw4IEBACiAJCQkJOTNFRUMxRUIwOUMyODc3NzAwQzUxNUQxIC8qIEVudGl0
eS5pZGwgKi8sCiAJCQkJQThFQTdFQjkwQTE5NDVEMDAwQThFRjVGIC8qIEVudGl0eVJlZmVyZW5j
ZS5jcHAgKi8sCiAJCQkJQThFQTdFQjgwQTE5NDVEMDAwQThFRjVGIC8qIEVudGl0eVJlZmVyZW5j
ZS5oICovLAorCQkJCTg1MDMxQjJCMEE0NEVGQzcwMEY5OTJFMCAvKiBFdmVudC5jcHAgKi8sCisJ
CQkJODUwMzFCMkMwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmggKi8sCiAJCQkJMTRFODM2RDIw
OUY4NTEyMDAwQjg1QUU0IC8qIEV2ZW50LmlkbCAqLywKIAkJCQk5MzVGQkM0NDA5QkEwMEI5MDBF
MjMwQjEgLyogRXZlbnRMaXN0ZW5lci5oICovLAogCQkJCTkzOTg4NUMxMDhCN0UzRDEwMEU3MDdD
NCAvKiBFdmVudE5hbWVzLmNwcCAqLywKQEAgLTUzNTAsMTEgKzUzOTUsMTkgQEAKIAkJCQkxNEVD
MjY3RTA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2RlLmNwcCAqLywKIAkJCQkxNEVD
MjY3RDA5Q0EwN0UwMDBFMUVFRUMgLyogRXZlbnRUYXJnZXROb2RlLmggKi8sCiAJCQkJOTM1RkJD
RjEwOUJBMTQzQjAwRTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCAqLywKKwkJCQk4NTAzMUIyRDBB
NDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9hcmRFdmVudC5jcHAgKi8sCisJCQkJODUwMzFCMkUwQTQ0
RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQkxNENGN0MyMDA5RjcxMTA2
MDBFQjM2NjUgLyogS2V5Ym9hcmRFdmVudC5pZGwgKi8sCiAJCQkJQThDNEE3RjQwOUQ1NjMyNzAw
MDNBQzhEIC8qIE1hcHBlZEF0dHJpYnV0ZS5jcHAgKi8sCiAJCQkJQThDNEE3RjMwOUQ1NjMyNzAw
MDNBQzhEIC8qIE1hcHBlZEF0dHJpYnV0ZS5oICovLAogCQkJCUE4QzRBODRCMDlENTY0OUQwMDAz
QUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGVFbnRyeS5oICovLAorCQkJCTg1MDMxQjJGMEE0NEVGQzcw
MEY5OTJFMCAvKiBNb3VzZUV2ZW50LmNwcCAqLywKKwkJCQk4NTAzMUIzMDBBNDRFRkM3MDBGOTky
RTAgLyogTW91c2VFdmVudC5oICovLAogCQkJCTE0MUI5NEU1MDlFQzQyMjMwMDBFOTQxMyAvKiBN
b3VzZUV2ZW50LmlkbCAqLywKKwkJCQk4NTAzMUIzMTBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VS
ZWxhdGVkRXZlbnQuY3BwICovLAorCQkJCTg1MDMxQjMyMEE0NEVGQzcwMEY5OTJFMCAvKiBNb3Vz
ZVJlbGF0ZWRFdmVudC5oICovLAorCQkJCTg1MDMxQjMzMEE0NEVGQzcwMEY5OTJFMCAvKiBNdXRh
dGlvbkV2ZW50LmNwcCAqLywKKwkJCQk4NTAzMUIzNDBBNDRFRkM3MDBGOTkyRTAgLyogTXV0YXRp
b25FdmVudC5oICovLAogCQkJCTkzRUVDMUYzMDlDMjg3NzcwMEM1MTVEMSAvKiBNdXRhdGlvbkV2
ZW50LmlkbCAqLywKIAkJCQlBOEM0QTdGMjA5RDU2MzI3MDAwM0FDOEQgLyogTmFtZWRBdHRyTWFw
LmNwcCAqLywKIAkJCQlBOEM0QTdGMTA5RDU2MzI3MDAwM0FDOEQgLyogTmFtZWRBdHRyTWFwLmgg
Ki8sCkBAIC01Mzg4LDYgKzU0NDEsOCBAQAogCQkJCUY1MjNEMzAzMDJERTQ0NzYwMTg2MzVDQSAv
KiBSYW5nZS5jcHAgKi8sCiAJCQkJRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmgg
Ki8sCiAJCQkJOTM2REQwM0EwOUNFQUMyNzAwNTZBRThDIC8qIFJhbmdlLmlkbCAqLywKKwkJCQk4
NTAzMUIzNTBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwICov
LAorCQkJCTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ci5oICovLAogCQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNw
cCAqLywKIAkJCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oICov
LAogCQkJCTY1NTBCNjlCMDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmNwcCAqLywKQEAgLTUzOTcs
NyArNTQ1MiwxMiBAQAogCQkJCTg1NEZFNzJEMEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwu
aCAqLywKIAkJCQk4NTRGRTcyRTBBMjI5N0JFMDA1OEQ3QUQgLyogVHJlZVdhbGtlci5jcHAgKi8s
CiAJCQkJODU0RkU3MkYwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCAqLywKKwkJCQk4
NTAzMUIzNzBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5jcHAgKi8sCisJCQkJODUwMzFCMzgw
QTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuaCAqLywKKwkJCQk4NTAzMUIzOTBBNDRFRkM3MDBG
OTkyRTAgLyogVUlFdmVudFdpdGhLZXlTdGF0ZS5oICovLAogCQkJCTE0MUI5NEVFMDlFQzQyNUEw
MDBFOTQxMyAvKiBVSUV2ZW50LmlkbCAqLywKKwkJCQk4NTAzMUIzQTBBNDRFRkM3MDBGOTkyRTAg
LyogV2hlZWxFdmVudC5jcHAgKi8sCisJCQkJODUwMzFCM0IwQTQ0RUZDNzAwRjk5MkUwIC8qIFdo
ZWVsRXZlbnQuaCAqLywKIAkJCQk5M0VFQzFGNzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVu
dC5pZGwgKi8sCiAJCQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYzNUNBIC8qIHhtbF90b2tlbml6ZXIu
Y3BwICovLAogCQkJCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiB4bWxfdG9rZW5pemVyLmgg
Ki8sCkBAIC01NDcxLDcgKzU1MzEsNiBAQAogCQkJCTkzRjE5OEVGMDgyNDVFNTkwMDFFOUFCQyAv
KiBIVE1MUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlB
QkMgLyogSFRNTFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RjYwODI0NUU1
OTAwMUU5QUJDIC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRjE5OTE3MDgyNDVF
NTkwMDFFOUFCQyAvKiBkb20yX2V2ZW50c2ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5
OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
MjEwODI0NUU1OTAwMUU5QUJDIC8qIHhtbF90b2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OTI5MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FDU3RyaW5nLmggaW4gSGVhZGVycyAqLywK
QEAgLTYyMzUsNiArNjI5NCwxOCBAQAogCQkJCTUxRDNFQTE3MEEzRDI0RDMwMEJBREEzNSAvKiBT
UUxEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MkYxREUwQTQwQUVBMzAwQUMwNzQ2
IC8qIERlcHJlY2F0ZWRTbGlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUQwNUNFRDJBMEE0MEJC
MkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg1
MDMxQjNEMEE0NEVGQzcwMEY5OTJFMCAvKiBCZWZvcmVVbmxvYWRFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODUwMzFCM0UwQTQ0RUZDNzAwRjk5MkUwIC8qIENsaXBib2FyZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJODUwMzFCNDAwQTQ0RUZDNzAwRjk5MkUwIC8qIENsaXBib2FyZEV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk4NTAzMUI0MjBBNDRFRkM3MDBGOTkyRTAgLyogRXZlbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTg1MDMxQjQ0MEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NTAzMUI0NjBBNDRFRkM3MDBGOTkyRTAgLyogTW91
c2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODUwMzFCNDgwQTQ0RUZDNzAwRjk5MkUwIC8q
IE1vdXNlUmVsYXRlZEV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk4NTAzMUI0QTBBNDRFRkM3
MDBGOTkyRTAgLyogTXV0YXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJODUwMzFCNEMw
QTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4NTAzMUI0RTBBNDRFRkM3MDBGOTkyRTAgLyogVUlFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODUwMzFCNEYwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnRXaXRoS2V5U3RhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTg1MDMxQjUxMEE0NEVGQzcwMEY5OTJFMCAvKiBXaGVlbEV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTYzODEsNyArNjQ1Miw2IEBACiAJCQkJOTNGMTlBOUIw
ODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNG
MTlBOUMwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNGMTlBOUQwODI0NUU1OTAwMUU5QUJDIC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJOTNGMTlBQjgwODI0NUU1OTAwMUU5QUJDIC8qIGRvbTJfZXZlbnRzaW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFCOTA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBQkMwODI0NUU1OTAwMUU5QUJDIC8qIHhtbF90b2tl
bml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBQkUwODI0NUU1OTAwMUU5QUJDIC8q
IFdlYkNvcmVDYWNoZS5tbSBpbiBTb3VyY2VzICovLApAQCAtNzA3Myw2ICs3MTQzLDE2IEBACiAJ
CQkJNTFEM0VBMTgwQTNEMjREMzAwQkFEQTM1IC8qIFNRTFN0YXRlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzkyRjFERDBBNDBBRUEzMDBBQzA3NDYgLyogRGVwcmVjYXRlZFNsaWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlEMDVDRUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0
QmxvY2tDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg1MDMxQjNDMEE0NEVGQzcwMEY5
OTJFMCAvKiBCZWZvcmVVbmxvYWRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NTAzMUIz
RjBBNDRFRkM3MDBGOTkyRTAgLyogQ2xpcGJvYXJkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJODUwMzFCNDEwQTQ0RUZDNzAwRjk5MkUwIC8qIEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTg1MDMxQjQzMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTg1MDMxQjQ1MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZUV2ZW50LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTg1MDMxQjQ3MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZVJlbGF0
ZWRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NTAzMUI0OTBBNDRFRkM3MDBGOTkyRTAg
LyogTXV0YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4NTAzMUI0QjBBNDRFRkM3
MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJODUwMzFCNEQwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODUwMzFCNTAwQTQ0RUZDNzAwRjk5MkUwIC8qIFdoZWVsRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAkocmV2aXNpb24gMTQ5
MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAia2pz
X2JpbmRpbmcuaCIKIAorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJSYW5nZS5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgIlhQ
YXRoRXZhbHVhdG9yLmgiCiAjaW5jbHVkZSAia2pzX2RvbS5oIgogI2luY2x1ZGUgImtqc193aW5k
b3cuaCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9tLmNwcAkocmV2aXNpb24gMTQ5MDkpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19kb20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgog
I2luY2x1ZGUgIkVudGl0eS5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTU1LDcgKzU3LDYgQEAKICNpbmNsdWRlICJQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJranNf
Y3NzLmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc190cmF2ZXJzYWwu
aCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAkocmV2aXNpb24gMTQ5MDkpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxNyArMjEsMjQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJranNfZXZlbnRz
LmgiCiAKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgorI2lu
Y2x1ZGUgIkpTS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkpTTW91c2VFdmVudC5oIgogI2lu
Y2x1ZGUgIkpTTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIkpTV2hlZWxFdmVudC5oIgotI2lu
Y2x1ZGUgIkpTTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIkpTS2V5Ym9hcmRFdmVudC5oIgotI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKKyNpbmNsdWRl
ICJVSUV2ZW50LmgiCisjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgImtqc19wcm94
eS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfaHRtbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRt
bC5jcHAJKHJldmlzaW9uIDE0OTA5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfaHRtbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI1ICsyNywyNSBAQAogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEJhc2VGb250
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxCbG9ja3F1b3RlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxCb2R5RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb250RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MSGVhZGluZ0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSFJF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRpbmdFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEh0bWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElzSW5kZXhFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTExJRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxMSUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZW51RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxNb2RFbGVtZW50LmgiCkBAIC01Niw2ICs1Niw3IEBACiAjaW5j
bHVkZSAiSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTFByZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MUXVvdGVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2Vs
ZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCkBAIC02
NCwxMiArNjUsMTAgQEAKICNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRhYmxlUm93RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTFF1b3RlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSFRNTEltYWdl
RWxlbWVudC5oIgogI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgog
I2luY2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAi
a2pzX3Byb3h5LmgiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAJKHJldmlzaW9u
IDE0OTA5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAg
LTQ5LDcgKzUwLDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyZWVu
LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgImRvbTJfZXZl
bnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2pzX2Nzcy5o
IgogI2luY2x1ZGUgImtqc19ldmVudHMuaCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T00ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNp
b24gMTQ5MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiAjaW1wb3J0ICJEb2N1bWVudFR5cGUuaCIKICNpbXBvcnQgIkVu
dGl0eS5oIgogI2ltcG9ydCAiRW50aXR5UmVmZXJlbmNlLmgiCisjaW1wb3J0ICJFdmVudC5oIgog
I2ltcG9ydCAiRXZlbnRMaXN0ZW5lci5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgog
I2ltcG9ydCAiRnJhbWVNYWMuaCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01FdmVu
dHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUV2ZW50cy5tbQko
cmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NRXZlbnRzLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCwxMCBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIK
ICNpbXBvcnQgIkRPTVZpZXdzSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1w
b3J0ICJkb20yX2V2ZW50c2ltcGwuaCIKKyNpbXBvcnQgIkV2ZW50LmgiCisjaW1wb3J0ICJNb3Vz
ZUV2ZW50LmgiCisjaW1wb3J0ICJNdXRhdGlvbkV2ZW50LmgiCisjaW1wb3J0ICJVSUV2ZW50Lmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NSW50ZXJuYWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TUludGVybmFsLm1tCShyZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T01JbnRlcm5hbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAi
RE9NSW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKKyNpbXBvcnQgIkV2ZW50Lmgi
CiAjaW1wb3J0ICJGcmFtZU1hYy5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgImtqc19k
b20uaCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMTQgKzE0OSw3IEBAIHN1YiBBZGRJbmNs
dWRlc0ZvclR5cGUKICAgICAKICAgICAjIFdoZW4gd2UncmUgZmluaXNoZWQgd2l0aCB0aGUgb25l
LWZpbGUtcGVyLWNsYXNzIAogICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhl
c2Ugc3BlY2lhbCBjYXNlcy4KLSAgICBpZiAoJHR5cGUgZXEgIk11dGF0aW9uRXZlbnQiIG9yCi0g
ICAgICAgICR0eXBlIGVxICJLZXlib2FyZEV2ZW50IiBvcgotICAgICAgICAkdHlwZSBlcSAiTW91
c2VFdmVudCIgb3IKLSAgICAgICAgJHR5cGUgZXEgIkV2ZW50IiBvcgotICAgICAgICAkdHlwZSBl
cSAiVUlFdmVudCIgb3IKLSAgICAgICAgJHR5cGUgZXEgIldoZWVsRXZlbnQiKSB7Ci0gICAgICAg
ICRpbXBsSW5jbHVkZXN7ImRvbTJfZXZlbnRzaW1wbC5oIn0gPSAxOwotICAgIH0gZWxzaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpCisgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpCiAgICAgICAgIG9yICR0eXBlIGVxICJET01TdHJp
bmciIG9yICR0eXBlIGVxICJET01PYmplY3QiIG9yICR0eXBlIGVxICJSR0JDb2xvciIgb3IgJHR5
cGUgZXEgIlJlY3QiKSB7CiAgICAgfSBlbHNlIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRl
IHRoZSBzYW1lIG5hbWVkIGZpbGUKQEAgLTExMDYsNyArMTA5OSw3IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0gZWxzaWYg
KCR0eXBlIGVxICJFdmVudCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2V2ZW50cy5o
In0gPSAxOwotICAgICAgICAkaW1wbEluY2x1ZGVzeyJkb20yX2V2ZW50c2ltcGwuaCJ9ID0gMTsK
KyAgICAgICAgJGltcGxJbmNsdWRlc3siRXZlbnQuaCJ9ID0gMTsKICAgICAgICAgcmV0dXJuICJ0
b0pTKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0gZWxzaWYgKCR0eXBlIGVxICJOb2RlTGlzdCIgb3Ig
JHR5cGUgZXEgIk5hbWVkTm9kZU1hcCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3sia2pzX2Rv
bS5oIn0gPSAxOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvbWFjL0ZyYW1lTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYnJpZGdlL21hYy9GcmFtZU1hYy5tbQkocmV2aXNpb24gMTQ5MDkpCisr
KyBXZWJDb3JlL2JyaWRnZS9tYWMvRnJhbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDE0
ICsyNywxNyBAQAogI2ltcG9ydCAiRnJhbWVNYWMuaCIKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0
eU9iamVjdENhY2hlLmgiCisjaW1wb3J0ICJCZWZvcmVVbmxvYWRFdmVudC5oIgogI2ltcG9ydCAi
QmxvY2tFeGNlcHRpb25zLmgiCiAjaW1wb3J0ICJCcm93c2VyRXh0ZW5zaW9uTWFjLmgiCiAjaW1w
b3J0ICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbXBvcnQgIkNhY2hlLmgiCisj
aW1wb3J0ICJDbGlwYm9hcmRFdmVudC5oIgogI2ltcG9ydCAiQ3Vyc29yLmgiCiAjaW1wb3J0ICJE
T01JbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NV2luZG93LmgiCiAjaW1wb3J0ICJEZWNvZGVyLmgi
CisjaW1wb3J0ICJFdmVudC5oIgogI2ltcG9ydCAiRXZlbnROYW1lcy5oIgogI2ltcG9ydCAiRmxv
YXRSZWN0LmgiCiAjaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCkBAIC01NSwxMiArNTgsMTIg
QEAKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2ltcG9ydCAiUGx1Z2luLmgiCiAj
aW1wb3J0ICJSZWd1bGFyRXhwcmVzc2lvbi5oIgotI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2lt
cG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW1wb3J0
ICJSZW5kZXJQYXJ0LmgiCiAjaW1wb3J0ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbXBvcnQgIlJl
bmRlclRoZW1lLmgiCisjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJUZXh0SXRlcmF0
b3IuaCIKICNpbXBvcnQgIlRyYW5zZmVySm9iLmgiCiAjaW1wb3J0ICJXZWJDb3JlRnJhbWVCcmlk
Z2UuaCIKQEAgLTczLDcgKzc2LDYgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1dlYlNjcmlw
dE9iamVjdFByaXZhdGUuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZV9pbXBs
Lmg+CiAKLQogI3VuZGVmIF9LV1FfVElNSU5HCiAKIEBpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlBs
dWdJbikKSW5kZXg6IFdlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaAkocmV2aXNpb24g
MTQ5MDkpCisrKyBXZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMiArMjYsMTEgQEAKICNpZm5kZWYgQkVGT1JFVEVYVElOU0VSVEVERVZF
TlRJTVBMX0gKICNkZWZpbmUgQkVGT1JFVEVYVElOU0VSVEVERVZFTlRJTVBMX0gKIAotI2luY2x1
ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQgOiBwdWJsaWMgRXZlbnQK
LXsKK2NsYXNzIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50IDogcHVibGljIEV2ZW50IHsKIHB1Ymxp
YzoKICAgICBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChjb25zdCBTdHJpbmcmKTsKIApJbmRleDog
V2ViQ29yZS9kb20vQmVmb3JlVW5sb2FkRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0JlZm9yZVVubG9hZEV2ZW50LmNwcAkocmV2aXNpb24gMTQ5MDApCisrKyBXZWJDb3JlL2Rv
bS9CZWZvcmVVbmxvYWRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw5IEBACiAv
KioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtE
RS4KICAqCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogKEMpIDIw
MDEgVG9iaWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAo
QykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkK
ICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDYyMCArMjMsMTQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCisjaW5jbHVkZSAiQmVmb3JlVW5sb2Fk
RXZlbnQuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmgi
Ci0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKLUV2ZW50
OjpFdmVudCgpCi0gICAgOiBtX2NhbkJ1YmJsZShmYWxzZSkKLSAgICAsIG1fY2FuY2VsYWJsZShm
YWxzZSkKLSAgICAsIG1fcHJvcGFnYXRpb25TdG9wcGVkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0
UHJldmVudGVkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0SGFuZGxlZChmYWxzZSkKLSAgICAsIG1f
Y2FuY2VsQnViYmxlKGZhbHNlKQotICAgICwgbV9jdXJyZW50VGFyZ2V0KDApCi0gICAgLCBtX2V2
ZW50UGhhc2UoMCkKLSAgICAsIG1fY3JlYXRlVGltZShzdGF0aWNfY2FzdDxET01UaW1lU3RhbXA+
KGN1cnJlbnRUaW1lKCkgKiAxMDAwLjApKQotewotfQotCi1FdmVudDo6RXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVB
cmcpCi0gICAgOiBtX3R5cGUoZXZlbnRUeXBlKQotICAgICwgbV9jYW5CdWJibGUoY2FuQnViYmxl
QXJnKQotICAgICwgbV9jYW5jZWxhYmxlKGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3Byb3BhZ2F0
aW9uU3RvcHBlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdFByZXZlbnRlZChmYWxzZSkKLSAgICAs
IG1fZGVmYXVsdEhhbmRsZWQoZmFsc2UpCi0gICAgLCBtX2NhbmNlbEJ1YmJsZShmYWxzZSkKLSAg
ICAsIG1fY3VycmVudFRhcmdldCgwKQotICAgICwgbV9ldmVudFBoYXNlKDApCi0gICAgLCBtX2Ny
ZWF0ZVRpbWUoc3RhdGljX2Nhc3Q8RE9NVGltZVN0YW1wPihjdXJyZW50VGltZSgpICogMTAwMC4w
KSkKLXsKLX0KLQotRXZlbnQ6On5FdmVudCgpCi17Ci19Ci0KLXZvaWQgRXZlbnQ6OmluaXRFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJv
b2wgY2FuY2VsYWJsZUFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3R5cGUgPSBldmVudFR5cGVBcmc7Ci0gICAgbV9jYW5CdWJibGUgPSBjYW5C
dWJibGVBcmc7Ci0gICAgbV9jYW5jZWxhYmxlID0gY2FuY2VsYWJsZUFyZzsKLX0KLQotYm9vbCBF
dmVudDo6aXNVSUV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
RXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEV2ZW50Ojppc011dGF0aW9uRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBFdmVudDo6aXNLZXlib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNXaGVlbEV2ZW50KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6
c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBFdmVudDo6c3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBFdmVu
dDo6c2V0VGFyZ2V0KE5vZGUqIHRhcmdldCkKLXsKLSAgICBtX3RhcmdldCA9IHRhcmdldDsKLSAg
ICBpZiAodGFyZ2V0KQotICAgICAgICByZWNlaXZlZFRhcmdldCgpOwotfQotCi12b2lkIEV2ZW50
OjpyZWNlaXZlZFRhcmdldCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVVJ
RXZlbnQ6OlVJRXZlbnQoKQotICAgIDogbV9kZXRhaWwoMCkKLXsKLX0KLQotVUlFdmVudDo6VUlF
dmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJv
b2wgY2FuY2VsYWJsZUFyZywgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLCBpbnQgZGV0YWlsQXJnKQot
ICAgIDogRXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCi0gICAg
LCBtX3ZpZXcodmlld0FyZykKLSAgICAsIG1fZGV0YWlsKGRldGFpbEFyZykKLXsKLX0KLQotdm9p
ZCBVSUV2ZW50Ojppbml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZXRhaWxBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaW5pdEV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2Vs
YWJsZUFyZyk7Ci0KLSAgICBtX3ZpZXcgPSB2aWV3QXJnOwotICAgIG1fZGV0YWlsID0gZGV0YWls
QXJnOwotfQotCi1ib29sIFVJRXZlbnQ6OmlzVUlFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWludCBVSUV2ZW50OjprZXlDb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQotaW50IFVJRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotaW50IFVJRXZlbnQ6OmxheWVyWCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LWludCBVSUV2ZW50OjpsYXllclkoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQg
VUlFdmVudDo6cGFnZVgoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVu
dDo6cGFnZVkoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6d2hp
Y2goKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCi1Nb3VzZVJlbGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoKQotICAgIDogbV9zY3Jl
ZW5YKDApLCBtX3NjcmVlblkoMCksIG1fY2xpZW50WCgwKSwgbV9jbGllbnRZKDApCi0gICAgLCBt
X3BhZ2VYKDApLCBtX3BhZ2VZKDApLCBtX2xheWVyWCgwKSwgbV9sYXllclkoMCksIG1fb2Zmc2V0
WCgwKSwgbV9vZmZzZXRZKDApLCBtX2lzU2ltdWxhdGVkKGZhbHNlKQotewotfQotCi1Nb3VzZVJl
bGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
bGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzU2ltdWxhdGVkKQotICAgIDogVUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5cGUs
IGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnLAotICAgICAg
ICBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnKQotICAgICwg
bV9zY3JlZW5YKHNjcmVlblhBcmcpLCBtX3NjcmVlblkoc2NyZWVuWUFyZykKLSAgICAsIG1fY2xp
ZW50WChjbGllbnRYQXJnKSwgbV9jbGllbnRZKGNsaWVudFlBcmcpCi0gICAgLCBtX2lzU2ltdWxh
dGVkKGlzU2ltdWxhdGVkKQotewotICAgIGluaXRDb29yZGluYXRlcygpOwotfQotCi12b2lkIE1v
dXNlUmVsYXRlZEV2ZW50Ojppbml0Q29vcmRpbmF0ZXMoKQotewotICAgIC8vIFNldCB1cCBpbml0
aWFsIHZhbHVlcyBmb3IgY29vcmRpbmF0ZXMuCi0gICAgLy8gQ29ycmVjdCB2YWx1ZXMgY2FuJ3Qg
YmUgY29tcHV0ZWQgdW50aWwgd2UgaGF2ZSBhdCB0YXJnZXQsIHNvIHJlY2VpdmVkVGFyZ2V0Ci0g
ICAgLy8gZG9lcyB0aGUgInJlYWwiIGNvbXB1dGF0aW9uLgotICAgIG1fcGFnZVggPSBtX2NsaWVu
dFg7Ci0gICAgbV9wYWdlWSA9IG1fY2xpZW50WTsKLSAgICBtX2xheWVyWCA9IG1fcGFnZVg7Ci0g
ICAgbV9sYXllclkgPSBtX3BhZ2VZOwotICAgIG1fb2Zmc2V0WCA9IG1fcGFnZVg7Ci0gICAgbV9v
ZmZzZXRZID0gbV9wYWdlWTsKLX0KLQotdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6cmVjZWl2ZWRU
YXJnZXQoKQotewotICAgIC8vIENvbXB1dGUgY29vcmRpbmF0ZXMgdGhhdCBhcmUgYmFzZWQgb24g
dGhlIHRhcmdldC4KLSAgICBtX29mZnNldFggPSBtX3BhZ2VYOwotICAgIG1fb2Zmc2V0WSA9IG1f
cGFnZVk7Ci0gICAgbV9sYXllclggPSBtX3BhZ2VYOyAgICAKLSAgICBtX2xheWVyWSA9IG1fcGFn
ZVk7ICAgIAotCi0gICAgTm9kZSogdGFyZyA9IHRhcmdldCgpOwotICAgIEFTU0VSVCh0YXJnKTsK
LQotICAgIC8vIE11c3QgaGF2ZSBhbiB1cGRhdGVkIHJlbmRlciB0cmVlIGZvciB0aGlzIG1hdGgg
dG8gd29yayBjb3JyZWN0bHkuCi0gICAgdGFyZy0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5n
KCk7Ci0KLSAgICAvLyBGSVhNRTogY2xpZW50WC9ZIHNob3VsZCBub3QgYmUgdGhlIHNhbWUgYXMg
cGFnZVgvWSEKLSAgICAvLyBDdXJyZW50bHkgdGhlIHBhc3NlZC1pbiBjbGllbnRYIGFuZCBjbGll
bnRZIGFyZSBpbmNvcnJlY3RseSBhY3R1YWxseQotICAgIC8vIHBhZ2VYIGFuZCBwYWdlWSB2YWx1
ZXMsIHNvIHdlIGRvbid0IGhhdmUgYW55IHdvcmsgdG8gZG8gaGVyZSwgYnV0IGlmCi0gICAgLy8g
d2Ugc3RhcnRlZCBwYXNzaW5nIGluIGNvcnJlY3QgY2xpZW50WCBhbmQgY2xpZW50WSwgd2UnZCB3
YW50IHRvIGNvbXB1dGUKLSAgICAvLyBwYWdlWCBhbmQgcGFnZVkgaGVyZS4KLQotICAgIC8vIEFk
anVzdCBvZmZzZXRYL1kgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCdzIHBvc2l0aW9uLgot
ICAgIGlmICghaXNTaW11bGF0ZWQoKSkgewotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByID0g
dGFyZy0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaW50IHJ4LCByeTsKLSAgICAgICAgICAg
IGlmIChyLT5hYnNvbHV0ZVBvc2l0aW9uKHJ4LCByeSkpIHsKLSAgICAgICAgICAgICAgICBtX29m
ZnNldFggLT0gcng7Ci0gICAgICAgICAgICAgICAgbV9vZmZzZXRZIC09IHJ5OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQWRqdXN0IGxheWVyWC9ZIHRvIGJlIHJl
bGF0aXZlIHRvIHRoZSBsYXllci4KLSAgICAvLyBGSVhNRTogV2UncmUgcHJldHR5IHN1cmUgdGhp
cyBpcyB0aGUgd3JvbmcgZGVmaW50aW9uIG9mICJsYXllci4iCi0gICAgLy8gT3VyIFJlbmRlckxh
eWVyIGlzIGEgbW9yZSBtb2Rlcm4gY29uY2VwdCwgYW5kIGxheWVyWC9ZIGlzIHNvbWUKLSAgICAv
LyBvdGhlciBub3Rpb24gYWJvdXQgZ3JvdXBzIG9mIGVsZW1lbnRzOyB3ZSBzaG91bGQgdGVzdCBh
bmQgZml4IHRoaXMuCi0gICAgTm9kZSogbiA9IHRhcmc7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPnJl
bmRlcmVyKCkpCi0gICAgICAgIG4gPSBuLT5wYXJlbnQoKTsKLSAgICBpZiAobikgewotICAgICAg
ICBSZW5kZXJMYXllciogbGF5ZXIgPSBuLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwot
ICAgICAgICBsYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotICAgICAgICBmb3IgKDsgbGF5
ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBtX2xheWVyWCAtPSBs
YXllci0+eFBvcygpOwotICAgICAgICAgICAgbV9sYXllclkgLT0gbGF5ZXItPnlQb3MoKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2ZW50OjpwYWdlWCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcGFnZVg7Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVudDo6cGFn
ZVkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2VZOwotfQotCi1pbnQgTW91c2VSZWxhdGVk
RXZlbnQ6OngoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb3JyZWN0Lgot
ICAgIC8vIFNlZSBNaWNyb3NvZnQgZG9jdW1lbnRhdGlvbiBhbmQgPGh0dHA6Ly93d3cucXVpcmtz
bW9kZS5vcmcvZG9tL3czY19ldmVudHMuaHRtbD4uCi0gICAgcmV0dXJuIG1fY2xpZW50WDsKLX0K
LQotaW50IE1vdXNlUmVsYXRlZEV2ZW50Ojp5KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBpcyBub3QgY29ycmVjdC4KLSAgICAvLyBTZWUgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24gYW5k
IDxodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS93M2NfZXZlbnRzLmh0bWw+LgotICAgIHJl
dHVybiBtX2NsaWVudFk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vdXNlRXZl
bnQ6Ok1vdXNlRXZlbnQoKQotICAgIDogbV9idXR0b24oMCkKLXsKLX0KLQotTW91c2VFdmVudDo6
TW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNj
cmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRh
S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1
dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUq
IHJlbGF0ZWRUYXJnZXRBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcGJv
YXJkKiBjbGlwYm9hcmRBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c1NpbXVsYXRlZCkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxl
QXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcsCi0gICAgICAgIHNjcmVlblhB
cmcsIHNjcmVlbllBcmcsIGNsaWVudFhBcmcsIGNsaWVudFlBcmcsCi0gICAgICAgIGN0cmxLZXlB
cmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcsIGlzU2ltdWxhdGVkKQotICAg
ICwgbV9idXR0b24oYnV0dG9uQXJnKQotICAgICwgbV9yZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJn
ZXRBcmcpCi0gICAgLCBtX2NsaXBib2FyZChjbGlwYm9hcmRBcmcpCi17Ci19Ci0KLU1vdXNlRXZl
bnQ6On5Nb3VzZUV2ZW50KCkKLXsKLX0KLQotdm9pZCBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Y2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRv
bkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9k
ZSogcmVsYXRlZFRhcmdldEFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbml0VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFi
bGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZyk7Ci0KLSAgICBtX3NjcmVlblggPSBzY3JlZW5YQXJn
OwotICAgIG1fc2NyZWVuWSA9IHNjcmVlbllBcmc7Ci0gICAgbV9jbGllbnRYID0gY2xpZW50WEFy
ZzsKLSAgICBtX2NsaWVudFkgPSBjbGllbnRZQXJnOwotICAgIG1fY3RybEtleSA9IGN0cmxLZXlB
cmc7Ci0gICAgbV9hbHRLZXkgPSBhbHRLZXlBcmc7Ci0gICAgbV9zaGlmdEtleSA9IHNoaWZ0S2V5
QXJnOwotICAgIG1fbWV0YUtleSA9IG1ldGFLZXlBcmc7Ci0gICAgbV9idXR0b24gPSBidXR0b25B
cmc7Ci0gICAgbV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldEFyZzsKLQotICAgIGluaXRD
b29yZGluYXRlcygpOwotfQotCi1ib29sIE1vdXNlRXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6aXNEcmFnRXZlbnQo
KSBjb25zdAotewotICAgIGNvbnN0IEF0b21pY1N0cmluZyAmdCA9IHR5cGUoKTsKLSAgICByZXR1
cm4gdCA9PSBkcmFnZW50ZXJFdmVudCB8fCB0ID09IGRyYWdvdmVyRXZlbnQgfHwgdCA9PSBkcmFn
bGVhdmVFdmVudAotICAgICAgICB8fCB0ID09IGRyb3BFdmVudAotICAgICAgICB8fCB0ID09IGRy
YWdzdGFydEV2ZW50IHx8IHQgPT0gZHJhZ0V2ZW50IHx8IHQgPT0gZHJhZ2VuZEV2ZW50OwotfQot
Ci1pbnQgTW91c2VFdmVudDo6d2hpY2goKSBjb25zdAotewotICAgIC8vIEZvciBLSFRNTCwgdGhl
IHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0dG9ucyBh
cmUgMCwgMSwgMiwgcmVzcGVjdGl2ZWx5LgotICAgIC8vIEZvciB0aGUgTmV0c2NhcGUgIndoaWNo
IiBwcm9wZXJ0eSwgdGhlIHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQg
bW91c2UgYnV0dG9ucyBhcmUgMSwgMiwgMywgcmVzcGVjdGl2ZWx5LiAKLSAgICAvLyBTbyB3ZSBt
dXN0IGFkZCAxLgotICAgIHJldHVybiBtX2J1dHRvbiArIDE7Ci19Ci0KLU5vZGUqIE1vdXNlRXZl
bnQ6OnRvRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gTVNJRSBleHRlbnNpb24gLSAidGhlIG9i
amVjdCB0b3dhcmQgd2hpY2ggdGhlIHVzZXIgaXMgbW92aW5nIHRoZSBtb3VzZSBwb2ludGVyIgot
ICAgIHJldHVybiB0eXBlKCkgPT0gbW91c2VvdXRFdmVudCA/IHJlbGF0ZWRUYXJnZXQoKSA6IHRh
cmdldCgpOwotfQotCi1Ob2RlKiBNb3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgpIGNvbnN0Ci17Ci0g
ICAgLy8gTVNJRSBleHRlbnNpb24gLSAib2JqZWN0IGZyb20gd2hpY2ggYWN0aXZhdGlvbiBvciB0
aGUgbW91c2UgcG9pbnRlciBpcyBleGl0aW5nIGR1cmluZyB0aGUgZXZlbnQiIChodWg/KQotICAg
IHJldHVybiB0eXBlKCkgPT0gbW91c2VvdXRFdmVudCA/IHRhcmdldCgpIDogcmVsYXRlZFRhcmdl
dCgpOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1LZXli
b2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KCkKLSAgOiBtX2tleUV2ZW50KDApCi0gICwgbV9rZXlM
b2NhdGlvbihET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEKQotICAsIG1fYWx0R3JhcGhLZXkoZmFs
c2UpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50JiBrZXksIEFic3RyYWN0VmlldyAqdmlldykKLSAgOiBVSUV2ZW50V2l0aEtl
eVN0YXRlKGtleS5pc0tleVVwKCkgPyBrZXl1cEV2ZW50IDoga2V5LmlzQXV0b1JlcGVhdCgpID8g
a2V5cHJlc3NFdmVudCA6IGtleWRvd25FdmVudCwKLSAgICB0cnVlLCB0cnVlLCB2aWV3LCAwLCBr
ZXkuY3RybEtleSgpLCBrZXkuYWx0S2V5KCksIGtleS5zaGlmdEtleSgpLCBrZXkubWV0YUtleSgp
KQotICAsIG1fa2V5RXZlbnQobmV3IFBsYXRmb3JtS2V5Ym9hcmRFdmVudChrZXkpKQotICAsIG1f
a2V5SWRlbnRpZmllcihTdHJpbmcoa2V5LmtleUlkZW50aWZpZXIoKSkuaW1wbCgpKQotICAsIG1f
a2V5TG9jYXRpb24oa2V5LmlzS2V5cGFkKCkgPyBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCA6IERP
TV9LRVlfTE9DQVRJT05fU1RBTkRBUkQpCi0gICwgbV9hbHRHcmFwaEtleShmYWxzZSkKLXsKLX0K
LQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50
VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1
YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNh
bmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJz
dHJhY3RWaWV3ICp2aWV3QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlB
cmcpCi0gIDogVUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2Fu
Y2VsYWJsZUFyZywgdmlld0FyZywgMCwgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFy
ZywgbWV0YUtleUFyZykKLSAgLCBtX2tleUV2ZW50KDApCi0gICwgbV9rZXlJZGVudGlmaWVyKGtl
eUlkZW50aWZpZXJBcmcuaW1wbCgpKQotICAsIG1fa2V5TG9jYXRpb24oa2V5TG9jYXRpb25Bcmcp
Ci0gICwgbV9hbHRHcmFwaEtleShhbHRHcmFwaEtleUFyZykKLXsKLX0KLQotS2V5Ym9hcmRFdmVu
dDo6fktleWJvYXJkRXZlbnQoKQotewotICAgIGRlbGV0ZSBtX2tleUV2ZW50OwotfQotCi12b2lk
IEtleWJvYXJkRXZlbnQ6OmluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlw
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0
cmxLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIG1ldGFLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
bHRHcmFwaEtleUFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpbml0VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcs
IHZpZXdBcmcsIDApOwotCi0gICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckFyZy5p
bXBsKCk7Ci0gICAgbV9rZXlMb2NhdGlvbiA9IGtleUxvY2F0aW9uQXJnOwotICAgIG1fY3RybEtl
eSA9IGN0cmxLZXlBcmc7Ci0gICAgbV9zaGlmdEtleSA9IHNoaWZ0S2V5QXJnOwotICAgIG1fYWx0
S2V5ID0gYWx0S2V5QXJnOwotICAgIG1fbWV0YUtleSA9IG1ldGFLZXlBcmc7Ci0gICAgbV9hbHRH
cmFwaEtleSA9IGFsdEdyYXBoS2V5QXJnOwotfQotCi1pbnQgS2V5Ym9hcmRFdmVudDo6a2V5Q29k
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2tleUV2ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAodHlwZSgpID09IGtleWRvd25FdmVudCB8fCB0eXBlKCkgPT0ga2V5dXBFdmVudCkKLSAg
ICAgICAgcmV0dXJuIG1fa2V5RXZlbnQtPldpbmRvd3NLZXlDb2RlKCk7Ci0gICAgcmV0dXJuIGNo
YXJDb2RlKCk7Ci19Ci0KLWludCBLZXlib2FyZEV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2tleUV2ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBTdHJpbmcgdGV4dCA9
IG1fa2V5RXZlbnQtPnRleHQoKTsKLSAgICBpZiAodGV4dC5sZW5ndGgoKSAhPSAxKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGV4dFswXTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50
Ojppc0tleWJvYXJkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQg
S2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAotewotICAgIC8vIE5ldHNjYXBlJ3MgIndoaWNo
IiByZXR1cm5zIGEgdmlydHVhbCBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGFuZCBh
IGNoYXJhY3RlciBjb2RlIGZvciBrZXlwcmVzcy4KLSAgICAvLyBUaGF0J3MgZXhhY3RseSB3aGF0
IElFJ3MgImtleUNvZGUiIHJldHVybnMuIFNvIHRoZXkgYXJlIHRoZSBzYW1lIGZvciBrZXlib2Fy
ZCBldmVudHMuCi0gICAgcmV0dXJuIGtleUNvZGUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotTXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudCgpCi0gICAgOiBtX2F0dHJDaGFu
Z2UoMCkKLXsKLX0KLQotTXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Tm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcp
Ci0gICAgOiBFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZykKLSAg
ICAsIG1fcmVsYXRlZE5vZGUocmVsYXRlZE5vZGVBcmcpCi0gICAgLCBtX3ByZXZWYWx1ZShwcmV2
VmFsdWVBcmcuaW1wbCgpKQotICAgICwgbV9uZXdWYWx1ZShuZXdWYWx1ZUFyZy5pbXBsKCkpCi0g
ICAgLCBtX2F0dHJOYW1lKGF0dHJOYW1lQXJnLmltcGwoKSkKLSAgICAsIG1fYXR0ckNoYW5nZShh
dHRyQ2hhbmdlQXJnKQotewotfQotCi12b2lkIE11dGF0aW9uRXZlbnQ6OmluaXRNdXRhdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZW
YWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZykKLXsKLSAg
ICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0RXZlbnQodHlw
ZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKTsKLQotICAgIG1fcmVsYXRlZE5vZGUg
PSByZWxhdGVkTm9kZUFyZzsKLSAgICBtX3ByZXZWYWx1ZSA9IHByZXZWYWx1ZUFyZy5pbXBsKCk7
Ci0gICAgbV9uZXdWYWx1ZSA9IG5ld1ZhbHVlQXJnLmltcGwoKTsKLSAgICBtX2F0dHJOYW1lID0g
YXR0ck5hbWVBcmcuaW1wbCgpOwotICAgIG1fYXR0ckNoYW5nZSA9IGF0dHJDaGFuZ2VBcmc7Ci19
Ci0KLWJvb2wgTXV0YXRpb25FdmVudDo6aXNNdXRhdGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2xpcGJvYXJkRXZl
bnQ6OkNsaXBib2FyZEV2ZW50KCkKLXsKLX0KLQotQ2xpcGJvYXJkRXZlbnQ6OkNsaXBib2FyZEV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9v
bCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZykKLSAgICA6IEV2ZW50KGV2
ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKSwgbV9jbGlwYm9hcmQoY2xpcGJv
YXJkQXJnKQotewotfQotCi1ib29sIENsaXBib2FyZEV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotV2hlZWxFdmVudDo6V2hlZWxFdmVudCgpIDogbV9ob3Jpem9udGFsKGZhbHNlKSwgbV93aGVl
bERlbHRhKDApCi17Ci19Ci0KLVdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoYm9vbCBoLCBpbnQgZCwg
QWJzdHJhY3RWaWV3ICp2LAotICAgIGludCBzeCwgaW50IHN5LCBpbnQgY3gsIGludCBjeSwgYm9v
bCBjdHJsLCBib29sIGFsdCwgYm9vbCBzaGlmdCwgYm9vbCBtZXRhKQotICAgIDogTW91c2VSZWxh
dGVkRXZlbnQoaCA/IGtodG1sSG9yaXpvbnRhbG1vdXNld2hlZWxFdmVudCA6IG1vdXNld2hlZWxF
dmVudCwKLSAgICAgICAgdHJ1ZSwgdHJ1ZSwgdiwgMCwgc3gsIHN5LCBjeCwgY3ksIGN0cmwsIGFs
dCwgc2hpZnQsIG1ldGEpCi0gICAgLCBtX2hvcml6b250YWwoaCksIG1fd2hlZWxEZWx0YShkKQot
ewotfQotCi1ib29sIFdoZWVsRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2
ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0
dXJlKQotICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICwgbV9saXN0ZW5lcihsaXN0
ZW5lcikKLSAgICAsIG1fdXNlQ2FwdHVyZSh1c2VDYXB0dXJlKQotICAgICwgbV9yZW1vdmVkKGZh
bHNlKQotewotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIgJmEsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZiKQotewotICAgIHJldHVybiBh
LmV2ZW50VHlwZSgpID09IGIuZXZlbnRUeXBlKCkgJiYgYS5saXN0ZW5lcigpID09IGIubGlzdGVu
ZXIoKSAmJiBhLnVzZUNhcHR1cmUoKSA9PSBiLnVzZUNhcHR1cmUoKTsKLX0KLQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotQ2xpcGJvYXJkOjp+Q2xpcGJvYXJkKCkKLXsKLX0KLQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQogQmVmb3JlVW5sb2FkRXZlbnQ6OkJlZm9yZVVubG9hZEV2ZW50
KCkKICAgICA6IEV2ZW50KGJlZm9yZXVubG9hZEV2ZW50LCBmYWxzZSwgdHJ1ZSkKIHsKQEAgLTY1
MSw0ICs0Niw0IEBAIHZvaWQgQmVmb3JlVW5sb2FkRXZlbnQ6OnN0b3JlUmVzdWx0KGNvbnMKICAg
ICBtX3Jlc3VsdCA9IHMuaW1wbCgpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2RvbS9CZWZvcmVVbmxvYWRFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0JlZm9yZVVubG9hZEV2ZW50LmgJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29yZS9k
b20vQmVmb3JlVW5sb2FkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAq
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENv
cHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFk
dC5kZSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDQ1OCArMjMsMjYgQEAKICAqCiAgKi8K
IAotI2lmbmRlZiBET01fRVZFTlRTSU1QTF9ICi0jZGVmaW5lIERPTV9FVkVOVFNJTVBMX0gKKyNp
Zm5kZWYgQmVmb3JlVW5sb2FkRXZlbnRfaAorI2RlZmluZSBCZWZvcmVVbmxvYWRFdmVudF9oCiAK
LSNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNs
dWRlICJOb2RlLmgiCi0KLWNsYXNzIERlcHJlY2F0ZWRTdHJpbmdMaXN0OworI2luY2x1ZGUgIkV2
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFz
cyBDbGlwYm9hcmQ7Ci1jbGFzcyBFdmVudExpc3RlbmVyOwotY2xhc3MgRXZlbnRUYXJnZXROb2Rl
OwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDsKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgRE9NVGltZVN0YW1wOwotdHlwZWRl
ZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OworICAgIGNsYXNzIEJlZm9yZVVubG9hZEV2ZW50IDog
cHVibGljIEV2ZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJlZm9yZVVubG9hZEV2ZW50KCk7
CiAKLWNvbnN0IGludCBFdmVudEV4Y2VwdGlvbk9mZnNldCA9IDEwMDsKLWNvbnN0IGludCBFdmVu
dEV4Y2VwdGlvbk1heCA9IDE5OTsKLWVudW0gRXZlbnRFeGNlcHRpb25Db2RlIHsgVU5TUEVDSUZJ
RURfRVZFTlRfVFlQRV9FUlIgPSBFdmVudEV4Y2VwdGlvbk9mZnNldCB9OworICAgICAgICB2aXJ0
dWFsIGJvb2wgc3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpOwogCi1jbGFzcyBFdmVudCA6IHB1YmxpYyBT
aGFyZWQ8RXZlbnQ+Ci17Ci1wdWJsaWM6Ci0gICAgZW51bSBQaGFzZVR5cGUgeyAKLSAgICAgICAg
Q0FQVFVSSU5HX1BIQVNFID0gMSwgCi0gICAgICAgIEFUX1RBUkdFVCA9IDIsIAotICAgICAgICBC
VUJCTElOR19QSEFTRSA9IDMgCi0gICAgfTsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9CiAKLSAgICAvLyBSZXZlcnNlLWVuZ2luZWVyZWQg
ZnJvbSBOZXRzY2FwZQotICAgIGVudW0gRXZlbnRUeXBlIHsKLSAgICAgICAgTU9VU0VET1dOICAg
ICAgICAgICA9IDEsCi0gICAgICAgIE1PVVNFVVAgICAgICAgICAgICAgPSAyLAotICAgICAgICBN
T1VTRU9WRVIgICAgICAgICAgID0gNCwKLSAgICAgICAgTU9VU0VPVVQgICAgICAgICAgICA9IDgs
Ci0gICAgICAgIE1PVVNFTU9WRSAgICAgICAgICAgPSAxNiwKLSAgICAgICAgTU9VU0VEUkFHICAg
ICAgICAgICA9IDMyLAotICAgICAgICBDTElDSyAgICAgICAgICAgICAgID0gNjQsCi0gICAgICAg
IERCTENMSUNLICAgICAgICAgICAgPSAxMjgsCi0gICAgICAgIEtFWURPV04gICAgICAgICAgICAg
PSAyNTYsCi0gICAgICAgIEtFWVVQICAgICAgICAgICAgICAgPSA1MTIsCi0gICAgICAgIEtFWVBS
RVNTICAgICAgICAgICAgPSAxMDI0LAotICAgICAgICBEUkFHRFJPUCAgICAgICAgICAgID0gMjA0
OCwKLSAgICAgICAgRk9DVVMgICAgICAgICAgICAgICA9IDQwOTYsCi0gICAgICAgIEJMVVIgICAg
ICAgICAgICAgICAgPSA4MTkyLAotICAgICAgICBTRUxFQ1QgICAgICAgICAgICAgID0gMTYzODQs
Ci0gICAgICAgIENIQU5HRSAgICAgICAgICAgICAgPSAzMjc2OAorICAgIHByaXZhdGU6CisgICAg
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX3Jlc3VsdDsKICAgICB9OwotICAgIAotICAgIEV2ZW50
KCk7Ci0gICAgRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZUFy
ZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKLSAgICB2aXJ0dWFsIH5FdmVudCgpOwotCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nICZ0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgTm9k
ZSogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dFRhcmdldChOb2RlKik7Ci0gICAgTm9kZSogY3VycmVudFRhcmdldCgpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudFRhcmdldDsgfQotICAgIHZvaWQgc2V0Q3VycmVudFRhcmdldChOb2RlKiBjdXJy
ZW50VGFyZ2V0KSB7IG1fY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7IH0KLSAgICB1bnNp
Z25lZCBzaG9ydCBldmVudFBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFBoYXNlOyB9Ci0g
ICAgdm9pZCBzZXRFdmVudFBoYXNlKHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UpIHsgbV9ldmVu
dFBoYXNlID0gZXZlbnRQaGFzZTsgfQotICAgIGJvb2wgYnViYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FuQnViYmxlOyB9Ci0gICAgYm9vbCBjYW5jZWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9j
YW5jZWxhYmxlOyB9Ci0gICAgRE9NVGltZVN0YW1wIHRpbWVTdGFtcCgpIHsgcmV0dXJuIG1fY3Jl
YXRlVGltZTsgfQotICAgIHZvaWQgc3RvcFByb3BhZ2F0aW9uKCkgeyBtX3Byb3BhZ2F0aW9uU3Rv
cHBlZCA9IHRydWU7IH0KLSAgICB2b2lkIHByZXZlbnREZWZhdWx0KCkgeyBpZiAobV9jYW5jZWxh
YmxlKSBtX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBpbml0RXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNh
bmNlbGFibGVBcmcpOwotCi0gICAgdmlydHVhbCBib29sIGlzVUlFdmVudCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNN
dXRhdGlvbkV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRFdmVudCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OyAvLyBhIHN1YnNl
dCBvZiBtb3VzZSBldmVudHMKLSAgICB2aXJ0dWFsIGJvb2wgaXNDbGlwYm9hcmRFdmVudCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0OwotCi0gICAgYm9vbCBwcm9w
YWdhdGlvblN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BhZ2F0aW9uU3RvcHBlZDsgfQot
ICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVmYXVsdFByZXZl
bnRlZDsgfQotCi0gICAgdm9pZCBzZXREZWZhdWx0SGFuZGxlZCgpIHsgbV9kZWZhdWx0SGFuZGxl
ZCA9IHRydWU7IH0KLSAgICBib29sIGRlZmF1bHRIYW5kbGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWZhdWx0SGFuZGxlZDsgfQotCi0gICAgdm9pZCBzZXRDYW5jZWxCdWJibGUoYm9vbCBjYW5jZWwp
IHsgbV9jYW5jZWxCdWJibGUgPSBjYW5jZWw7IH0KLSAgICB2b2lkIHNldERlZmF1bHRQcmV2ZW50
ZWQoYm9vbCBkZWZhdWx0UHJldmVudGVkKSB7IG1fZGVmYXVsdFByZXZlbnRlZCA9IGRlZmF1bHRQ
cmV2ZW50ZWQ7IH0KLSAgICBib29sIGdldENhbmNlbEJ1YmJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FuY2VsQnViYmxlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzUmVzdWx0QXNTdHJpbmco
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJik7Ci0K
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLSAgICBib29s
IGRpc3BhdGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQotCi1wcml2YXRlOgotICAg
IEF0b21pY1N0cmluZyBtX3R5cGU7Ci0gICAgYm9vbCBtX2NhbkJ1YmJsZTsKLSAgICBib29sIG1f
Y2FuY2VsYWJsZTsKLQotICAgIGJvb2wgbV9wcm9wYWdhdGlvblN0b3BwZWQ7Ci0gICAgYm9vbCBt
X2RlZmF1bHRQcmV2ZW50ZWQ7Ci0gICAgYm9vbCBtX2RlZmF1bHRIYW5kbGVkOwotICAgIGJvb2wg
bV9jYW5jZWxCdWJibGU7Ci0KLSAgICBOb2RlKiBtX2N1cnJlbnRUYXJnZXQ7IC8vIHJlZiA+IDAg
bWFpbnRhaW5lZCBleHRlcm5hbGx5Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9ldmVudFBoYXNlOwot
ICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKLSAgICBET01UaW1lU3RhbXAgbV9jcmVhdGVUaW1l
OwotfTsKLQotY2xhc3MgVUlFdmVudCA6IHB1YmxpYyBFdmVudAotewotcHVibGljOgotICAgIFVJ
RXZlbnQoKTsKLSAgICBVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAg
ICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFi
bGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAg
ICAgICAgIGludCBkZXRhaWxBcmcpOwotICAgIEFic3RyYWN0VmlldyAqdmlldygpIGNvbnN0IHsg
cmV0dXJuIG1fdmlldy5nZXQoKTsgfQotICAgIGludCBkZXRhaWwoKSBjb25zdCB7IHJldHVybiBt
X2RldGFpbDsgfQotICAgIHZvaWQgaW5pdFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBr
ZXlDb2RlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY2hhckNvZGUoKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgaW50IGxheWVyWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxheWVyWSgpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBw
YWdlWSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBSZWZQdHI8QWJzdHJhY3RWaWV3PiBtX3ZpZXc7Ci0gICAgaW50IG1fZGV0YWlsOwot
fTsKLQotY2xhc3MgVUlFdmVudFdpdGhLZXlTdGF0ZSA6IHB1YmxpYyBVSUV2ZW50IHsKLXB1Ymxp
YzoKLSAgICBVSUV2ZW50V2l0aEtleVN0YXRlKCkgOiBtX2N0cmxLZXkoZmFsc2UpLCBtX2FsdEtl
eShmYWxzZSksIG1fc2hpZnRLZXkoZmFsc2UpLCBtX21ldGFLZXkoZmFsc2UpIHsgfQotICAgIFVJ
RXZlbnRXaXRoS2V5U3RhdGUoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLCBib29sIGNhbkJ1YmJs
ZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAg
IGludCBkZXRhaWxBcmcsIGJvb2wgY3RybEtleUFyZywgYm9vbCBhbHRLZXlBcmcsIGJvb2wgc2hp
ZnRLZXlBcmcsIGJvb2wgbWV0YUtleUFyZykKLSAgICAgICAgOiBVSUV2ZW50KHR5cGUsIGNhbkJ1
YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnKQotICAgICAgICAsIG1f
Y3RybEtleShjdHJsS2V5QXJnKSwgbV9hbHRLZXkoYWx0S2V5QXJnKSwgbV9zaGlmdEtleShzaGlm
dEtleUFyZyksIG1fbWV0YUtleShtZXRhS2V5QXJnKSB7IH0KLQotICAgIGJvb2wgY3RybEtleSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3RybEtleTsgfQotICAgIGJvb2wgc2hpZnRLZXkoKSBjb25zdCB7
IHJldHVybiBtX3NoaWZ0S2V5OyB9Ci0gICAgYm9vbCBhbHRLZXkoKSBjb25zdCB7IHJldHVybiBt
X2FsdEtleTsgfQotICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YUtleTsg
fQotCi1wcm90ZWN0ZWQ6IC8vIGV4cG9zZSB0aGVzZSBzbyBpbml0IGZ1bmN0aW9ucyBjYW4gc2V0
IHRoZW0KLSAgICBib29sIG1fY3RybEtleSA6IDE7Ci0gICAgYm9vbCBtX2FsdEtleSA6IDE7Ci0g
ICAgYm9vbCBtX3NoaWZ0S2V5IDogMTsKLSAgICBib29sIG1fbWV0YUtleSA6IDE7Ci19OwotCi0v
LyBJbnRlcm5hbCBvbmx5OiBIZWxwZXIgY2xhc3MgZm9yIHdoYXQncyBjb21tb24gYmV0d2VlbiBt
b3VzZSBhbmQgd2hlZWwgZXZlbnRzLgotY2xhc3MgTW91c2VSZWxhdGVkRXZlbnQgOiBwdWJsaWMg
VUlFdmVudFdpdGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgTW91c2VSZWxhdGVkRXZlbnQoKTsK
LSAgICBNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFp
bEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVu
dFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCA9
IGZhbHNlKTsKLSAgICBpbnQgc2NyZWVuWCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuWDsgfQot
ICAgIGludCBzY3JlZW5ZKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5ZOyB9Ci0gICAgaW50IGNs
aWVudFgoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudFg7IH0KLSAgICBpbnQgY2xpZW50WSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50WTsgfQotICAgIGludCBsYXllclgoKSBjb25zdCB7IHJldHVy
biBtX2xheWVyWDsgfQotICAgIGludCBsYXllclkoKSBjb25zdCB7IHJldHVybiBtX2xheWVyWTsg
fQotICAgIGludCBvZmZzZXRYKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRYOyB9Ci0gICAgaW50
IG9mZnNldFkoKSBjb25zdCB7IHJldHVybiBtX29mZnNldFk7IH0KLSAgICBib29sIGlzU2ltdWxh
dGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NpbXVsYXRlZDsgfQotICAgIHZpcnR1YWwgaW50IHBh
Z2VYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFnZVkoKSBjb25zdDsKLSAgICBpbnQgeCgp
IGNvbnN0OwotICAgIGludCB5KCkgY29uc3Q7Ci1wcm90ZWN0ZWQ6IC8vIGV4cG9zZSB0aGVzZSBz
byBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVudCBjYW4gc2V0IHRoZW0KLSAgICBpbnQgbV9zY3Jl
ZW5YOwotICAgIGludCBtX3NjcmVlblk7Ci0gICAgaW50IG1fY2xpZW50WDsKLSAgICBpbnQgbV9j
bGllbnRZOwotICAgIHZvaWQgaW5pdENvb3JkaW5hdGVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkVGFyZ2V0KCk7Ci1wcml2YXRlOgotICAgIGludCBtX3BhZ2VYOwotICAgIGludCBtX3Bh
Z2VZOwotICAgIGludCBtX2xheWVyWDsKLSAgICBpbnQgbV9sYXllclk7Ci0gICAgaW50IG1fb2Zm
c2V0WDsKLSAgICBpbnQgbV9vZmZzZXRZOwotICAgIGJvb2wgbV9pc1NpbXVsYXRlZDsKLX07Ci0K
LS8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKLWNsYXNzIE1vdXNlRXZlbnQgOiBwdWJsaWMg
TW91c2VSZWxhdGVkRXZlbnQgewotcHVibGljOgotICAgIE1vdXNlRXZlbnQoKTsKLSAgICBNb3Vz
ZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICBib29s
IGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3KiB2aWV3QXJnLAotICAgICAgICAgICAgICAg
ICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0g
ICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50
IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0
S2V5QXJnLAotICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0
ZWRUYXJnZXRBcmcsCi0gICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmRBcmcg
PSAwLAotICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQgPSBmYWxzZSk7Ci0gICAg
dmlydHVhbCB+TW91c2VFdmVudCgpOwotICAgIC8vIFdpbklFIHVzZXMgMSw0LDIgZm9yIGxlZnQv
bWlkZGxlL3JpZ2h0IGJ1dCBub3QgZm9yIGNsaWNrIChqdXN0IGZvciBtb3VzZWRvd24vdXAsIG1h
eWJlIG90aGVycyksIGJ1dCB3ZSB3aWxsIG1hdGNoIHRoZSBzdGFuZGFyZCBET00uCi0gICAgdW5z
aWduZWQgc2hvcnQgYnV0dG9uKCkgY29uc3QgeyByZXR1cm4gbV9idXR0b247IH0KLSAgICBFdmVu
dFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWRUYXJn
ZXQuZ2V0KCk7IH0KLSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpcGJvYXJkLmdldCgpOyB9Ci0gICAgTm9kZSogdG9FbGVtZW50KCkgY29uc3Q7Ci0gICAgTm9k
ZSogZnJvbUVsZW1lbnQoKSBjb25zdDsKLSAgICB2b2lkIGluaXRNb3VzZUV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnVi
YmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3KiB2aWV3QXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBz
Y3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
YnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxh
dGVkVGFyZ2V0QXJnKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgd2hp
Y2goKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9idXR0b247Ci0gICAg
UmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0OwotICAgIFJlZlB0cjxDbGlw
Ym9hcmQ+IG1fY2xpcGJvYXJkOwotfTsKLQotCi0vLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAz
Ci1jbGFzcyBLZXlib2FyZEV2ZW50IDogcHVibGljIFVJRXZlbnRXaXRoS2V5U3RhdGUgewotcHVi
bGljOgotICAgIGVudW0gS2V5TG9jYXRpb25Db2RlIHsKLSAgICAgICAgRE9NX0tFWV9MT0NBVElP
Tl9TVEFOREFSRCAgICAgID0gMHgwMCwKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9MRUZUICAg
ICAgICAgID0gMHgwMSwKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9SSUdIVCAgICAgICAgID0g
MHgwMiwKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgICAgICAgID0gMHgwMywKLSAg
ICB9OwotICAgIEtleWJvYXJkRXZlbnQoKTsKLSAgICBLZXlib2FyZEV2ZW50KGNvbnN0IFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCYsIEFic3RyYWN0VmlldyopOwotICAgIEtleWJvYXJkRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJn
LAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICBB
YnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZrZXlJ
ZGVudGlmaWVyQXJnLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLAot
ICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIGFs
dEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAg
ICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJn
KTsKLSAgICB2aXJ0dWFsIH5LZXlib2FyZEV2ZW50KCk7Ci0gICAgCi0gICAgdm9pZCBpbml0S2V5
Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAg
Ym9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAot
ICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQg
a2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAg
ICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlB
cmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgIGJv
b2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIAotICAgIFN0cmluZyBrZXlJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV9rZXlJZGVudGlmaWVyLmdldCgpOyB9Ci0gICAgdW5zaWduZWQga2V5TG9j
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2tleUxvY2F0aW9uOyB9Ci0gICAgCi0gICAgYm9vbCBh
bHRHcmFwaEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0R3JhcGhLZXk7IH0KLSAgICAKLSAgICBj
b25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlFdmVudDsgfQotCi0gICAgaW50IGtleUNvZGUoKSBjb25zdDsgLy8ga2V5IGNvZGUgZm9yIGtl
eWRvd24gYW5kIGtleXVwLCBjaGFyYWN0ZXIgZm9yIG90aGVyIGV2ZW50cwotICAgIGludCBjaGFy
Q29kZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudCogbV9rZXlFdmVudDsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bV9rZXlJZGVudGlmaWVyOwotICAgIHVuc2lnbmVkIG1fa2V5TG9jYXRpb247Ci0gICAgYm9vbCBt
X2FsdEdyYXBoS2V5IDogMTsKLX07Ci0KLWNsYXNzIE11dGF0aW9uRXZlbnQgOiBwdWJsaWMgRXZl
bnQgewotcHVibGljOgotICAgIGVudW0gYXR0ckNoYW5nZVR5cGUgeyBNT0RJRklDQVRJT04gPSAx
LCBBRERJVElPTiA9IDIsIFJFTU9WQUwgPSAzIH07Ci0gICAgTXV0YXRpb25FdmVudCgpOwotICAg
IE11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
Y2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxhdGVkTm9kZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAgTm9kZSAqcmVsYXRlZE5vZGUo
KSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWROb2RlLmdldCgpOyB9Ci0gICAgU3RyaW5nIHByZXZW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJldlZhbHVlLmdldCgpOyB9Ci0gICAgU3RyaW5nIG5l
d1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uZXdWYWx1ZS5nZXQoKTsgfQotICAgIFN0cmluZyBh
dHRyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ck5hbWUuZ2V0KCk7IH0KLSAgICB1bnNpZ25l
ZCBzaG9ydCBhdHRyQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyQ2hhbmdlOyB9Ci0gICAg
dm9pZCBpbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IGF0dHJDaGFuZ2VBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQo
KSBjb25zdDsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZE5vZGU7Ci0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG1fcHJldlZhbHVlOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBt
X25ld1ZhbHVlOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2F0dHJOYW1lOwotICAgIHVuc2ln
bmVkIHNob3J0IG1fYXR0ckNoYW5nZTsKLX07Ci0KLWNsYXNzIENsaXBib2FyZEV2ZW50IDogcHVi
bGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBDbGlwYm9hcmRFdmVudCgpOwotICAgIENsaXBib2Fy
ZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wg
Y2FuY2VsYWJsZUFyZywgQ2xpcGJvYXJkICpjbGlwYm9hcmRBcmcpOwotCi0gICAgQ2xpcGJvYXJk
ICpjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBib2FyZC5nZXQoKTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFJlZlB0
cjxDbGlwYm9hcmQ+IG1fY2xpcGJvYXJkOwotfTsKLQotLy8gZXh0ZW5zaW9uOiBtb3VzZSB3aGVl
bCBldmVudAotY2xhc3MgV2hlZWxFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudAotewot
cHVibGljOgotICAgIFdoZWVsRXZlbnQoKTsKLSAgICBXaGVlbEV2ZW50KGJvb2wgaG9yaXpvbnRh
bCwgaW50IHdoZWVsRGVsdGEsIEFic3RyYWN0VmlldyAqLAotICAgICAgICAgICAgICAgICAgIGlu
dCBzY3JlZW5YQXJnLCBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xp
ZW50WEFyZywgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5
QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5QXJnKTsK
LSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbDsgfQot
ICAgIGludCB3aGVlbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbERlbHRhOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OwotCi0gICAgYm9v
bCBtX2hvcml6b250YWw7Ci0gICAgaW50IG1fd2hlZWxEZWx0YTsKLX07Ci0KLWNsYXNzIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyIDogcHVibGljIFNoYXJlZDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
cj4gewotcHVibGljOgotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1
cmUpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX2V2ZW50VHlwZTsgfQotICAgIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQotICAgIGJvb2wgdXNlQ2FwdHVyZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlQ2FwdHVyZTsgfQotICAgIGJvb2wgcmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVtb3ZlZDsgfQotICAgIHZvaWQgc2V0UmVtb3ZlZChib29sIHJlbW92ZWQpIHsgbV9yZW1v
dmVkID0gcmVtb3ZlZDsgfQotICAgIAotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcgbV9ldmVu
dFR5cGU7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fbGlzdGVuZXI7Ci0gICAgYm9vbCBt
X3VzZUNhcHR1cmU7Ci0gICAgYm9vbCBtX3JlbW92ZWQ7Ci19OwotCi1ib29sIG9wZXJhdG9yPT0o
Y29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lciYpOwotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lciYgYSwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGIpIHsgcmV0dXJuICEoYSA9
PSBiKTsgfQotCi0vLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElFJ3MgZXZlbnRzIGZvciBkcmFn
IGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCi1jbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgU2hhcmVk
PENsaXBib2FyZD4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkNsaXBib2FyZCgpOwotCi0gICAg
Ly8gSXMgdGhpcyBvcGVyYXRpb24gYSBkcmFnLWRyb3Agb3IgYSBjb3B5LXBhc3RlPwotICAgIHZp
cnR1YWwgYm9vbCBpc0ZvckRyYWdnaW5nKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBTdHJp
bmcgZHJvcEVmZmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJvcEVmZmVj
dChjb25zdCBTdHJpbmcgJnMpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBlZmZlY3RBbGxvd2Vk
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRFZmZlY3RBbGxvd2VkKGNvbnN0IFN0
cmluZyAmcykgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhckRhdGEoY29uc3QgU3Ry
aW5nICZ0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRGF0YSgpID0gMDsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyAmdHlwZSwgYm9vbCAmc3VjY2Vz
cykgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyAmdHlw
ZSwgY29uc3QgU3RyaW5nICZkYXRhKSA9IDA7Ci0gICAgCi0gICAgLy8gZXh0ZW5zaW9ucyBiZXlv
bmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmdMaXN0IHR5cGVzKCkgY29u
c3QgPSAwOwotICAgIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgZHJhZ0xvY2F0aW9u
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotICAgIHZpcnR1YWwgTm9kZSAqZHJhZ0ltYWdlRWxl
bWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlICos
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50ICYpID0gMDsKLX07Ci0KLWNsYXNzIEJlZm9yZVVubG9h
ZEV2ZW50IDogcHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgQmVmb3JlVW5sb2FkRXZlbnQo
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBy
ZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBtX3Jlc3VsdDsKLX07CiAKLX0gLy8gbmFtZXNwYWNlCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIEJlZm9yZVVubG9hZEV2ZW50
X2gKSW5kZXg6IFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCShyZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUv
ZG9tL0NoYXJhY3RlckRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJkb20y
X2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJLV1FUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiTXV0
YXRpb25FdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBXZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9DbGlwYm9hcmQuaAkocmV2aXNpb24gMTQ5MDApCisrKyBXZWJDb3JlL2RvbS9DbGlw
Ym9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAw
MSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTIyLDQ1OCArMjMsNDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBET01f
RVZFTlRTSU1QTF9ICi0jZGVmaW5lIERPTV9FVkVOVFNJTVBMX0gKKyNpZm5kZWYgQ2xpcGJvYXJk
X2gKKyNkZWZpbmUgQ2xpcGJvYXJkX2gKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJTaGFyZWQu
aCIKIAogY2xhc3MgRGVwcmVjYXRlZFN0cmluZ0xpc3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBFdmVudExpc3Rl
bmVyOwotY2xhc3MgRXZlbnRUYXJnZXROb2RlOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbnRQb2lu
dDsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBDYWNoZWRJbWFnZTsK
KyAgICBjbGFzcyBJbnRQb2ludDsKIAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgRE9NVGlt
ZVN0YW1wOwotdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwotCi1jb25zdCBpbnQgRXZl
bnRFeGNlcHRpb25PZmZzZXQgPSAxMDA7Ci1jb25zdCBpbnQgRXZlbnRFeGNlcHRpb25NYXggPSAx
OTk7Ci1lbnVtIEV2ZW50RXhjZXB0aW9uQ29kZSB7IFVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJS
ID0gRXZlbnRFeGNlcHRpb25PZmZzZXQgfTsKLQotY2xhc3MgRXZlbnQgOiBwdWJsaWMgU2hhcmVk
PEV2ZW50PgotewotcHVibGljOgotICAgIGVudW0gUGhhc2VUeXBlIHsgCi0gICAgICAgIENBUFRV
UklOR19QSEFTRSA9IDEsIAotICAgICAgICBBVF9UQVJHRVQgPSAyLCAKLSAgICAgICAgQlVCQkxJ
TkdfUEhBU0UgPSAzIAotICAgIH07Ci0KLSAgICAvLyBSZXZlcnNlLWVuZ2luZWVyZWQgZnJvbSBO
ZXRzY2FwZQotICAgIGVudW0gRXZlbnRUeXBlIHsKLSAgICAgICAgTU9VU0VET1dOICAgICAgICAg
ICA9IDEsCi0gICAgICAgIE1PVVNFVVAgICAgICAgICAgICAgPSAyLAotICAgICAgICBNT1VTRU9W
RVIgICAgICAgICAgID0gNCwKLSAgICAgICAgTU9VU0VPVVQgICAgICAgICAgICA9IDgsCi0gICAg
ICAgIE1PVVNFTU9WRSAgICAgICAgICAgPSAxNiwKLSAgICAgICAgTU9VU0VEUkFHICAgICAgICAg
ICA9IDMyLAotICAgICAgICBDTElDSyAgICAgICAgICAgICAgID0gNjQsCi0gICAgICAgIERCTENM
SUNLICAgICAgICAgICAgPSAxMjgsCi0gICAgICAgIEtFWURPV04gICAgICAgICAgICAgPSAyNTYs
Ci0gICAgICAgIEtFWVVQICAgICAgICAgICAgICAgPSA1MTIsCi0gICAgICAgIEtFWVBSRVNTICAg
ICAgICAgICAgPSAxMDI0LAotICAgICAgICBEUkFHRFJPUCAgICAgICAgICAgID0gMjA0OCwKLSAg
ICAgICAgRk9DVVMgICAgICAgICAgICAgICA9IDQwOTYsCi0gICAgICAgIEJMVVIgICAgICAgICAg
ICAgICAgPSA4MTkyLAotICAgICAgICBTRUxFQ1QgICAgICAgICAgICAgID0gMTYzODQsCi0gICAg
ICAgIENIQU5HRSAgICAgICAgICAgICAgPSAzMjc2OAotICAgIH07Ci0gICAgCi0gICAgRXZlbnQo
KTsKLSAgICBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlQXJn
LCBib29sIGNhbmNlbGFibGVBcmcpOwotICAgIHZpcnR1YWwgfkV2ZW50KCk7Ci0KLSAgICBjb25z
dCBBdG9taWNTdHJpbmcgJnR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBOb2Rl
KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0
VGFyZ2V0KE5vZGUqKTsKLSAgICBOb2RlKiBjdXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50VGFyZ2V0OyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VGFyZ2V0KE5vZGUqIGN1cnJl
bnRUYXJnZXQpIHsgbV9jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsgfQotICAgIHVuc2ln
bmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50UGhhc2U7IH0KLSAg
ICB2b2lkIHNldEV2ZW50UGhhc2UodW5zaWduZWQgc2hvcnQgZXZlbnRQaGFzZSkgeyBtX2V2ZW50
UGhhc2UgPSBldmVudFBoYXNlOyB9Ci0gICAgYm9vbCBidWJibGVzKCkgY29uc3QgeyByZXR1cm4g
bV9jYW5CdWJibGU7IH0KLSAgICBib29sIGNhbmNlbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bmNlbGFibGU7IH0KLSAgICBET01UaW1lU3RhbXAgdGltZVN0YW1wKCkgeyByZXR1cm4gbV9jcmVh
dGVUaW1lOyB9Ci0gICAgdm9pZCBzdG9wUHJvcGFnYXRpb24oKSB7IG1fcHJvcGFnYXRpb25TdG9w
cGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgcHJldmVudERlZmF1bHQoKSB7IGlmIChtX2NhbmNlbGFi
bGUpIG1fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH0KLSAgICB2b2lkIGluaXRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2Fu
Y2VsYWJsZUFyZyk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc011
dGF0aW9uRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7IC8vIGEgc3Vic2V0
IG9mIG1vdXNlIGV2ZW50cwotICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIHByb3Bh
Z2F0aW9uU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGFnYXRpb25TdG9wcGVkOyB9Ci0g
ICAgYm9vbCBkZWZhdWx0UHJldmVudGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UHJldmVu
dGVkOyB9Ci0KLSAgICB2b2lkIHNldERlZmF1bHRIYW5kbGVkKCkgeyBtX2RlZmF1bHRIYW5kbGVk
ID0gdHJ1ZTsgfQotICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rl
ZmF1bHRIYW5kbGVkOyB9Ci0KLSAgICB2b2lkIHNldENhbmNlbEJ1YmJsZShib29sIGNhbmNlbCkg
eyBtX2NhbmNlbEJ1YmJsZSA9IGNhbmNlbDsgfQotICAgIHZvaWQgc2V0RGVmYXVsdFByZXZlbnRl
ZChib29sIGRlZmF1bHRQcmV2ZW50ZWQpIHsgbV9kZWZhdWx0UHJldmVudGVkID0gZGVmYXVsdFBy
ZXZlbnRlZDsgfQotICAgIGJvb2wgZ2V0Q2FuY2VsQnViYmxlKCkgY29uc3QgeyByZXR1cm4gbV9j
YW5jZWxCdWJibGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygp
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKLQot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFRhcmdldCgpOwotICAgIGJvb2wg
ZGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAg
QXRvbWljU3RyaW5nIG1fdHlwZTsKLSAgICBib29sIG1fY2FuQnViYmxlOwotICAgIGJvb2wgbV9j
YW5jZWxhYmxlOwotCi0gICAgYm9vbCBtX3Byb3BhZ2F0aW9uU3RvcHBlZDsKLSAgICBib29sIG1f
ZGVmYXVsdFByZXZlbnRlZDsKLSAgICBib29sIG1fZGVmYXVsdEhhbmRsZWQ7Ci0gICAgYm9vbCBt
X2NhbmNlbEJ1YmJsZTsKLQotICAgIE5vZGUqIG1fY3VycmVudFRhcmdldDsgLy8gcmVmID4gMCBt
YWludGFpbmVkIGV4dGVybmFsbHkKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2V2ZW50UGhhc2U7Ci0g
ICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OwotICAgIERPTVRpbWVTdGFtcCBtX2NyZWF0ZVRpbWU7
Ci19OwotCi1jbGFzcyBVSUV2ZW50IDogcHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgVUlF
dmVudCgpOwotICAgIFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAg
ICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJs
ZUFyZywKLSAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAg
ICAgICAgaW50IGRldGFpbEFyZyk7Ci0gICAgQWJzdHJhY3RWaWV3ICp2aWV3KCkgY29uc3QgeyBy
ZXR1cm4gbV92aWV3LmdldCgpOyB9Ci0gICAgaW50IGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGV0YWlsOyB9Ci0gICAgdm9pZCBpbml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpOwot
ICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGtl
eUNvZGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjaGFyQ29kZSgpIGNvbnN0OwotCi0gICAg
dmlydHVhbCBpbnQgbGF5ZXJYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGF5ZXJZKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBwYWdlWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBh
Z2VZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIFJlZlB0cjxBYnN0cmFjdFZpZXc+IG1fdmlldzsKLSAgICBpbnQgbV9kZXRhaWw7Ci19
OwotCi1jbGFzcyBVSUV2ZW50V2l0aEtleVN0YXRlIDogcHVibGljIFVJRXZlbnQgewotcHVibGlj
OgotICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUoKSA6IG1fY3RybEtleShmYWxzZSksIG1fYWx0S2V5
KGZhbHNlKSwgbV9zaGlmdEtleShmYWxzZSksIG1fbWV0YUtleShmYWxzZSkgeyB9Ci0gICAgVUlF
dmVudFdpdGhLZXlTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsIGJvb2wgY2FuQnViYmxl
QXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAg
aW50IGRldGFpbEFyZywgYm9vbCBjdHJsS2V5QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlm
dEtleUFyZywgYm9vbCBtZXRhS2V5QXJnKQotICAgICAgICA6IFVJRXZlbnQodHlwZSwgY2FuQnVi
YmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcpCi0gICAgICAgICwgbV9j
dHJsS2V5KGN0cmxLZXlBcmcpLCBtX2FsdEtleShhbHRLZXlBcmcpLCBtX3NoaWZ0S2V5KHNoaWZ0
S2V5QXJnKSwgbV9tZXRhS2V5KG1ldGFLZXlBcmcpIHsgfQotCi0gICAgYm9vbCBjdHJsS2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9Ci0gICAgYm9vbCBzaGlmdEtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAgICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0S2V5OyB9Ci0gICAgYm9vbCBtZXRhS2V5KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9
Ci0KLXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIGluaXQgZnVuY3Rpb25zIGNhbiBzZXQg
dGhlbQotICAgIGJvb2wgbV9jdHJsS2V5IDogMTsKLSAgICBib29sIG1fYWx0S2V5IDogMTsKLSAg
ICBib29sIG1fc2hpZnRLZXkgOiAxOwotICAgIGJvb2wgbV9tZXRhS2V5IDogMTsKLX07Ci0KLS8v
IEludGVybmFsIG9ubHk6IEhlbHBlciBjbGFzcyBmb3Igd2hhdCdzIGNvbW1vbiBiZXR3ZWVuIG1v
dXNlIGFuZCB3aGVlbCBldmVudHMuCi1jbGFzcyBNb3VzZVJlbGF0ZWRFdmVudCA6IHB1YmxpYyBV
SUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1YmxpYzoKLSAgICBNb3VzZVJlbGF0ZWRFdmVudCgpOwot
ICAgIE1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQWJz
dHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWls
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50
WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBt
ZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0g
ZmFsc2UpOwotICAgIGludCBzY3JlZW5YKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5YOyB9Ci0g
ICAgaW50IHNjcmVlblkoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblk7IH0KLSAgICBpbnQgY2xp
ZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50WDsgfQotICAgIGludCBjbGllbnRZKCkgY29u
c3QgeyByZXR1cm4gbV9jbGllbnRZOyB9Ci0gICAgaW50IGxheWVyWCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJYOyB9Ci0gICAgaW50IGxheWVyWSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJZOyB9
Ci0gICAgaW50IG9mZnNldFgoKSBjb25zdCB7IHJldHVybiBtX29mZnNldFg7IH0KLSAgICBpbnQg
b2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WTsgfQotICAgIGJvb2wgaXNTaW11bGF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2ltdWxhdGVkOyB9Ci0gICAgdmlydHVhbCBpbnQgcGFn
ZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWdlWSgpIGNvbnN0OwotICAgIGludCB4KCkg
Y29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsKLXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNv
IE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50IGNhbiBzZXQgdGhlbQotICAgIGludCBtX3NjcmVl
blg7Ci0gICAgaW50IG1fc2NyZWVuWTsKLSAgICBpbnQgbV9jbGllbnRYOwotICAgIGludCBtX2Ns
aWVudFk7Ci0gICAgdm9pZCBpbml0Q29vcmRpbmF0ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRUYXJnZXQoKTsKLXByaXZhdGU6Ci0gICAgaW50IG1fcGFnZVg7Ci0gICAgaW50IG1fcGFn
ZVk7Ci0gICAgaW50IG1fbGF5ZXJYOwotICAgIGludCBtX2xheWVyWTsKLSAgICBpbnQgbV9vZmZz
ZXRYOwotICAgIGludCBtX29mZnNldFk7Ci0gICAgYm9vbCBtX2lzU2ltdWxhdGVkOwotfTsKLQot
Ly8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotY2xhc3MgTW91c2VFdmVudCA6IHB1YmxpYyBN
b3VzZVJlbGF0ZWRFdmVudCB7Ci1wdWJsaWM6Ci0gICAgTW91c2VFdmVudCgpOwotICAgIE1vdXNl
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAg
ICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAg
ICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAg
ICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQg
Y2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAg
ICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBhbHRL
ZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAg
ICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRl
ZFRhcmdldEFyZywKLSAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZyA9
IDAsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCA9IGZhbHNlKTsKLSAgICB2
aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0gICAgLy8gV2luSUUgdXNlcyAxLDQsMiBmb3IgbGVmdC9t
aWRkbGUvcmlnaHQgYnV0IG5vdCBmb3IgY2xpY2sgKGp1c3QgZm9yIG1vdXNlZG93bi91cCwgbWF5
YmUgb3RoZXJzKSwgYnV0IHdlIHdpbGwgbWF0Y2ggdGhlIHN0YW5kYXJkIERPTS4KLSAgICB1bnNp
Z25lZCBzaG9ydCBidXR0b24oKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbjsgfQotICAgIEV2ZW50
VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZFRhcmdl
dC5nZXQoKTsgfQotICAgIENsaXBib2FyZCogY2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9j
bGlwYm9hcmQuZ2V0KCk7IH0KLSAgICBOb2RlKiB0b0VsZW1lbnQoKSBjb25zdDsKLSAgICBOb2Rl
KiBmcm9tRWxlbWVudCgpIGNvbnN0OwotICAgIHZvaWQgaW5pdE1vdXNlRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNj
cmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBi
dXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0
ZWRUYXJnZXRBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGlj
aCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2J1dHRvbjsKLSAgICBS
ZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7Ci0gICAgUmVmUHRyPENsaXBi
b2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0KLS8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDMK
LWNsYXNzIEtleWJvYXJkRXZlbnQgOiBwdWJsaWMgVUlFdmVudFdpdGhLZXlTdGF0ZSB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBLZXlMb2NhdGlvbkNvZGUgewotICAgICAgICBET01fS0VZX0xPQ0FUSU9O
X1NUQU5EQVJEICAgICAgPSAweDAwLAotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX0xFRlQgICAg
ICAgICAgPSAweDAxLAotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX1JJR0hUICAgICAgICAgPSAw
eDAyLAotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCAgICAgICAgPSAweDAzLAorICAg
IC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3Ag
YW5kIGNvcHkvcGFzdGUKKyAgICBjbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgU2hhcmVkPENsaXBi
b2FyZD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2xpcGJvYXJkKCkgeyB9CisK
KyAgICAgICAgLy8gSXMgdGhpcyBvcGVyYXRpb24gYSBkcmFnLWRyb3Agb3IgYSBjb3B5LXBhc3Rl
PworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JEcmFnZ2luZygpIGNvbnN0ID0gMDsKKworICAg
ICAgICB2aXJ0dWFsIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgICAgIHZpcnR1
YWwgU3RyaW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZmZlY3RBbGxvd2VkKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICAKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpID0gMDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNsZWFyQWxsRGF0YSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0ID0gMDsKKyAgICAg
ICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpID0gMDsKKyAgICAKKyAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkK
KyAgICAgICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nTGlzdCB0eXBlcygpIGNvbnN0ID0gMDsK
KyAgICAKKyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgpIGNvbnN0ID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBv
aW50JikgPSAwOworICAgICAgICB2aXJ0dWFsIE5vZGUqIGRyYWdJbWFnZUVsZW1lbnQoKSA9IDA7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJ
bnRQb2ludCYpID0gMDsKICAgICB9OwotICAgIEtleWJvYXJkRXZlbnQoKTsKLSAgICBLZXlib2Fy
ZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYsIEFic3RyYWN0VmlldyopOwotICAg
IEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAg
IGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywK
LSAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLAotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGtleUxvY2F0aW9uQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAg
ICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5
QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICBi
b29sIGFsdEdyYXBoS2V5QXJnKTsKLSAgICB2aXJ0dWFsIH5LZXlib2FyZEV2ZW50KCk7Ci0gICAg
Ci0gICAgdm9pZCBpbml0S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcs
Ci0gICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywK
LSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAg
ICAgICAgICAgdW5zaWduZWQga2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAg
ICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAot
ICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIAotICAgIFN0cmluZyBr
ZXlJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9rZXlJZGVudGlmaWVyLmdldCgpOyB9Ci0g
ICAgdW5zaWduZWQga2V5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2tleUxvY2F0aW9uOyB9
Ci0gICAgCi0gICAgYm9vbCBhbHRHcmFwaEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0R3JhcGhL
ZXk7IH0KLSAgICAKLSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlFdmVudDsgfQotCi0gICAgaW50IGtleUNvZGUoKSBjb25zdDsg
Ly8ga2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBjaGFyYWN0ZXIgZm9yIG90aGVyIGV2
ZW50cwotICAgIGludCBjaGFyQ29kZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBp
c0tleWJvYXJkRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogbV9rZXlFdmVudDsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbV9rZXlJZGVudGlmaWVyOwotICAgIHVuc2lnbmVkIG1fa2V5TG9j
YXRpb247Ci0gICAgYm9vbCBtX2FsdEdyYXBoS2V5IDogMTsKLX07Ci0KLWNsYXNzIE11dGF0aW9u
RXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIGVudW0gYXR0ckNoYW5nZVR5cGUg
eyBNT0RJRklDQVRJT04gPSAxLCBBRERJVElPTiA9IDIsIFJFTU9WQUwgPSAzIH07Ci0gICAgTXV0
YXRpb25FdmVudCgpOwotICAgIE11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBOb2Rl
ICpyZWxhdGVkTm9kZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnBy
ZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAg
Tm9kZSAqcmVsYXRlZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWROb2RlLmdldCgpOyB9
Ci0gICAgU3RyaW5nIHByZXZWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJldlZhbHVlLmdldCgp
OyB9Ci0gICAgU3RyaW5nIG5ld1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uZXdWYWx1ZS5nZXQo
KTsgfQotICAgIFN0cmluZyBhdHRyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ck5hbWUuZ2V0
KCk7IH0KLSAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyQ2hhbmdlOyB9Ci0gICAgdm9pZCBpbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpOwotICAgIHZpcnR1YWwgYm9v
bCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1f
cmVsYXRlZE5vZGU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcHJldlZhbHVlOwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBtX25ld1ZhbHVlOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2F0
dHJOYW1lOwotICAgIHVuc2lnbmVkIHNob3J0IG1fYXR0ckNoYW5nZTsKLX07Ci0KLWNsYXNzIENs
aXBib2FyZEV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBDbGlwYm9hcmRFdmVu
dCgpOwotICAgIENsaXBib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBj
YW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQ2xpcGJvYXJkICpjbGlwYm9hcmRBcmcp
OwotCi0gICAgQ2xpcGJvYXJkICpjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBib2Fy
ZC5nZXQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci1w
cml2YXRlOgotICAgIFJlZlB0cjxDbGlwYm9hcmQ+IG1fY2xpcGJvYXJkOwotfTsKLQotLy8gZXh0
ZW5zaW9uOiBtb3VzZSB3aGVlbCBldmVudAotY2xhc3MgV2hlZWxFdmVudCA6IHB1YmxpYyBNb3Vz
ZVJlbGF0ZWRFdmVudAotewotcHVibGljOgotICAgIFdoZWVsRXZlbnQoKTsKLSAgICBXaGVlbEV2
ZW50KGJvb2wgaG9yaXpvbnRhbCwgaW50IHdoZWVsRGVsdGEsIEFic3RyYWN0VmlldyAqLAotICAg
ICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLCBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAg
ICAgICAgICAgICBpbnQgY2xpZW50WEFyZywgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywg
Ym9vbCBtZXRhS2V5QXJnKTsKLSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJu
IG1faG9yaXpvbnRhbDsgfQotICAgIGludCB3aGVlbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV93
aGVlbERlbHRhOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgp
IGNvbnN0OwotCi0gICAgYm9vbCBtX2hvcml6b250YWw7Ci0gICAgaW50IG1fd2hlZWxEZWx0YTsK
LX07Ci0KLWNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIDogcHVibGljIFNoYXJlZDxSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcj4gewotcHVibGljOgotICAgIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+LCBib29sIHVzZUNhcHR1cmUpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50VHlwZTsgfQotICAgIEV2ZW50TGlzdGVuZXIgKmxp
c3RlbmVyKCkgY29uc3QgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQotICAgIGJvb2wgdXNl
Q2FwdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQ2FwdHVyZTsgfQotICAgIGJvb2wgcmVtb3Zl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlZDsgfQotICAgIHZvaWQgc2V0UmVtb3ZlZChib29s
IHJlbW92ZWQpIHsgbV9yZW1vdmVkID0gcmVtb3ZlZDsgfQotICAgIAotcHJpdmF0ZToKLSAgICBB
dG9taWNTdHJpbmcgbV9ldmVudFR5cGU7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fbGlz
dGVuZXI7Ci0gICAgYm9vbCBtX3VzZUNhcHR1cmU7Ci0gICAgYm9vbCBtX3JlbW92ZWQ7Ci19Owot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYpOwotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYSwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
IGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotCi0vLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElF
J3MgZXZlbnRzIGZvciBkcmFnIGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCi1jbGFzcyBDbGlwYm9h
cmQgOiBwdWJsaWMgU2hhcmVkPENsaXBib2FyZD4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkNs
aXBib2FyZCgpOwotCi0gICAgLy8gSXMgdGhpcyBvcGVyYXRpb24gYSBkcmFnLWRyb3Agb3IgYSBj
b3B5LXBhc3RlPwotICAgIHZpcnR1YWwgYm9vbCBpc0ZvckRyYWdnaW5nKCkgY29uc3QgPSAwOwot
Ci0gICAgdmlydHVhbCBTdHJpbmcgZHJvcEVmZmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcgJnMpID0gMDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBlZmZlY3RBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRFZmZl
Y3RBbGxvd2VkKGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBj
bGVhckRhdGEoY29uc3QgU3RyaW5nICZ0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
QWxsRGF0YSgpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyAm
dHlwZSwgYm9vbCAmc3VjY2VzcykgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXREYXRh
KGNvbnN0IFN0cmluZyAmdHlwZSwgY29uc3QgU3RyaW5nICZkYXRhKSA9IDA7Ci0gICAgCi0gICAg
Ly8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJp
bmdMaXN0IHR5cGVzKCkgY29uc3QgPSAwOwotICAgIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2Uq
IGRyYWdJbWFnZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKENh
Y2hlZEltYWdlKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotICAgIHZpcnR1YWwg
Tm9kZSAqZHJhZ0ltYWdlRWxlbWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0lt
YWdlRWxlbWVudChOb2RlICosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50ICYpID0gMDsKLX07Ci0K
LWNsYXNzIEJlZm9yZVVubG9hZEV2ZW50IDogcHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAg
QmVmb3JlVW5sb2FkRXZlbnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0
cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcm
KTsKLQotICAgIFN0cmluZyByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdC5nZXQoKTsg
fQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX3Jlc3VsdDsKLX07CiAKLX0g
Ly8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8v
IENsaXBib2FyZF9oCkluZGV4OiBXZWJDb3JlL2RvbS9DbGlwYm9hcmRFdmVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuY3BwCShyZXZpc2lvbiAxNDkwMCkK
KysrIFdlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4
ICsxLDkgQEAKIC8qKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgogICoKLSAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
Ci0gKiAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5k
ZSkKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICog
Q29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0
YWR0LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdA
Z21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsNTcwICsyMywxNiBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKLQotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJTeXN0ZW1UaW1lLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiU3lzdGVtVGlt
ZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkRXZlbnQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsK
LQotRXZlbnQ6OkV2ZW50KCkKLSAgICA6IG1fY2FuQnViYmxlKGZhbHNlKQotICAgICwgbV9jYW5j
ZWxhYmxlKGZhbHNlKQotICAgICwgbV9wcm9wYWdhdGlvblN0b3BwZWQoZmFsc2UpCi0gICAgLCBt
X2RlZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRIYW5kbGVkKGZhbHNlKQot
ICAgICwgbV9jYW5jZWxCdWJibGUoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRUYXJnZXQoMCkKLSAg
ICAsIG1fZXZlbnRQaGFzZSgwKQotICAgICwgbV9jcmVhdGVUaW1lKHN0YXRpY19jYXN0PERPTVRp
bWVTdGFtcD4oY3VycmVudFRpbWUoKSAqIDEwMDAuMCkpCi17Ci19Ci0KLUV2ZW50OjpFdmVudChj
b25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2Fu
Y2VsYWJsZUFyZykKLSAgICA6IG1fdHlwZShldmVudFR5cGUpCi0gICAgLCBtX2NhbkJ1YmJsZShj
YW5CdWJibGVBcmcpCi0gICAgLCBtX2NhbmNlbGFibGUoY2FuY2VsYWJsZUFyZykKLSAgICAsIG1f
cHJvcGFnYXRpb25TdG9wcGVkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0UHJldmVudGVkKGZhbHNl
KQotICAgICwgbV9kZWZhdWx0SGFuZGxlZChmYWxzZSkKLSAgICAsIG1fY2FuY2VsQnViYmxlKGZh
bHNlKQotICAgICwgbV9jdXJyZW50VGFyZ2V0KDApCi0gICAgLCBtX2V2ZW50UGhhc2UoMCkKLSAg
ICAsIG1fY3JlYXRlVGltZShzdGF0aWNfY2FzdDxET01UaW1lU3RhbXA+KGN1cnJlbnRUaW1lKCkg
KiAxMDAwLjApKQotewotfQotCi1FdmVudDo6fkV2ZW50KCkKLXsKLX0KLQotdm9pZCBFdmVudDo6
aW5pdEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlQXJnLCBib29sIGNhbkJ1YmJs
ZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fdHlwZSA9IGV2ZW50VHlwZUFyZzsKLSAgICBtX2NhbkJ1YmJs
ZSA9IGNhbkJ1YmJsZUFyZzsKLSAgICBtX2NhbmNlbGFibGUgPSBjYW5jZWxhYmxlQXJnOwotfQot
Ci1ib29sIEV2ZW50Ojppc1VJRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBFdmVudDo6aXNNb3VzZUV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0tleWJvYXJkRXZlbnQoKSBjb25zdAotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNEcmFnRXZlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc1doZWVsRXZlbnQo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEV2ZW50OjpzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEV2ZW50OjpzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKQotewotfQotCi12
b2lkIEV2ZW50OjpzZXRUYXJnZXQoTm9kZSogdGFyZ2V0KQotewotICAgIG1fdGFyZ2V0ID0gdGFy
Z2V0OwotICAgIGlmICh0YXJnZXQpCi0gICAgICAgIHJlY2VpdmVkVGFyZ2V0KCk7Ci19Ci0KLXZv
aWQgRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotVUlFdmVudDo6VUlFdmVudCgpCi0gICAgOiBtX2RldGFpbCgwKQotewotfQotCi1VSUV2
ZW50OjpVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJs
ZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsIGludCBkZXRh
aWxBcmcpCi0gICAgOiBFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFy
ZykKLSAgICAsIG1fdmlldyh2aWV3QXJnKQotICAgICwgbV9kZXRhaWwoZGV0YWlsQXJnKQotewot
fQotCi12b2lkIFVJRXZlbnQ6OmluaXRVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0RXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJn
LCBjYW5jZWxhYmxlQXJnKTsKLQotICAgIG1fdmlldyA9IHZpZXdBcmc7Ci0gICAgbV9kZXRhaWwg
PSBkZXRhaWxBcmc7Ci19Ci0KLWJvb2wgVUlFdmVudDo6aXNVSUV2ZW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFVJRXZlbnQ6OmtleUNvZGUoKSBjb25zdAotewotICAg
IHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6Y2hhckNvZGUoKSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6bGF5ZXJYKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQotaW50IFVJRXZlbnQ6OmxheWVyWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWludCBVSUV2ZW50OjpwYWdlWCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBVSUV2ZW50OjpwYWdlWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2
ZW50Ojp3aGljaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1vdXNlUmVsYXRlZEV2ZW50OjpNb3VzZVJlbGF0ZWRFdmVudCgpCi0gICAg
OiBtX3NjcmVlblgoMCksIG1fc2NyZWVuWSgwKSwgbV9jbGllbnRYKDApLCBtX2NsaWVudFkoMCkK
LSAgICAsIG1fcGFnZVgoMCksIG1fcGFnZVkoMCksIG1fbGF5ZXJYKDApLCBtX2xheWVyWSgwKSwg
bV9vZmZzZXRYKDApLCBtX29mZnNldFkoMCksIG1faXNTaW11bGF0ZWQoZmFsc2UpCi17Ci19Ci0K
LU1vdXNlUmVsYXRlZEV2ZW50OjpNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNs
aWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQpCi0gICAgOiBVSUV2ZW50V2l0aEtleVN0YXRlKGV2
ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcs
Ci0gICAgICAgIGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcp
Ci0gICAgLCBtX3NjcmVlblgoc2NyZWVuWEFyZyksIG1fc2NyZWVuWShzY3JlZW5ZQXJnKQotICAg
ICwgbV9jbGllbnRYKGNsaWVudFhBcmcpLCBtX2NsaWVudFkoY2xpZW50WUFyZykKLSAgICAsIG1f
aXNTaW11bGF0ZWQoaXNTaW11bGF0ZWQpCi17Ci0gICAgaW5pdENvb3JkaW5hdGVzKCk7Ci19Ci0K
LXZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OmluaXRDb29yZGluYXRlcygpCi17Ci0gICAgLy8gU2V0
IHVwIGluaXRpYWwgdmFsdWVzIGZvciBjb29yZGluYXRlcy4KLSAgICAvLyBDb3JyZWN0IHZhbHVl
cyBjYW4ndCBiZSBjb21wdXRlZCB1bnRpbCB3ZSBoYXZlIGF0IHRhcmdldCwgc28gcmVjZWl2ZWRU
YXJnZXQKLSAgICAvLyBkb2VzIHRoZSAicmVhbCIgY29tcHV0YXRpb24uCi0gICAgbV9wYWdlWCA9
IG1fY2xpZW50WDsKLSAgICBtX3BhZ2VZID0gbV9jbGllbnRZOwotICAgIG1fbGF5ZXJYID0gbV9w
YWdlWDsKLSAgICBtX2xheWVyWSA9IG1fcGFnZVk7Ci0gICAgbV9vZmZzZXRYID0gbV9wYWdlWDsK
LSAgICBtX29mZnNldFkgPSBtX3BhZ2VZOwotfQotCi12b2lkIE1vdXNlUmVsYXRlZEV2ZW50Ojpy
ZWNlaXZlZFRhcmdldCgpCi17Ci0gICAgLy8gQ29tcHV0ZSBjb29yZGluYXRlcyB0aGF0IGFyZSBi
YXNlZCBvbiB0aGUgdGFyZ2V0LgotICAgIG1fb2Zmc2V0WCA9IG1fcGFnZVg7Ci0gICAgbV9vZmZz
ZXRZID0gbV9wYWdlWTsKLSAgICBtX2xheWVyWCA9IG1fcGFnZVg7ICAgIAotICAgIG1fbGF5ZXJZ
ID0gbV9wYWdlWTsgICAgCi0KLSAgICBOb2RlKiB0YXJnID0gdGFyZ2V0KCk7Ci0gICAgQVNTRVJU
KHRhcmcpOwotCi0gICAgLy8gTXVzdCBoYXZlIGFuIHVwZGF0ZWQgcmVuZGVyIHRyZWUgZm9yIHRo
aXMgbWF0aCB0byB3b3JrIGNvcnJlY3RseS4KLSAgICB0YXJnLT5kb2N1bWVudCgpLT51cGRhdGVS
ZW5kZXJpbmcoKTsKLQotICAgIC8vIEZJWE1FOiBjbGllbnRYL1kgc2hvdWxkIG5vdCBiZSB0aGUg
c2FtZSBhcyBwYWdlWC9ZIQotICAgIC8vIEN1cnJlbnRseSB0aGUgcGFzc2VkLWluIGNsaWVudFgg
YW5kIGNsaWVudFkgYXJlIGluY29ycmVjdGx5IGFjdHVhbGx5Ci0gICAgLy8gcGFnZVggYW5kIHBh
Z2VZIHZhbHVlcywgc28gd2UgZG9uJ3QgaGF2ZSBhbnkgd29yayB0byBkbyBoZXJlLCBidXQgaWYK
LSAgICAvLyB3ZSBzdGFydGVkIHBhc3NpbmcgaW4gY29ycmVjdCBjbGllbnRYIGFuZCBjbGllbnRZ
LCB3ZSdkIHdhbnQgdG8gY29tcHV0ZQotICAgIC8vIHBhZ2VYIGFuZCBwYWdlWSBoZXJlLgotCi0g
ICAgLy8gQWRqdXN0IG9mZnNldFgvWSB0byBiZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0J3MgcG9z
aXRpb24uCi0gICAgaWYgKCFpc1NpbXVsYXRlZCgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmpl
Y3QqIHIgPSB0YXJnLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpbnQgcngsIHJ5OwotICAg
ICAgICAgICAgaWYgKHItPmFic29sdXRlUG9zaXRpb24ocngsIHJ5KSkgewotICAgICAgICAgICAg
ICAgIG1fb2Zmc2V0WCAtPSByeDsKLSAgICAgICAgICAgICAgICBtX29mZnNldFkgLT0gcnk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBZGp1c3QgbGF5ZXJYL1kg
dG8gYmUgcmVsYXRpdmUgdG8gdGhlIGxheWVyLgotICAgIC8vIEZJWE1FOiBXZSdyZSBwcmV0dHkg
c3VyZSB0aGlzIGlzIHRoZSB3cm9uZyBkZWZpbnRpb24gb2YgImxheWVyLiIKLSAgICAvLyBPdXIg
UmVuZGVyTGF5ZXIgaXMgYSBtb3JlIG1vZGVybiBjb25jZXB0LCBhbmQgbGF5ZXJYL1kgaXMgc29t
ZQotICAgIC8vIG90aGVyIG5vdGlvbiBhYm91dCBncm91cHMgb2YgZWxlbWVudHM7IHdlIHNob3Vs
ZCB0ZXN0IGFuZCBmaXggdGhpcy4KLSAgICBOb2RlKiBuID0gdGFyZzsKLSAgICB3aGlsZSAobiAm
JiAhbi0+cmVuZGVyZXIoKSkKLSAgICAgICAgbiA9IG4tPnBhcmVudCgpOwotICAgIGlmIChuKSB7
Ci0gICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IG4tPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xh
eWVyKCk7Ci0gICAgICAgIGxheWVyLT51cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0gICAgICAgIGZv
ciAoOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIG1fbGF5
ZXJYIC09IGxheWVyLT54UG9zKCk7Ci0gICAgICAgICAgICBtX2xheWVyWSAtPSBsYXllci0+eVBv
cygpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnBhZ2VY
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlWDsKLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2
ZW50OjpwYWdlWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZVk7Ci19Ci0KLWludCBNb3Vz
ZVJlbGF0ZWRFdmVudDo6eCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNv
cnJlY3QuCi0gICAgLy8gU2VlIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIGFuZCA8aHR0cDovL3d3
dy5xdWlya3Ntb2RlLm9yZy9kb20vdzNjX2V2ZW50cy5odG1sPi4KLSAgICByZXR1cm4gbV9jbGll
bnRYOwotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnkoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG5vdCBjb3JyZWN0LgotICAgIC8vIFNlZSBNaWNyb3NvZnQgZG9jdW1lbnRh
dGlvbiBhbmQgPGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL3czY19ldmVudHMuaHRtbD4u
Ci0gICAgcmV0dXJuIG1fY2xpZW50WTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
TW91c2VFdmVudDo6TW91c2VFdmVudCgpCi0gICAgOiBtX2J1dHRvbigwKQotewotfQotCi1Nb3Vz
ZUV2ZW50OjpNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Ny
ZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFy
Z2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzU2ltdWxhdGVkKQotICAgIDogTW91c2VSZWxhdGVkRXZlbnQoZXZlbnRUeXBlLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywKLSAgICAgICAg
c2NyZWVuWEFyZywgc2NyZWVuWUFyZywgY2xpZW50WEFyZywgY2xpZW50WUFyZywKLSAgICAgICAg
Y3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFyZywgaXNTaW11bGF0
ZWQpCi0gICAgLCBtX2J1dHRvbihidXR0b25BcmcpCi0gICAgLCBtX3JlbGF0ZWRUYXJnZXQocmVs
YXRlZFRhcmdldEFyZykKLSAgICAsIG1fY2xpcGJvYXJkKGNsaXBib2FyZEFyZykKLXsKLX0KLQot
TW91c2VFdmVudDo6fk1vdXNlRXZlbnQoKQotewotfQotCi12b2lkIE1vdXNlRXZlbnQ6OmluaXRN
b3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3KiB2aWV3QXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNo
aWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRh
S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRU
YXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0QXJnKQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGluaXRVSUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywg
Y2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnKTsKLQotICAgIG1fc2NyZWVuWCA9IHNj
cmVlblhBcmc7Ci0gICAgbV9zY3JlZW5ZID0gc2NyZWVuWUFyZzsKLSAgICBtX2NsaWVudFggPSBj
bGllbnRYQXJnOwotICAgIG1fY2xpZW50WSA9IGNsaWVudFlBcmc7Ci0gICAgbV9jdHJsS2V5ID0g
Y3RybEtleUFyZzsKLSAgICBtX2FsdEtleSA9IGFsdEtleUFyZzsKLSAgICBtX3NoaWZ0S2V5ID0g
c2hpZnRLZXlBcmc7Ci0gICAgbV9tZXRhS2V5ID0gbWV0YUtleUFyZzsKLSAgICBtX2J1dHRvbiA9
IGJ1dHRvbkFyZzsKLSAgICBtX3JlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0QXJnOwotCi0g
ICAgaW5pdENvb3JkaW5hdGVzKCk7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6aXNNb3VzZUV2ZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50Ojppc0Ry
YWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nICZ0ID0gdHlwZSgpOwot
ICAgIHJldHVybiB0ID09IGRyYWdlbnRlckV2ZW50IHx8IHQgPT0gZHJhZ292ZXJFdmVudCB8fCB0
ID09IGRyYWdsZWF2ZUV2ZW50Ci0gICAgICAgIHx8IHQgPT0gZHJvcEV2ZW50Ci0gICAgICAgIHx8
IHQgPT0gZHJhZ3N0YXJ0RXZlbnQgfHwgdCA9PSBkcmFnRXZlbnQgfHwgdCA9PSBkcmFnZW5kRXZl
bnQ7Ci19Ci0KLWludCBNb3VzZUV2ZW50Ojp3aGljaCgpIGNvbnN0Ci17Ci0gICAgLy8gRm9yIEtI
VE1MLCB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgbGVmdCwgbWlkZGxlIGFuZCByaWdodCBtb3VzZSBi
dXR0b25zIGFyZSAwLCAxLCAyLCByZXNwZWN0aXZlbHkuCi0gICAgLy8gRm9yIHRoZSBOZXRzY2Fw
ZSAid2hpY2giIHByb3BlcnR5LCB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgbGVmdCwgbWlkZGxlIGFu
ZCByaWdodCBtb3VzZSBidXR0b25zIGFyZSAxLCAyLCAzLCByZXNwZWN0aXZlbHkuIAotICAgIC8v
IFNvIHdlIG11c3QgYWRkIDEuCi0gICAgcmV0dXJuIG1fYnV0dG9uICsgMTsKLX0KLQotTm9kZSog
TW91c2VFdmVudDo6dG9FbGVtZW50KCkgY29uc3QKLXsKLSAgICAvLyBNU0lFIGV4dGVuc2lvbiAt
ICJ0aGUgb2JqZWN0IHRvd2FyZCB3aGljaCB0aGUgdXNlciBpcyBtb3ZpbmcgdGhlIG1vdXNlIHBv
aW50ZXIiCi0gICAgcmV0dXJuIHR5cGUoKSA9PSBtb3VzZW91dEV2ZW50ID8gcmVsYXRlZFRhcmdl
dCgpIDogdGFyZ2V0KCk7Ci19Ci0KLU5vZGUqIE1vdXNlRXZlbnQ6OmZyb21FbGVtZW50KCkgY29u
c3QKLXsKLSAgICAvLyBNU0lFIGV4dGVuc2lvbiAtICJvYmplY3QgZnJvbSB3aGljaCBhY3RpdmF0
aW9uIG9yIHRoZSBtb3VzZSBwb2ludGVyIGlzIGV4aXRpbmcgZHVyaW5nIHRoZSBldmVudCIgKGh1
aD8pCi0gICAgcmV0dXJuIHR5cGUoKSA9PSBtb3VzZW91dEV2ZW50ID8gdGFyZ2V0KCkgOiByZWxh
dGVkVGFyZ2V0KCk7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoKQotICA6IG1fa2V5RXZlbnQoMCkKLSAg
LCBtX2tleUxvY2F0aW9uKERPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQpCi0gICwgbV9hbHRHcmFw
aEtleShmYWxzZSkKLXsKLX0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleSwgQWJzdHJhY3RWaWV3ICp2aWV3KQotICA6IFVJRXZl
bnRXaXRoS2V5U3RhdGUoa2V5LmlzS2V5VXAoKSA/IGtleXVwRXZlbnQgOiBrZXkuaXNBdXRvUmVw
ZWF0KCkgPyBrZXlwcmVzc0V2ZW50IDoga2V5ZG93bkV2ZW50LAotICAgIHRydWUsIHRydWUsIHZp
ZXcsIDAsIGtleS5jdHJsS2V5KCksIGtleS5hbHRLZXkoKSwga2V5LnNoaWZ0S2V5KCksIGtleS5t
ZXRhS2V5KCkpCi0gICwgbV9rZXlFdmVudChuZXcgUGxhdGZvcm1LZXlib2FyZEV2ZW50KGtleSkp
Ci0gICwgbV9rZXlJZGVudGlmaWVyKFN0cmluZyhrZXkua2V5SWRlbnRpZmllcigpKS5pbXBsKCkp
Ci0gICwgbV9rZXlMb2NhdGlvbihrZXkuaXNLZXlwYWQoKSA/IERPTV9LRVlfTE9DQVRJT05fTlVN
UEFEIDogRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5KGZhbHNl
KQotewotfQotCi1LZXlib2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQga2V5TG9jYXRpb25BcmcsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlB
cmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtl
eUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRH
cmFwaEtleUFyZykKLSAgOiBVSUV2ZW50V2l0aEtleVN0YXRlKGV2ZW50VHlwZSwgY2FuQnViYmxl
QXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCAwLCBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNo
aWZ0S2V5QXJnLCBtZXRhS2V5QXJnKQotICAsIG1fa2V5RXZlbnQoMCkKLSAgLCBtX2tleUlkZW50
aWZpZXIoa2V5SWRlbnRpZmllckFyZy5pbXBsKCkpCi0gICwgbV9rZXlMb2NhdGlvbihrZXlMb2Nh
dGlvbkFyZykKLSAgLCBtX2FsdEdyYXBoS2V5KGFsdEdyYXBoS2V5QXJnKQotewotfQotCi1LZXli
b2FyZEV2ZW50Ojp+S2V5Ym9hcmRFdmVudCgpCi17Ci0gICAgZGVsZXRlIG1fa2V5RXZlbnQ7Ci19
Ci0KLXZvaWQgS2V5Ym9hcmRFdmVudDo6aW5pdEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY3RybEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFy
ZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsdEdyYXBoS2V5QXJnKQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGluaXRVSUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2Vs
YWJsZUFyZywgdmlld0FyZywgMCk7Ci0KLSAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlm
aWVyQXJnLmltcGwoKTsKLSAgICBtX2tleUxvY2F0aW9uID0ga2V5TG9jYXRpb25Bcmc7Ci0gICAg
bV9jdHJsS2V5ID0gY3RybEtleUFyZzsKLSAgICBtX3NoaWZ0S2V5ID0gc2hpZnRLZXlBcmc7Ci0g
ICAgbV9hbHRLZXkgPSBhbHRLZXlBcmc7Ci0gICAgbV9tZXRhS2V5ID0gbWV0YUtleUFyZzsKLSAg
ICBtX2FsdEdyYXBoS2V5ID0gYWx0R3JhcGhLZXlBcmc7Ci19Ci0KLWludCBLZXlib2FyZEV2ZW50
OjprZXlDb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fa2V5RXZlbnQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIGlmICh0eXBlKCkgPT0ga2V5ZG93bkV2ZW50IHx8IHR5cGUoKSA9PSBrZXl1cEV2
ZW50KQotICAgICAgICByZXR1cm4gbV9rZXlFdmVudC0+V2luZG93c0tleUNvZGUoKTsKLSAgICBy
ZXR1cm4gY2hhckNvZGUoKTsKLX0KLQotaW50IEtleWJvYXJkRXZlbnQ6OmNoYXJDb2RlKCkgY29u
c3QKLXsKLSAgICBpZiAoIW1fa2V5RXZlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIFN0cmlu
ZyB0ZXh0ID0gbV9rZXlFdmVudC0+dGV4dCgpOwotICAgIGlmICh0ZXh0Lmxlbmd0aCgpICE9IDEp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0ZXh0WzBdOwotfQotCi1ib29sIEtleWJv
YXJkRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWludCBLZXlib2FyZEV2ZW50Ojp3aGljaCgpIGNvbnN0Ci17Ci0gICAgLy8gTmV0c2NhcGUn
cyAid2hpY2giIHJldHVybnMgYSB2aXJ0dWFsIGtleSBjb2RlIGZvciBrZXlkb3duIGFuZCBrZXl1
cCwgYW5kIGEgY2hhcmFjdGVyIGNvZGUgZm9yIGtleXByZXNzLgotICAgIC8vIFRoYXQncyBleGFj
dGx5IHdoYXQgSUUncyAia2V5Q29kZSIgcmV0dXJucy4gU28gdGhleSBhcmUgdGhlIHNhbWUgZm9y
IGtleWJvYXJkIGV2ZW50cy4KLSAgICByZXR1cm4ga2V5Q29kZSgpOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1NdXRhdGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50KCkKLSAgICA6IG1f
YXR0ckNoYW5nZSgwKQotewotfQotCi1NdXRhdGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOb2RlICpyZWxhdGVkTm9kZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNo
YW5nZUFyZykKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxl
QXJnKQotICAgICwgbV9yZWxhdGVkTm9kZShyZWxhdGVkTm9kZUFyZykKLSAgICAsIG1fcHJldlZh
bHVlKHByZXZWYWx1ZUFyZy5pbXBsKCkpCi0gICAgLCBtX25ld1ZhbHVlKG5ld1ZhbHVlQXJnLmlt
cGwoKSkKLSAgICAsIG1fYXR0ck5hbWUoYXR0ck5hbWVBcmcuaW1wbCgpKQotICAgICwgbV9hdHRy
Q2hhbmdlKGF0dHJDaGFuZ2VBcmcpCi17Ci19Ci0KLXZvaWQgTXV0YXRpb25FdmVudDo6aW5pdE11
dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxhdGVkTm9kZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJn
KQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRF
dmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOwotCi0gICAgbV9yZWxh
dGVkTm9kZSA9IHJlbGF0ZWROb2RlQXJnOwotICAgIG1fcHJldlZhbHVlID0gcHJldlZhbHVlQXJn
LmltcGwoKTsKLSAgICBtX25ld1ZhbHVlID0gbmV3VmFsdWVBcmcuaW1wbCgpOwotICAgIG1fYXR0
ck5hbWUgPSBhdHRyTmFtZUFyZy5pbXBsKCk7Ci0gICAgbV9hdHRyQ2hhbmdlID0gYXR0ckNoYW5n
ZUFyZzsKLX0KLQotYm9vbCBNdXRhdGlvbkV2ZW50Ojppc011dGF0aW9uRXZlbnQoKSBjb25zdAot
ewotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBDbGlw
Ym9hcmRFdmVudDo6Q2xpcGJvYXJkRXZlbnQoKQogewogfQogCi1DbGlwYm9hcmRFdmVudDo6Q2xp
cGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxl
QXJnLCBib29sIGNhbmNlbGFibGVBcmcsIENsaXBib2FyZCAqY2xpcGJvYXJkQXJnKQotICAgIDog
RXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpLCBtX2NsaXBib2Fy
ZChjbGlwYm9hcmRBcmcpCitDbGlwYm9hcmRFdmVudDo6Q2xpcGJvYXJkRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIENs
aXBib2FyZCogY2xpcGJvYXJkKQorICAgIDogRXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGUsIGNh
bmNlbGFibGUpLCBtX2NsaXBib2FyZChjbGlwYm9hcmQpCiB7CiB9CiAKQEAgLTU5NCw2MSArNDEs
NCBAQCBib29sIENsaXBib2FyZEV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoZWVsRXZlbnQ6OldoZWVs
RXZlbnQoKSA6IG1faG9yaXpvbnRhbChmYWxzZSksIG1fd2hlZWxEZWx0YSgwKQotewotfQotCi1X
aGVlbEV2ZW50OjpXaGVlbEV2ZW50KGJvb2wgaCwgaW50IGQsIEFic3RyYWN0VmlldyAqdiwKLSAg
ICBpbnQgc3gsIGludCBzeSwgaW50IGN4LCBpbnQgY3ksIGJvb2wgY3RybCwgYm9vbCBhbHQsIGJv
b2wgc2hpZnQsIGJvb2wgbWV0YSkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGggPyBraHRtbEhv
cml6b250YWxtb3VzZXdoZWVsRXZlbnQgOiBtb3VzZXdoZWVsRXZlbnQsCi0gICAgICAgIHRydWUs
IHRydWUsIHYsIDAsIHN4LCBzeSwgY3gsIGN5LCBjdHJsLCBhbHQsIHNoaWZ0LCBtZXRhKQotICAg
ICwgbV9ob3Jpem9udGFsKGgpLCBtX3doZWVsRGVsdGEoZCkKLXsKLX0KLQotYm9vbCBXaGVlbEV2
ZW50Ojppc1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6UmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLSAgICA6IG1fZXZlbnRU
eXBlKGV2ZW50VHlwZSkKLSAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCi0gICAgLCBtX3VzZUNh
cHR1cmUodXNlQ2FwdHVyZSkKLSAgICAsIG1fcmVtb3ZlZChmYWxzZSkKLXsKLX0KLQotYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZhLCBjb25zdCBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciAmYikKLXsKLSAgICByZXR1cm4gYS5ldmVudFR5cGUoKSA9PSBiLmV2
ZW50VHlwZSgpICYmIGEubGlzdGVuZXIoKSA9PSBiLmxpc3RlbmVyKCkgJiYgYS51c2VDYXB0dXJl
KCkgPT0gYi51c2VDYXB0dXJlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNs
aXBib2FyZDo6fkNsaXBib2FyZCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LUJlZm9yZVVubG9hZEV2ZW50OjpCZWZvcmVVbmxvYWRFdmVudCgpCi0gICAgOiBFdmVudChiZWZv
cmV1bmxvYWRFdmVudCwgZmFsc2UsIHRydWUpCi17Ci19Ci0KLWJvb2wgQmVmb3JlVW5sb2FkRXZl
bnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBCZWZvcmVVbmxvYWRFdmVudDo6c3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJiBzKQot
ewotICAgIG1fcmVzdWx0ID0gcy5pbXBsKCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAkocmV2aXNpb24gMTQ5MDApCisrKyBXZWJDb3JlL2Rv
bS9DbGlwYm9hcmRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAq
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJp
Z2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRl
KQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwu
Y29tKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsNDU4ICsyMywyNSBAQAogICoKICAqLwogCi0j
aWZuZGVmIERPTV9FVkVOVFNJTVBMX0gKLSNkZWZpbmUgRE9NX0VWRU5UU0lNUExfSAorI2lmbmRl
ZiBDbGlwYm9hcmRFdmVudF9oCisjZGVmaW5lIENsaXBib2FyZEV2ZW50X2gKIAotI2luY2x1ZGUg
IkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIk5vZGUu
aCIKLQotY2xhc3MgRGVwcmVjYXRlZFN0cmluZ0xpc3Q7CisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNo
ZWRJbWFnZTsKLWNsYXNzIENsaXBib2FyZDsKLWNsYXNzIEV2ZW50TGlzdGVuZXI7Ci1jbGFzcyBF
dmVudFRhcmdldE5vZGU7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgUGxh
dGZvcm1LZXlib2FyZEV2ZW50OwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBET01UaW1l
U3RhbXA7Ci10eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7Ci0KLWNvbnN0IGludCBFdmVu
dEV4Y2VwdGlvbk9mZnNldCA9IDEwMDsKLWNvbnN0IGludCBFdmVudEV4Y2VwdGlvbk1heCA9IDE5
OTsKLWVudW0gRXZlbnRFeGNlcHRpb25Db2RlIHsgVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIg
PSBFdmVudEV4Y2VwdGlvbk9mZnNldCB9OwotCi1jbGFzcyBFdmVudCA6IHB1YmxpYyBTaGFyZWQ8
RXZlbnQ+Ci17Ci1wdWJsaWM6Ci0gICAgZW51bSBQaGFzZVR5cGUgeyAKLSAgICAgICAgQ0FQVFVS
SU5HX1BIQVNFID0gMSwgCi0gICAgICAgIEFUX1RBUkdFVCA9IDIsIAotICAgICAgICBCVUJCTElO
R19QSEFTRSA9IDMgCi0gICAgfTsKLQotICAgIC8vIFJldmVyc2UtZW5naW5lZXJlZCBmcm9tIE5l
dHNjYXBlCi0gICAgZW51bSBFdmVudFR5cGUgewotICAgICAgICBNT1VTRURPV04gICAgICAgICAg
ID0gMSwKLSAgICAgICAgTU9VU0VVUCAgICAgICAgICAgICA9IDIsCi0gICAgICAgIE1PVVNFT1ZF
UiAgICAgICAgICAgPSA0LAotICAgICAgICBNT1VTRU9VVCAgICAgICAgICAgID0gOCwKLSAgICAg
ICAgTU9VU0VNT1ZFICAgICAgICAgICA9IDE2LAotICAgICAgICBNT1VTRURSQUcgICAgICAgICAg
ID0gMzIsCi0gICAgICAgIENMSUNLICAgICAgICAgICAgICAgPSA2NCwKLSAgICAgICAgREJMQ0xJ
Q0sgICAgICAgICAgICA9IDEyOCwKLSAgICAgICAgS0VZRE9XTiAgICAgICAgICAgICA9IDI1NiwK
LSAgICAgICAgS0VZVVAgICAgICAgICAgICAgICA9IDUxMiwKLSAgICAgICAgS0VZUFJFU1MgICAg
ICAgICAgICA9IDEwMjQsCi0gICAgICAgIERSQUdEUk9QICAgICAgICAgICAgPSAyMDQ4LAotICAg
ICAgICBGT0NVUyAgICAgICAgICAgICAgID0gNDA5NiwKLSAgICAgICAgQkxVUiAgICAgICAgICAg
ICAgICA9IDgxOTIsCi0gICAgICAgIFNFTEVDVCAgICAgICAgICAgICAgPSAxNjM4NCwKLSAgICAg
ICAgQ0hBTkdFICAgICAgICAgICAgICA9IDMyNzY4Ci0gICAgfTsKLSAgICAKLSAgICBFdmVudCgp
OwotICAgIEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0gICAgdmlydHVhbCB+RXZlbnQoKTsKLQotICAgIGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIE5vZGUq
IHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRU
YXJnZXQoTm9kZSopOwotICAgIE5vZGUqIGN1cnJlbnRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRUYXJnZXQ7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRUYXJnZXQoTm9kZSogY3VycmVu
dFRhcmdldCkgeyBtX2N1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0OyB9Ci0gICAgdW5zaWdu
ZWQgc2hvcnQgZXZlbnRQaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRQaGFzZTsgfQotICAg
IHZvaWQgc2V0RXZlbnRQaGFzZSh1bnNpZ25lZCBzaG9ydCBldmVudFBoYXNlKSB7IG1fZXZlbnRQ
aGFzZSA9IGV2ZW50UGhhc2U7IH0KLSAgICBib29sIGJ1YmJsZXMoKSBjb25zdCB7IHJldHVybiBt
X2NhbkJ1YmJsZTsgfQotICAgIGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fu
Y2VsYWJsZTsgfQotICAgIERPTVRpbWVTdGFtcCB0aW1lU3RhbXAoKSB7IHJldHVybiBtX2NyZWF0
ZVRpbWU7IH0KLSAgICB2b2lkIHN0b3BQcm9wYWdhdGlvbigpIHsgbV9wcm9wYWdhdGlvblN0b3Bw
ZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBwcmV2ZW50RGVmYXVsdCgpIHsgaWYgKG1fY2FuY2VsYWJs
ZSkgbV9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgaW5pdEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlQXJnLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5j
ZWxhYmxlQXJnKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTXV0
YXRpb25FdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsgLy8gYSBzdWJzZXQg
b2YgbW91c2UgZXZlbnRzCi0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdDsKLQotICAgIGJvb2wgcHJvcGFn
YXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0b3BwZWQ7IH0KLSAg
ICBib29sIGRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRQcmV2ZW50
ZWQ7IH0KLQotICAgIHZvaWQgc2V0RGVmYXVsdEhhbmRsZWQoKSB7IG1fZGVmYXVsdEhhbmRsZWQg
PSB0cnVlOyB9Ci0gICAgYm9vbCBkZWZhdWx0SGFuZGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVm
YXVsdEhhbmRsZWQ7IH0KLQotICAgIHZvaWQgc2V0Q2FuY2VsQnViYmxlKGJvb2wgY2FuY2VsKSB7
IG1fY2FuY2VsQnViYmxlID0gY2FuY2VsOyB9Ci0gICAgdm9pZCBzZXREZWZhdWx0UHJldmVudGVk
KGJvb2wgZGVmYXVsdFByZXZlbnRlZCkgeyBtX2RlZmF1bHRQcmV2ZW50ZWQgPSBkZWZhdWx0UHJl
dmVudGVkOyB9Ci0gICAgYm9vbCBnZXRDYW5jZWxCdWJibGUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bmNlbEJ1YmJsZTsgfQotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkVGFyZ2V0KCk7Ci0gICAgYm9vbCBk
aXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KLQotcHJpdmF0ZToKLSAgICBB
dG9taWNTdHJpbmcgbV90eXBlOwotICAgIGJvb2wgbV9jYW5CdWJibGU7Ci0gICAgYm9vbCBtX2Nh
bmNlbGFibGU7Ci0KLSAgICBib29sIG1fcHJvcGFnYXRpb25TdG9wcGVkOwotICAgIGJvb2wgbV9k
ZWZhdWx0UHJldmVudGVkOwotICAgIGJvb2wgbV9kZWZhdWx0SGFuZGxlZDsKLSAgICBib29sIG1f
Y2FuY2VsQnViYmxlOwotCi0gICAgTm9kZSogbV9jdXJyZW50VGFyZ2V0OyAvLyByZWYgPiAwIG1h
aW50YWluZWQgZXh0ZXJuYWxseQotICAgIHVuc2lnbmVkIHNob3J0IG1fZXZlbnRQaGFzZTsKLSAg
ICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Ci0gICAgRE9NVGltZVN0YW1wIG1fY3JlYXRlVGltZTsK
LX07Ci0KLWNsYXNzIFVJRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBVSUV2
ZW50KCk7Ci0gICAgVUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAg
ICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxl
QXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAg
ICAgICBpbnQgZGV0YWlsQXJnKTsKLSAgICBBYnN0cmFjdFZpZXcgKnZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZXcuZ2V0KCk7IH0KLSAgICBpbnQgZGV0YWlsKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXRhaWw7IH0KLSAgICB2b2lkIGluaXRVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7Ci0g
ICAgdmlydHVhbCBib29sIGlzVUlFdmVudCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQga2V5
Q29kZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNoYXJDb2RlKCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGludCBsYXllclgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsYXllclkoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgaW50IHBhZ2VYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFn
ZVkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEFic3RyYWN0Vmlldz4gbV92aWV3OwotICAgIGludCBtX2RldGFpbDsKLX07
Ci0KLWNsYXNzIFVJRXZlbnRXaXRoS2V5U3RhdGUgOiBwdWJsaWMgVUlFdmVudCB7Ci1wdWJsaWM6
Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZSgpIDogbV9jdHJsS2V5KGZhbHNlKSwgbV9hbHRLZXko
ZmFsc2UpLCBtX3NoaWZ0S2V5KGZhbHNlKSwgbV9tZXRhS2V5KGZhbHNlKSB7IH0KLSAgICBVSUV2
ZW50V2l0aEtleVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJibGVB
cmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICBp
bnQgZGV0YWlsQXJnLCBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0
S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpCi0gICAgICAgIDogVUlFdmVudCh0eXBlLCBjYW5CdWJi
bGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZykKLSAgICAgICAgLCBtX2N0
cmxLZXkoY3RybEtleUFyZyksIG1fYWx0S2V5KGFsdEtleUFyZyksIG1fc2hpZnRLZXkoc2hpZnRL
ZXlBcmcpLCBtX21ldGFLZXkobWV0YUtleUFyZykgeyB9Ci0KLSAgICBib29sIGN0cmxLZXkoKSBj
b25zdCB7IHJldHVybiBtX2N0cmxLZXk7IH0KLSAgICBib29sIHNoaWZ0S2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGlmdEtleTsgfQotICAgIGJvb2wgYWx0S2V5KCkgY29uc3QgeyByZXR1cm4gbV9h
bHRLZXk7IH0KLSAgICBib29sIG1ldGFLZXkoKSBjb25zdCB7IHJldHVybiBtX21ldGFLZXk7IH0K
LQotcHJvdGVjdGVkOiAvLyBleHBvc2UgdGhlc2Ugc28gaW5pdCBmdW5jdGlvbnMgY2FuIHNldCB0
aGVtCi0gICAgYm9vbCBtX2N0cmxLZXkgOiAxOwotICAgIGJvb2wgbV9hbHRLZXkgOiAxOwotICAg
IGJvb2wgbV9zaGlmdEtleSA6IDE7Ci0gICAgYm9vbCBtX21ldGFLZXkgOiAxOwotfTsKLQotLy8g
SW50ZXJuYWwgb25seTogSGVscGVyIGNsYXNzIGZvciB3aGF0J3MgY29tbW9uIGJldHdlZW4gbW91
c2UgYW5kIHdoZWVsIGV2ZW50cy4KLWNsYXNzIE1vdXNlUmVsYXRlZEV2ZW50IDogcHVibGljIFVJ
RXZlbnRXaXRoS2V5U3RhdGUgewotcHVibGljOgotICAgIE1vdXNlUmVsYXRlZEV2ZW50KCk7Ci0g
ICAgTW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZ
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1l
dGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQgPSBm
YWxzZSk7Ci0gICAgaW50IHNjcmVlblgoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblg7IH0KLSAg
ICBpbnQgc2NyZWVuWSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuWTsgfQotICAgIGludCBjbGll
bnRYKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRYOyB9Ci0gICAgaW50IGNsaWVudFkoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudFk7IH0KLSAgICBpbnQgbGF5ZXJYKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclg7IH0KLSAgICBpbnQgbGF5ZXJZKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclk7IH0K
LSAgICBpbnQgb2Zmc2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WDsgfQotICAgIGludCBv
ZmZzZXRZKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRZOyB9Ci0gICAgYm9vbCBpc1NpbXVsYXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTaW11bGF0ZWQ7IH0KLSAgICB2aXJ0dWFsIGludCBwYWdl
WCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0gICAgaW50IHgoKSBj
b25zdDsKLSAgICBpbnQgeSgpIGNvbnN0OwotcHJvdGVjdGVkOiAvLyBleHBvc2UgdGhlc2Ugc28g
TW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQgY2FuIHNldCB0aGVtCi0gICAgaW50IG1fc2NyZWVu
WDsKLSAgICBpbnQgbV9zY3JlZW5ZOwotICAgIGludCBtX2NsaWVudFg7Ci0gICAgaW50IG1fY2xp
ZW50WTsKLSAgICB2b2lkIGluaXRDb29yZGluYXRlcygpOwotICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlZFRhcmdldCgpOwotcHJpdmF0ZToKLSAgICBpbnQgbV9wYWdlWDsKLSAgICBpbnQgbV9wYWdl
WTsKLSAgICBpbnQgbV9sYXllclg7Ci0gICAgaW50IG1fbGF5ZXJZOwotICAgIGludCBtX29mZnNl
dFg7Ci0gICAgaW50IG1fb2Zmc2V0WTsKLSAgICBib29sIG1faXNTaW11bGF0ZWQ7Ci19OwotCi0v
LyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi1jbGFzcyBNb3VzZUV2ZW50IDogcHVibGljIE1v
dXNlUmVsYXRlZEV2ZW50IHsKLXB1YmxpYzoKLSAgICBNb3VzZUV2ZW50KCk7Ci0gICAgTW91c2VF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgIEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAgICAgICAgICAgICAg
ICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAg
ICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBj
bGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAg
ICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGFsdEtl
eUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAg
ICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVk
VGFyZ2V0QXJnLAotICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCogY2xpcGJvYXJkQXJnID0g
MCwKLSAgICAgICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIHZp
cnR1YWwgfk1vdXNlRXZlbnQoKTsKLSAgICAvLyBXaW5JRSB1c2VzIDEsNCwyIGZvciBsZWZ0L21p
ZGRsZS9yaWdodCBidXQgbm90IGZvciBjbGljayAoanVzdCBmb3IgbW91c2Vkb3duL3VwLCBtYXli
ZSBvdGhlcnMpLCBidXQgd2Ugd2lsbCBtYXRjaCB0aGUgc3RhbmRhcmQgRE9NLgotICAgIHVuc2ln
bmVkIHNob3J0IGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dG9uOyB9Ci0gICAgRXZlbnRU
YXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0
LmdldCgpOyB9Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aXBib2FyZC5nZXQoKTsgfQotICAgIE5vZGUqIHRvRWxlbWVudCgpIGNvbnN0OwotICAgIE5vZGUq
IGZyb21FbGVtZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0TW91c2VFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Ny
ZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1
dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRl
ZFRhcmdldEFyZyk7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNo
KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIHVuc2lnbmVkIHNob3J0IG1fYnV0dG9uOwotICAgIFJl
ZlB0cjxFdmVudFRhcmdldE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKLSAgICBSZWZQdHI8Q2xpcGJv
YXJkPiBtX2NsaXBib2FyZDsKLX07Ci0KLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMwot
Y2xhc3MgS2V5Ym9hcmRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIEtleUxvY2F0aW9uQ29kZSB7Ci0gICAgICAgIERPTV9LRVlfTE9DQVRJT05f
U1RBTkRBUkQgICAgICA9IDB4MDAsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fTEVGVCAgICAg
ICAgICA9IDB4MDEsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fUklHSFQgICAgICAgICA9IDB4
MDIsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fTlVNUEFEICAgICAgICA9IDB4MDMsCisgICAg
Y2xhc3MgQ2xpcGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgQ2xpcGJvYXJkRXZlbnQoKTsKKyAgICAgICAgQ2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlw
Ym9hcmQqIGNsaXBib2FyZEFyZyk7CisKKyAgICAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSBj
b25zdCB7IHJldHVybiBtX2NsaXBib2FyZC5nZXQoKTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0OworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxD
bGlwYm9hcmQ+IG1fY2xpcGJvYXJkOwogICAgIH07Ci0gICAgS2V5Ym9hcmRFdmVudCgpOwotICAg
IEtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RWaWV3
Kik7Ci0gICAgS2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAg
ICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxh
YmxlQXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAg
dW5zaWduZWQga2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJn
LAotICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wg
c2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAg
ICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIHZpcnR1YWwgfktleWJvYXJkRXZlbnQo
KTsKLSAgICAKLSAgICB2b2lkIGluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAm
dHlwZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAg
ICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2
aWV3QXJnLAotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAgICAg
ICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAg
ICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1ldGFL
ZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgCi0gICAg
U3RyaW5nIGtleUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2tleUlkZW50aWZpZXIuZ2V0
KCk7IH0KLSAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5TG9j
YXRpb247IH0KLSAgICAKLSAgICBib29sIGFsdEdyYXBoS2V5KCkgY29uc3QgeyByZXR1cm4gbV9h
bHRHcmFwaEtleTsgfQotICAgIAotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5
RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2tleUV2ZW50OyB9Ci0KLSAgICBpbnQga2V5Q29kZSgp
IGNvbnN0OyAvLyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBmb3Ig
b3RoZXIgZXZlbnRzCi0gICAgaW50IGNoYXJDb2RlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVh
bCBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkg
Y29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBtX2tleUV2ZW50
OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2tleUlkZW50aWZpZXI7Ci0gICAgdW5zaWduZWQg
bV9rZXlMb2NhdGlvbjsKLSAgICBib29sIG1fYWx0R3JhcGhLZXkgOiAxOwotfTsKLQotY2xhc3Mg
TXV0YXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBhdHRyQ2hh
bmdlVHlwZSB7IE1PRElGSUNBVElPTiA9IDEsIEFERElUSU9OID0gMiwgUkVNT1ZBTCA9IDMgfTsK
LSAgICBNdXRhdGlvbkV2ZW50KCk7Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
bmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFt
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJn
KTsKLSAgICBOb2RlICpyZWxhdGVkTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZE5vZGUu
Z2V0KCk7IH0KLSAgICBTdHJpbmcgcHJldlZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2VmFs
dWUuZ2V0KCk7IH0KLSAgICBTdHJpbmcgbmV3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25ld1Zh
bHVlLmdldCgpOyB9Ci0gICAgU3RyaW5nIGF0dHJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
TmFtZS5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJDaGFuZ2U7IH0KLSAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
QnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAgdmly
dHVhbCBib29sIGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBSZWZQdHI8
Tm9kZT4gbV9yZWxhdGVkTm9kZTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9wcmV2VmFsdWU7
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbmV3VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG1fYXR0ck5hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9hdHRyQ2hhbmdlOwotfTsKLQot
Y2xhc3MgQ2xpcGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIENsaXBi
b2FyZEV2ZW50KCk7Ci0gICAgQ2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBl
LCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBi
b2FyZEFyZyk7Ci0KLSAgICBDbGlwYm9hcmQgKmNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpcGJvYXJkLmdldCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBj
b25zdDsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19Owot
Ci0vLyBleHRlbnNpb246IG1vdXNlIHdoZWVsIGV2ZW50Ci1jbGFzcyBXaGVlbEV2ZW50IDogcHVi
bGljIE1vdXNlUmVsYXRlZEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgV2hlZWxFdmVudCgpOwotICAg
IFdoZWVsRXZlbnQoYm9vbCBob3Jpem9udGFsLCBpbnQgd2hlZWxEZWx0YSwgQWJzdHJhY3RWaWV3
ICosCi0gICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsIGludCBzY3JlZW5ZQXJnLAot
ICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLCBpbnQgY2xpZW50WUFyZywKLSAgICAg
ICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0
S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Qg
eyByZXR1cm4gbV9ob3Jpem9udGFsOyB9Ci0gICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7IHJl
dHVybiBtX3doZWVsRGVsdGE7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVl
bEV2ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIG1faG9yaXpvbnRhbDsKLSAgICBpbnQgbV93aGVl
bERlbHRhOwotfTsKLQotY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgU2hh
cmVkPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9Ci0gICAgRXZlbnRMaXN0
ZW5lciAqbGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0gICAg
Ym9vbCB1c2VDYXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9Ci0gICAgYm9v
bCByZW1vdmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVkOyB9Ci0gICAgdm9pZCBzZXRSZW1v
dmVkKGJvb2wgcmVtb3ZlZCkgeyBtX3JlbW92ZWQgPSByZW1vdmVkOyB9Ci0gICAgCi1wcml2YXRl
OgotICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbV9saXN0ZW5lcjsKLSAgICBib29sIG1fdXNlQ2FwdHVyZTsKLSAgICBib29sIG1fcmVtb3Zl
ZDsKLX07Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYs
IGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJik7Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLS8vIFN0YXRlIGF2YWlsYWJsZSBk
dXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKLWNsYXNz
IENsaXBib2FyZCA6IHB1YmxpYyBTaGFyZWQ8Q2xpcGJvYXJkPiB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+Q2xpcGJvYXJkKCk7Ci0KLSAgICAvLyBJcyB0aGlzIG9wZXJhdGlvbiBhIGRyYWctZHJv
cCBvciBhIGNvcHktcGFzdGU/Ci0gICAgdmlydHVhbCBib29sIGlzRm9yRHJhZ2dpbmcoKSBjb25z
dCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAgIHZp
cnR1YWwgU3RyaW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHNldEVmZmVjdEFsbG93ZWQoY29uc3QgU3RyaW5nICZzKSA9IDA7Ci0gICAgCi0gICAgdmlydHVh
bCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcgJnR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBbGxEYXRhKCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3Qg
U3RyaW5nICZ0eXBlLCBib29sICZzdWNjZXNzKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29s
IHNldERhdGEoY29uc3QgU3RyaW5nICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpID0gMDsKLSAg
ICAKLSAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgRGVwcmVj
YXRlZFN0cmluZ0xpc3QgdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBDYWNo
ZWRJbWFnZSogZHJhZ0ltYWdlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFn
SW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCAmKSA9IDA7Ci0gICAg
dmlydHVhbCBOb2RlICpkcmFnSW1hZ2VFbGVtZW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUgKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAw
OwotfTsKLQotY2xhc3MgQmVmb3JlVW5sb2FkRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1Ymxp
YzoKLSAgICBCZWZvcmVVbmxvYWRFdmVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jl
c3VsdEFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0
IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0
LmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcmVzdWx0Owot
fTsKIAotfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisj
ZW5kaWYgLy8gQ2xpcGJvYXJkRXZlbnRfaApJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlz
aW9uIDE0OTA5KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDEwICszMCwxMCBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAi
U3lzdGVtVGltZS5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIk11
dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJvb3RJ
bmxpbmVCb3guaCIKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJEb2N1
bWVudFR5cGUuaCIKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5oIgogI2luY2x1ZGUgIkVudGl0eVJl
ZmVyZW5jZS5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCkBA
IC01MywxMyArNTQsMTcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
U3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNFZGl0b3IuaCIKKyNpbmNsdWRlICJLZXlib2Fy
ZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAiTXV0
YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVG
aWx0ZXIuaCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNs
dWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNz
aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CkBAIC03MSw5ICs3Niw5IEBACiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2luY2x1ZGUgIlRl
eHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKKyNpbmNsdWRlICJVSUV2ZW50
LmgiCiAjaW5jbHVkZSAiY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5o
IgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImtqc19iaW5kaW5nLmgi
CiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAieG1sX3Rva2VuaXplci5oIgpJbmRl
eDogV2ViQ29yZS9kb20vRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50
LmNwcAkocmV2aXNpb24gMTQ5MDApCisrKyBXZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsOCArMSw5IEBACiAvKioKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBE
T00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogKEMpIDIwMDEgVG9iaWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5m
aC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQu
ZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vpbmln
IChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDIzICsyMSwxNSBAQAog
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KLQogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIkV2
ZW50LmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5j
bHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgor
I2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJT
eXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQogRXZlbnQ6OkV2ZW50KCkKICAg
ICA6IG1fY2FuQnViYmxlKGZhbHNlKQogICAgICwgbV9jYW5jZWxhYmxlKGZhbHNlKQpAQCAtNTAs
NyArNDMsNyBAQCBFdmVudDo6RXZlbnQoKQogewogfQogCi1FdmVudDo6RXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVB
cmcpCitFdmVudDo6RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2Fu
QnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCiAgICAgOiBtX3R5cGUoZXZlbnRUeXBlKQog
ICAgICwgbV9jYW5CdWJibGUoY2FuQnViYmxlQXJnKQogICAgICwgbV9jYW5jZWxhYmxlKGNhbmNl
bGFibGVBcmcpCkBAIC02OCw3ICs2MSw3IEBAIEV2ZW50Ojp+RXZlbnQoKQogewogfQogCi12b2lk
IEV2ZW50Ojppbml0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wg
Y2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCit2b2lkIEV2ZW50Ojppbml0RXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29s
IGNhbmNlbGFibGVBcmcpCiB7CiAgICAgaWYgKGRpc3BhdGNoZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTM4LDUxNyArMTMxLDQgQEAgdm9pZCBFdmVudDo6cmVjZWl2ZWRUYXJnZXQoKQogewog
fQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1VSUV2ZW50OjpVSUV2ZW50KCkKLSAgICA6
IG1fZGV0YWlsKDApCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
ICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3Ry
YWN0VmlldyAqdmlld0FyZywgaW50IGRldGFpbEFyZykKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwg
Y2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKQotICAgICwgbV92aWV3KHZpZXdBcmcpCi0gICAg
LCBtX2RldGFpbChkZXRhaWxBcmcpCi17Ci19Ci0KLXZvaWQgVUlFdmVudDo6aW5pdFVJRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZp
ZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJn
KQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRF
dmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOwotCi0gICAgbV92aWV3
ID0gdmlld0FyZzsKLSAgICBtX2RldGFpbCA9IGRldGFpbEFyZzsKLX0KLQotYm9vbCBVSUV2ZW50
Ojppc1VJRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgVUlFdmVu
dDo6a2V5Q29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50Ojpj
aGFyQ29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpsYXll
clgoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6bGF5ZXJZKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VYKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VZKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTW91c2VSZWxhdGVkRXZlbnQ6
Ok1vdXNlUmVsYXRlZEV2ZW50KCkKLSAgICA6IG1fc2NyZWVuWCgwKSwgbV9zY3JlZW5ZKDApLCBt
X2NsaWVudFgoMCksIG1fY2xpZW50WSgwKQotICAgICwgbV9wYWdlWCgwKSwgbV9wYWdlWSgwKSwg
bV9sYXllclgoMCksIG1fbGF5ZXJZKDApLCBtX29mZnNldFgoMCksIG1fb2Zmc2V0WSgwKSwgbV9p
c1NpbXVsYXRlZChmYWxzZSkKLXsKLX0KLQotTW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNlUmVsYXRl
ZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVu
WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCkKLSAg
ICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFi
bGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywKLSAgICAgICAgY3RybEtleUFyZywgYWx0S2V5QXJn
LCBzaGlmdEtleUFyZywgbWV0YUtleUFyZykKLSAgICAsIG1fc2NyZWVuWChzY3JlZW5YQXJnKSwg
bV9zY3JlZW5ZKHNjcmVlbllBcmcpCi0gICAgLCBtX2NsaWVudFgoY2xpZW50WEFyZyksIG1fY2xp
ZW50WShjbGllbnRZQXJnKQotICAgICwgbV9pc1NpbXVsYXRlZChpc1NpbXVsYXRlZCkKLXsKLSAg
ICBpbml0Q29vcmRpbmF0ZXMoKTsKLX0KLQotdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6aW5pdENv
b3JkaW5hdGVzKCkKLXsKLSAgICAvLyBTZXQgdXAgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvb3JkaW5h
dGVzLgotICAgIC8vIENvcnJlY3QgdmFsdWVzIGNhbid0IGJlIGNvbXB1dGVkIHVudGlsIHdlIGhh
dmUgYXQgdGFyZ2V0LCBzbyByZWNlaXZlZFRhcmdldAotICAgIC8vIGRvZXMgdGhlICJyZWFsIiBj
b21wdXRhdGlvbi4KLSAgICBtX3BhZ2VYID0gbV9jbGllbnRYOwotICAgIG1fcGFnZVkgPSBtX2Ns
aWVudFk7Ci0gICAgbV9sYXllclggPSBtX3BhZ2VYOwotICAgIG1fbGF5ZXJZID0gbV9wYWdlWTsK
LSAgICBtX29mZnNldFggPSBtX3BhZ2VYOwotICAgIG1fb2Zmc2V0WSA9IG1fcGFnZVk7Ci19Ci0K
LXZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KCkKLXsKLSAgICAvLyBDb21w
dXRlIGNvb3JkaW5hdGVzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSB0YXJnZXQuCi0gICAgbV9vZmZz
ZXRYID0gbV9wYWdlWDsKLSAgICBtX29mZnNldFkgPSBtX3BhZ2VZOwotICAgIG1fbGF5ZXJYID0g
bV9wYWdlWDsgICAgCi0gICAgbV9sYXllclkgPSBtX3BhZ2VZOyAgICAKLQotICAgIE5vZGUqIHRh
cmcgPSB0YXJnZXQoKTsKLSAgICBBU1NFUlQodGFyZyk7Ci0KLSAgICAvLyBNdXN0IGhhdmUgYW4g
dXBkYXRlZCByZW5kZXIgdHJlZSBmb3IgdGhpcyBtYXRoIHRvIHdvcmsgY29ycmVjdGx5LgotICAg
IHRhcmctPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwotCi0gICAgLy8gRklYTUU6IGNs
aWVudFgvWSBzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFzIHBhZ2VYL1khCi0gICAgLy8gQ3VycmVu
dGx5IHRoZSBwYXNzZWQtaW4gY2xpZW50WCBhbmQgY2xpZW50WSBhcmUgaW5jb3JyZWN0bHkgYWN0
dWFsbHkKLSAgICAvLyBwYWdlWCBhbmQgcGFnZVkgdmFsdWVzLCBzbyB3ZSBkb24ndCBoYXZlIGFu
eSB3b3JrIHRvIGRvIGhlcmUsIGJ1dCBpZgotICAgIC8vIHdlIHN0YXJ0ZWQgcGFzc2luZyBpbiBj
b3JyZWN0IGNsaWVudFggYW5kIGNsaWVudFksIHdlJ2Qgd2FudCB0byBjb21wdXRlCi0gICAgLy8g
cGFnZVggYW5kIHBhZ2VZIGhlcmUuCi0KLSAgICAvLyBBZGp1c3Qgb2Zmc2V0WC9ZIHRvIGJlIHJl
bGF0aXZlIHRvIHRoZSB0YXJnZXQncyBwb3NpdGlvbi4KLSAgICBpZiAoIWlzU2ltdWxhdGVkKCkp
IHsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IHRhcmctPnJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgIGludCByeCwgcnk7Ci0gICAgICAgICAgICBpZiAoci0+YWJzb2x1dGVQb3NpdGlv
bihyeCwgcnkpKSB7Ci0gICAgICAgICAgICAgICAgbV9vZmZzZXRYIC09IHJ4OwotICAgICAgICAg
ICAgICAgIG1fb2Zmc2V0WSAtPSByeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIEFkanVzdCBsYXllclgvWSB0byBiZSByZWxhdGl2ZSB0byB0aGUgbGF5ZXIuCi0g
ICAgLy8gRklYTUU6IFdlJ3JlIHByZXR0eSBzdXJlIHRoaXMgaXMgdGhlIHdyb25nIGRlZmludGlv
biBvZiAibGF5ZXIuIgotICAgIC8vIE91ciBSZW5kZXJMYXllciBpcyBhIG1vcmUgbW9kZXJuIGNv
bmNlcHQsIGFuZCBsYXllclgvWSBpcyBzb21lCi0gICAgLy8gb3RoZXIgbm90aW9uIGFib3V0IGdy
b3VwcyBvZiBlbGVtZW50czsgd2Ugc2hvdWxkIHRlc3QgYW5kIGZpeCB0aGlzLgotICAgIE5vZGUq
IG4gPSB0YXJnOwotICAgIHdoaWxlIChuICYmICFuLT5yZW5kZXJlcigpKQotICAgICAgICBuID0g
bi0+cGFyZW50KCk7Ci0gICAgaWYgKG4pIHsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
bi0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgbGF5ZXItPnVwZGF0ZUxh
eWVyUG9zaXRpb24oKTsKLSAgICAgICAgZm9yICg7IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJl
bnQoKSkgewotICAgICAgICAgICAgbV9sYXllclggLT0gbGF5ZXItPnhQb3MoKTsKLSAgICAgICAg
ICAgIG1fbGF5ZXJZIC09IGxheWVyLT55UG9zKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlu
dCBNb3VzZVJlbGF0ZWRFdmVudDo6cGFnZVgoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2VY
OwotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnBhZ2VZKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wYWdlWTsKLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2ZW50Ojp4KCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVjdC4KLSAgICAvLyBTZWUgTWljcm9zb2Z0IGRv
Y3VtZW50YXRpb24gYW5kIDxodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS93M2NfZXZlbnRz
Lmh0bWw+LgotICAgIHJldHVybiBtX2NsaWVudFg7Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVu
dDo6eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvcnJlY3QuCi0gICAg
Ly8gU2VlIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIGFuZCA8aHR0cDovL3d3dy5xdWlya3Ntb2Rl
Lm9yZy9kb20vdzNjX2V2ZW50cy5odG1sPi4KLSAgICByZXR1cm4gbV9jbGllbnRZOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Nb3VzZUV2ZW50OjpNb3VzZUV2ZW50KCkKLSAgICA6
IG1fYnV0dG9uKDApCi17Ci19Ci0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxh
YmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmll
d0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0QXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCogY2xpcGJvYXJkQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQpCi0gICAgOiBNb3Vz
ZVJlbGF0ZWRFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmll
d0FyZywgZGV0YWlsQXJnLAotICAgICAgICBzY3JlZW5YQXJnLCBzY3JlZW5ZQXJnLCBjbGllbnRY
QXJnLCBjbGllbnRZQXJnLAotICAgICAgICBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5
QXJnLCBtZXRhS2V5QXJnLCBpc1NpbXVsYXRlZCkKLSAgICAsIG1fYnV0dG9uKGJ1dHRvbkFyZykK
LSAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0QXJnKQotICAgICwgbV9jbGlwYm9h
cmQoY2xpcGJvYXJkQXJnKQotewotfQotCi1Nb3VzZUV2ZW50Ojp+TW91c2VFdmVudCgpCi17Ci19
Ci0KLXZvaWQgTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcq
IHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWls
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpCi17
Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdFVJRXZl
bnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxB
cmcpOwotCi0gICAgbV9zY3JlZW5YID0gc2NyZWVuWEFyZzsKLSAgICBtX3NjcmVlblkgPSBzY3Jl
ZW5ZQXJnOwotICAgIG1fY2xpZW50WCA9IGNsaWVudFhBcmc7Ci0gICAgbV9jbGllbnRZID0gY2xp
ZW50WUFyZzsKLSAgICBtX2N0cmxLZXkgPSBjdHJsS2V5QXJnOwotICAgIG1fYWx0S2V5ID0gYWx0
S2V5QXJnOwotICAgIG1fc2hpZnRLZXkgPSBzaGlmdEtleUFyZzsKLSAgICBtX21ldGFLZXkgPSBt
ZXRhS2V5QXJnOwotICAgIG1fYnV0dG9uID0gYnV0dG9uQXJnOwotICAgIG1fcmVsYXRlZFRhcmdl
dCA9IHJlbGF0ZWRUYXJnZXRBcmc7Ci0KLSAgICBpbml0Q29vcmRpbmF0ZXMoKTsKLX0KLQotYm9v
bCBNb3VzZUV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE1vdXNlRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKLXsKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcgJnQgPSB0eXBlKCk7Ci0gICAgcmV0dXJuIHQgPT0gZHJhZ2VudGVyRXZlbnQg
fHwgdCA9PSBkcmFnb3ZlckV2ZW50IHx8IHQgPT0gZHJhZ2xlYXZlRXZlbnQKLSAgICAgICAgfHwg
dCA9PSBkcm9wRXZlbnQKLSAgICAgICAgfHwgdCA9PSBkcmFnc3RhcnRFdmVudCB8fCB0ID09IGRy
YWdFdmVudCB8fCB0ID09IGRyYWdlbmRFdmVudDsKLX0KLQotaW50IE1vdXNlRXZlbnQ6OndoaWNo
KCkgY29uc3QKLXsKLSAgICAvLyBGb3IgS0hUTUwsIHRoZSByZXR1cm4gdmFsdWVzIGZvciBsZWZ0
LCBtaWRkbGUgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMgYXJlIDAsIDEsIDIsIHJlc3BlY3RpdmVs
eS4KLSAgICAvLyBGb3IgdGhlIE5ldHNjYXBlICJ3aGljaCIgcHJvcGVydHksIHRoZSByZXR1cm4g
dmFsdWVzIGZvciBsZWZ0LCBtaWRkbGUgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMgYXJlIDEsIDIs
IDMsIHJlc3BlY3RpdmVseS4gCi0gICAgLy8gU28gd2UgbXVzdCBhZGQgMS4KLSAgICByZXR1cm4g
bV9idXR0b24gKyAxOwotfQotCi1Ob2RlKiBNb3VzZUV2ZW50Ojp0b0VsZW1lbnQoKSBjb25zdAot
ewotICAgIC8vIE1TSUUgZXh0ZW5zaW9uIC0gInRoZSBvYmplY3QgdG93YXJkIHdoaWNoIHRoZSB1
c2VyIGlzIG1vdmluZyB0aGUgbW91c2UgcG9pbnRlciIKLSAgICByZXR1cm4gdHlwZSgpID09IG1v
dXNlb3V0RXZlbnQgPyByZWxhdGVkVGFyZ2V0KCkgOiB0YXJnZXQoKTsKLX0KLQotTm9kZSogTW91
c2VFdmVudDo6ZnJvbUVsZW1lbnQoKSBjb25zdAotewotICAgIC8vIE1TSUUgZXh0ZW5zaW9uIC0g
Im9iamVjdCBmcm9tIHdoaWNoIGFjdGl2YXRpb24gb3IgdGhlIG1vdXNlIHBvaW50ZXIgaXMgZXhp
dGluZyBkdXJpbmcgdGhlIGV2ZW50IiAoaHVoPykKLSAgICByZXR1cm4gdHlwZSgpID09IG1vdXNl
b3V0RXZlbnQgPyB0YXJnZXQoKSA6IHJlbGF0ZWRUYXJnZXQoKTsKLX0KLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVu
dCgpCi0gIDogbV9rZXlFdmVudCgwKQotICAsIG1fa2V5TG9jYXRpb24oRE9NX0tFWV9MT0NBVElP
Tl9TVEFOREFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5KGZhbHNlKQotewotfQotCi1LZXlib2FyZEV2
ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5LCBBYnN0
cmFjdFZpZXcgKnZpZXcpCi0gIDogVUlFdmVudFdpdGhLZXlTdGF0ZShrZXkuaXNLZXlVcCgpID8g
a2V5dXBFdmVudCA6IGtleS5pc0F1dG9SZXBlYXQoKSA/IGtleXByZXNzRXZlbnQgOiBrZXlkb3du
RXZlbnQsCi0gICAgdHJ1ZSwgdHJ1ZSwgdmlldywgMCwga2V5LmN0cmxLZXkoKSwga2V5LmFsdEtl
eSgpLCBrZXkuc2hpZnRLZXkoKSwga2V5Lm1ldGFLZXkoKSkKLSAgLCBtX2tleUV2ZW50KG5ldyBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQoa2V5KSkKLSAgLCBtX2tleUlkZW50aWZpZXIoU3RyaW5nKGtl
eS5rZXlJZGVudGlmaWVyKCkpLmltcGwoKSkKLSAgLCBtX2tleUxvY2F0aW9uKGtleS5pc0tleXBh
ZCgpID8gRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgOiBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJE
KQotICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQ6OktleWJv
YXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZrZXlJ
ZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKQotICA6IFVJRXZlbnRXaXRoS2V5
U3RhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIDAs
IGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcpCi0gICwgbV9r
ZXlFdmVudCgwKQotICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyQXJnLmltcGwoKSkK
LSAgLCBtX2tleUxvY2F0aW9uKGtleUxvY2F0aW9uQXJnKQotICAsIG1fYWx0R3JhcGhLZXkoYWx0
R3JhcGhLZXlBcmcpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQ6On5LZXlib2FyZEV2ZW50KCkKLXsK
LSAgICBkZWxldGUgbV9rZXlFdmVudDsKLX0KLQotdm9pZCBLZXlib2FyZEV2ZW50Ojppbml0S2V5
Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmll
d0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZp
ZXJBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQga2V5TG9jYXRpb25Bcmcs
IAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2hpZnRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJn
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpCi17Ci0gICAg
aWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdFVJRXZlbnQodHlw
ZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCAwKTsKLQotICAgIG1f
a2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJBcmcuaW1wbCgpOwotICAgIG1fa2V5TG9jYXRp
b24gPSBrZXlMb2NhdGlvbkFyZzsKLSAgICBtX2N0cmxLZXkgPSBjdHJsS2V5QXJnOwotICAgIG1f
c2hpZnRLZXkgPSBzaGlmdEtleUFyZzsKLSAgICBtX2FsdEtleSA9IGFsdEtleUFyZzsKLSAgICBt
X21ldGFLZXkgPSBtZXRhS2V5QXJnOwotICAgIG1fYWx0R3JhcGhLZXkgPSBhbHRHcmFwaEtleUFy
ZzsKLX0KLQotaW50IEtleWJvYXJkRXZlbnQ6OmtleUNvZGUoKSBjb25zdAotewotICAgIGlmICgh
bV9rZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHR5cGUoKSA9PSBrZXlkb3du
RXZlbnQgfHwgdHlwZSgpID09IGtleXVwRXZlbnQpCi0gICAgICAgIHJldHVybiBtX2tleUV2ZW50
LT5XaW5kb3dzS2V5Q29kZSgpOwotICAgIHJldHVybiBjaGFyQ29kZSgpOwotfQotCi1pbnQgS2V5
Ym9hcmRFdmVudDo6Y2hhckNvZGUoKSBjb25zdAotewotICAgIGlmICghbV9rZXlFdmVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgU3RyaW5nIHRleHQgPSBtX2tleUV2ZW50LT50ZXh0KCk7Ci0g
ICAgaWYgKHRleHQubGVuZ3RoKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IHRleHRbMF07Ci19Ci0KLWJvb2wgS2V5Ym9hcmRFdmVudDo6aXNLZXlib2FyZEV2ZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEtleWJvYXJkRXZlbnQ6OndoaWNoKCkg
Y29uc3QKLXsKLSAgICAvLyBOZXRzY2FwZSdzICJ3aGljaCIgcmV0dXJucyBhIHZpcnR1YWwga2V5
IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBhbmQgYSBjaGFyYWN0ZXIgY29kZSBmb3Iga2V5
cHJlc3MuCi0gICAgLy8gVGhhdCdzIGV4YWN0bHkgd2hhdCBJRSdzICJrZXlDb2RlIiByZXR1cm5z
LiBTbyB0aGV5IGFyZSB0aGUgc2FtZSBmb3Iga2V5Ym9hcmQgZXZlbnRzLgotICAgIHJldHVybiBr
ZXlDb2RlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU11dGF0aW9uRXZlbnQ6
Ok11dGF0aW9uRXZlbnQoKQotICAgIDogbV9hdHRyQ2hhbmdlKDApCi17Ci19Ci0KLU11dGF0aW9u
RXZlbnQ6Ok11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmcHJldlZh
bHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQotICAgIDogRXZlbnQoZXZlbnRUeXBl
LCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3JlbGF0ZWROb2RlKHJlbGF0
ZWROb2RlQXJnKQotICAgICwgbV9wcmV2VmFsdWUocHJldlZhbHVlQXJnLmltcGwoKSkKLSAgICAs
IG1fbmV3VmFsdWUobmV3VmFsdWVBcmcuaW1wbCgpKQotICAgICwgbV9hdHRyTmFtZShhdHRyTmFt
ZUFyZy5pbXBsKCkpCi0gICAgLCBtX2F0dHJDaGFuZ2UoYXR0ckNoYW5nZUFyZykKLXsKLX0KLQot
dm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcg
JnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZh
dHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaW5pdEV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2Fu
Y2VsYWJsZUFyZyk7Ci0KLSAgICBtX3JlbGF0ZWROb2RlID0gcmVsYXRlZE5vZGVBcmc7Ci0gICAg
bV9wcmV2VmFsdWUgPSBwcmV2VmFsdWVBcmcuaW1wbCgpOwotICAgIG1fbmV3VmFsdWUgPSBuZXdW
YWx1ZUFyZy5pbXBsKCk7Ci0gICAgbV9hdHRyTmFtZSA9IGF0dHJOYW1lQXJnLmltcGwoKTsKLSAg
ICBtX2F0dHJDaGFuZ2UgPSBhdHRyQ2hhbmdlQXJnOwotfQotCi1ib29sIE11dGF0aW9uRXZlbnQ6
OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVudCgpCi17
Ci19Ci0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQ2xpcGJv
YXJkICpjbGlwYm9hcmRBcmcpCi0gICAgOiBFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywg
Y2FuY2VsYWJsZUFyZyksIG1fY2xpcGJvYXJkKGNsaXBib2FyZEFyZykKLXsKLX0KLQotYm9vbCBD
bGlwYm9hcmRFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoZWVsRXZlbnQ6OldoZWVsRXZl
bnQoKSA6IG1faG9yaXpvbnRhbChmYWxzZSksIG1fd2hlZWxEZWx0YSgwKQotewotfQotCi1XaGVl
bEV2ZW50OjpXaGVlbEV2ZW50KGJvb2wgaCwgaW50IGQsIEFic3RyYWN0VmlldyAqdiwKLSAgICBp
bnQgc3gsIGludCBzeSwgaW50IGN4LCBpbnQgY3ksIGJvb2wgY3RybCwgYm9vbCBhbHQsIGJvb2wg
c2hpZnQsIGJvb2wgbWV0YSkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGggPyBraHRtbEhvcml6
b250YWxtb3VzZXdoZWVsRXZlbnQgOiBtb3VzZXdoZWVsRXZlbnQsCi0gICAgICAgIHRydWUsIHRy
dWUsIHYsIDAsIHN4LCBzeSwgY3gsIGN5LCBjdHJsLCBhbHQsIHNoaWZ0LCBtZXRhKQotICAgICwg
bV9ob3Jpem9udGFsKGgpLCBtX3doZWVsRGVsdGEoZCkKLXsKLX0KLQotYm9vbCBXaGVlbEV2ZW50
Ojppc1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6UmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLSAgICA6IG1fZXZlbnRUeXBl
KGV2ZW50VHlwZSkKLSAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCi0gICAgLCBtX3VzZUNhcHR1
cmUodXNlQ2FwdHVyZSkKLSAgICAsIG1fcmVtb3ZlZChmYWxzZSkKLXsKLX0KLQotYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZhLCBjb25zdCBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lciAmYikKLXsKLSAgICByZXR1cm4gYS5ldmVudFR5cGUoKSA9PSBiLmV2ZW50
VHlwZSgpICYmIGEubGlzdGVuZXIoKSA9PSBiLmxpc3RlbmVyKCkgJiYgYS51c2VDYXB0dXJlKCkg
PT0gYi51c2VDYXB0dXJlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNsaXBi
b2FyZDo6fkNsaXBib2FyZCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJl
Zm9yZVVubG9hZEV2ZW50OjpCZWZvcmVVbmxvYWRFdmVudCgpCi0gICAgOiBFdmVudChiZWZvcmV1
bmxvYWRFdmVudCwgZmFsc2UsIHRydWUpCi17Ci19Ci0KLWJvb2wgQmVmb3JlVW5sb2FkRXZlbnQ6
OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBCZWZvcmVVbmxvYWRFdmVudDo6c3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJiBzKQotewot
ICAgIG1fcmVzdWx0ID0gcy5pbXBsKCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZl
bnQuaAkocmV2aXNpb24gMTQ5MDApCisrKyBXZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50
b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIs
NDU4ICsyMywxMTcgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBET01fRVZFTlRTSU1QTF9ICi0jZGVm
aW5lIERPTV9FVkVOVFNJTVBMX0gKKyNpZm5kZWYgRXZlbnRfaAorI2RlZmluZSBFdmVudF9oCiAK
ICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJOb2RlLmgiCi0KLWNsYXNzIERlcHJlY2F0ZWRTdHJpbmdMaXN0OworI2luY2x1ZGUgIlNo
YXJlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZEltYWdlOwotY2xh
c3MgQ2xpcGJvYXJkOwotY2xhc3MgRXZlbnRMaXN0ZW5lcjsKLWNsYXNzIEV2ZW50VGFyZ2V0Tm9k
ZTsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ7Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIERPTVRpbWVTdGFtcDsKLXR5cGVk
ZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKLQotY29uc3QgaW50IEV2ZW50RXhjZXB0aW9uT2Zm
c2V0ID0gMTAwOwotY29uc3QgaW50IEV2ZW50RXhjZXB0aW9uTWF4ID0gMTk5OwotZW51bSBFdmVu
dEV4Y2VwdGlvbkNvZGUgeyBVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUiA9IEV2ZW50RXhjZXB0
aW9uT2Zmc2V0IH07Ci0KLWNsYXNzIEV2ZW50IDogcHVibGljIFNoYXJlZDxFdmVudD4KLXsKLXB1
YmxpYzoKLSAgICBlbnVtIFBoYXNlVHlwZSB7IAotICAgICAgICBDQVBUVVJJTkdfUEhBU0UgPSAx
LCAKLSAgICAgICAgQVRfVEFSR0VUID0gMiwgCi0gICAgICAgIEJVQkJMSU5HX1BIQVNFID0gMyAK
LSAgICB9OworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBwcm9iYWJseSBkZWZpbmVkIGVsc2V3
aGVyZS4KKyAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBET01UaW1lU3RhbXA7CiAKLSAg
ICAvLyBSZXZlcnNlLWVuZ2luZWVyZWQgZnJvbSBOZXRzY2FwZQotICAgIGVudW0gRXZlbnRUeXBl
IHsKLSAgICAgICAgTU9VU0VET1dOICAgICAgICAgICA9IDEsCi0gICAgICAgIE1PVVNFVVAgICAg
ICAgICAgICAgPSAyLAotICAgICAgICBNT1VTRU9WRVIgICAgICAgICAgID0gNCwKLSAgICAgICAg
TU9VU0VPVVQgICAgICAgICAgICA9IDgsCi0gICAgICAgIE1PVVNFTU9WRSAgICAgICAgICAgPSAx
NiwKLSAgICAgICAgTU9VU0VEUkFHICAgICAgICAgICA9IDMyLAotICAgICAgICBDTElDSyAgICAg
ICAgICAgICAgID0gNjQsCi0gICAgICAgIERCTENMSUNLICAgICAgICAgICAgPSAxMjgsCi0gICAg
ICAgIEtFWURPV04gICAgICAgICAgICAgPSAyNTYsCi0gICAgICAgIEtFWVVQICAgICAgICAgICAg
ICAgPSA1MTIsCi0gICAgICAgIEtFWVBSRVNTICAgICAgICAgICAgPSAxMDI0LAotICAgICAgICBE
UkFHRFJPUCAgICAgICAgICAgID0gMjA0OCwKLSAgICAgICAgRk9DVVMgICAgICAgICAgICAgICA9
IDQwOTYsCi0gICAgICAgIEJMVVIgICAgICAgICAgICAgICAgPSA4MTkyLAotICAgICAgICBTRUxF
Q1QgICAgICAgICAgICAgID0gMTYzODQsCi0gICAgICAgIENIQU5HRSAgICAgICAgICAgICAgPSAz
Mjc2OAotICAgIH07Ci0gICAgCi0gICAgRXZlbnQoKTsKLSAgICBFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpOwotICAg
IHZpcnR1YWwgfkV2ZW50KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBOb2RlKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBt
X3RhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KE5vZGUqKTsKLSAgICBOb2RlKiBj
dXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9Ci0gICAgdm9p
ZCBzZXRDdXJyZW50VGFyZ2V0KE5vZGUqIGN1cnJlbnRUYXJnZXQpIHsgbV9jdXJyZW50VGFyZ2V0
ID0gY3VycmVudFRhcmdldDsgfQotICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25z
dCB7IHJldHVybiBtX2V2ZW50UGhhc2U7IH0KLSAgICB2b2lkIHNldEV2ZW50UGhhc2UodW5zaWdu
ZWQgc2hvcnQgZXZlbnRQaGFzZSkgeyBtX2V2ZW50UGhhc2UgPSBldmVudFBoYXNlOyB9Ci0gICAg
Ym9vbCBidWJibGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW5CdWJibGU7IH0KLSAgICBib29sIGNh
bmNlbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGFibGU7IH0KLSAgICBET01UaW1lU3Rh
bXAgdGltZVN0YW1wKCkgeyByZXR1cm4gbV9jcmVhdGVUaW1lOyB9Ci0gICAgdm9pZCBzdG9wUHJv
cGFnYXRpb24oKSB7IG1fcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgcHJl
dmVudERlZmF1bHQoKSB7IGlmIChtX2NhbmNlbGFibGUpIG1fZGVmYXVsdFByZXZlbnRlZCA9IHRy
dWU7IH0KLSAgICB2b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFy
ZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
RHJhZ0V2ZW50KCkgY29uc3Q7IC8vIGEgc3Vic2V0IG9mIG1vdXNlIGV2ZW50cwotICAgIHZpcnR1
YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzV2hl
ZWxFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2
ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIHByb3BhZ2F0aW9uU3RvcHBlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGFnYXRpb25TdG9wcGVkOyB9Ci0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UHJldmVudGVkOyB9Ci0KLSAgICB2b2lkIHNldERlZmF1
bHRIYW5kbGVkKCkgeyBtX2RlZmF1bHRIYW5kbGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgZGVmYXVs
dEhhbmRsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRIYW5kbGVkOyB9Ci0KLSAgICB2b2lk
IHNldENhbmNlbEJ1YmJsZShib29sIGNhbmNlbCkgeyBtX2NhbmNlbEJ1YmJsZSA9IGNhbmNlbDsg
fQotICAgIHZvaWQgc2V0RGVmYXVsdFByZXZlbnRlZChib29sIGRlZmF1bHRQcmV2ZW50ZWQpIHsg
bV9kZWZhdWx0UHJldmVudGVkID0gZGVmYXVsdFByZXZlbnRlZDsgfQotICAgIGJvb2wgZ2V0Q2Fu
Y2VsQnViYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxCdWJibGU7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBz
dG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZFRhcmdldCgpOwotICAgIGJvb2wgZGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fdHlwZTsKLSAgICBi
b29sIG1fY2FuQnViYmxlOwotICAgIGJvb2wgbV9jYW5jZWxhYmxlOwotCi0gICAgYm9vbCBtX3By
b3BhZ2F0aW9uU3RvcHBlZDsKLSAgICBib29sIG1fZGVmYXVsdFByZXZlbnRlZDsKLSAgICBib29s
IG1fZGVmYXVsdEhhbmRsZWQ7Ci0gICAgYm9vbCBtX2NhbmNlbEJ1YmJsZTsKLQotICAgIE5vZGUq
IG1fY3VycmVudFRhcmdldDsgLy8gcmVmID4gMCBtYWludGFpbmVkIGV4dGVybmFsbHkKLSAgICB1
bnNpZ25lZCBzaG9ydCBtX2V2ZW50UGhhc2U7Ci0gICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0Owot
ICAgIERPTVRpbWVTdGFtcCBtX2NyZWF0ZVRpbWU7Ci19OwotCi1jbGFzcyBVSUV2ZW50IDogcHVi
bGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgVUlFdmVudCgpOwotICAgIFVJRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAot
ICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICBBYnN0
cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7Ci0gICAg
QWJzdHJhY3RWaWV3ICp2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3LmdldCgpOyB9Ci0gICAg
aW50IGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9Ci0gICAgdm9pZCBpbml0VUlF
dmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAg
ICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGtleUNvZGUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBjaGFyQ29kZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgbGF5ZXJYKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgbGF5ZXJZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBwYWdl
WCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGludCB3aGljaCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBYnN0cmFjdFZpZXc+
IG1fdmlldzsKLSAgICBpbnQgbV9kZXRhaWw7Ci19OwotCi1jbGFzcyBVSUV2ZW50V2l0aEtleVN0
YXRlIDogcHVibGljIFVJRXZlbnQgewotcHVibGljOgotICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUo
KSA6IG1fY3RybEtleShmYWxzZSksIG1fYWx0S2V5KGZhbHNlKSwgbV9zaGlmdEtleShmYWxzZSks
IG1fbWV0YUtleShmYWxzZSkgeyB9Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZShjb25zdCBBdG9t
aWNTdHJpbmcgJnR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFi
c3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgaW50IGRldGFpbEFyZywgYm9vbCBjdHJsS2V5
QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5QXJnKQot
ICAgICAgICA6IFVJRXZlbnQodHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3
QXJnLCBkZXRhaWxBcmcpCi0gICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXlBcmcpLCBtX2FsdEtl
eShhbHRLZXlBcmcpLCBtX3NoaWZ0S2V5KHNoaWZ0S2V5QXJnKSwgbV9tZXRhS2V5KG1ldGFLZXlB
cmcpIHsgfQotCi0gICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9
Ci0gICAgYm9vbCBzaGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAgICBi
b29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9Ci0gICAgYm9vbCBtZXRhS2V5
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9Ci0KLXByb3RlY3RlZDogLy8gZXhwb3NlIHRo
ZXNlIHNvIGluaXQgZnVuY3Rpb25zIGNhbiBzZXQgdGhlbQotICAgIGJvb2wgbV9jdHJsS2V5IDog
MTsKLSAgICBib29sIG1fYWx0S2V5IDogMTsKLSAgICBib29sIG1fc2hpZnRLZXkgOiAxOwotICAg
IGJvb2wgbV9tZXRhS2V5IDogMTsKLX07Ci0KLS8vIEludGVybmFsIG9ubHk6IEhlbHBlciBjbGFz
cyBmb3Igd2hhdCdzIGNvbW1vbiBiZXR3ZWVuIG1vdXNlIGFuZCB3aGVlbCBldmVudHMuCi1jbGFz
cyBNb3VzZVJlbGF0ZWRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1Ymxp
YzoKLSAgICBNb3VzZVJlbGF0ZWRFdmVudCgpOwotICAgIE1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5C
dWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVl
bllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs
dEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIGludCBzY3JlZW5YKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JlZW5YOyB9Ci0gICAgaW50IHNjcmVlblkoKSBjb25zdCB7IHJl
dHVybiBtX3NjcmVlblk7IH0KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
ZW50WDsgfQotICAgIGludCBjbGllbnRZKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRZOyB9Ci0g
ICAgaW50IGxheWVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJYOyB9Ci0gICAgaW50IGxheWVy
WSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJZOyB9Ci0gICAgaW50IG9mZnNldFgoKSBjb25zdCB7
IHJldHVybiBtX29mZnNldFg7IH0KLSAgICBpbnQgb2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0WTsgfQotICAgIGJvb2wgaXNTaW11bGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2lt
dWxhdGVkOyB9Ci0gICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGlu
dCBwYWdlWSgpIGNvbnN0OwotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsK
LXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50
IGNhbiBzZXQgdGhlbQotICAgIGludCBtX3NjcmVlblg7Ci0gICAgaW50IG1fc2NyZWVuWTsKLSAg
ICBpbnQgbV9jbGllbnRYOwotICAgIGludCBtX2NsaWVudFk7Ci0gICAgdm9pZCBpbml0Q29vcmRp
bmF0ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLXByaXZhdGU6Ci0g
ICAgaW50IG1fcGFnZVg7Ci0gICAgaW50IG1fcGFnZVk7Ci0gICAgaW50IG1fbGF5ZXJYOwotICAg
IGludCBtX2xheWVyWTsKLSAgICBpbnQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFk7Ci0g
ICAgYm9vbCBtX2lzU2ltdWxhdGVkOwotfTsKLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MgotY2xhc3MgTW91c2VFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudCB7Ci1wdWJsaWM6
Ci0gICAgTW91c2VFdmVudCgpOwotICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZp
ZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAg
ICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVu
WUFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAg
ICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcs
Ci0gICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
Ym9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAg
ICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAgICAg
ICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZyA9IDAsCi0gICAgICAgICAgICAgICAgICAgYm9v
bCBpc1NpbXVsYXRlZCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0gICAg
Ly8gV2luSUUgdXNlcyAxLDQsMiBmb3IgbGVmdC9taWRkbGUvcmlnaHQgYnV0IG5vdCBmb3IgY2xp
Y2sgKGp1c3QgZm9yIG1vdXNlZG93bi91cCwgbWF5YmUgb3RoZXJzKSwgYnV0IHdlIHdpbGwgbWF0
Y2ggdGhlIHN0YW5kYXJkIERPTS4KLSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdCB7
IHJldHVybiBtX2J1dHRvbjsgfQotICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQotICAgIENsaXBib2FyZCog
Y2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0KLSAgICBOb2Rl
KiB0b0VsZW1lbnQoKSBjb25zdDsKLSAgICBOb2RlKiBmcm9tRWxlbWVudCgpIGNvbnN0OwotICAg
IHZvaWQgaW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFj
dFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGll
bnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICB1
bnNpZ25lZCBzaG9ydCBtX2J1dHRvbjsKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX3Jl
bGF0ZWRUYXJnZXQ7Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0K
LS8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDMKLWNsYXNzIEtleWJvYXJkRXZlbnQgOiBwdWJs
aWMgVUlFdmVudFdpdGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBLZXlMb2NhdGlvbkNv
ZGUgewotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEICAgICAgPSAweDAwLAotICAg
ICAgICBET01fS0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAxLAotICAgICAgICBET01f
S0VZX0xPQ0FUSU9OX1JJR0hUICAgICAgICAgPSAweDAyLAotICAgICAgICBET01fS0VZX0xPQ0FU
SU9OX05VTVBBRCAgICAgICAgPSAweDAzLAorICAgIC8vIEZJWE1FOiB0aGVzZSB0b28gc2hvdWxk
IHByb2JhYmx5IGRlZmluZWQgZWxzZXdoZXJlLgorICAgIGNvbnN0IGludCBFdmVudEV4Y2VwdGlv
bk9mZnNldCA9IDEwMDsKKyAgICBjb25zdCBpbnQgRXZlbnRFeGNlcHRpb25NYXggPSAxOTk7Cisg
ICAgZW51bSBFdmVudEV4Y2VwdGlvbkNvZGUgeyBVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUiA9
IEV2ZW50RXhjZXB0aW9uT2Zmc2V0IH07CisKKyAgICBjbGFzcyBFdmVudCA6IHB1YmxpYyBTaGFy
ZWQ8RXZlbnQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gUGhhc2VUeXBlIHsgCisgICAg
ICAgICAgICBDQVBUVVJJTkdfUEhBU0UgICAgID0gMSwgCisgICAgICAgICAgICBBVF9UQVJHRVQg
ICAgICAgICAgID0gMiwKKyAgICAgICAgICAgIEJVQkJMSU5HX1BIQVNFICAgICAgPSAzIAorICAg
ICAgICB9OworCisgICAgICAgIC8vIFJldmVyc2UtZW5naW5lZXJlZCBmcm9tIE5ldHNjYXBlCisg
ICAgICAgIGVudW0gRXZlbnRUeXBlIHsKKyAgICAgICAgICAgIE1PVVNFRE9XTiAgICAgICAgICAg
PSAxLAorICAgICAgICAgICAgTU9VU0VVUCAgICAgICAgICAgICA9IDIsCisgICAgICAgICAgICBN
T1VTRU9WRVIgICAgICAgICAgID0gNCwKKyAgICAgICAgICAgIE1PVVNFT1VUICAgICAgICAgICAg
PSA4LAorICAgICAgICAgICAgTU9VU0VNT1ZFICAgICAgICAgICA9IDE2LAorICAgICAgICAgICAg
TU9VU0VEUkFHICAgICAgICAgICA9IDMyLAorICAgICAgICAgICAgQ0xJQ0sgICAgICAgICAgICAg
ICA9IDY0LAorICAgICAgICAgICAgREJMQ0xJQ0sgICAgICAgICAgICA9IDEyOCwKKyAgICAgICAg
ICAgIEtFWURPV04gICAgICAgICAgICAgPSAyNTYsCisgICAgICAgICAgICBLRVlVUCAgICAgICAg
ICAgICAgID0gNTEyLAorICAgICAgICAgICAgS0VZUFJFU1MgICAgICAgICAgICA9IDEwMjQsCisg
ICAgICAgICAgICBEUkFHRFJPUCAgICAgICAgICAgID0gMjA0OCwKKyAgICAgICAgICAgIEZPQ1VT
ICAgICAgICAgICAgICAgPSA0MDk2LAorICAgICAgICAgICAgQkxVUiAgICAgICAgICAgICAgICA9
IDgxOTIsCisgICAgICAgICAgICBTRUxFQ1QgICAgICAgICAgICAgID0gMTYzODQsCisgICAgICAg
ICAgICBDSEFOR0UgICAgICAgICAgICAgID0gMzI3NjgKKyAgICAgICAgfTsKKyAgICAKKyAgICAg
ICAgRXZlbnQoKTsKKyAgICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLCBi
b29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKKyAgICAgICAgdmlydHVhbCB+
RXZlbnQoKTsKKworICAgICAgICB2b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2
ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7CisKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgICAgIAorICAgICAgICBOb2RlKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3Rhcmdl
dC5nZXQoKTsgfQorICAgICAgICB2b2lkIHNldFRhcmdldChOb2RlKik7CisgICAgICAgIAorICAg
ICAgICBOb2RlKiBjdXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0
OyB9CisgICAgICAgIHZvaWQgc2V0Q3VycmVudFRhcmdldChOb2RlKiBjdXJyZW50VGFyZ2V0KSB7
IG1fY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7IH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50UGhhc2U7IH0K
KyAgICAgICAgdm9pZCBzZXRFdmVudFBoYXNlKHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UpIHsg
bV9ldmVudFBoYXNlID0gZXZlbnRQaGFzZTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBidWJi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW5CdWJibGU7IH0KKyAgICAgICAgYm9vbCBjYW5jZWxh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxhYmxlOyB9CisgICAgICAgIERPTVRpbWVTdGFt
cCB0aW1lU3RhbXAoKSB7IHJldHVybiBtX2NyZWF0ZVRpbWU7IH0KKyAgICAgICAgdm9pZCBzdG9w
UHJvcGFnYXRpb24oKSB7IG1fcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsgfQorCisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGlz
TW91c2VFdmVudCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNdXRhdGlvbkV2ZW50
KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7IC8vIGEgc3Vic2V0IG9m
IG1vdXNlIGV2ZW50cworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDbGlwYm9hcmRFdmVudCgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3Q7CisKKyAgICAg
ICAgYm9vbCBwcm9wYWdhdGlvblN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BhZ2F0aW9u
U3RvcHBlZDsgfQorICAgICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdCB7IHJldHVy
biBtX2RlZmF1bHRQcmV2ZW50ZWQ7IH0KKworICAgICAgICB2b2lkIHNldERlZmF1bHRIYW5kbGVk
KCkgeyBtX2RlZmF1bHRIYW5kbGVkID0gdHJ1ZTsgfQorICAgICAgICBib29sIGRlZmF1bHRIYW5k
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0SGFuZGxlZDsgfQorCisgICAgICAgIHZvaWQg
cHJldmVudERlZmF1bHQoKSB7IGlmIChtX2NhbmNlbGFibGUpIG1fZGVmYXVsdFByZXZlbnRlZCA9
IHRydWU7IH0KKyAgICAgICAgdm9pZCBzZXREZWZhdWx0UHJldmVudGVkKGJvb2wgZGVmYXVsdFBy
ZXZlbnRlZCkgeyBtX2RlZmF1bHRQcmV2ZW50ZWQgPSBkZWZhdWx0UHJldmVudGVkOyB9CisKKyAg
ICAgICAgdm9pZCBzZXRDYW5jZWxCdWJibGUoYm9vbCBjYW5jZWwpIHsgbV9jYW5jZWxCdWJibGUg
PSBjYW5jZWw7IH0KKyAgICAgICAgYm9vbCBnZXRDYW5jZWxCdWJibGUoKSBjb25zdCB7IHJldHVy
biBtX2NhbmNlbEJ1YmJsZTsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRB
c1N0cmluZygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVSZXN1bHQoY29uc3Qg
U3RyaW5nJik7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZFRhcmdldCgpOworICAgICAgICBib29sIGRpc3BhdGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fdHlwZTsKKyAg
ICAgICAgYm9vbCBtX2NhbkJ1YmJsZTsKKyAgICAgICAgYm9vbCBtX2NhbmNlbGFibGU7CisKKyAg
ICAgICAgYm9vbCBtX3Byb3BhZ2F0aW9uU3RvcHBlZDsKKyAgICAgICAgYm9vbCBtX2RlZmF1bHRQ
cmV2ZW50ZWQ7CisgICAgICAgIGJvb2wgbV9kZWZhdWx0SGFuZGxlZDsKKyAgICAgICAgYm9vbCBt
X2NhbmNlbEJ1YmJsZTsKKworICAgICAgICBOb2RlKiBtX2N1cnJlbnRUYXJnZXQ7IC8vIHJlZiA+
IDAgbWFpbnRhaW5lZCBleHRlcm5hbGx5CisgICAgICAgIHVuc2lnbmVkIHNob3J0IG1fZXZlbnRQ
aGFzZTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworICAgICAgICBET01UaW1lU3Rh
bXAgbV9jcmVhdGVUaW1lOwogICAgIH07Ci0gICAgS2V5Ym9hcmRFdmVudCgpOwotICAgIEtleWJv
YXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RWaWV3Kik7Ci0g
ICAgS2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAgICAg
ICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJn
LAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQga2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAg
ICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRL
ZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAg
IGJvb2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIHZpcnR1YWwgfktleWJvYXJkRXZlbnQoKTsKLSAg
ICAKLSAgICB2b2lkIGluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFy
ZywKLSAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJn
LAotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAgICAgICBib29s
IGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcs
Ci0gICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgCi0gICAgU3RyaW5n
IGtleUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2tleUlkZW50aWZpZXIuZ2V0KCk7IH0K
LSAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5TG9jYXRpb247
IH0KLSAgICAKLSAgICBib29sIGFsdEdyYXBoS2V5KCkgY29uc3QgeyByZXR1cm4gbV9hbHRHcmFw
aEtleTsgfQotICAgIAotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQo
KSBjb25zdCB7IHJldHVybiBtX2tleUV2ZW50OyB9Ci0KLSAgICBpbnQga2V5Q29kZSgpIGNvbnN0
OyAvLyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBmb3Igb3RoZXIg
ZXZlbnRzCi0gICAgaW50IGNoYXJDb2RlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29s
IGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBtX2tleUV2ZW50OwotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBtX2tleUlkZW50aWZpZXI7Ci0gICAgdW5zaWduZWQgbV9rZXlM
b2NhdGlvbjsKLSAgICBib29sIG1fYWx0R3JhcGhLZXkgOiAxOwotfTsKLQotY2xhc3MgTXV0YXRp
b25FdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBhdHRyQ2hhbmdlVHlw
ZSB7IE1PRElGSUNBVElPTiA9IDEsIEFERElUSU9OID0gMiwgUkVNT1ZBTCA9IDMgfTsKLSAgICBN
dXRhdGlvbkV2ZW50KCk7Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
cHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFs
dWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKTsKLSAg
ICBOb2RlICpyZWxhdGVkTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZE5vZGUuZ2V0KCk7
IH0KLSAgICBTdHJpbmcgcHJldlZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2VmFsdWUuZ2V0
KCk7IH0KLSAgICBTdHJpbmcgbmV3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25ld1ZhbHVlLmdl
dCgpOyB9Ci0gICAgU3RyaW5nIGF0dHJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZS5n
ZXQoKTsgfQotICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJDaGFuZ2U7IH0KLSAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAgdmlydHVhbCBi
b29sIGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4g
bV9yZWxhdGVkTm9kZTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9wcmV2VmFsdWU7Ci0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IG1fbmV3VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1f
YXR0ck5hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9hdHRyQ2hhbmdlOwotfTsKLQotY2xhc3Mg
Q2xpcGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIENsaXBib2FyZEV2
ZW50KCk7Ci0gICAgQ2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLCBib29s
IGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFy
Zyk7Ci0KLSAgICBDbGlwYm9hcmQgKmNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcGJv
YXJkLmdldCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdDsK
LXByaXZhdGU6Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0vLyBl
eHRlbnNpb246IG1vdXNlIHdoZWVsIGV2ZW50Ci1jbGFzcyBXaGVlbEV2ZW50IDogcHVibGljIE1v
dXNlUmVsYXRlZEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgV2hlZWxFdmVudCgpOwotICAgIFdoZWVs
RXZlbnQoYm9vbCBob3Jpem9udGFsLCBpbnQgd2hlZWxEZWx0YSwgQWJzdHJhY3RWaWV3ICosCi0g
ICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsIGludCBzY3JlZW5ZQXJnLAotICAgICAg
ICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLCBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAg
ICAgICAgICBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0S2V5QXJn
LCBib29sIG1ldGFLZXlBcmcpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1
cm4gbV9ob3Jpem9udGFsOyB9Ci0gICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7IHJldHVybiBt
X3doZWVsRGVsdGE7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50
KCkgY29uc3Q7Ci0KLSAgICBib29sIG1faG9yaXpvbnRhbDsKLSAgICBpbnQgbV93aGVlbERlbHRh
OwotfTsKLQotY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgU2hhcmVkPFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyPiB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciAq
bGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0gICAgYm9vbCB1
c2VDYXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9Ci0gICAgYm9vbCByZW1v
dmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVkOyB9Ci0gICAgdm9pZCBzZXRSZW1vdmVkKGJv
b2wgcmVtb3ZlZCkgeyBtX3JlbW92ZWQgPSByZW1vdmVkOyB9Ci0gICAgCi1wcml2YXRlOgotICAg
IEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9s
aXN0ZW5lcjsKLSAgICBib29sIG1fdXNlQ2FwdHVyZTsKLSAgICBib29sIG1fcmVtb3ZlZDsKLX07
Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJik7Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ciYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLS8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcg
SUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKLWNsYXNzIENsaXBi
b2FyZCA6IHB1YmxpYyBTaGFyZWQ8Q2xpcGJvYXJkPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+
Q2xpcGJvYXJkKCk7Ci0KLSAgICAvLyBJcyB0aGlzIG9wZXJhdGlvbiBhIGRyYWctZHJvcCBvciBh
IGNvcHktcGFzdGU/Ci0gICAgdmlydHVhbCBib29sIGlzRm9yRHJhZ2dpbmcoKSBjb25zdCA9IDA7
Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAgIHZpcnR1YWwg
U3RyaW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEVm
ZmVjdEFsbG93ZWQoY29uc3QgU3RyaW5nICZzKSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IGNsZWFyRGF0YShjb25zdCBTdHJpbmcgJnR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJBbGxEYXRhKCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5n
ICZ0eXBlLCBib29sICZzdWNjZXNzKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldERh
dGEoY29uc3QgU3RyaW5nICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpID0gMDsKLSAgICAKLSAg
ICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0
cmluZ0xpc3QgdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBDYWNoZWRJbWFn
ZSogZHJhZ0ltYWdlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2Uo
Q2FjaGVkSW1hZ2UqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCAmKSA9IDA7Ci0gICAgdmlydHVh
bCBOb2RlICpkcmFnSW1hZ2VFbGVtZW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFn
SW1hZ2VFbGVtZW50KE5vZGUgKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotfTsK
LQotY2xhc3MgQmVmb3JlVW5sb2FkRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1YmxpYzoKLSAg
ICBCZWZvcmVVbmxvYWRFdmVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFz
U3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0LmdldCgp
OyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcmVzdWx0OwotfTsKIAot
fSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYg
Ly8gRXZlbnRfaApJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiAxNDkwOSkK
KysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDE1ICsyOCwyMSBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiS1dRVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIlJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVUlFdmVudC5oIgorI2luY2x1ZGUgIldo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJranNfcHJveHkuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJLV1FUZXh0U3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJ
bmRleDogV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29yZS9kb20v
S2V5Ym9hcmRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw5IEBACiAvKioKICAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAq
Ci0gKiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogKEMpIDIwMDEgVG9i
aWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAw
MSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTIwLDQ0OSArMjEsNDEgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkb20y
X2V2ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAKLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlN5c3RlbVRpbWUu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogCi1FdmVudDo6RXZlbnQoKQotICAgIDogbV9jYW5C
dWJibGUoZmFsc2UpCi0gICAgLCBtX2NhbmNlbGFibGUoZmFsc2UpCi0gICAgLCBtX3Byb3BhZ2F0
aW9uU3RvcHBlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdFByZXZlbnRlZChmYWxzZSkKLSAgICAs
IG1fZGVmYXVsdEhhbmRsZWQoZmFsc2UpCi0gICAgLCBtX2NhbmNlbEJ1YmJsZShmYWxzZSkKLSAg
ICAsIG1fY3VycmVudFRhcmdldCgwKQotICAgICwgbV9ldmVudFBoYXNlKDApCi0gICAgLCBtX2Ny
ZWF0ZVRpbWUoc3RhdGljX2Nhc3Q8RE9NVGltZVN0YW1wPihjdXJyZW50VGltZSgpICogMTAwMC4w
KSkKLXsKLX0KLQotRXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBi
b29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQotICAgIDogbV90eXBlKGV2ZW50
VHlwZSkKLSAgICAsIG1fY2FuQnViYmxlKGNhbkJ1YmJsZUFyZykKLSAgICAsIG1fY2FuY2VsYWJs
ZShjYW5jZWxhYmxlQXJnKQotICAgICwgbV9wcm9wYWdhdGlvblN0b3BwZWQoZmFsc2UpCi0gICAg
LCBtX2RlZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRIYW5kbGVkKGZhbHNl
KQotICAgICwgbV9jYW5jZWxCdWJibGUoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRUYXJnZXQoMCkK
LSAgICAsIG1fZXZlbnRQaGFzZSgwKQotICAgICwgbV9jcmVhdGVUaW1lKHN0YXRpY19jYXN0PERP
TVRpbWVTdGFtcD4oY3VycmVudFRpbWUoKSAqIDEwMDAuMCkpCi17Ci19Ci0KLUV2ZW50Ojp+RXZl
bnQoKQotewotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZl
dmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCi17Ci0g
ICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90eXBlID0gZXZl
bnRUeXBlQXJnOwotICAgIG1fY2FuQnViYmxlID0gY2FuQnViYmxlQXJnOwotICAgIG1fY2FuY2Vs
YWJsZSA9IGNhbmNlbGFibGVBcmc7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzVUlFdmVudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc01vdXNlRXZlbnQoKSBj
b25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNNdXRhdGlvbkV2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzS2V5
Ym9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50
Ojppc0RyYWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2
ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEV2ZW50Ojppc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRXZlbnQ6OnN0b3JlUmVzdWx0
KGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgRXZlbnQ6OnNldFRhcmdldChOb2RlKiB0YXJn
ZXQpCi17Ci0gICAgbV90YXJnZXQgPSB0YXJnZXQ7Ci0gICAgaWYgKHRhcmdldCkKLSAgICAgICAg
cmVjZWl2ZWRUYXJnZXQoKTsKLX0KLQotdm9pZCBFdmVudDo6cmVjZWl2ZWRUYXJnZXQoKQotewot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1VSUV2ZW50OjpVSUV2ZW50KCkKLSAgICA6
IG1fZGV0YWlsKDApCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
ICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3Ry
YWN0VmlldyAqdmlld0FyZywgaW50IGRldGFpbEFyZykKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwg
Y2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKQotICAgICwgbV92aWV3KHZpZXdBcmcpCi0gICAg
LCBtX2RldGFpbChkZXRhaWxBcmcpCi17Ci19Ci0KLXZvaWQgVUlFdmVudDo6aW5pdFVJRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZp
ZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJn
KQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRF
dmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOwotCi0gICAgbV92aWV3
ID0gdmlld0FyZzsKLSAgICBtX2RldGFpbCA9IGRldGFpbEFyZzsKLX0KLQotYm9vbCBVSUV2ZW50
Ojppc1VJRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgVUlFdmVu
dDo6a2V5Q29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50Ojpj
aGFyQ29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpsYXll
clgoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6bGF5ZXJZKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VYKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VZKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTW91c2VSZWxhdGVkRXZlbnQ6
Ok1vdXNlUmVsYXRlZEV2ZW50KCkKLSAgICA6IG1fc2NyZWVuWCgwKSwgbV9zY3JlZW5ZKDApLCBt
X2NsaWVudFgoMCksIG1fY2xpZW50WSgwKQotICAgICwgbV9wYWdlWCgwKSwgbV9wYWdlWSgwKSwg
bV9sYXllclgoMCksIG1fbGF5ZXJZKDApLCBtX29mZnNldFgoMCksIG1fb2Zmc2V0WSgwKSwgbV9p
c1NpbXVsYXRlZChmYWxzZSkKLXsKLX0KLQotTW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNlUmVsYXRl
ZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVu
WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCkKLSAg
ICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFi
bGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywKLSAgICAgICAgY3RybEtleUFyZywgYWx0S2V5QXJn
LCBzaGlmdEtleUFyZywgbWV0YUtleUFyZykKLSAgICAsIG1fc2NyZWVuWChzY3JlZW5YQXJnKSwg
bV9zY3JlZW5ZKHNjcmVlbllBcmcpCi0gICAgLCBtX2NsaWVudFgoY2xpZW50WEFyZyksIG1fY2xp
ZW50WShjbGllbnRZQXJnKQotICAgICwgbV9pc1NpbXVsYXRlZChpc1NpbXVsYXRlZCkKLXsKLSAg
ICBpbml0Q29vcmRpbmF0ZXMoKTsKLX0KLQotdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6aW5pdENv
b3JkaW5hdGVzKCkKLXsKLSAgICAvLyBTZXQgdXAgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvb3JkaW5h
dGVzLgotICAgIC8vIENvcnJlY3QgdmFsdWVzIGNhbid0IGJlIGNvbXB1dGVkIHVudGlsIHdlIGhh
dmUgYXQgdGFyZ2V0LCBzbyByZWNlaXZlZFRhcmdldAotICAgIC8vIGRvZXMgdGhlICJyZWFsIiBj
b21wdXRhdGlvbi4KLSAgICBtX3BhZ2VYID0gbV9jbGllbnRYOwotICAgIG1fcGFnZVkgPSBtX2Ns
aWVudFk7Ci0gICAgbV9sYXllclggPSBtX3BhZ2VYOwotICAgIG1fbGF5ZXJZID0gbV9wYWdlWTsK
LSAgICBtX29mZnNldFggPSBtX3BhZ2VYOwotICAgIG1fb2Zmc2V0WSA9IG1fcGFnZVk7Ci19Ci0K
LXZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KCkKLXsKLSAgICAvLyBDb21w
dXRlIGNvb3JkaW5hdGVzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSB0YXJnZXQuCi0gICAgbV9vZmZz
ZXRYID0gbV9wYWdlWDsKLSAgICBtX29mZnNldFkgPSBtX3BhZ2VZOwotICAgIG1fbGF5ZXJYID0g
bV9wYWdlWDsgICAgCi0gICAgbV9sYXllclkgPSBtX3BhZ2VZOyAgICAKLQotICAgIE5vZGUqIHRh
cmcgPSB0YXJnZXQoKTsKLSAgICBBU1NFUlQodGFyZyk7Ci0KLSAgICAvLyBNdXN0IGhhdmUgYW4g
dXBkYXRlZCByZW5kZXIgdHJlZSBmb3IgdGhpcyBtYXRoIHRvIHdvcmsgY29ycmVjdGx5LgotICAg
IHRhcmctPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwotCi0gICAgLy8gRklYTUU6IGNs
aWVudFgvWSBzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFzIHBhZ2VYL1khCi0gICAgLy8gQ3VycmVu
dGx5IHRoZSBwYXNzZWQtaW4gY2xpZW50WCBhbmQgY2xpZW50WSBhcmUgaW5jb3JyZWN0bHkgYWN0
dWFsbHkKLSAgICAvLyBwYWdlWCBhbmQgcGFnZVkgdmFsdWVzLCBzbyB3ZSBkb24ndCBoYXZlIGFu
eSB3b3JrIHRvIGRvIGhlcmUsIGJ1dCBpZgotICAgIC8vIHdlIHN0YXJ0ZWQgcGFzc2luZyBpbiBj
b3JyZWN0IGNsaWVudFggYW5kIGNsaWVudFksIHdlJ2Qgd2FudCB0byBjb21wdXRlCi0gICAgLy8g
cGFnZVggYW5kIHBhZ2VZIGhlcmUuCi0KLSAgICAvLyBBZGp1c3Qgb2Zmc2V0WC9ZIHRvIGJlIHJl
bGF0aXZlIHRvIHRoZSB0YXJnZXQncyBwb3NpdGlvbi4KLSAgICBpZiAoIWlzU2ltdWxhdGVkKCkp
IHsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IHRhcmctPnJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgIGludCByeCwgcnk7Ci0gICAgICAgICAgICBpZiAoci0+YWJzb2x1dGVQb3NpdGlv
bihyeCwgcnkpKSB7Ci0gICAgICAgICAgICAgICAgbV9vZmZzZXRYIC09IHJ4OwotICAgICAgICAg
ICAgICAgIG1fb2Zmc2V0WSAtPSByeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIEFkanVzdCBsYXllclgvWSB0byBiZSByZWxhdGl2ZSB0byB0aGUgbGF5ZXIuCi0g
ICAgLy8gRklYTUU6IFdlJ3JlIHByZXR0eSBzdXJlIHRoaXMgaXMgdGhlIHdyb25nIGRlZmludGlv
biBvZiAibGF5ZXIuIgotICAgIC8vIE91ciBSZW5kZXJMYXllciBpcyBhIG1vcmUgbW9kZXJuIGNv
bmNlcHQsIGFuZCBsYXllclgvWSBpcyBzb21lCi0gICAgLy8gb3RoZXIgbm90aW9uIGFib3V0IGdy
b3VwcyBvZiBlbGVtZW50czsgd2Ugc2hvdWxkIHRlc3QgYW5kIGZpeCB0aGlzLgotICAgIE5vZGUq
IG4gPSB0YXJnOwotICAgIHdoaWxlIChuICYmICFuLT5yZW5kZXJlcigpKQotICAgICAgICBuID0g
bi0+cGFyZW50KCk7Ci0gICAgaWYgKG4pIHsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0g
bi0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgbGF5ZXItPnVwZGF0ZUxh
eWVyUG9zaXRpb24oKTsKLSAgICAgICAgZm9yICg7IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJl
bnQoKSkgewotICAgICAgICAgICAgbV9sYXllclggLT0gbGF5ZXItPnhQb3MoKTsKLSAgICAgICAg
ICAgIG1fbGF5ZXJZIC09IGxheWVyLT55UG9zKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlu
dCBNb3VzZVJlbGF0ZWRFdmVudDo6cGFnZVgoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2VY
OwotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnBhZ2VZKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9wYWdlWTsKLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2ZW50Ojp4KCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVjdC4KLSAgICAvLyBTZWUgTWljcm9zb2Z0IGRv
Y3VtZW50YXRpb24gYW5kIDxodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS93M2NfZXZlbnRz
Lmh0bWw+LgotICAgIHJldHVybiBtX2NsaWVudFg7Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVu
dDo6eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvcnJlY3QuCi0gICAg
Ly8gU2VlIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIGFuZCA8aHR0cDovL3d3dy5xdWlya3Ntb2Rl
Lm9yZy9kb20vdzNjX2V2ZW50cy5odG1sPi4KLSAgICByZXR1cm4gbV9jbGllbnRZOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Nb3VzZUV2ZW50OjpNb3VzZUV2ZW50KCkKLSAgICA6
IG1fYnV0dG9uKDApCi17Ci19Ci0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxh
YmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmll
d0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3Ry
bEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0QXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCogY2xpcGJvYXJkQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQpCi0gICAgOiBNb3Vz
ZVJlbGF0ZWRFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmll
d0FyZywgZGV0YWlsQXJnLAotICAgICAgICBzY3JlZW5YQXJnLCBzY3JlZW5ZQXJnLCBjbGllbnRY
QXJnLCBjbGllbnRZQXJnLAotICAgICAgICBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5
QXJnLCBtZXRhS2V5QXJnLCBpc1NpbXVsYXRlZCkKLSAgICAsIG1fYnV0dG9uKGJ1dHRvbkFyZykK
LSAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0QXJnKQotICAgICwgbV9jbGlwYm9h
cmQoY2xpcGJvYXJkQXJnKQotewotfQotCi1Nb3VzZUV2ZW50Ojp+TW91c2VFdmVudCgpCi17Ci19
Ci0KLXZvaWQgTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcq
IHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWls
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpCi17
Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdFVJRXZl
bnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxB
cmcpOwotCi0gICAgbV9zY3JlZW5YID0gc2NyZWVuWEFyZzsKLSAgICBtX3NjcmVlblkgPSBzY3Jl
ZW5ZQXJnOwotICAgIG1fY2xpZW50WCA9IGNsaWVudFhBcmc7Ci0gICAgbV9jbGllbnRZID0gY2xp
ZW50WUFyZzsKLSAgICBtX2N0cmxLZXkgPSBjdHJsS2V5QXJnOwotICAgIG1fYWx0S2V5ID0gYWx0
S2V5QXJnOwotICAgIG1fc2hpZnRLZXkgPSBzaGlmdEtleUFyZzsKLSAgICBtX21ldGFLZXkgPSBt
ZXRhS2V5QXJnOwotICAgIG1fYnV0dG9uID0gYnV0dG9uQXJnOwotICAgIG1fcmVsYXRlZFRhcmdl
dCA9IHJlbGF0ZWRUYXJnZXRBcmc7Ci0KLSAgICBpbml0Q29vcmRpbmF0ZXMoKTsKLX0KLQotYm9v
bCBNb3VzZUV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE1vdXNlRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKLXsKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcgJnQgPSB0eXBlKCk7Ci0gICAgcmV0dXJuIHQgPT0gZHJhZ2VudGVyRXZlbnQg
fHwgdCA9PSBkcmFnb3ZlckV2ZW50IHx8IHQgPT0gZHJhZ2xlYXZlRXZlbnQKLSAgICAgICAgfHwg
dCA9PSBkcm9wRXZlbnQKLSAgICAgICAgfHwgdCA9PSBkcmFnc3RhcnRFdmVudCB8fCB0ID09IGRy
YWdFdmVudCB8fCB0ID09IGRyYWdlbmRFdmVudDsKLX0KLQotaW50IE1vdXNlRXZlbnQ6OndoaWNo
KCkgY29uc3QKLXsKLSAgICAvLyBGb3IgS0hUTUwsIHRoZSByZXR1cm4gdmFsdWVzIGZvciBsZWZ0
LCBtaWRkbGUgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMgYXJlIDAsIDEsIDIsIHJlc3BlY3RpdmVs
eS4KLSAgICAvLyBGb3IgdGhlIE5ldHNjYXBlICJ3aGljaCIgcHJvcGVydHksIHRoZSByZXR1cm4g
dmFsdWVzIGZvciBsZWZ0LCBtaWRkbGUgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMgYXJlIDEsIDIs
IDMsIHJlc3BlY3RpdmVseS4gCi0gICAgLy8gU28gd2UgbXVzdCBhZGQgMS4KLSAgICByZXR1cm4g
bV9idXR0b24gKyAxOwotfQotCi1Ob2RlKiBNb3VzZUV2ZW50Ojp0b0VsZW1lbnQoKSBjb25zdAot
ewotICAgIC8vIE1TSUUgZXh0ZW5zaW9uIC0gInRoZSBvYmplY3QgdG93YXJkIHdoaWNoIHRoZSB1
c2VyIGlzIG1vdmluZyB0aGUgbW91c2UgcG9pbnRlciIKLSAgICByZXR1cm4gdHlwZSgpID09IG1v
dXNlb3V0RXZlbnQgPyByZWxhdGVkVGFyZ2V0KCkgOiB0YXJnZXQoKTsKLX0KLQotTm9kZSogTW91
c2VFdmVudDo6ZnJvbUVsZW1lbnQoKSBjb25zdAotewotICAgIC8vIE1TSUUgZXh0ZW5zaW9uIC0g
Im9iamVjdCBmcm9tIHdoaWNoIGFjdGl2YXRpb24gb3IgdGhlIG1vdXNlIHBvaW50ZXIgaXMgZXhp
dGluZyBkdXJpbmcgdGhlIGV2ZW50IiAoaHVoPykKLSAgICByZXR1cm4gdHlwZSgpID09IG1vdXNl
b3V0RXZlbnQgPyB0YXJnZXQoKSA6IHJlbGF0ZWRUYXJnZXQoKTsKLX0KLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVu
dCgpCi0gIDogbV9rZXlFdmVudCgwKQotICAsIG1fa2V5TG9jYXRpb24oRE9NX0tFWV9MT0NBVElP
Tl9TVEFOREFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5KGZhbHNlKQorICAgIDogbV9rZXlFdmVudCgw
KQorICAgICwgbV9rZXlMb2NhdGlvbihET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEKQorICAgICwg
bV9hbHRHcmFwaEtleShmYWxzZSkKIHsKIH0KIAotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVu
dChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleSwgQWJzdHJhY3RWaWV3ICp2aWV3KQot
ICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoa2V5LmlzS2V5VXAoKSA/IGtleXVwRXZlbnQgOiBrZXku
aXNBdXRvUmVwZWF0KCkgPyBrZXlwcmVzc0V2ZW50IDoga2V5ZG93bkV2ZW50LAotICAgIHRydWUs
IHRydWUsIHZpZXcsIDAsIGtleS5jdHJsS2V5KCksIGtleS5hbHRLZXkoKSwga2V5LnNoaWZ0S2V5
KCksIGtleS5tZXRhS2V5KCkpCi0gICwgbV9rZXlFdmVudChuZXcgUGxhdGZvcm1LZXlib2FyZEV2
ZW50KGtleSkpCi0gICwgbV9rZXlJZGVudGlmaWVyKFN0cmluZyhrZXkua2V5SWRlbnRpZmllcigp
KS5pbXBsKCkpCi0gICwgbV9rZXlMb2NhdGlvbihrZXkuaXNLZXlwYWQoKSA/IERPTV9LRVlfTE9D
QVRJT05fTlVNUEFEIDogRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCkKLSAgLCBtX2FsdEdyYXBo
S2V5KGZhbHNlKQorS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQmIGtleSwgQWJzdHJhY3RWaWV3KiB2aWV3KQorICAgIDogVUlFdmVudFdpdGhL
ZXlTdGF0ZShrZXkuaXNLZXlVcCgpID8ga2V5dXBFdmVudCA6IGtleS5pc0F1dG9SZXBlYXQoKSA/
IGtleXByZXNzRXZlbnQgOiBrZXlkb3duRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUsIHRydWUsIHZpZXcsIDAsIGtleS5jdHJsS2V5KCksIGtleS5hbHRLZXkoKSwga2V5LnNo
aWZ0S2V5KCksIGtleS5tZXRhS2V5KCkpCisgICAgLCBtX2tleUV2ZW50KG5ldyBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQoa2V5KSkKKyAgICAsIG1fa2V5SWRlbnRpZmllcihTdHJpbmcoa2V5LmtleUlk
ZW50aWZpZXIoKSkuaW1wbCgpKQorICAgICwgbV9rZXlMb2NhdGlvbihrZXkuaXNLZXlwYWQoKSA/
IERPTV9LRVlfTE9DQVRJT05fTlVNUEFEIDogRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCkKKyAg
ICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCiB7CiB9CiAKLUtleWJvYXJkRXZlbnQ6OktleWJvYXJk
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZrZXlJZGVu
dGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKQotICA6IFVJRXZlbnRXaXRoS2V5U3Rh
dGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIDAsIGN0
cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcpCi0gICwgbV9rZXlF
dmVudCgwKQotICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyQXJnLmltcGwoKSkKLSAg
LCBtX2tleUxvY2F0aW9uKGtleUxvY2F0aW9uQXJnKQotICAsIG1fYWx0R3JhcGhLZXkoYWx0R3Jh
cGhLZXlBcmcpCitLZXlib2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZp
ZXcgKnZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5
SWRlbnRpZmllciwgIHVuc2lnbmVkIGtleUxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1l
dGFLZXksIGJvb2wgYWx0R3JhcGhLZXkpCisgICAgOiBVSUV2ZW50V2l0aEtleVN0YXRlKGV2ZW50
VHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCAwLCBjdHJsS2V5LCBhbHRLZXksIHNo
aWZ0S2V5LCBtZXRhS2V5KQorICAgICwgbV9rZXlFdmVudCgwKQorICAgICwgbV9rZXlJZGVudGlm
aWVyKGtleUlkZW50aWZpZXIuaW1wbCgpKQorICAgICwgbV9rZXlMb2NhdGlvbihrZXlMb2NhdGlv
bikKKyAgICAsIG1fYWx0R3JhcGhLZXkoYWx0R3JhcGhLZXkpCiB7CiB9CiAKQEAgLTQ3MSwzMCAr
NjQsMjIgQEAgS2V5Ym9hcmRFdmVudDo6fktleWJvYXJkRXZlbnQoKQogICAgIGRlbGV0ZSBtX2tl
eUV2ZW50OwogfQogCi12b2lkIEtleWJvYXJkRXZlbnQ6OmluaXRLZXlib2FyZEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
QnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywgCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbHRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywg
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZykKK3ZvaWQgS2V5Ym9hcmRFdmVudDo6aW5p
dEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllciwgdW5zaWduZWQg
a2V5TG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBh
bHRHcmFwaEtleSkKIHsKICAgICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpbml0VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZp
ZXdBcmcsIDApOworICAgIGluaXRVSUV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwg
dmlldywgMCk7CiAKLSAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyQXJnLmltcGwo
KTsKLSAgICBtX2tleUxvY2F0aW9uID0ga2V5TG9jYXRpb25Bcmc7Ci0gICAgbV9jdHJsS2V5ID0g
Y3RybEtleUFyZzsKLSAgICBtX3NoaWZ0S2V5ID0gc2hpZnRLZXlBcmc7Ci0gICAgbV9hbHRLZXkg
PSBhbHRLZXlBcmc7Ci0gICAgbV9tZXRhS2V5ID0gbWV0YUtleUFyZzsKLSAgICBtX2FsdEdyYXBo
S2V5ID0gYWx0R3JhcGhLZXlBcmc7CisgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmll
ci5pbXBsKCk7CisgICAgbV9rZXlMb2NhdGlvbiA9IGtleUxvY2F0aW9uOworICAgIG1fY3RybEtl
eSA9IGN0cmxLZXk7CisgICAgbV9zaGlmdEtleSA9IHNoaWZ0S2V5OworICAgIG1fYWx0S2V5ID0g
YWx0S2V5OworICAgIG1fbWV0YUtleSA9IG1ldGFLZXk7CisgICAgbV9hbHRHcmFwaEtleSA9IGFs
dEdyYXBoS2V5OwogfQogCiBpbnQgS2V5Ym9hcmRFdmVudDo6a2V5Q29kZSgpIGNvbnN0CkBAIC01
MjgsMTI3ICsxMTMsNCBAQCBpbnQgS2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAogICAgIHJl
dHVybiBrZXlDb2RlKCk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU11dGF0aW9u
RXZlbnQ6Ok11dGF0aW9uRXZlbnQoKQotICAgIDogbV9hdHRyQ2hhbmdlKDApCi17Ci19Ci0KLU11
dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2Rl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
cHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQotICAgIDogRXZlbnQoZXZl
bnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3JlbGF0ZWROb2Rl
KHJlbGF0ZWROb2RlQXJnKQotICAgICwgbV9wcmV2VmFsdWUocHJldlZhbHVlQXJnLmltcGwoKSkK
LSAgICAsIG1fbmV3VmFsdWUobmV3VmFsdWVBcmcuaW1wbCgpKQotICAgICwgbV9hdHRyTmFtZShh
dHRyTmFtZUFyZy5pbXBsKCkpCi0gICAgLCBtX2F0dHJDaGFuZ2UoYXR0ckNoYW5nZUFyZykKLXsK
LX0KLQotdm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdEV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFy
ZywgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICBtX3JlbGF0ZWROb2RlID0gcmVsYXRlZE5vZGVBcmc7
Ci0gICAgbV9wcmV2VmFsdWUgPSBwcmV2VmFsdWVBcmcuaW1wbCgpOwotICAgIG1fbmV3VmFsdWUg
PSBuZXdWYWx1ZUFyZy5pbXBsKCk7Ci0gICAgbV9hdHRyTmFtZSA9IGF0dHJOYW1lQXJnLmltcGwo
KTsKLSAgICBtX2F0dHJDaGFuZ2UgPSBhdHRyQ2hhbmdlQXJnOwotfQotCi1ib29sIE11dGF0aW9u
RXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVu
dCgpCi17Ci19Ci0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywg
Q2xpcGJvYXJkICpjbGlwYm9hcmRBcmcpCi0gICAgOiBFdmVudChldmVudFR5cGUsIGNhbkJ1YmJs
ZUFyZywgY2FuY2VsYWJsZUFyZyksIG1fY2xpcGJvYXJkKGNsaXBib2FyZEFyZykKLXsKLX0KLQot
Ym9vbCBDbGlwYm9hcmRFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoZWVsRXZlbnQ6Oldo
ZWVsRXZlbnQoKSA6IG1faG9yaXpvbnRhbChmYWxzZSksIG1fd2hlZWxEZWx0YSgwKQotewotfQot
Ci1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGJvb2wgaCwgaW50IGQsIEFic3RyYWN0VmlldyAqdiwK
LSAgICBpbnQgc3gsIGludCBzeSwgaW50IGN4LCBpbnQgY3ksIGJvb2wgY3RybCwgYm9vbCBhbHQs
IGJvb2wgc2hpZnQsIGJvb2wgbWV0YSkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGggPyBraHRt
bEhvcml6b250YWxtb3VzZXdoZWVsRXZlbnQgOiBtb3VzZXdoZWVsRXZlbnQsCi0gICAgICAgIHRy
dWUsIHRydWUsIHYsIDAsIHN4LCBzeSwgY3gsIGN5LCBjdHJsLCBhbHQsIHNoaWZ0LCBtZXRhKQot
ICAgICwgbV9ob3Jpem9udGFsKGgpLCBtX3doZWVsRGVsdGEoZCkKLXsKLX0KLQotYm9vbCBXaGVl
bEV2ZW50Ojppc1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6UmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLSAgICA6IG1fZXZl
bnRUeXBlKGV2ZW50VHlwZSkKLSAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCi0gICAgLCBtX3Vz
ZUNhcHR1cmUodXNlQ2FwdHVyZSkKLSAgICAsIG1fcmVtb3ZlZChmYWxzZSkKLXsKLX0KLQotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZhLCBjb25zdCBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lciAmYikKLXsKLSAgICByZXR1cm4gYS5ldmVudFR5cGUoKSA9PSBi
LmV2ZW50VHlwZSgpICYmIGEubGlzdGVuZXIoKSA9PSBiLmxpc3RlbmVyKCkgJiYgYS51c2VDYXB0
dXJlKCkgPT0gYi51c2VDYXB0dXJlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LUNsaXBib2FyZDo6fkNsaXBib2FyZCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUJlZm9yZVVubG9hZEV2ZW50OjpCZWZvcmVVbmxvYWRFdmVudCgpCi0gICAgOiBFdmVudChi
ZWZvcmV1bmxvYWRFdmVudCwgZmFsc2UsIHRydWUpCi17Ci19Ci0KLWJvb2wgQmVmb3JlVW5sb2Fk
RXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBCZWZvcmVVbmxvYWRFdmVudDo6c3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJiBz
KQotewotICAgIG1fcmVzdWx0ID0gcy5pbXBsKCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29yZS9k
b20vS2V5Ym9hcmRFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAq
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJp
Z2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRl
KQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwu
Y29tKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsNDU4ICsyMyw1NiBAQAogICoKICAqLwogCi0j
aWZuZGVmIERPTV9FVkVOVFNJTVBMX0gKLSNkZWZpbmUgRE9NX0VWRU5UU0lNUExfSAorI2lmbmRl
ZiBLZXlib2FyZEV2ZW50X2gKKyNkZWZpbmUgS2V5Ym9hcmRFdmVudF9oCiAKLSNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJOb2RlLmgi
Ci0KLWNsYXNzIERlcHJlY2F0ZWRTdHJpbmdMaXN0OworI2luY2x1ZGUgIlVJRXZlbnRXaXRoS2V5
U3RhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRJbWFnZTsKLWNs
YXNzIENsaXBib2FyZDsKLWNsYXNzIEV2ZW50TGlzdGVuZXI7Ci1jbGFzcyBFdmVudFRhcmdldE5v
ZGU7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBET01UaW1lU3RhbXA7Ci10eXBl
ZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7Ci0KLWNvbnN0IGludCBFdmVudEV4Y2VwdGlvbk9m
ZnNldCA9IDEwMDsKLWNvbnN0IGludCBFdmVudEV4Y2VwdGlvbk1heCA9IDE5OTsKLWVudW0gRXZl
bnRFeGNlcHRpb25Db2RlIHsgVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIgPSBFdmVudEV4Y2Vw
dGlvbk9mZnNldCB9OwotCi1jbGFzcyBFdmVudCA6IHB1YmxpYyBTaGFyZWQ8RXZlbnQ+Ci17Ci1w
dWJsaWM6Ci0gICAgZW51bSBQaGFzZVR5cGUgeyAKLSAgICAgICAgQ0FQVFVSSU5HX1BIQVNFID0g
MSwgCi0gICAgICAgIEFUX1RBUkdFVCA9IDIsIAotICAgICAgICBCVUJCTElOR19QSEFTRSA9IDMg
Ci0gICAgfTsKKyAgICBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiAKLSAgICAvLyBSZXZl
cnNlLWVuZ2luZWVyZWQgZnJvbSBOZXRzY2FwZQotICAgIGVudW0gRXZlbnRUeXBlIHsKLSAgICAg
ICAgTU9VU0VET1dOICAgICAgICAgICA9IDEsCi0gICAgICAgIE1PVVNFVVAgICAgICAgICAgICAg
PSAyLAotICAgICAgICBNT1VTRU9WRVIgICAgICAgICAgID0gNCwKLSAgICAgICAgTU9VU0VPVVQg
ICAgICAgICAgICA9IDgsCi0gICAgICAgIE1PVVNFTU9WRSAgICAgICAgICAgPSAxNiwKLSAgICAg
ICAgTU9VU0VEUkFHICAgICAgICAgICA9IDMyLAotICAgICAgICBDTElDSyAgICAgICAgICAgICAg
ID0gNjQsCi0gICAgICAgIERCTENMSUNLICAgICAgICAgICAgPSAxMjgsCi0gICAgICAgIEtFWURP
V04gICAgICAgICAgICAgPSAyNTYsCi0gICAgICAgIEtFWVVQICAgICAgICAgICAgICAgPSA1MTIs
Ci0gICAgICAgIEtFWVBSRVNTICAgICAgICAgICAgPSAxMDI0LAotICAgICAgICBEUkFHRFJPUCAg
ICAgICAgICAgID0gMjA0OCwKLSAgICAgICAgRk9DVVMgICAgICAgICAgICAgICA9IDQwOTYsCi0g
ICAgICAgIEJMVVIgICAgICAgICAgICAgICAgPSA4MTkyLAotICAgICAgICBTRUxFQ1QgICAgICAg
ICAgICAgID0gMTYzODQsCi0gICAgICAgIENIQU5HRSAgICAgICAgICAgICAgPSAzMjc2OAorICAg
IC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDMKKyAgICBjbGFzcyBLZXlib2FyZEV2ZW50IDog
cHVibGljIFVJRXZlbnRXaXRoS2V5U3RhdGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBL
ZXlMb2NhdGlvbkNvZGUgeworICAgICAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCAg
ICAgID0gMHgwMCwKKyAgICAgICAgICAgIERPTV9LRVlfTE9DQVRJT05fTEVGVCAgICAgICAgICA9
IDB4MDEsCisgICAgICAgICAgICBET01fS0VZX0xPQ0FUSU9OX1JJR0hUICAgICAgICAgPSAweDAy
LAorICAgICAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgICAgICAgID0gMHgwMywKKyAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIEtleWJvYXJkRXZlbnQoKTsKKyAgICAgICAgS2V5
Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmLCBBYnN0cmFjdFZpZXcqKTsK
KyAgICAgICAgS2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2Fu
QnViYmxlLCBib29sIGNhbmNlbGFibGUsIEFic3RyYWN0VmlldyogdmlldywKKyAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIHVuc2lnbmVkIGtleUxvY2F0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJv
b2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBhbHRHcmFwaEtleSk7CisgICAgICAgIHZp
cnR1YWwgfktleWJvYXJkRXZlbnQoKTsKKyAgICAKKyAgICAgICAgdm9pZCBpbml0S2V5Ym9hcmRF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNl
bGFibGUsIEFic3RyYWN0VmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIHVuc2lnbmVkIGtleUxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJv
b2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBhbHRHcmFwaEtleSk7CisgICAgCisgICAg
ICAgIFN0cmluZyBrZXlJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9rZXlJZGVudGlmaWVy
LmdldCgpOyB9CisgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9rZXlMb2NhdGlvbjsgfQorICAgIAorICAgICAgICBib29sIGFsdEdyYXBoS2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9hbHRHcmFwaEtleTsgfQorICAgIAorICAgICAgICBjb25zdCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQqIGtleUV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9rZXlFdmVudDsgfQorCisg
ICAgICAgIGludCBrZXlDb2RlKCkgY29uc3Q7IC8vIGtleSBjb2RlIGZvciBrZXlkb3duIGFuZCBr
ZXl1cCwgY2hhcmFjdGVyIGZvciBvdGhlciBldmVudHMKKyAgICAgICAgaW50IGNoYXJDb2RlKCkg
Y29uc3Q7CisgICAgCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdDsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogbV9rZXlFdmVudDsKKyAgICAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IG1fa2V5SWRlbnRpZmllcjsKKyAgICAgICAgdW5zaWduZWQgbV9rZXlMb2Nh
dGlvbjsKKyAgICAgICAgYm9vbCBtX2FsdEdyYXBoS2V5IDogMTsKICAgICB9OwotICAgIAotICAg
IEV2ZW50KCk7Ci0gICAgRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1
YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKLSAgICB2aXJ0dWFsIH5FdmVudCgpOwotCi0g
ICAgY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0g
ICAgTm9kZSogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFRhcmdldChOb2RlKik7Ci0gICAgTm9kZSogY3VycmVudFRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VycmVudFRhcmdldDsgfQotICAgIHZvaWQgc2V0Q3VycmVudFRhcmdldChOb2Rl
KiBjdXJyZW50VGFyZ2V0KSB7IG1fY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7IH0KLSAg
ICB1bnNpZ25lZCBzaG9ydCBldmVudFBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFBoYXNl
OyB9Ci0gICAgdm9pZCBzZXRFdmVudFBoYXNlKHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UpIHsg
bV9ldmVudFBoYXNlID0gZXZlbnRQaGFzZTsgfQotICAgIGJvb2wgYnViYmxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fY2FuQnViYmxlOyB9Ci0gICAgYm9vbCBjYW5jZWxhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9jYW5jZWxhYmxlOyB9Ci0gICAgRE9NVGltZVN0YW1wIHRpbWVTdGFtcCgpIHsgcmV0dXJu
IG1fY3JlYXRlVGltZTsgfQotICAgIHZvaWQgc3RvcFByb3BhZ2F0aW9uKCkgeyBtX3Byb3BhZ2F0
aW9uU3RvcHBlZCA9IHRydWU7IH0KLSAgICB2b2lkIHByZXZlbnREZWZhdWx0KCkgeyBpZiAobV9j
YW5jZWxhYmxlKSBtX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBpbml0RXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBi
b29sIGNhbmNlbGFibGVBcmcpOwotCi0gICAgdmlydHVhbCBib29sIGlzVUlFdmVudCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNNdXRhdGlvbkV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRF
dmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OyAvLyBh
IHN1YnNldCBvZiBtb3VzZSBldmVudHMKLSAgICB2aXJ0dWFsIGJvb2wgaXNDbGlwYm9hcmRFdmVu
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0OwotCi0gICAgYm9v
bCBwcm9wYWdhdGlvblN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BhZ2F0aW9uU3RvcHBl
ZDsgfQotICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVmYXVs
dFByZXZlbnRlZDsgfQotCi0gICAgdm9pZCBzZXREZWZhdWx0SGFuZGxlZCgpIHsgbV9kZWZhdWx0
SGFuZGxlZCA9IHRydWU7IH0KLSAgICBib29sIGRlZmF1bHRIYW5kbGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kZWZhdWx0SGFuZGxlZDsgfQotCi0gICAgdm9pZCBzZXRDYW5jZWxCdWJibGUoYm9vbCBj
YW5jZWwpIHsgbV9jYW5jZWxCdWJibGUgPSBjYW5jZWw7IH0KLSAgICB2b2lkIHNldERlZmF1bHRQ
cmV2ZW50ZWQoYm9vbCBkZWZhdWx0UHJldmVudGVkKSB7IG1fZGVmYXVsdFByZXZlbnRlZCA9IGRl
ZmF1bHRQcmV2ZW50ZWQ7IH0KLSAgICBib29sIGdldENhbmNlbEJ1YmJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FuY2VsQnViYmxlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzUmVzdWx0QXNT
dHJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmVSZXN1bHQoY29uc3QgU3RyaW5n
Jik7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLSAg
ICBib29sIGRpc3BhdGNoZWQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQotCi1wcml2YXRl
OgotICAgIEF0b21pY1N0cmluZyBtX3R5cGU7Ci0gICAgYm9vbCBtX2NhbkJ1YmJsZTsKLSAgICBi
b29sIG1fY2FuY2VsYWJsZTsKLQotICAgIGJvb2wgbV9wcm9wYWdhdGlvblN0b3BwZWQ7Ci0gICAg
Ym9vbCBtX2RlZmF1bHRQcmV2ZW50ZWQ7Ci0gICAgYm9vbCBtX2RlZmF1bHRIYW5kbGVkOwotICAg
IGJvb2wgbV9jYW5jZWxCdWJibGU7Ci0KLSAgICBOb2RlKiBtX2N1cnJlbnRUYXJnZXQ7IC8vIHJl
ZiA+IDAgbWFpbnRhaW5lZCBleHRlcm5hbGx5Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9ldmVudFBo
YXNlOwotICAgIFJlZlB0cjxOb2RlPiBtX3RhcmdldDsKLSAgICBET01UaW1lU3RhbXAgbV9jcmVh
dGVUaW1lOwotfTsKLQotY2xhc3MgVUlFdmVudCA6IHB1YmxpYyBFdmVudAotewotcHVibGljOgot
ICAgIFVJRXZlbnQoKTsKLSAgICBVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwKLSAg
ICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNh
bmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAg
ICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpOwotICAgIEFic3RyYWN0VmlldyAqdmlldygpIGNv
bnN0IHsgcmV0dXJuIG1fdmlldy5nZXQoKTsgfQotICAgIGludCBkZXRhaWwoKSBjb25zdCB7IHJl
dHVybiBtX2RldGFpbDsgfQotICAgIHZvaWQgaW5pdFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
ICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWls
QXJnKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGludCBrZXlDb2RlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY2hhckNvZGUoKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgaW50IGxheWVyWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxheWVy
WSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBwYWdlWSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBSZWZQdHI8QWJzdHJhY3RWaWV3PiBtX3ZpZXc7Ci0gICAgaW50IG1fZGV0
YWlsOwotfTsKLQotY2xhc3MgVUlFdmVudFdpdGhLZXlTdGF0ZSA6IHB1YmxpYyBVSUV2ZW50IHsK
LXB1YmxpYzoKLSAgICBVSUV2ZW50V2l0aEtleVN0YXRlKCkgOiBtX2N0cmxLZXkoZmFsc2UpLCBt
X2FsdEtleShmYWxzZSksIG1fc2hpZnRLZXkoZmFsc2UpLCBtX21ldGFLZXkoZmFsc2UpIHsgfQot
ICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLCBib29sIGNh
bkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0g
ICAgICAgIGludCBkZXRhaWxBcmcsIGJvb2wgY3RybEtleUFyZywgYm9vbCBhbHRLZXlBcmcsIGJv
b2wgc2hpZnRLZXlBcmcsIGJvb2wgbWV0YUtleUFyZykKLSAgICAgICAgOiBVSUV2ZW50KHR5cGUs
IGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnKQotICAgICAg
ICAsIG1fY3RybEtleShjdHJsS2V5QXJnKSwgbV9hbHRLZXkoYWx0S2V5QXJnKSwgbV9zaGlmdEtl
eShzaGlmdEtleUFyZyksIG1fbWV0YUtleShtZXRhS2V5QXJnKSB7IH0KLQotICAgIGJvb2wgY3Ry
bEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RybEtleTsgfQotICAgIGJvb2wgc2hpZnRLZXkoKSBj
b25zdCB7IHJldHVybiBtX3NoaWZ0S2V5OyB9Ci0gICAgYm9vbCBhbHRLZXkoKSBjb25zdCB7IHJl
dHVybiBtX2FsdEtleTsgfQotICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0
YUtleTsgfQotCi1wcm90ZWN0ZWQ6IC8vIGV4cG9zZSB0aGVzZSBzbyBpbml0IGZ1bmN0aW9ucyBj
YW4gc2V0IHRoZW0KLSAgICBib29sIG1fY3RybEtleSA6IDE7Ci0gICAgYm9vbCBtX2FsdEtleSA6
IDE7Ci0gICAgYm9vbCBtX3NoaWZ0S2V5IDogMTsKLSAgICBib29sIG1fbWV0YUtleSA6IDE7Ci19
OwotCi0vLyBJbnRlcm5hbCBvbmx5OiBIZWxwZXIgY2xhc3MgZm9yIHdoYXQncyBjb21tb24gYmV0
d2VlbiBtb3VzZSBhbmQgd2hlZWwgZXZlbnRzLgotY2xhc3MgTW91c2VSZWxhdGVkRXZlbnQgOiBw
dWJsaWMgVUlFdmVudFdpdGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgTW91c2VSZWxhdGVkRXZl
bnQoKTsKLSAgICBNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVs
YXRlZCA9IGZhbHNlKTsKLSAgICBpbnQgc2NyZWVuWCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVu
WDsgfQotICAgIGludCBzY3JlZW5ZKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5ZOyB9Ci0gICAg
aW50IGNsaWVudFgoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudFg7IH0KLSAgICBpbnQgY2xpZW50
WSgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50WTsgfQotICAgIGludCBsYXllclgoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyWDsgfQotICAgIGludCBsYXllclkoKSBjb25zdCB7IHJldHVybiBtX2xh
eWVyWTsgfQotICAgIGludCBvZmZzZXRYKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRYOyB9Ci0g
ICAgaW50IG9mZnNldFkoKSBjb25zdCB7IHJldHVybiBtX29mZnNldFk7IH0KLSAgICBib29sIGlz
U2ltdWxhdGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NpbXVsYXRlZDsgfQotICAgIHZpcnR1YWwg
aW50IHBhZ2VYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFnZVkoKSBjb25zdDsKLSAgICBp
bnQgeCgpIGNvbnN0OwotICAgIGludCB5KCkgY29uc3Q7Ci1wcm90ZWN0ZWQ6IC8vIGV4cG9zZSB0
aGVzZSBzbyBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVudCBjYW4gc2V0IHRoZW0KLSAgICBpbnQg
bV9zY3JlZW5YOwotICAgIGludCBtX3NjcmVlblk7Ci0gICAgaW50IG1fY2xpZW50WDsKLSAgICBp
bnQgbV9jbGllbnRZOwotICAgIHZvaWQgaW5pdENvb3JkaW5hdGVzKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlY2VpdmVkVGFyZ2V0KCk7Ci1wcml2YXRlOgotICAgIGludCBtX3BhZ2VYOwotICAgIGlu
dCBtX3BhZ2VZOwotICAgIGludCBtX2xheWVyWDsKLSAgICBpbnQgbV9sYXllclk7Ci0gICAgaW50
IG1fb2Zmc2V0WDsKLSAgICBpbnQgbV9vZmZzZXRZOwotICAgIGJvb2wgbV9pc1NpbXVsYXRlZDsK
LX07Ci0KLS8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKLWNsYXNzIE1vdXNlRXZlbnQgOiBw
dWJsaWMgTW91c2VSZWxhdGVkRXZlbnQgewotcHVibGljOgotICAgIE1vdXNlRXZlbnQoKTsKLSAg
ICBNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3KiB2aWV3QXJnLAotICAgICAgICAg
ICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhB
cmcsCi0gICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAg
ICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0g
ICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgIGJv
b2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAg
ICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUq
IHJlbGF0ZWRUYXJnZXRBcmcsCi0gICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkKiBjbGlwYm9h
cmRBcmcgPSAwLAotICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQgPSBmYWxzZSk7
Ci0gICAgdmlydHVhbCB+TW91c2VFdmVudCgpOwotICAgIC8vIFdpbklFIHVzZXMgMSw0LDIgZm9y
IGxlZnQvbWlkZGxlL3JpZ2h0IGJ1dCBub3QgZm9yIGNsaWNrIChqdXN0IGZvciBtb3VzZWRvd24v
dXAsIG1heWJlIG90aGVycyksIGJ1dCB3ZSB3aWxsIG1hdGNoIHRoZSBzdGFuZGFyZCBET00uCi0g
ICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uKCkgY29uc3QgeyByZXR1cm4gbV9idXR0b247IH0KLSAg
ICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0
ZWRUYXJnZXQuZ2V0KCk7IH0KLSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2xpcGJvYXJkLmdldCgpOyB9Ci0gICAgTm9kZSogdG9FbGVtZW50KCkgY29uc3Q7Ci0g
ICAgTm9kZSogZnJvbUVsZW1lbnQoKSBjb25zdDsKLSAgICB2b2lkIGluaXRNb3VzZUV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3KiB2aWV3QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2Rl
KiByZWxhdGVkVGFyZ2V0QXJnKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBp
bnQgd2hpY2goKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9idXR0b247
Ci0gICAgUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gbV9yZWxhdGVkVGFyZ2V0OwotICAgIFJlZlB0
cjxDbGlwYm9hcmQ+IG1fY2xpcGJvYXJkOwotfTsKLQotCi0vLyBJbnRyb2R1Y2VkIGluIERPTSBM
ZXZlbCAzCi1jbGFzcyBLZXlib2FyZEV2ZW50IDogcHVibGljIFVJRXZlbnRXaXRoS2V5U3RhdGUg
ewotcHVibGljOgotICAgIGVudW0gS2V5TG9jYXRpb25Db2RlIHsKLSAgICAgICAgRE9NX0tFWV9M
T0NBVElPTl9TVEFOREFSRCAgICAgID0gMHgwMCwKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9M
RUZUICAgICAgICAgID0gMHgwMSwKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9SSUdIVCAgICAg
ICAgID0gMHgwMiwKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgICAgICAgID0gMHgw
MywKLSAgICB9OwotICAgIEtleWJvYXJkRXZlbnQoKTsKLSAgICBLZXlib2FyZEV2ZW50KGNvbnN0
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYsIEFic3RyYWN0VmlldyopOwotICAgIEtleWJvYXJkRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnVi
YmxlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
ICZrZXlJZGVudGlmaWVyQXJnLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9u
QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICBi
b29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAg
ICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBo
S2V5QXJnKTsKLSAgICB2aXJ0dWFsIH5LZXlib2FyZEV2ZW50KCk7Ci0gICAgCi0gICAgdm9pZCBp
bml0S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAg
ICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxl
QXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAg
ICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAgdW5z
aWduZWQga2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAot
ICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgc2hp
ZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAg
ICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIAotICAgIFN0cmluZyBrZXlJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9rZXlJZGVudGlmaWVyLmdldCgpOyB9Ci0gICAgdW5zaWduZWQg
a2V5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2tleUxvY2F0aW9uOyB9Ci0gICAgCi0gICAg
Ym9vbCBhbHRHcmFwaEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0R3JhcGhLZXk7IH0KLSAgICAK
LSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9rZXlFdmVudDsgfQotCi0gICAgaW50IGtleUNvZGUoKSBjb25zdDsgLy8ga2V5IGNvZGUg
Zm9yIGtleWRvd24gYW5kIGtleXVwLCBjaGFyYWN0ZXIgZm9yIG90aGVyIGV2ZW50cwotICAgIGlu
dCBjaGFyQ29kZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZl
bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogbV9rZXlFdmVudDsKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbV9rZXlJZGVudGlmaWVyOwotICAgIHVuc2lnbmVkIG1fa2V5TG9jYXRpb247Ci0gICAg
Ym9vbCBtX2FsdEdyYXBoS2V5IDogMTsKLX07Ci0KLWNsYXNzIE11dGF0aW9uRXZlbnQgOiBwdWJs
aWMgRXZlbnQgewotcHVibGljOgotICAgIGVudW0gYXR0ckNoYW5nZVR5cGUgeyBNT0RJRklDQVRJ
T04gPSAxLCBBRERJVElPTiA9IDIsIFJFTU9WQUwgPSAzIH07Ci0gICAgTXV0YXRpb25FdmVudCgp
OwotICAgIE11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxhdGVkTm9k
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAgTm9kZSAqcmVsYXRl
ZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWROb2RlLmdldCgpOyB9Ci0gICAgU3RyaW5n
IHByZXZWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJldlZhbHVlLmdldCgpOyB9Ci0gICAgU3Ry
aW5nIG5ld1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uZXdWYWx1ZS5nZXQoKTsgfQotICAgIFN0
cmluZyBhdHRyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ck5hbWUuZ2V0KCk7IH0KLSAgICB1
bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyQ2hhbmdlOyB9
Ci0gICAgdm9pZCBpbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9u
RXZlbnQoKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZE5vZGU7
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcHJldlZhbHVlOwotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBtX25ld1ZhbHVlOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2F0dHJOYW1lOwotICAg
IHVuc2lnbmVkIHNob3J0IG1fYXR0ckNoYW5nZTsKLX07Ci0KLWNsYXNzIENsaXBib2FyZEV2ZW50
IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBDbGlwYm9hcmRFdmVudCgpOwotICAgIENs
aXBib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZywgQ2xpcGJvYXJkICpjbGlwYm9hcmRBcmcpOwotCi0gICAgQ2xp
cGJvYXJkICpjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBib2FyZC5nZXQoKTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci1wcml2YXRlOgotICAg
IFJlZlB0cjxDbGlwYm9hcmQ+IG1fY2xpcGJvYXJkOwotfTsKLQotLy8gZXh0ZW5zaW9uOiBtb3Vz
ZSB3aGVlbCBldmVudAotY2xhc3MgV2hlZWxFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVu
dAotewotcHVibGljOgotICAgIFdoZWVsRXZlbnQoKTsKLSAgICBXaGVlbEV2ZW50KGJvb2wgaG9y
aXpvbnRhbCwgaW50IHdoZWVsRGVsdGEsIEFic3RyYWN0VmlldyAqLAotICAgICAgICAgICAgICAg
ICAgIGludCBzY3JlZW5YQXJnLCBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICBp
bnQgY2xpZW50WEFyZywgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5
QXJnKTsKLSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bDsgfQotICAgIGludCB3aGVlbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbERlbHRhOyB9
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBtX2hvcml6b250YWw7Ci0gICAgaW50IG1fd2hlZWxEZWx0YTsKLX07Ci0KLWNsYXNz
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIDogcHVibGljIFNoYXJlZDxSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lcj4gewotcHVibGljOgotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVz
ZUNhcHR1cmUpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2V2ZW50VHlwZTsgfQotICAgIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyKCkgY29u
c3QgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQotICAgIGJvb2wgdXNlQ2FwdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlQ2FwdHVyZTsgfQotICAgIGJvb2wgcmVtb3ZlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVtb3ZlZDsgfQotICAgIHZvaWQgc2V0UmVtb3ZlZChib29sIHJlbW92ZWQpIHsg
bV9yZW1vdmVkID0gcmVtb3ZlZDsgfQotICAgIAotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcg
bV9ldmVudFR5cGU7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fbGlzdGVuZXI7Ci0gICAg
Ym9vbCBtX3VzZUNhcHR1cmU7Ci0gICAgYm9vbCBtX3JlbW92ZWQ7Ci19OwotCi1ib29sIG9wZXJh
dG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBjb25zdCBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciYpOwotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciYgYSwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGIpIHsgcmV0dXJu
ICEoYSA9PSBiKTsgfQotCi0vLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElFJ3MgZXZlbnRzIGZv
ciBkcmFnIGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCi1jbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMg
U2hhcmVkPENsaXBib2FyZD4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkNsaXBib2FyZCgpOwot
Ci0gICAgLy8gSXMgdGhpcyBvcGVyYXRpb24gYSBkcmFnLWRyb3Agb3IgYSBjb3B5LXBhc3RlPwot
ICAgIHZpcnR1YWwgYm9vbCBpc0ZvckRyYWdnaW5nKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVh
bCBTdHJpbmcgZHJvcEVmZmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJv
cEVmZmVjdChjb25zdCBTdHJpbmcgJnMpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBlZmZlY3RB
bGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRFZmZlY3RBbGxvd2VkKGNv
bnN0IFN0cmluZyAmcykgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhckRhdGEoY29u
c3QgU3RyaW5nICZ0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRGF0YSgpID0g
MDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyAmdHlwZSwgYm9vbCAm
c3VjY2VzcykgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmlu
ZyAmdHlwZSwgY29uc3QgU3RyaW5nICZkYXRhKSA9IDA7Ci0gICAgCi0gICAgLy8gZXh0ZW5zaW9u
cyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmdMaXN0IHR5cGVz
KCkgY29uc3QgPSAwOwotICAgIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgZHJhZ0xv
Y2F0aW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2UqIGRyYWdJbWFnZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotICAgIHZpcnR1YWwgTm9kZSAqZHJhZ0lt
YWdlRWxlbWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChO
b2RlICosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50ICYpID0gMDsKLX07Ci0KLWNsYXNzIEJlZm9y
ZVVubG9hZEV2ZW50IDogcHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgQmVmb3JlVW5sb2Fk
RXZlbnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0
cmluZyByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdC5nZXQoKTsgfQotCi1wcml2YXRl
OgotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX3Jlc3VsdDsKLX07CiAKLX0gLy8gbmFtZXNwYWNl
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIEtleWJvYXJkRXZl
bnRfaApJbmRleDogV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29yZS9kb20v
TW91c2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw5IEBACiAvKioKICAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0g
KiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogKEMpIDIwMDEgVG9iaWFz
IEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMSBU
b2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTIwLDMzOSArMjEsMjkgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkb20yX2V2
ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
Ci0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBFdmVudE5hbWVzOwogCi1FdmVudDo6RXZlbnQoKQotICAgIDogbV9jYW5CdWJibGUo
ZmFsc2UpCi0gICAgLCBtX2NhbmNlbGFibGUoZmFsc2UpCi0gICAgLCBtX3Byb3BhZ2F0aW9uU3Rv
cHBlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdFByZXZlbnRlZChmYWxzZSkKLSAgICAsIG1fZGVm
YXVsdEhhbmRsZWQoZmFsc2UpCi0gICAgLCBtX2NhbmNlbEJ1YmJsZShmYWxzZSkKLSAgICAsIG1f
Y3VycmVudFRhcmdldCgwKQotICAgICwgbV9ldmVudFBoYXNlKDApCi0gICAgLCBtX2NyZWF0ZVRp
bWUoc3RhdGljX2Nhc3Q8RE9NVGltZVN0YW1wPihjdXJyZW50VGltZSgpICogMTAwMC4wKSkKLXsK
LX0KLQotRXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNh
bkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQotICAgIDogbV90eXBlKGV2ZW50VHlwZSkK
LSAgICAsIG1fY2FuQnViYmxlKGNhbkJ1YmJsZUFyZykKLSAgICAsIG1fY2FuY2VsYWJsZShjYW5j
ZWxhYmxlQXJnKQotICAgICwgbV9wcm9wYWdhdGlvblN0b3BwZWQoZmFsc2UpCi0gICAgLCBtX2Rl
ZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRIYW5kbGVkKGZhbHNlKQotICAg
ICwgbV9jYW5jZWxCdWJibGUoZmFsc2UpCi0gICAgLCBtX2N1cnJlbnRUYXJnZXQoMCkKLSAgICAs
IG1fZXZlbnRQaGFzZSgwKQotICAgICwgbV9jcmVhdGVUaW1lKHN0YXRpY19jYXN0PERPTVRpbWVT
dGFtcD4oY3VycmVudFRpbWUoKSAqIDEwMDAuMCkpCi17Ci19Ci0KLUV2ZW50Ojp+RXZlbnQoKQot
ewotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5
cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCi17Ci0gICAgaWYg
KGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90eXBlID0gZXZlbnRUeXBl
QXJnOwotICAgIG1fY2FuQnViYmxlID0gY2FuQnViYmxlQXJnOwotICAgIG1fY2FuY2VsYWJsZSA9
IGNhbmNlbGFibGVBcmc7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzVUlFdmVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAot
ewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNNdXRhdGlvbkV2ZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzS2V5Ym9hcmRF
dmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0Ry
YWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojpp
c0NsaXBib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
RXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEV2ZW50Ojppc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRXZlbnQ6OnN0b3JlUmVzdWx0KGNvbnN0
IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgRXZlbnQ6OnNldFRhcmdldChOb2RlKiB0YXJnZXQpCi17
Ci0gICAgbV90YXJnZXQgPSB0YXJnZXQ7Ci0gICAgaWYgKHRhcmdldCkKLSAgICAgICAgcmVjZWl2
ZWRUYXJnZXQoKTsKLX0KLQotdm9pZCBFdmVudDo6cmVjZWl2ZWRUYXJnZXQoKQotewotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1VSUV2ZW50OjpVSUV2ZW50KCkKLSAgICA6IG1fZGV0
YWlsKDApCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVu
dFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3RyYWN0Vmll
dyAqdmlld0FyZywgaW50IGRldGFpbEFyZykKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwgY2FuQnVi
YmxlQXJnLCBjYW5jZWxhYmxlQXJnKQotICAgICwgbV92aWV3KHZpZXdBcmcpCi0gICAgLCBtX2Rl
dGFpbChkZXRhaWxBcmcpCi17Ci19Ci0KLXZvaWQgVUlFdmVudDo6aW5pdFVJRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNl
bGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZp
ZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnKQotewot
ICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRFdmVudCh0
eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOwotCi0gICAgbV92aWV3ID0gdmll
d0FyZzsKLSAgICBtX2RldGFpbCA9IGRldGFpbEFyZzsKLX0KLQotYm9vbCBVSUV2ZW50Ojppc1VJ
RXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgVUlFdmVudDo6a2V5
Q29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpjaGFyQ29k
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpsYXllclgoKSBj
b25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6bGF5ZXJZKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VYKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VZKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNl
UmVsYXRlZEV2ZW50KCkKLSAgICA6IG1fc2NyZWVuWCgwKSwgbV9zY3JlZW5ZKDApLCBtX2NsaWVu
dFgoMCksIG1fY2xpZW50WSgwKQotICAgICwgbV9wYWdlWCgwKSwgbV9wYWdlWSgwKSwgbV9sYXll
clgoMCksIG1fbGF5ZXJZKDApLCBtX29mZnNldFgoMCksIG1fb2Zmc2V0WSgwKSwgbV9pc1NpbXVs
YXRlZChmYWxzZSkKLXsKLX0KLQotTW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNlUmVsYXRlZEV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl
dGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtl
eUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCkKLSAgICA6IFVJ
RXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcs
IHZpZXdBcmcsIGRldGFpbEFyZywKLSAgICAgICAgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlm
dEtleUFyZywgbWV0YUtleUFyZykKLSAgICAsIG1fc2NyZWVuWChzY3JlZW5YQXJnKSwgbV9zY3Jl
ZW5ZKHNjcmVlbllBcmcpCi0gICAgLCBtX2NsaWVudFgoY2xpZW50WEFyZyksIG1fY2xpZW50WShj
bGllbnRZQXJnKQotICAgICwgbV9pc1NpbXVsYXRlZChpc1NpbXVsYXRlZCkKLXsKLSAgICBpbml0
Q29vcmRpbmF0ZXMoKTsKLX0KLQotdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6aW5pdENvb3JkaW5h
dGVzKCkKLXsKLSAgICAvLyBTZXQgdXAgaW5pdGlhbCB2YWx1ZXMgZm9yIGNvb3JkaW5hdGVzLgot
ICAgIC8vIENvcnJlY3QgdmFsdWVzIGNhbid0IGJlIGNvbXB1dGVkIHVudGlsIHdlIGhhdmUgYXQg
dGFyZ2V0LCBzbyByZWNlaXZlZFRhcmdldAotICAgIC8vIGRvZXMgdGhlICJyZWFsIiBjb21wdXRh
dGlvbi4KLSAgICBtX3BhZ2VYID0gbV9jbGllbnRYOwotICAgIG1fcGFnZVkgPSBtX2NsaWVudFk7
Ci0gICAgbV9sYXllclggPSBtX3BhZ2VYOwotICAgIG1fbGF5ZXJZID0gbV9wYWdlWTsKLSAgICBt
X29mZnNldFggPSBtX3BhZ2VYOwotICAgIG1fb2Zmc2V0WSA9IG1fcGFnZVk7Ci19Ci0KLXZvaWQg
TW91c2VSZWxhdGVkRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KCkKLXsKLSAgICAvLyBDb21wdXRlIGNv
b3JkaW5hdGVzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSB0YXJnZXQuCi0gICAgbV9vZmZzZXRYID0g
bV9wYWdlWDsKLSAgICBtX29mZnNldFkgPSBtX3BhZ2VZOwotICAgIG1fbGF5ZXJYID0gbV9wYWdl
WDsgICAgCi0gICAgbV9sYXllclkgPSBtX3BhZ2VZOyAgICAKLQotICAgIE5vZGUqIHRhcmcgPSB0
YXJnZXQoKTsKLSAgICBBU1NFUlQodGFyZyk7Ci0KLSAgICAvLyBNdXN0IGhhdmUgYW4gdXBkYXRl
ZCByZW5kZXIgdHJlZSBmb3IgdGhpcyBtYXRoIHRvIHdvcmsgY29ycmVjdGx5LgotICAgIHRhcmct
PmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwotCi0gICAgLy8gRklYTUU6IGNsaWVudFgv
WSBzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFzIHBhZ2VYL1khCi0gICAgLy8gQ3VycmVudGx5IHRo
ZSBwYXNzZWQtaW4gY2xpZW50WCBhbmQgY2xpZW50WSBhcmUgaW5jb3JyZWN0bHkgYWN0dWFsbHkK
LSAgICAvLyBwYWdlWCBhbmQgcGFnZVkgdmFsdWVzLCBzbyB3ZSBkb24ndCBoYXZlIGFueSB3b3Jr
IHRvIGRvIGhlcmUsIGJ1dCBpZgotICAgIC8vIHdlIHN0YXJ0ZWQgcGFzc2luZyBpbiBjb3JyZWN0
IGNsaWVudFggYW5kIGNsaWVudFksIHdlJ2Qgd2FudCB0byBjb21wdXRlCi0gICAgLy8gcGFnZVgg
YW5kIHBhZ2VZIGhlcmUuCi0KLSAgICAvLyBBZGp1c3Qgb2Zmc2V0WC9ZIHRvIGJlIHJlbGF0aXZl
IHRvIHRoZSB0YXJnZXQncyBwb3NpdGlvbi4KLSAgICBpZiAoIWlzU2ltdWxhdGVkKCkpIHsKLSAg
ICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IHRhcmctPnJlbmRlcmVyKCkpIHsKLSAgICAgICAg
ICAgIGludCByeCwgcnk7Ci0gICAgICAgICAgICBpZiAoci0+YWJzb2x1dGVQb3NpdGlvbihyeCwg
cnkpKSB7Ci0gICAgICAgICAgICAgICAgbV9vZmZzZXRYIC09IHJ4OwotICAgICAgICAgICAgICAg
IG1fb2Zmc2V0WSAtPSByeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIEFkanVzdCBsYXllclgvWSB0byBiZSByZWxhdGl2ZSB0byB0aGUgbGF5ZXIuCi0gICAgLy8g
RklYTUU6IFdlJ3JlIHByZXR0eSBzdXJlIHRoaXMgaXMgdGhlIHdyb25nIGRlZmludGlvbiBvZiAi
bGF5ZXIuIgotICAgIC8vIE91ciBSZW5kZXJMYXllciBpcyBhIG1vcmUgbW9kZXJuIGNvbmNlcHQs
IGFuZCBsYXllclgvWSBpcyBzb21lCi0gICAgLy8gb3RoZXIgbm90aW9uIGFib3V0IGdyb3VwcyBv
ZiBlbGVtZW50czsgd2Ugc2hvdWxkIHRlc3QgYW5kIGZpeCB0aGlzLgotICAgIE5vZGUqIG4gPSB0
YXJnOwotICAgIHdoaWxlIChuICYmICFuLT5yZW5kZXJlcigpKQotICAgICAgICBuID0gbi0+cGFy
ZW50KCk7Ci0gICAgaWYgKG4pIHsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbi0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUG9z
aXRpb24oKTsKLSAgICAgICAgZm9yICg7IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkg
ewotICAgICAgICAgICAgbV9sYXllclggLT0gbGF5ZXItPnhQb3MoKTsKLSAgICAgICAgICAgIG1f
bGF5ZXJZIC09IGxheWVyLT55UG9zKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWludCBNb3Vz
ZVJlbGF0ZWRFdmVudDo6cGFnZVgoKSBjb25zdAotewotICAgIHJldHVybiBtX3BhZ2VYOwotfQot
Ci1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnBhZ2VZKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
YWdlWTsKLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2ZW50Ojp4KCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBub3QgY29ycmVjdC4KLSAgICAvLyBTZWUgTWljcm9zb2Z0IGRvY3VtZW50
YXRpb24gYW5kIDxodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS93M2NfZXZlbnRzLmh0bWw+
LgotICAgIHJldHVybiBtX2NsaWVudFg7Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVudDo6eSgp
IGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvcnJlY3QuCi0gICAgLy8gU2Vl
IE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIGFuZCA8aHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9k
b20vdzNjX2V2ZW50cy5odG1sPi4KLSAgICByZXR1cm4gbV9jbGllbnRZOwotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCiBNb3VzZUV2ZW50OjpNb3VzZUV2ZW50KCkKICAgICA6IG1fYnV0
dG9uKDApCiB7CiB9CiAKLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
bGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0QXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCogY2xpcGJvYXJkQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQpCi0gICAgOiBNb3VzZVJlbGF0
ZWRFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywg
ZGV0YWlsQXJnLAotICAgICAgICBzY3JlZW5YQXJnLCBzY3JlZW5ZQXJnLCBjbGllbnRYQXJnLCBj
bGllbnRZQXJnLAotICAgICAgICBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBt
ZXRhS2V5QXJnLCBpc1NpbXVsYXRlZCkKLSAgICAsIG1fYnV0dG9uKGJ1dHRvbkFyZykKLSAgICAs
IG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0QXJnKQotICAgICwgbV9jbGlwYm9hcmQoY2xp
cGJvYXJkQXJnKQorTW91c2VFdmVudDo6TW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgQWJzdHJhY3RWaWV3KiB2
aWV3LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50
IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5
LCB1bnNpZ25lZCBzaG9ydCBidXR0b24sCisgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFy
Z2V0Tm9kZSogcmVsYXRlZFRhcmdldCwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIGJvb2wgaXNTaW11
bGF0ZWQpCisgICAgOiBNb3VzZVJlbGF0ZWRFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZSwgY2Fu
Y2VsYWJsZSwgdmlldywgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY2xpZW50WCwgY2xpZW50WSwgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0
YUtleSwgaXNTaW11bGF0ZWQpCisgICAgLCBtX2J1dHRvbihidXR0b24pCisgICAgLCBtX3JlbGF0
ZWRUYXJnZXQocmVsYXRlZFRhcmdldCkKKyAgICAsIG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKIHsK
IH0KIApAQCAtMzYwLDM3ICs1MSwyNiBAQCBNb3VzZUV2ZW50Ojp+TW91c2VFdmVudCgpCiB7CiB9
CiAKLXZvaWQgTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcq
IHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWls
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpCit2
b2lkIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwg
Ym9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgQWJzdHJhY3RWaWV3KiB2aWV3LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50
IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9v
bCBtZXRhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBidXR0b24sIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCkKIHsKICAgICBpZiAoZGlz
cGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbml0VUlFdmVudCh0eXBlQXJnLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZyk7CisgICAgaW5p
dFVJRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCBkZXRhaWwpOwogCi0g
ICAgbV9zY3JlZW5YID0gc2NyZWVuWEFyZzsKLSAgICBtX3NjcmVlblkgPSBzY3JlZW5ZQXJnOwot
ICAgIG1fY2xpZW50WCA9IGNsaWVudFhBcmc7Ci0gICAgbV9jbGllbnRZID0gY2xpZW50WUFyZzsK
LSAgICBtX2N0cmxLZXkgPSBjdHJsS2V5QXJnOwotICAgIG1fYWx0S2V5ID0gYWx0S2V5QXJnOwot
ICAgIG1fc2hpZnRLZXkgPSBzaGlmdEtleUFyZzsKLSAgICBtX21ldGFLZXkgPSBtZXRhS2V5QXJn
OwotICAgIG1fYnV0dG9uID0gYnV0dG9uQXJnOwotICAgIG1fcmVsYXRlZFRhcmdldCA9IHJlbGF0
ZWRUYXJnZXRBcmc7CisgICAgbV9zY3JlZW5YID0gc2NyZWVuWDsKKyAgICBtX3NjcmVlblkgPSBz
Y3JlZW5ZOworICAgIG1fY2xpZW50WCA9IGNsaWVudFg7CisgICAgbV9jbGllbnRZID0gY2xpZW50
WTsKKyAgICBtX2N0cmxLZXkgPSBjdHJsS2V5OworICAgIG1fYWx0S2V5ID0gYWx0S2V5OworICAg
IG1fc2hpZnRLZXkgPSBzaGlmdEtleTsKKyAgICBtX21ldGFLZXkgPSBtZXRhS2V5OworICAgIG1f
YnV0dG9uID0gYnV0dG9uOworICAgIG1fcmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXQ7CiAK
ICAgICBpbml0Q29vcmRpbmF0ZXMoKTsKIH0KQEAgLTQwMiwxMCArODIsOSBAQCBib29sIE1vdXNl
RXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0CiAKIGJvb2wgTW91c2VFdmVudDo6aXNEcmFnRXZl
bnQoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyAmdCA9IHR5cGUoKTsKLSAgICBy
ZXR1cm4gdCA9PSBkcmFnZW50ZXJFdmVudCB8fCB0ID09IGRyYWdvdmVyRXZlbnQgfHwgdCA9PSBk
cmFnbGVhdmVFdmVudAotICAgICAgICB8fCB0ID09IGRyb3BFdmVudAotICAgICAgICB8fCB0ID09
IGRyYWdzdGFydEV2ZW50IHx8IHQgPT0gZHJhZ0V2ZW50IHx8IHQgPT0gZHJhZ2VuZEV2ZW50Owor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdCA9IHR5cGUoKTsKKyAgICByZXR1cm4gdCA9PSBkcmFn
ZW50ZXJFdmVudCB8fCB0ID09IGRyYWdvdmVyRXZlbnQgfHwgdCA9PSBkcmFnbGVhdmVFdmVudCB8
fCB0ID09IGRyb3BFdmVudAorICAgICAgICAgICAgICAgfHwgdCA9PSBkcmFnc3RhcnRFdmVudHx8
IHQgPT0gZHJhZ0V2ZW50IHx8IHQgPT0gZHJhZ2VuZEV2ZW50OwogfQogCiBpbnQgTW91c2VFdmVu
dDo6d2hpY2goKSBjb25zdApAQCAtNDE5LDIzNiArOTgsMTMgQEAgaW50IE1vdXNlRXZlbnQ6Ondo
aWNoKCkgY29uc3QKIE5vZGUqIE1vdXNlRXZlbnQ6OnRvRWxlbWVudCgpIGNvbnN0CiB7CiAgICAg
Ly8gTVNJRSBleHRlbnNpb24gLSAidGhlIG9iamVjdCB0b3dhcmQgd2hpY2ggdGhlIHVzZXIgaXMg
bW92aW5nIHRoZSBtb3VzZSBwb2ludGVyIgotICAgIHJldHVybiB0eXBlKCkgPT0gbW91c2VvdXRF
dmVudCA/IHJlbGF0ZWRUYXJnZXQoKSA6IHRhcmdldCgpOworICAgIHJldHVybiAodHlwZSgpID09
IG1vdXNlb3V0RXZlbnQpID8gcmVsYXRlZFRhcmdldCgpIDogdGFyZ2V0KCk7CiB9CiAKIE5vZGUq
IE1vdXNlRXZlbnQ6OmZyb21FbGVtZW50KCkgY29uc3QKIHsKICAgICAvLyBNU0lFIGV4dGVuc2lv
biAtICJvYmplY3QgZnJvbSB3aGljaCBhY3RpdmF0aW9uIG9yIHRoZSBtb3VzZSBwb2ludGVyIGlz
IGV4aXRpbmcgZHVyaW5nIHRoZSBldmVudCIgKGh1aD8pCi0gICAgcmV0dXJuIHR5cGUoKSA9PSBt
b3VzZW91dEV2ZW50ID8gdGFyZ2V0KCkgOiByZWxhdGVkVGFyZ2V0KCk7Ci19Ci0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJk
RXZlbnQoKQotICA6IG1fa2V5RXZlbnQoMCkKLSAgLCBtX2tleUxvY2F0aW9uKERPTV9LRVlfTE9D
QVRJT05fU1RBTkRBUkQpCi0gICwgbV9hbHRHcmFwaEtleShmYWxzZSkKLXsKLX0KLQotS2V5Ym9h
cmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleSwg
QWJzdHJhY3RWaWV3ICp2aWV3KQotICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoa2V5LmlzS2V5VXAo
KSA/IGtleXVwRXZlbnQgOiBrZXkuaXNBdXRvUmVwZWF0KCkgPyBrZXlwcmVzc0V2ZW50IDoga2V5
ZG93bkV2ZW50LAotICAgIHRydWUsIHRydWUsIHZpZXcsIDAsIGtleS5jdHJsS2V5KCksIGtleS5h
bHRLZXkoKSwga2V5LnNoaWZ0S2V5KCksIGtleS5tZXRhS2V5KCkpCi0gICwgbV9rZXlFdmVudChu
ZXcgUGxhdGZvcm1LZXlib2FyZEV2ZW50KGtleSkpCi0gICwgbV9rZXlJZGVudGlmaWVyKFN0cmlu
ZyhrZXkua2V5SWRlbnRpZmllcigpKS5pbXBsKCkpCi0gICwgbV9rZXlMb2NhdGlvbihrZXkuaXNL
ZXlwYWQoKSA/IERPTV9LRVlfTE9DQVRJT05fTlVNUEFEIDogRE9NX0tFWV9MT0NBVElPTl9TVEFO
REFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5KGZhbHNlKQotewotfQotCi1LZXlib2FyZEV2ZW50OjpL
ZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
a2V5SWRlbnRpZmllckFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQga2V5TG9jYXRpb25BcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZykKLSAgOiBVSUV2ZW50V2l0
aEtleVN0YXRlKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJn
LCAwLCBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnKQotICAs
IG1fa2V5RXZlbnQoMCkKLSAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckFyZy5pbXBs
KCkpCi0gICwgbV9rZXlMb2NhdGlvbihrZXlMb2NhdGlvbkFyZykKLSAgLCBtX2FsdEdyYXBoS2V5
KGFsdEdyYXBoS2V5QXJnKQotewotfQotCi1LZXlib2FyZEV2ZW50Ojp+S2V5Ym9hcmRFdmVudCgp
Ci17Ci0gICAgZGVsZXRlIG1fa2V5RXZlbnQ7Ci19Ci0KLXZvaWQgS2V5Ym9hcmRFdmVudDo6aW5p
dEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcg
KnZpZXdBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZrZXlJZGVu
dGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9u
QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNoaWZ0S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtl
eUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKQotewot
ICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRVSUV2ZW50
KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgMCk7Ci0KLSAg
ICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyQXJnLmltcGwoKTsKLSAgICBtX2tleUxv
Y2F0aW9uID0ga2V5TG9jYXRpb25Bcmc7Ci0gICAgbV9jdHJsS2V5ID0gY3RybEtleUFyZzsKLSAg
ICBtX3NoaWZ0S2V5ID0gc2hpZnRLZXlBcmc7Ci0gICAgbV9hbHRLZXkgPSBhbHRLZXlBcmc7Ci0g
ICAgbV9tZXRhS2V5ID0gbWV0YUtleUFyZzsKLSAgICBtX2FsdEdyYXBoS2V5ID0gYWx0R3JhcGhL
ZXlBcmc7Ci19Ci0KLWludCBLZXlib2FyZEV2ZW50OjprZXlDb2RlKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fa2V5RXZlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh0eXBlKCkgPT0ga2V5
ZG93bkV2ZW50IHx8IHR5cGUoKSA9PSBrZXl1cEV2ZW50KQotICAgICAgICByZXR1cm4gbV9rZXlF
dmVudC0+V2luZG93c0tleUNvZGUoKTsKLSAgICByZXR1cm4gY2hhckNvZGUoKTsKLX0KLQotaW50
IEtleWJvYXJkRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fa2V5RXZlbnQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIFN0cmluZyB0ZXh0ID0gbV9rZXlFdmVudC0+dGV4dCgp
OwotICAgIGlmICh0ZXh0Lmxlbmd0aCgpICE9IDEpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiB0ZXh0WzBdOwotfQotCi1ib29sIEtleWJvYXJkRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICh0eXBlKCkgPT0gbW91c2Vv
dXRFdmVudCkgPyB0YXJnZXQoKSA6IHJlbGF0ZWRUYXJnZXQoKTsKIH0KIAotaW50IEtleWJvYXJk
RXZlbnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICAvLyBOZXRzY2FwZSdzICJ3aGljaCIgcmV0dXJu
cyBhIHZpcnR1YWwga2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBhbmQgYSBjaGFyYWN0
ZXIgY29kZSBmb3Iga2V5cHJlc3MuCi0gICAgLy8gVGhhdCdzIGV4YWN0bHkgd2hhdCBJRSdzICJr
ZXlDb2RlIiByZXR1cm5zLiBTbyB0aGV5IGFyZSB0aGUgc2FtZSBmb3Iga2V5Ym9hcmQgZXZlbnRz
LgotICAgIHJldHVybiBrZXlDb2RlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoKQotICAgIDogbV9hdHRyQ2hhbmdlKDApCi17
Ci19Ci0KLU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZl
dmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5C
dWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJl
bGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQotICAgIDog
RXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3Jl
bGF0ZWROb2RlKHJlbGF0ZWROb2RlQXJnKQotICAgICwgbV9wcmV2VmFsdWUocHJldlZhbHVlQXJn
LmltcGwoKSkKLSAgICAsIG1fbmV3VmFsdWUobmV3VmFsdWVBcmcuaW1wbCgpKQotICAgICwgbV9h
dHRyTmFtZShhdHRyTmFtZUFyZy5pbXBsKCkpCi0gICAgLCBtX2F0dHJDaGFuZ2UoYXR0ckNoYW5n
ZUFyZykKLXsKLX0KLQotdm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChjb25z
dCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcg
Jm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCi17Ci0gICAgaWYgKGRp
c3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdEV2ZW50KHR5cGVBcmcsIGNh
bkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICBtX3JlbGF0ZWROb2RlID0gcmVsYXRl
ZE5vZGVBcmc7Ci0gICAgbV9wcmV2VmFsdWUgPSBwcmV2VmFsdWVBcmcuaW1wbCgpOwotICAgIG1f
bmV3VmFsdWUgPSBuZXdWYWx1ZUFyZy5pbXBsKCk7Ci0gICAgbV9hdHRyTmFtZSA9IGF0dHJOYW1l
QXJnLmltcGwoKTsKLSAgICBtX2F0dHJDaGFuZ2UgPSBhdHRyQ2hhbmdlQXJnOwotfQotCi1ib29s
IE11dGF0aW9uRXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNsaXBib2FyZEV2ZW50OjpDbGlw
Ym9hcmRFdmVudCgpCi17Ci19Ci0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2Vs
YWJsZUFyZywgQ2xpcGJvYXJkICpjbGlwYm9hcmRBcmcpCi0gICAgOiBFdmVudChldmVudFR5cGUs
IGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyksIG1fY2xpcGJvYXJkKGNsaXBib2FyZEFyZykK
LXsKLX0KLQotYm9vbCBDbGlwYm9hcmRFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoZWVs
RXZlbnQ6OldoZWVsRXZlbnQoKSA6IG1faG9yaXpvbnRhbChmYWxzZSksIG1fd2hlZWxEZWx0YSgw
KQotewotfQotCi1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGJvb2wgaCwgaW50IGQsIEFic3RyYWN0
VmlldyAqdiwKLSAgICBpbnQgc3gsIGludCBzeSwgaW50IGN4LCBpbnQgY3ksIGJvb2wgY3RybCwg
Ym9vbCBhbHQsIGJvb2wgc2hpZnQsIGJvb2wgbWV0YSkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50
KGggPyBraHRtbEhvcml6b250YWxtb3VzZXdoZWVsRXZlbnQgOiBtb3VzZXdoZWVsRXZlbnQsCi0g
ICAgICAgIHRydWUsIHRydWUsIHYsIDAsIHN4LCBzeSwgY3gsIGN5LCBjdHJsLCBhbHQsIHNoaWZ0
LCBtZXRhKQotICAgICwgbV9ob3Jpem9udGFsKGgpLCBtX3doZWVsRGVsdGEoZCkKLXsKLX0KLQot
Ym9vbCBXaGVlbEV2ZW50Ojppc1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVl
OwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
cjo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUs
IFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKLSAg
ICA6IG1fZXZlbnRUeXBlKGV2ZW50VHlwZSkKLSAgICAsIG1fbGlzdGVuZXIobGlzdGVuZXIpCi0g
ICAgLCBtX3VzZUNhcHR1cmUodXNlQ2FwdHVyZSkKLSAgICAsIG1fcmVtb3ZlZChmYWxzZSkKLXsK
LX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZhLCBj
b25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAmYikKLXsKLSAgICByZXR1cm4gYS5ldmVudFR5
cGUoKSA9PSBiLmV2ZW50VHlwZSgpICYmIGEubGlzdGVuZXIoKSA9PSBiLmxpc3RlbmVyKCkgJiYg
YS51c2VDYXB0dXJlKCkgPT0gYi51c2VDYXB0dXJlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLUNsaXBib2FyZDo6fkNsaXBib2FyZCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLUJlZm9yZVVubG9hZEV2ZW50OjpCZWZvcmVVbmxvYWRFdmVudCgpCi0gICAg
OiBFdmVudChiZWZvcmV1bmxvYWRFdmVudCwgZmFsc2UsIHRydWUpCi17Ci19Ci0KLWJvb2wgQmVm
b3JlVW5sb2FkRXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBCZWZvcmVVbmxvYWRFdmVudDo6c3RvcmVSZXN1bHQoY29uc3Qg
U3RyaW5nJiBzKQotewotICAgIG1fcmVzdWx0ID0gcy5pbXBsKCk7Ci19Ci0KLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmgJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29y
ZS9kb20vTW91c2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAq
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJp
Z2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRl
KQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwu
Y29tKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsNDU4ICsyMyw0OSBAQAogICoKICAqLwogCi0j
aWZuZGVmIERPTV9FVkVOVFNJTVBMX0gKLSNkZWZpbmUgRE9NX0VWRU5UU0lNUExfSAorI2lmbmRl
ZiBNb3VzZUV2ZW50X2gKKyNkZWZpbmUgTW91c2VFdmVudF9oCiAKLSNpbmNsdWRlICJBdG9taWNT
dHJpbmcuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0KLWNs
YXNzIERlcHJlY2F0ZWRTdHJpbmdMaXN0OworI2luY2x1ZGUgIkNsaXBib2FyZC5oIgorI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0Tm9kZS5oIgorI2luY2x1ZGUgIk1vdXNlUmVsYXRlZEV2ZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDbGlwYm9h
cmQ7Ci1jbGFzcyBFdmVudExpc3RlbmVyOwotY2xhc3MgRXZlbnRUYXJnZXROb2RlOwotY2xhc3Mg
SW1hZ2U7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKLQot
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgRE9NVGltZVN0YW1wOwotdHlwZWRlZiBET01XaW5k
b3cgQWJzdHJhY3RWaWV3OwotCi1jb25zdCBpbnQgRXZlbnRFeGNlcHRpb25PZmZzZXQgPSAxMDA7
Ci1jb25zdCBpbnQgRXZlbnRFeGNlcHRpb25NYXggPSAxOTk7Ci1lbnVtIEV2ZW50RXhjZXB0aW9u
Q29kZSB7IFVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSID0gRXZlbnRFeGNlcHRpb25PZmZzZXQg
fTsKLQotY2xhc3MgRXZlbnQgOiBwdWJsaWMgU2hhcmVkPEV2ZW50PgotewotcHVibGljOgotICAg
IGVudW0gUGhhc2VUeXBlIHsgCi0gICAgICAgIENBUFRVUklOR19QSEFTRSA9IDEsIAotICAgICAg
ICBBVF9UQVJHRVQgPSAyLCAKLSAgICAgICAgQlVCQkxJTkdfUEhBU0UgPSAzIAotICAgIH07Ci0K
LSAgICAvLyBSZXZlcnNlLWVuZ2luZWVyZWQgZnJvbSBOZXRzY2FwZQotICAgIGVudW0gRXZlbnRU
eXBlIHsKLSAgICAgICAgTU9VU0VET1dOICAgICAgICAgICA9IDEsCi0gICAgICAgIE1PVVNFVVAg
ICAgICAgICAgICAgPSAyLAotICAgICAgICBNT1VTRU9WRVIgICAgICAgICAgID0gNCwKLSAgICAg
ICAgTU9VU0VPVVQgICAgICAgICAgICA9IDgsCi0gICAgICAgIE1PVVNFTU9WRSAgICAgICAgICAg
PSAxNiwKLSAgICAgICAgTU9VU0VEUkFHICAgICAgICAgICA9IDMyLAotICAgICAgICBDTElDSyAg
ICAgICAgICAgICAgID0gNjQsCi0gICAgICAgIERCTENMSUNLICAgICAgICAgICAgPSAxMjgsCi0g
ICAgICAgIEtFWURPV04gICAgICAgICAgICAgPSAyNTYsCi0gICAgICAgIEtFWVVQICAgICAgICAg
ICAgICAgPSA1MTIsCi0gICAgICAgIEtFWVBSRVNTICAgICAgICAgICAgPSAxMDI0LAotICAgICAg
ICBEUkFHRFJPUCAgICAgICAgICAgID0gMjA0OCwKLSAgICAgICAgRk9DVVMgICAgICAgICAgICAg
ICA9IDQwOTYsCi0gICAgICAgIEJMVVIgICAgICAgICAgICAgICAgPSA4MTkyLAotICAgICAgICBT
RUxFQ1QgICAgICAgICAgICAgID0gMTYzODQsCi0gICAgICAgIENIQU5HRSAgICAgICAgICAgICAg
PSAzMjc2OAotICAgIH07Ci0gICAgCi0gICAgRXZlbnQoKTsKLSAgICBFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpOwot
ICAgIHZpcnR1YWwgfkV2ZW50KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBOb2RlKiB0YXJnZXQoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KE5vZGUqKTsKLSAgICBOb2Rl
KiBjdXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9Ci0gICAg
dm9pZCBzZXRDdXJyZW50VGFyZ2V0KE5vZGUqIGN1cnJlbnRUYXJnZXQpIHsgbV9jdXJyZW50VGFy
Z2V0ID0gY3VycmVudFRhcmdldDsgfQotICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBj
b25zdCB7IHJldHVybiBtX2V2ZW50UGhhc2U7IH0KLSAgICB2b2lkIHNldEV2ZW50UGhhc2UodW5z
aWduZWQgc2hvcnQgZXZlbnRQaGFzZSkgeyBtX2V2ZW50UGhhc2UgPSBldmVudFBoYXNlOyB9Ci0g
ICAgYm9vbCBidWJibGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW5CdWJibGU7IH0KLSAgICBib29s
IGNhbmNlbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGFibGU7IH0KLSAgICBET01UaW1l
U3RhbXAgdGltZVN0YW1wKCkgeyByZXR1cm4gbV9jcmVhdGVUaW1lOyB9Ci0gICAgdm9pZCBzdG9w
UHJvcGFnYXRpb24oKSB7IG1fcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsgfQotICAgIHZvaWQg
cHJldmVudERlZmF1bHQoKSB7IGlmIChtX2NhbmNlbGFibGUpIG1fZGVmYXVsdFByZXZlbnRlZCA9
IHRydWU7IH0KLSAgICB2b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlw
ZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVu
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGlzRHJhZ0V2ZW50KCkgY29uc3Q7IC8vIGEgc3Vic2V0IG9mIG1vdXNlIGV2ZW50cwotICAgIHZp
cnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
V2hlZWxFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIHByb3BhZ2F0aW9uU3RvcHBlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvcGFnYXRpb25TdG9wcGVkOyB9Ci0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVk
KCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UHJldmVudGVkOyB9Ci0KLSAgICB2b2lkIHNldERl
ZmF1bHRIYW5kbGVkKCkgeyBtX2RlZmF1bHRIYW5kbGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgZGVm
YXVsdEhhbmRsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRIYW5kbGVkOyB9Ci0KLSAgICB2
b2lkIHNldENhbmNlbEJ1YmJsZShib29sIGNhbmNlbCkgeyBtX2NhbmNlbEJ1YmJsZSA9IGNhbmNl
bDsgfQotICAgIHZvaWQgc2V0RGVmYXVsdFByZXZlbnRlZChib29sIGRlZmF1bHRQcmV2ZW50ZWQp
IHsgbV9kZWZhdWx0UHJldmVudGVkID0gZGVmYXVsdFByZXZlbnRlZDsgfQotICAgIGJvb2wgZ2V0
Q2FuY2VsQnViYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxCdWJibGU7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlZFRhcmdldCgpOwotICAgIGJvb2wgZGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGFyZ2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fdHlwZTsKLSAg
ICBib29sIG1fY2FuQnViYmxlOwotICAgIGJvb2wgbV9jYW5jZWxhYmxlOwotCi0gICAgYm9vbCBt
X3Byb3BhZ2F0aW9uU3RvcHBlZDsKLSAgICBib29sIG1fZGVmYXVsdFByZXZlbnRlZDsKLSAgICBi
b29sIG1fZGVmYXVsdEhhbmRsZWQ7Ci0gICAgYm9vbCBtX2NhbmNlbEJ1YmJsZTsKLQotICAgIE5v
ZGUqIG1fY3VycmVudFRhcmdldDsgLy8gcmVmID4gMCBtYWludGFpbmVkIGV4dGVybmFsbHkKLSAg
ICB1bnNpZ25lZCBzaG9ydCBtX2V2ZW50UGhhc2U7Ci0gICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0
OwotICAgIERPTVRpbWVTdGFtcCBtX2NyZWF0ZVRpbWU7Ci19OwotCi1jbGFzcyBVSUV2ZW50IDog
cHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgVUlFdmVudCgpOwotICAgIFVJRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJn
LAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICBB
YnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7Ci0g
ICAgQWJzdHJhY3RWaWV3ICp2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3LmdldCgpOyB9Ci0g
ICAgaW50IGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9Ci0gICAgdm9pZCBpbml0
VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAg
ICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZl
bnQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGtleUNvZGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGludCBjaGFyQ29kZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgbGF5ZXJYKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBpbnQgbGF5ZXJZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBw
YWdlWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIGludCB3aGljaCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBYnN0cmFjdFZp
ZXc+IG1fdmlldzsKLSAgICBpbnQgbV9kZXRhaWw7Ci19OwotCi1jbGFzcyBVSUV2ZW50V2l0aEtl
eVN0YXRlIDogcHVibGljIFVJRXZlbnQgewotcHVibGljOgotICAgIFVJRXZlbnRXaXRoS2V5U3Rh
dGUoKSA6IG1fY3RybEtleShmYWxzZSksIG1fYWx0S2V5KGZhbHNlKSwgbV9zaGlmdEtleShmYWxz
ZSksIG1fbWV0YUtleShmYWxzZSkgeyB9Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZShjb25zdCBB
dG9taWNTdHJpbmcgJnR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcs
IEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgaW50IGRldGFpbEFyZywgYm9vbCBjdHJs
S2V5QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5QXJn
KQotICAgICAgICA6IFVJRXZlbnQodHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2
aWV3QXJnLCBkZXRhaWxBcmcpCi0gICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXlBcmcpLCBtX2Fs
dEtleShhbHRLZXlBcmcpLCBtX3NoaWZ0S2V5KHNoaWZ0S2V5QXJnKSwgbV9tZXRhS2V5KG1ldGFL
ZXlBcmcpIHsgfQotCi0gICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5
OyB9Ci0gICAgYm9vbCBzaGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAg
ICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9Ci0gICAgYm9vbCBtZXRh
S2V5KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9Ci0KLXByb3RlY3RlZDogLy8gZXhwb3Nl
IHRoZXNlIHNvIGluaXQgZnVuY3Rpb25zIGNhbiBzZXQgdGhlbQotICAgIGJvb2wgbV9jdHJsS2V5
IDogMTsKLSAgICBib29sIG1fYWx0S2V5IDogMTsKLSAgICBib29sIG1fc2hpZnRLZXkgOiAxOwot
ICAgIGJvb2wgbV9tZXRhS2V5IDogMTsKLX07Ci0KLS8vIEludGVybmFsIG9ubHk6IEhlbHBlciBj
bGFzcyBmb3Igd2hhdCdzIGNvbW1vbiBiZXR3ZWVuIG1vdXNlIGFuZCB3aGVlbCBldmVudHMuCi1j
bGFzcyBNb3VzZVJlbGF0ZWRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1
YmxpYzoKLSAgICBNb3VzZVJlbGF0ZWRFdmVudCgpOwotICAgIE1vdXNlUmVsYXRlZEV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNj
cmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIGludCBzY3JlZW5Y
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5YOyB9Ci0gICAgaW50IHNjcmVlblkoKSBjb25zdCB7
IHJldHVybiBtX3NjcmVlblk7IH0KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50WDsgfQotICAgIGludCBjbGllbnRZKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRZOyB9
Ci0gICAgaW50IGxheWVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJYOyB9Ci0gICAgaW50IGxh
eWVyWSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJZOyB9Ci0gICAgaW50IG9mZnNldFgoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldFg7IH0KLSAgICBpbnQgb2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0WTsgfQotICAgIGJvb2wgaXNTaW11bGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
U2ltdWxhdGVkOyB9Ci0gICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBwYWdlWSgpIGNvbnN0OwotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25z
dDsKLXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2
ZW50IGNhbiBzZXQgdGhlbQotICAgIGludCBtX3NjcmVlblg7Ci0gICAgaW50IG1fc2NyZWVuWTsK
LSAgICBpbnQgbV9jbGllbnRYOwotICAgIGludCBtX2NsaWVudFk7Ci0gICAgdm9pZCBpbml0Q29v
cmRpbmF0ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLXByaXZhdGU6
Ci0gICAgaW50IG1fcGFnZVg7Ci0gICAgaW50IG1fcGFnZVk7Ci0gICAgaW50IG1fbGF5ZXJYOwot
ICAgIGludCBtX2xheWVyWTsKLSAgICBpbnQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFk7
Ci0gICAgYm9vbCBtX2lzU2ltdWxhdGVkOwotfTsKLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2
ZWwgMgotY2xhc3MgTW91c2VFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudCB7Ci1wdWJs
aWM6Ci0gICAgTW91c2VFdmVudCgpOwotICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICBBYnN0cmFj
dFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAg
ICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2Ny
ZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAg
ICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcs
Ci0gICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAg
ICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAg
ICAgICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZyA9IDAsCi0gICAgICAgICAgICAgICAgICAg
Ym9vbCBpc1NpbXVsYXRlZCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0g
ICAgLy8gV2luSUUgdXNlcyAxLDQsMiBmb3IgbGVmdC9taWRkbGUvcmlnaHQgYnV0IG5vdCBmb3Ig
Y2xpY2sgKGp1c3QgZm9yIG1vdXNlZG93bi91cCwgbWF5YmUgb3RoZXJzKSwgYnV0IHdlIHdpbGwg
bWF0Y2ggdGhlIHN0YW5kYXJkIERPTS4KLSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25z
dCB7IHJldHVybiBtX2J1dHRvbjsgfQotICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQotICAgIENsaXBib2Fy
ZCogY2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0KLSAgICBO
b2RlKiB0b0VsZW1lbnQoKSBjb25zdDsKLSAgICBOb2RlKiBmcm9tRWxlbWVudCgpIGNvbnN0Owot
ICAgIHZvaWQgaW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
bGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRL
ZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpOwotICAgIHZpcnR1
YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZl
bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBzaG9ydCBtX2J1dHRvbjsKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBt
X3JlbGF0ZWRUYXJnZXQ7Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19Owot
Ci0KLS8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDMKLWNsYXNzIEtleWJvYXJkRXZlbnQgOiBw
dWJsaWMgVUlFdmVudFdpdGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBLZXlMb2NhdGlv
bkNvZGUgewotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEICAgICAgPSAweDAwLAot
ICAgICAgICBET01fS0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAxLAotICAgICAgICBE
T01fS0VZX0xPQ0FUSU9OX1JJR0hUICAgICAgICAgPSAweDAyLAotICAgICAgICBET01fS0VZX0xP
Q0FUSU9OX05VTVBBRCAgICAgICAgPSAweDAzLAorICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExl
dmVsIDIKKyAgICBjbGFzcyBNb3VzZUV2ZW50IDogcHVibGljIE1vdXNlUmVsYXRlZEV2ZW50IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIE1vdXNlRXZlbnQoKTsKKyAgICAgICAgTW91c2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUs
IEFic3RyYWN0VmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsLCBpbnQg
c2NyZWVuWCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwKKyAgICAgICAg
ICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29s
IG1ldGFLZXksIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwKKyAgICAgICAgICAgICAgICAgICBFdmVu
dFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXQsIENsaXBib2FyZCogY2xpcGJvYXJkID0gMCwgYm9v
bCBpc1NpbXVsYXRlZCA9IGZhbHNlKTsKKyAgICAgICAgdmlydHVhbCB+TW91c2VFdmVudCgpOwor
CisgICAgICAgIHZvaWQgaW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBi
b29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqIHZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3Jl
ZW5ZLCBpbnQgY2xpZW50WCwgaW50IGNsaWVudFksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwgRXZl
bnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0KTsKKworICAgICAgICAvLyBXaW5JRSB1c2VzIDEs
NCwyIGZvciBsZWZ0L21pZGRsZS9yaWdodCBidXQgbm90IGZvciBjbGljayAoanVzdCBmb3IgbW91
c2Vkb3duL3VwLCBtYXliZSBvdGhlcnMpLAorICAgICAgICAvLyBidXQgd2Ugd2lsbCBtYXRjaCB0
aGUgc3RhbmRhcmQgRE9NLgorICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdCB7
IHJldHVybiBtX2J1dHRvbjsgfQorICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCk7IH0KKyAgICAgICAgQ2xp
cGJvYXJkKiBjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBib2FyZC5nZXQoKTsgfQor
ICAgICAgICAKKyAgICAgICAgTm9kZSogdG9FbGVtZW50KCkgY29uc3Q7CisgICAgICAgIE5vZGUq
IGZyb21FbGVtZW50KCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVu
dCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAg
IHVuc2lnbmVkIHNob3J0IG1fYnV0dG9uOworICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2Rl
PiBtX3JlbGF0ZWRUYXJnZXQ7CisgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IG1fY2xpcGJvYXJk
OwogICAgIH07Ci0gICAgS2V5Ym9hcmRFdmVudCgpOwotICAgIEtleWJvYXJkRXZlbnQoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RWaWV3Kik7Ci0gICAgS2V5Ym9hcmRFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcg
JmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQga2V5TG9jYXRpb25B
cmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgIGJv
b2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhL
ZXlBcmcpOwotICAgIHZpcnR1YWwgfktleWJvYXJkRXZlbnQoKTsKLSAgICAKLSAgICB2b2lkIGlu
aXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAg
ICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVB
cmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBzaGlm
dEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgCi0gICAgU3RyaW5nIGtleUlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX2tleUlkZW50aWZpZXIuZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCBr
ZXlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5TG9jYXRpb247IH0KLSAgICAKLSAgICBi
b29sIGFsdEdyYXBoS2V5KCkgY29uc3QgeyByZXR1cm4gbV9hbHRHcmFwaEtleTsgfQotICAgIAot
ICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQoKSBjb25zdCB7IHJldHVy
biBtX2tleUV2ZW50OyB9Ci0KLSAgICBpbnQga2V5Q29kZSgpIGNvbnN0OyAvLyBrZXkgY29kZSBm
b3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBmb3Igb3RoZXIgZXZlbnRzCi0gICAgaW50
IGNoYXJDb2RlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRFdmVu
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBtX2tleUV2ZW50OwotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBtX2tleUlkZW50aWZpZXI7Ci0gICAgdW5zaWduZWQgbV9rZXlMb2NhdGlvbjsKLSAgICBi
b29sIG1fYWx0R3JhcGhLZXkgOiAxOwotfTsKLQotY2xhc3MgTXV0YXRpb25FdmVudCA6IHB1Ymxp
YyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBhdHRyQ2hhbmdlVHlwZSB7IE1PRElGSUNBVElP
TiA9IDEsIEFERElUSU9OID0gMiwgUkVNT1ZBTCA9IDMgfTsKLSAgICBNdXRhdGlvbkV2ZW50KCk7
Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2Rl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmcHJldlZhbHVlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKTsKLSAgICBOb2RlICpyZWxhdGVk
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZE5vZGUuZ2V0KCk7IH0KLSAgICBTdHJpbmcg
cHJldlZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2VmFsdWUuZ2V0KCk7IH0KLSAgICBTdHJp
bmcgbmV3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25ld1ZhbHVlLmdldCgpOyB9Ci0gICAgU3Ry
aW5nIGF0dHJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZS5nZXQoKTsgfQotICAgIHVu
c2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0dHJDaGFuZ2U7IH0K
LSAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAgdmlydHVhbCBib29sIGlzTXV0YXRpb25F
dmVudCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkTm9kZTsK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9wcmV2VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG1fbmV3VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fYXR0ck5hbWU7Ci0gICAg
dW5zaWduZWQgc2hvcnQgbV9hdHRyQ2hhbmdlOwotfTsKLQotY2xhc3MgQ2xpcGJvYXJkRXZlbnQg
OiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIENsaXBib2FyZEV2ZW50KCk7Ci0gICAgQ2xp
cGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLCBib29sIGNhbkJ1YmJsZUFyZywg
Ym9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZyk7Ci0KLSAgICBDbGlw
Ym9hcmQgKmNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcGJvYXJkLmdldCgpOyB9Ci0g
ICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdDsKLXByaXZhdGU6Ci0gICAg
UmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0vLyBleHRlbnNpb246IG1vdXNl
IHdoZWVsIGV2ZW50Ci1jbGFzcyBXaGVlbEV2ZW50IDogcHVibGljIE1vdXNlUmVsYXRlZEV2ZW50
Ci17Ci1wdWJsaWM6Ci0gICAgV2hlZWxFdmVudCgpOwotICAgIFdoZWVsRXZlbnQoYm9vbCBob3Jp
em9udGFsLCBpbnQgd2hlZWxEZWx0YSwgQWJzdHJhY3RWaWV3ICosCi0gICAgICAgICAgICAgICAg
ICAgaW50IHNjcmVlblhBcmcsIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgIGlu
dCBjbGllbnRYQXJnLCBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGN0
cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0S2V5QXJnLCBib29sIG1ldGFLZXlB
cmcpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFs
OyB9Ci0gICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3doZWVsRGVsdGE7IH0K
LQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7Ci0KLSAg
ICBib29sIG1faG9yaXpvbnRhbDsKLSAgICBpbnQgbV93aGVlbERlbHRhOwotfTsKLQotY2xhc3Mg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgU2hhcmVkPFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyPiB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNl
Q2FwdHVyZSk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZXZlbnRUeXBlOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIoKSBjb25z
dCB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0gICAgYm9vbCB1c2VDYXB0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9Ci0gICAgYm9vbCByZW1vdmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW1vdmVkOyB9Ci0gICAgdm9pZCBzZXRSZW1vdmVkKGJvb2wgcmVtb3ZlZCkgeyBt
X3JlbW92ZWQgPSByZW1vdmVkOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIEF0b21pY1N0cmluZyBt
X2V2ZW50VHlwZTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9saXN0ZW5lcjsKLSAgICBi
b29sIG1fdXNlQ2FwdHVyZTsKLSAgICBib29sIG1fcmVtb3ZlZDsKLX07Ci0KLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyJik7Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyJiBhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYikgeyByZXR1cm4g
IShhID09IGIpOyB9Ci0KLS8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9y
IGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKLWNsYXNzIENsaXBib2FyZCA6IHB1YmxpYyBT
aGFyZWQ8Q2xpcGJvYXJkPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q2xpcGJvYXJkKCk7Ci0K
LSAgICAvLyBJcyB0aGlzIG9wZXJhdGlvbiBhIGRyYWctZHJvcCBvciBhIGNvcHktcGFzdGU/Ci0g
ICAgdmlydHVhbCBib29sIGlzRm9yRHJhZ2dpbmcoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFs
IFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcm9w
RWZmZWN0KGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGVmZmVjdEFs
bG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEVmZmVjdEFsbG93ZWQoY29u
c3QgU3RyaW5nICZzKSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25z
dCBTdHJpbmcgJnR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxEYXRhKCkgPSAw
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nICZ0eXBlLCBib29sICZz
dWNjZXNzKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5n
ICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpID0gMDsKLSAgICAKLSAgICAvLyBleHRlbnNpb25z
IGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZ0xpc3QgdHlwZXMo
KSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBkcmFnTG9j
YXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBDYWNoZWRJbWFnZSogZHJhZ0ltYWdlKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCAmKSA9IDA7Ci0gICAgdmlydHVhbCBOb2RlICpkcmFnSW1h
Z2VFbGVtZW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5v
ZGUgKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotfTsKLQotY2xhc3MgQmVmb3Jl
VW5sb2FkRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBCZWZvcmVVbmxvYWRF
dmVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3Ry
aW5nIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcmVzdWx0OwotfTsKIAotfSAvLyBuYW1lc3BhY2UK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gTW91c2VFdmVudF9o
CkluZGV4OiBXZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCShyZXZpc2lvbiAxNDkwMCkKKysrIFdl
YkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsx
LDkgQEAKIC8qKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlv
biBmb3IgS0RFLgogICoKLSAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0g
KiAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkK
KyAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29w
eXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0
LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21h
aWwuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMjE3ICsyMywzOSBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJNb3Vz
ZVJlbGF0ZWRFdmVudC5oIgogCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJTeXN0ZW1UaW1l
LmgiCisjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIEV2ZW50TmFtZXM7Ci0KLUV2ZW50OjpFdmVudCgpCi0gICAgOiBtX2NhbkJ1YmJsZShmYWxz
ZSkKLSAgICAsIG1fY2FuY2VsYWJsZShmYWxzZSkKLSAgICAsIG1fcHJvcGFnYXRpb25TdG9wcGVk
KGZhbHNlKQotICAgICwgbV9kZWZhdWx0UHJldmVudGVkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0
SGFuZGxlZChmYWxzZSkKLSAgICAsIG1fY2FuY2VsQnViYmxlKGZhbHNlKQotICAgICwgbV9jdXJy
ZW50VGFyZ2V0KDApCi0gICAgLCBtX2V2ZW50UGhhc2UoMCkKLSAgICAsIG1fY3JlYXRlVGltZShz
dGF0aWNfY2FzdDxET01UaW1lU3RhbXA+KGN1cnJlbnRUaW1lKCkgKiAxMDAwLjApKQotewotfQot
Ci1FdmVudDo6RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnVi
YmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCi0gICAgOiBtX3R5cGUoZXZlbnRUeXBlKQotICAg
ICwgbV9jYW5CdWJibGUoY2FuQnViYmxlQXJnKQotICAgICwgbV9jYW5jZWxhYmxlKGNhbmNlbGFi
bGVBcmcpCi0gICAgLCBtX3Byb3BhZ2F0aW9uU3RvcHBlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVs
dFByZXZlbnRlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdEhhbmRsZWQoZmFsc2UpCi0gICAgLCBt
X2NhbmNlbEJ1YmJsZShmYWxzZSkKLSAgICAsIG1fY3VycmVudFRhcmdldCgwKQotICAgICwgbV9l
dmVudFBoYXNlKDApCi0gICAgLCBtX2NyZWF0ZVRpbWUoc3RhdGljX2Nhc3Q8RE9NVGltZVN0YW1w
PihjdXJyZW50VGltZSgpICogMTAwMC4wKSkKLXsKLX0KLQotRXZlbnQ6On5FdmVudCgpCi17Ci19
Ci0KLXZvaWQgRXZlbnQ6OmluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFy
ZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZykKLXsKLSAgICBpZiAoZGlz
cGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3R5cGUgPSBldmVudFR5cGVBcmc7
Ci0gICAgbV9jYW5CdWJibGUgPSBjYW5CdWJibGVBcmc7Ci0gICAgbV9jYW5jZWxhYmxlID0gY2Fu
Y2VsYWJsZUFyZzsKLX0KLQotYm9vbCBFdmVudDo6aXNVSUV2ZW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc011dGF0aW9uRXZlbnQoKSBjb25z
dAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNLZXlib2FyZEV2ZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzRHJhZ0V2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzQ2xp
cGJvYXJkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVu
dDo6aXNXaGVlbEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
RXZlbnQ6OmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBFdmVudDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBFdmVudDo6c3RvcmVSZXN1bHQoY29uc3QgU3Ry
aW5nJikKLXsKLX0KLQotdm9pZCBFdmVudDo6c2V0VGFyZ2V0KE5vZGUqIHRhcmdldCkKLXsKLSAg
ICBtX3RhcmdldCA9IHRhcmdldDsKLSAgICBpZiAodGFyZ2V0KQotICAgICAgICByZWNlaXZlZFRh
cmdldCgpOwotfQotCi12b2lkIEV2ZW50OjpyZWNlaXZlZFRhcmdldCgpCi17Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLVVJRXZlbnQ6OlVJRXZlbnQoKQotICAgIDogbV9kZXRhaWwo
MCkKLXsKLX0KLQotVUlFdmVudDo6VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlw
ZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQWJzdHJhY3RWaWV3ICp2
aWV3QXJnLCBpbnQgZGV0YWlsQXJnKQotICAgIDogRXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVB
cmcsIGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3ZpZXcodmlld0FyZykKLSAgICAsIG1fZGV0YWls
KGRldGFpbEFyZykKLXsKLX0KLQotdm9pZCBVSUV2ZW50Ojppbml0VUlFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNh
bkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0Fy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpCi17Ci0gICAg
aWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdEV2ZW50KHR5cGVB
cmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICBtX3ZpZXcgPSB2aWV3QXJn
OwotICAgIG1fZGV0YWlsID0gZGV0YWlsQXJnOwotfQotCi1ib29sIFVJRXZlbnQ6OmlzVUlFdmVu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBVSUV2ZW50OjprZXlDb2Rl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OmNoYXJDb2RlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OmxheWVyWCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpsYXllclkoKSBjb25zdAotewot
ICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6cGFnZVgoKSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6cGFnZVkoKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotCi1pbnQgVUlFdmVudDo6d2hpY2goKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQot
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBNb3VzZVJlbGF0ZWRFdmVudDo6TW91c2VSZWxh
dGVkRXZlbnQoKQotICAgIDogbV9zY3JlZW5YKDApLCBtX3NjcmVlblkoMCksIG1fY2xpZW50WCgw
KSwgbV9jbGllbnRZKDApCi0gICAgLCBtX3BhZ2VYKDApLCBtX3BhZ2VZKDApLCBtX2xheWVyWCgw
KSwgbV9sYXllclkoMCksIG1fb2Zmc2V0WCgwKSwgbV9vZmZzZXRZKDApLCBtX2lzU2ltdWxhdGVk
KGZhbHNlKQorICAgIDogbV9zY3JlZW5YKDApCisgICAgLCBtX3NjcmVlblkoMCkKKyAgICAsIG1f
Y2xpZW50WCgwKQorICAgICwgbV9jbGllbnRZKDApCisgICAgLCBtX3BhZ2VYKDApCisgICAgLCBt
X3BhZ2VZKDApCisgICAgLCBtX2xheWVyWCgwKQorICAgICwgbV9sYXllclkoMCkKKyAgICAsIG1f
b2Zmc2V0WCgwKQorICAgICwgbV9vZmZzZXRZKDApCisgICAgLCBtX2lzU2ltdWxhdGVkKGZhbHNl
KQogewogfQogCi1Nb3VzZVJlbGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nICZldmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAq
dmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkKQotICAgIDogVUlFdmVudFdpdGhL
ZXlTdGF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywg
ZGV0YWlsQXJnLAotICAgICAgICBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBt
ZXRhS2V5QXJnKQotICAgICwgbV9zY3JlZW5YKHNjcmVlblhBcmcpLCBtX3NjcmVlblkoc2NyZWVu
WUFyZykKLSAgICAsIG1fY2xpZW50WChjbGllbnRYQXJnKSwgbV9jbGllbnRZKGNsaWVudFlBcmcp
CitNb3VzZVJlbGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIEFic3RyYWN0Vmll
dyogdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWls
LCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0
S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksIGJvb2wgaXNTaW11bGF0ZWQpCisgICAg
OiBVSUV2ZW50V2l0aEtleVN0YXRlKGV2ZW50VHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2
aWV3LCBkZXRhaWwsIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXkpCisgICAgLCBt
X3NjcmVlblgoc2NyZWVuWCkKKyAgICAsIG1fc2NyZWVuWShzY3JlZW5ZKQorICAgICwgbV9jbGll
bnRYKGNsaWVudFgpCisgICAgLCBtX2NsaWVudFkoY2xpZW50WSkKICAgICAsIG1faXNTaW11bGF0
ZWQoaXNTaW11bGF0ZWQpCiB7CiAgICAgaW5pdENvb3JkaW5hdGVzKCk7CkBAIC0zMjMsMzMyICsx
NDYsNCBAQCBpbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnkoKSBjb25zdAogICAgIHJldHVybiBtX2Ns
aWVudFk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vdXNlRXZlbnQ6Ok1vdXNl
RXZlbnQoKQotICAgIDogbV9idXR0b24oMCkKLXsKLX0KLQotTW91c2VFdmVudDo6TW91c2VFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJz
dHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRL
ZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRU
YXJnZXRBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkKiBjbGlw
Ym9hcmRBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRl
ZCkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5j
ZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcsCi0gICAgICAgIHNjcmVlblhBcmcsIHNjcmVl
bllBcmcsIGNsaWVudFhBcmcsIGNsaWVudFlBcmcsCi0gICAgICAgIGN0cmxLZXlBcmcsIGFsdEtl
eUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcsIGlzU2ltdWxhdGVkKQotICAgICwgbV9idXR0
b24oYnV0dG9uQXJnKQotICAgICwgbV9yZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJnZXRBcmcpCi0g
ICAgLCBtX2NsaXBib2FyZChjbGlwYm9hcmRBcmcpCi17Ci19Ci0KLU1vdXNlRXZlbnQ6On5Nb3Vz
ZUV2ZW50KCkKLXsKLX0KLQotdm9pZCBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz
Y3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVu
dFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRl
ZFRhcmdldEFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpbml0VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZp
ZXdBcmcsIGRldGFpbEFyZyk7Ci0KLSAgICBtX3NjcmVlblggPSBzY3JlZW5YQXJnOwotICAgIG1f
c2NyZWVuWSA9IHNjcmVlbllBcmc7Ci0gICAgbV9jbGllbnRYID0gY2xpZW50WEFyZzsKLSAgICBt
X2NsaWVudFkgPSBjbGllbnRZQXJnOwotICAgIG1fY3RybEtleSA9IGN0cmxLZXlBcmc7Ci0gICAg
bV9hbHRLZXkgPSBhbHRLZXlBcmc7Ci0gICAgbV9zaGlmdEtleSA9IHNoaWZ0S2V5QXJnOwotICAg
IG1fbWV0YUtleSA9IG1ldGFLZXlBcmc7Ci0gICAgbV9idXR0b24gPSBidXR0b25Bcmc7Ci0gICAg
bV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldEFyZzsKLQotICAgIGluaXRDb29yZGluYXRl
cygpOwotfQotCi1ib29sIE1vdXNlRXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6aXNEcmFnRXZlbnQoKSBjb25zdAot
ewotICAgIGNvbnN0IEF0b21pY1N0cmluZyAmdCA9IHR5cGUoKTsKLSAgICByZXR1cm4gdCA9PSBk
cmFnZW50ZXJFdmVudCB8fCB0ID09IGRyYWdvdmVyRXZlbnQgfHwgdCA9PSBkcmFnbGVhdmVFdmVu
dAotICAgICAgICB8fCB0ID09IGRyb3BFdmVudAotICAgICAgICB8fCB0ID09IGRyYWdzdGFydEV2
ZW50IHx8IHQgPT0gZHJhZ0V2ZW50IHx8IHQgPT0gZHJhZ2VuZEV2ZW50OwotfQotCi1pbnQgTW91
c2VFdmVudDo6d2hpY2goKSBjb25zdAotewotICAgIC8vIEZvciBLSFRNTCwgdGhlIHJldHVybiB2
YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0dG9ucyBhcmUgMCwgMSwg
MiwgcmVzcGVjdGl2ZWx5LgotICAgIC8vIEZvciB0aGUgTmV0c2NhcGUgIndoaWNoIiBwcm9wZXJ0
eSwgdGhlIHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0
dG9ucyBhcmUgMSwgMiwgMywgcmVzcGVjdGl2ZWx5LiAKLSAgICAvLyBTbyB3ZSBtdXN0IGFkZCAx
LgotICAgIHJldHVybiBtX2J1dHRvbiArIDE7Ci19Ci0KLU5vZGUqIE1vdXNlRXZlbnQ6OnRvRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gTVNJRSBleHRlbnNpb24gLSAidGhlIG9iamVjdCB0b3dh
cmQgd2hpY2ggdGhlIHVzZXIgaXMgbW92aW5nIHRoZSBtb3VzZSBwb2ludGVyIgotICAgIHJldHVy
biB0eXBlKCkgPT0gbW91c2VvdXRFdmVudCA/IHJlbGF0ZWRUYXJnZXQoKSA6IHRhcmdldCgpOwot
fQotCi1Ob2RlKiBNb3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gTVNJ
RSBleHRlbnNpb24gLSAib2JqZWN0IGZyb20gd2hpY2ggYWN0aXZhdGlvbiBvciB0aGUgbW91c2Ug
cG9pbnRlciBpcyBleGl0aW5nIGR1cmluZyB0aGUgZXZlbnQiIChodWg/KQotICAgIHJldHVybiB0
eXBlKCkgPT0gbW91c2VvdXRFdmVudCA/IHRhcmdldCgpIDogcmVsYXRlZFRhcmdldCgpOwotfQot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1LZXlib2FyZEV2ZW50
OjpLZXlib2FyZEV2ZW50KCkKLSAgOiBtX2tleUV2ZW50KDApCi0gICwgbV9rZXlMb2NhdGlvbihE
T01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEKQotICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCi17Ci19
Ci0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2
ZW50JiBrZXksIEFic3RyYWN0VmlldyAqdmlldykKLSAgOiBVSUV2ZW50V2l0aEtleVN0YXRlKGtl
eS5pc0tleVVwKCkgPyBrZXl1cEV2ZW50IDoga2V5LmlzQXV0b1JlcGVhdCgpID8ga2V5cHJlc3NF
dmVudCA6IGtleWRvd25FdmVudCwKLSAgICB0cnVlLCB0cnVlLCB2aWV3LCAwLCBrZXkuY3RybEtl
eSgpLCBrZXkuYWx0S2V5KCksIGtleS5zaGlmdEtleSgpLCBrZXkubWV0YUtleSgpKQotICAsIG1f
a2V5RXZlbnQobmV3IFBsYXRmb3JtS2V5Ym9hcmRFdmVudChrZXkpKQotICAsIG1fa2V5SWRlbnRp
ZmllcihTdHJpbmcoa2V5LmtleUlkZW50aWZpZXIoKSkuaW1wbCgpKQotICAsIG1fa2V5TG9jYXRp
b24oa2V5LmlzS2V5cGFkKCkgPyBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCA6IERPTV9LRVlfTE9D
QVRJT05fU1RBTkRBUkQpCi0gICwgbV9hbHRHcmFwaEtleShmYWxzZSkKLXsKLX0KLQotS2V5Ym9h
cmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3
ICp2aWV3QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpCi0gIDog
VUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFy
Zywgdmlld0FyZywgMCwgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtl
eUFyZykKLSAgLCBtX2tleUV2ZW50KDApCi0gICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZp
ZXJBcmcuaW1wbCgpKQotICAsIG1fa2V5TG9jYXRpb24oa2V5TG9jYXRpb25BcmcpCi0gICwgbV9h
bHRHcmFwaEtleShhbHRHcmFwaEtleUFyZykKLXsKLX0KLQotS2V5Ym9hcmRFdmVudDo6fktleWJv
YXJkRXZlbnQoKQotewotICAgIGRlbGV0ZSBtX2tleUV2ZW50OwotfQotCi12b2lkIEtleWJvYXJk
RXZlbnQ6OmluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgQWJz
dHJhY3RWaWV3ICp2aWV3QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyAma2V5SWRlbnRpZmllckFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBr
ZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcs
IAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG1ldGFLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtl
eUFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bml0VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcs
IDApOwotCi0gICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckFyZy5pbXBsKCk7Ci0g
ICAgbV9rZXlMb2NhdGlvbiA9IGtleUxvY2F0aW9uQXJnOwotICAgIG1fY3RybEtleSA9IGN0cmxL
ZXlBcmc7Ci0gICAgbV9zaGlmdEtleSA9IHNoaWZ0S2V5QXJnOwotICAgIG1fYWx0S2V5ID0gYWx0
S2V5QXJnOwotICAgIG1fbWV0YUtleSA9IG1ldGFLZXlBcmc7Ci0gICAgbV9hbHRHcmFwaEtleSA9
IGFsdEdyYXBoS2V5QXJnOwotfQotCi1pbnQgS2V5Ym9hcmRFdmVudDo6a2V5Q29kZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2tleUV2ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAodHlw
ZSgpID09IGtleWRvd25FdmVudCB8fCB0eXBlKCkgPT0ga2V5dXBFdmVudCkKLSAgICAgICAgcmV0
dXJuIG1fa2V5RXZlbnQtPldpbmRvd3NLZXlDb2RlKCk7Ci0gICAgcmV0dXJuIGNoYXJDb2RlKCk7
Ci19Ci0KLWludCBLZXlib2FyZEV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2tleUV2ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBTdHJpbmcgdGV4dCA9IG1fa2V5RXZl
bnQtPnRleHQoKTsKLSAgICBpZiAodGV4dC5sZW5ndGgoKSAhPSAxKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gdGV4dFswXTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50Ojppc0tleWJv
YXJkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgS2V5Ym9hcmRF
dmVudDo6d2hpY2goKSBjb25zdAotewotICAgIC8vIE5ldHNjYXBlJ3MgIndoaWNoIiByZXR1cm5z
IGEgdmlydHVhbCBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGFuZCBhIGNoYXJhY3Rl
ciBjb2RlIGZvciBrZXlwcmVzcy4KLSAgICAvLyBUaGF0J3MgZXhhY3RseSB3aGF0IElFJ3MgImtl
eUNvZGUiIHJldHVybnMuIFNvIHRoZXkgYXJlIHRoZSBzYW1lIGZvciBrZXlib2FyZCBldmVudHMu
Ci0gICAgcmV0dXJuIGtleUNvZGUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
TXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudCgpCi0gICAgOiBtX2F0dHJDaGFuZ2UoMCkKLXsK
LX0KLQotTXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2
ZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1
YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNl
bGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVs
YXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCi0gICAgOiBF
dmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZykKLSAgICAsIG1fcmVs
YXRlZE5vZGUocmVsYXRlZE5vZGVBcmcpCi0gICAgLCBtX3ByZXZWYWx1ZShwcmV2VmFsdWVBcmcu
aW1wbCgpKQotICAgICwgbV9uZXdWYWx1ZShuZXdWYWx1ZUFyZy5pbXBsKCkpCi0gICAgLCBtX2F0
dHJOYW1lKGF0dHJOYW1lQXJnLmltcGwoKSkKLSAgICAsIG1fYXR0ckNoYW5nZShhdHRyQ2hhbmdl
QXJnKQotewotfQotCi12b2lkIE11dGF0aW9uRXZlbnQ6OmluaXRNdXRhdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
bmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZykKLXsKLSAgICBpZiAoZGlz
cGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0RXZlbnQodHlwZUFyZywgY2Fu
QnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKTsKLQotICAgIG1fcmVsYXRlZE5vZGUgPSByZWxhdGVk
Tm9kZUFyZzsKLSAgICBtX3ByZXZWYWx1ZSA9IHByZXZWYWx1ZUFyZy5pbXBsKCk7Ci0gICAgbV9u
ZXdWYWx1ZSA9IG5ld1ZhbHVlQXJnLmltcGwoKTsKLSAgICBtX2F0dHJOYW1lID0gYXR0ck5hbWVB
cmcuaW1wbCgpOwotICAgIG1fYXR0ckNoYW5nZSA9IGF0dHJDaGFuZ2VBcmc7Ci19Ci0KLWJvb2wg
TXV0YXRpb25FdmVudDo6aXNNdXRhdGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2xpcGJvYXJkRXZlbnQ6OkNsaXBi
b2FyZEV2ZW50KCkKLXsKLX0KLQotQ2xpcGJvYXJkRXZlbnQ6OkNsaXBib2FyZEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxh
YmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZykKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwg
Y2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKSwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkQXJnKQot
ewotfQotCi1ib29sIENsaXBib2FyZEV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlZWxF
dmVudDo6V2hlZWxFdmVudCgpIDogbV9ob3Jpem9udGFsKGZhbHNlKSwgbV93aGVlbERlbHRhKDAp
Ci17Ci19Ci0KLVdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoYm9vbCBoLCBpbnQgZCwgQWJzdHJhY3RW
aWV3ICp2LAotICAgIGludCBzeCwgaW50IHN5LCBpbnQgY3gsIGludCBjeSwgYm9vbCBjdHJsLCBi
b29sIGFsdCwgYm9vbCBzaGlmdCwgYm9vbCBtZXRhKQotICAgIDogTW91c2VSZWxhdGVkRXZlbnQo
aCA/IGtodG1sSG9yaXpvbnRhbG1vdXNld2hlZWxFdmVudCA6IG1vdXNld2hlZWxFdmVudCwKLSAg
ICAgICAgdHJ1ZSwgdHJ1ZSwgdiwgMCwgc3gsIHN5LCBjeCwgY3ksIGN0cmwsIGFsdCwgc2hpZnQs
IG1ldGEpCi0gICAgLCBtX2hvcml6b250YWwoaCksIG1fd2hlZWxEZWx0YShkKQotewotfQotCi1i
b29sIFdoZWVsRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
OjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwg
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQotICAg
IDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKLSAg
ICAsIG1fdXNlQ2FwdHVyZSh1c2VDYXB0dXJlKQotICAgICwgbV9yZW1vdmVkKGZhbHNlKQotewot
fQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJmEsIGNv
bnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZiKQotewotICAgIHJldHVybiBhLmV2ZW50VHlw
ZSgpID09IGIuZXZlbnRUeXBlKCkgJiYgYS5saXN0ZW5lcigpID09IGIubGlzdGVuZXIoKSAmJiBh
LnVzZUNhcHR1cmUoKSA9PSBiLnVzZUNhcHR1cmUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotQ2xpcGJvYXJkOjp+Q2xpcGJvYXJkKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotQmVmb3JlVW5sb2FkRXZlbnQ6OkJlZm9yZVVubG9hZEV2ZW50KCkKLSAgICA6
IEV2ZW50KGJlZm9yZXVubG9hZEV2ZW50LCBmYWxzZSwgdHJ1ZSkKLXsKLX0KLQotYm9vbCBCZWZv
cmVVbmxvYWRFdmVudDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEJlZm9yZVVubG9hZEV2ZW50OjpzdG9yZVJlc3VsdChjb25zdCBT
dHJpbmcmIHMpCi17Ci0gICAgbV9yZXN1bHQgPSBzLmltcGwoKTsKLX0KLQotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5oCShyZXZpc2lvbiAxNDkw
MCkKKysrIFdlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVG9iaWFzIEFudG9uIChhbnRvbkBzdHVk
LmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5p
ZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw0NTggKzIz
LDU5IEBACiAgKgogICovCiAKLSNpZm5kZWYgRE9NX0VWRU5UU0lNUExfSAotI2RlZmluZSBET01f
RVZFTlRTSU1QTF9ICisjaWZuZGVmIE1vdXNlUmVsYXRlZEV2ZW50X2gKKyNkZWZpbmUgTW91c2VS
ZWxhdGVkRXZlbnRfaAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotCi1jbGFzcyBEZXByZWNhdGVkU3RyaW5nTGlz
dDsKKyNpbmNsdWRlICJVSUV2ZW50V2l0aEtleVN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBFdmVudExp
c3RlbmVyOwotY2xhc3MgRXZlbnRUYXJnZXROb2RlOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbnRQ
b2ludDsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKLQotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgRE9NVGltZVN0YW1wOwotdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3Owot
Ci1jb25zdCBpbnQgRXZlbnRFeGNlcHRpb25PZmZzZXQgPSAxMDA7Ci1jb25zdCBpbnQgRXZlbnRF
eGNlcHRpb25NYXggPSAxOTk7Ci1lbnVtIEV2ZW50RXhjZXB0aW9uQ29kZSB7IFVOU1BFQ0lGSUVE
X0VWRU5UX1RZUEVfRVJSID0gRXZlbnRFeGNlcHRpb25PZmZzZXQgfTsKLQotY2xhc3MgRXZlbnQg
OiBwdWJsaWMgU2hhcmVkPEV2ZW50PgotewotcHVibGljOgotICAgIGVudW0gUGhhc2VUeXBlIHsg
Ci0gICAgICAgIENBUFRVUklOR19QSEFTRSA9IDEsIAotICAgICAgICBBVF9UQVJHRVQgPSAyLCAK
LSAgICAgICAgQlVCQkxJTkdfUEhBU0UgPSAzIAotICAgIH07CisJdHlwZWRlZiBET01XaW5kb3cg
QWJzdHJhY3RWaWV3OwogCi0gICAgLy8gUmV2ZXJzZS1lbmdpbmVlcmVkIGZyb20gTmV0c2NhcGUK
LSAgICBlbnVtIEV2ZW50VHlwZSB7Ci0gICAgICAgIE1PVVNFRE9XTiAgICAgICAgICAgPSAxLAot
ICAgICAgICBNT1VTRVVQICAgICAgICAgICAgID0gMiwKLSAgICAgICAgTU9VU0VPVkVSICAgICAg
ICAgICA9IDQsCi0gICAgICAgIE1PVVNFT1VUICAgICAgICAgICAgPSA4LAotICAgICAgICBNT1VT
RU1PVkUgICAgICAgICAgID0gMTYsCi0gICAgICAgIE1PVVNFRFJBRyAgICAgICAgICAgPSAzMiwK
LSAgICAgICAgQ0xJQ0sgICAgICAgICAgICAgICA9IDY0LAotICAgICAgICBEQkxDTElDSyAgICAg
ICAgICAgID0gMTI4LAotICAgICAgICBLRVlET1dOICAgICAgICAgICAgID0gMjU2LAotICAgICAg
ICBLRVlVUCAgICAgICAgICAgICAgID0gNTEyLAotICAgICAgICBLRVlQUkVTUyAgICAgICAgICAg
ID0gMTAyNCwKLSAgICAgICAgRFJBR0RST1AgICAgICAgICAgICA9IDIwNDgsCi0gICAgICAgIEZP
Q1VTICAgICAgICAgICAgICAgPSA0MDk2LAotICAgICAgICBCTFVSICAgICAgICAgICAgICAgID0g
ODE5MiwKLSAgICAgICAgU0VMRUNUICAgICAgICAgICAgICA9IDE2Mzg0LAotICAgICAgICBDSEFO
R0UgICAgICAgICAgICAgID0gMzI3NjgKKyAgICAvLyBJbnRlcm5hbCBvbmx5OiBIZWxwZXIgY2xh
c3MgZm9yIHdoYXQncyBjb21tb24gYmV0d2VlbiBtb3VzZSBhbmQgd2hlZWwgZXZlbnRzLgorICAg
IGNsYXNzIE1vdXNlUmVsYXRlZEV2ZW50IDogcHVibGljIFVJRXZlbnRXaXRoS2V5U3RhdGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgTW91c2VSZWxhdGVkRXZlbnQoKTsKKyAgICAgICAgTW91c2VS
ZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9v
bCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IGNsaWVudFgsIGlu
dCBjbGllbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wg
YWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksIGJvb2wgaXNTaW11bGF0ZWQgPSBm
YWxzZSk7CisKKyAgICAgICAgaW50IHNjcmVlblgoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblg7
IH0KKyAgICAgICAgaW50IHNjcmVlblkoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblk7IH0KKyAg
ICAgICAgaW50IGNsaWVudFgoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudFg7IH0KKyAgICAgICAg
aW50IGNsaWVudFkoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudFk7IH0KKyAgICAgICAgaW50IGxh
eWVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJYOyB9CisgICAgICAgIGludCBsYXllclkoKSBj
b25zdCB7IHJldHVybiBtX2xheWVyWTsgfQorICAgICAgICBpbnQgb2Zmc2V0WCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0WDsgfQorICAgICAgICBpbnQgb2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0WTsgfQorICAgICAgICBib29sIGlzU2ltdWxhdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc1NpbXVsYXRlZDsgfQorICAgICAgICB2aXJ0dWFsIGludCBwYWdlWCgpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIGludCBwYWdlWSgpIGNvbnN0OworICAgICAgICBpbnQgeCgpIGNvbnN0Owor
ICAgICAgICBpbnQgeSgpIGNvbnN0OworICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9p
ZCBpbml0Q29vcmRpbmF0ZXMoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkVGFyZ2V0
KCk7CisgICAgICAgIAorICAgICAgICAvLyBFeHBvc2UgdGhlc2Ugc28gTW91c2VFdmVudDo6aW5p
dE1vdXNlRXZlbnQgY2FuIHNldCB0aGVtLgorICAgICAgICBpbnQgbV9zY3JlZW5YOworICAgICAg
ICBpbnQgbV9zY3JlZW5ZOworICAgICAgICBpbnQgbV9jbGllbnRYOworICAgICAgICBpbnQgbV9j
bGllbnRZOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fcGFnZVg7CisgICAgICAgIGlu
dCBtX3BhZ2VZOworICAgICAgICBpbnQgbV9sYXllclg7CisgICAgICAgIGludCBtX2xheWVyWTsK
KyAgICAgICAgaW50IG1fb2Zmc2V0WDsKKyAgICAgICAgaW50IG1fb2Zmc2V0WTsKKyAgICAgICAg
Ym9vbCBtX2lzU2ltdWxhdGVkOwogICAgIH07Ci0gICAgCi0gICAgRXZlbnQoKTsKLSAgICBFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNl
bGFibGVBcmcpOwotICAgIHZpcnR1YWwgfkV2ZW50KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJp
bmcgJnR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBOb2RlKiB0YXJnZXQoKSBj
b25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KE5vZGUq
KTsKLSAgICBOb2RlKiBjdXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFy
Z2V0OyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VGFyZ2V0KE5vZGUqIGN1cnJlbnRUYXJnZXQpIHsg
bV9jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsgfQotICAgIHVuc2lnbmVkIHNob3J0IGV2
ZW50UGhhc2UoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50UGhhc2U7IH0KLSAgICB2b2lkIHNldEV2
ZW50UGhhc2UodW5zaWduZWQgc2hvcnQgZXZlbnRQaGFzZSkgeyBtX2V2ZW50UGhhc2UgPSBldmVu
dFBoYXNlOyB9Ci0gICAgYm9vbCBidWJibGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW5CdWJibGU7
IH0KLSAgICBib29sIGNhbmNlbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGFibGU7IH0K
LSAgICBET01UaW1lU3RhbXAgdGltZVN0YW1wKCkgeyByZXR1cm4gbV9jcmVhdGVUaW1lOyB9Ci0g
ICAgdm9pZCBzdG9wUHJvcGFnYXRpb24oKSB7IG1fcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsg
fQotICAgIHZvaWQgcHJldmVudERlZmF1bHQoKSB7IGlmIChtX2NhbmNlbGFibGUpIG1fZGVmYXVs
dFByZXZlbnRlZCA9IHRydWU7IH0KLSAgICB2b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IGlzTW91c2VFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7IC8vIGEgc3Vic2V0IG9mIG1vdXNlIGV2
ZW50cwotICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIHByb3BhZ2F0aW9uU3RvcHBl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGFnYXRpb25TdG9wcGVkOyB9Ci0gICAgYm9vbCBkZWZh
dWx0UHJldmVudGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UHJldmVudGVkOyB9Ci0KLSAg
ICB2b2lkIHNldERlZmF1bHRIYW5kbGVkKCkgeyBtX2RlZmF1bHRIYW5kbGVkID0gdHJ1ZTsgfQot
ICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRIYW5kbGVk
OyB9Ci0KLSAgICB2b2lkIHNldENhbmNlbEJ1YmJsZShib29sIGNhbmNlbCkgeyBtX2NhbmNlbEJ1
YmJsZSA9IGNhbmNlbDsgfQotICAgIHZvaWQgc2V0RGVmYXVsdFByZXZlbnRlZChib29sIGRlZmF1
bHRQcmV2ZW50ZWQpIHsgbV9kZWZhdWx0UHJldmVudGVkID0gZGVmYXVsdFByZXZlbnRlZDsgfQot
ICAgIGJvb2wgZ2V0Q2FuY2VsQnViYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxCdWJibGU7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKLQotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFRhcmdldCgpOwotICAgIGJvb2wgZGlzcGF0Y2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5n
IG1fdHlwZTsKLSAgICBib29sIG1fY2FuQnViYmxlOwotICAgIGJvb2wgbV9jYW5jZWxhYmxlOwot
Ci0gICAgYm9vbCBtX3Byb3BhZ2F0aW9uU3RvcHBlZDsKLSAgICBib29sIG1fZGVmYXVsdFByZXZl
bnRlZDsKLSAgICBib29sIG1fZGVmYXVsdEhhbmRsZWQ7Ci0gICAgYm9vbCBtX2NhbmNlbEJ1YmJs
ZTsKLQotICAgIE5vZGUqIG1fY3VycmVudFRhcmdldDsgLy8gcmVmID4gMCBtYWludGFpbmVkIGV4
dGVybmFsbHkKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2V2ZW50UGhhc2U7Ci0gICAgUmVmUHRyPE5v
ZGU+IG1fdGFyZ2V0OwotICAgIERPTVRpbWVTdGFtcCBtX2NyZWF0ZVRpbWU7Ci19OwotCi1jbGFz
cyBVSUV2ZW50IDogcHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgVUlFdmVudCgpOwotICAg
IFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAgIGJvb2wg
Y2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAg
ICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgaW50IGRl
dGFpbEFyZyk7Ci0gICAgQWJzdHJhY3RWaWV3ICp2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3
LmdldCgpOyB9Ci0gICAgaW50IGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9Ci0g
ICAgdm9pZCBpbml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmll
d0FyZywKLSAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc1VJRXZlbnQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGtleUNvZGUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCBjaGFyQ29kZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQg
bGF5ZXJYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGF5ZXJZKCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGludCBwYWdlWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJlZlB0
cjxBYnN0cmFjdFZpZXc+IG1fdmlldzsKLSAgICBpbnQgbV9kZXRhaWw7Ci19OwotCi1jbGFzcyBV
SUV2ZW50V2l0aEtleVN0YXRlIDogcHVibGljIFVJRXZlbnQgewotcHVibGljOgotICAgIFVJRXZl
bnRXaXRoS2V5U3RhdGUoKSA6IG1fY3RybEtleShmYWxzZSksIG1fYWx0S2V5KGZhbHNlKSwgbV9z
aGlmdEtleShmYWxzZSksIG1fbWV0YUtleShmYWxzZSkgeyB9Ci0gICAgVUlFdmVudFdpdGhLZXlT
dGF0ZShjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNh
bmNlbGFibGVBcmcsIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgaW50IGRldGFpbEFy
ZywgYm9vbCBjdHJsS2V5QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9v
bCBtZXRhS2V5QXJnKQotICAgICAgICA6IFVJRXZlbnQodHlwZSwgY2FuQnViYmxlQXJnLCBjYW5j
ZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcpCi0gICAgICAgICwgbV9jdHJsS2V5KGN0cmxL
ZXlBcmcpLCBtX2FsdEtleShhbHRLZXlBcmcpLCBtX3NoaWZ0S2V5KHNoaWZ0S2V5QXJnKSwgbV9t
ZXRhS2V5KG1ldGFLZXlBcmcpIHsgfQotCi0gICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1
cm4gbV9jdHJsS2V5OyB9Ci0gICAgYm9vbCBzaGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hp
ZnRLZXk7IH0KLSAgICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9Ci0g
ICAgYm9vbCBtZXRhS2V5KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9Ci0KLXByb3RlY3Rl
ZDogLy8gZXhwb3NlIHRoZXNlIHNvIGluaXQgZnVuY3Rpb25zIGNhbiBzZXQgdGhlbQotICAgIGJv
b2wgbV9jdHJsS2V5IDogMTsKLSAgICBib29sIG1fYWx0S2V5IDogMTsKLSAgICBib29sIG1fc2hp
ZnRLZXkgOiAxOwotICAgIGJvb2wgbV9tZXRhS2V5IDogMTsKLX07Ci0KLS8vIEludGVybmFsIG9u
bHk6IEhlbHBlciBjbGFzcyBmb3Igd2hhdCdzIGNvbW1vbiBiZXR3ZWVuIG1vdXNlIGFuZCB3aGVl
bCBldmVudHMuCi1jbGFzcyBNb3VzZVJlbGF0ZWRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtl
eVN0YXRlIHsKLXB1YmxpYzoKLSAgICBNb3VzZVJlbGF0ZWRFdmVudCgpOwotICAgIE1vdXNlUmVs
YXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2
aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGll
bnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAg
IGludCBzY3JlZW5YKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5YOyB9Ci0gICAgaW50IHNjcmVl
blkoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblk7IH0KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xpZW50WDsgfQotICAgIGludCBjbGllbnRZKCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnRZOyB9Ci0gICAgaW50IGxheWVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJYOyB9
Ci0gICAgaW50IGxheWVyWSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJZOyB9Ci0gICAgaW50IG9m
ZnNldFgoKSBjb25zdCB7IHJldHVybiBtX29mZnNldFg7IH0KLSAgICBpbnQgb2Zmc2V0WSgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0WTsgfQotICAgIGJvb2wgaXNTaW11bGF0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzU2ltdWxhdGVkOyB9Ci0gICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBwYWdlWSgpIGNvbnN0OwotICAgIGludCB4KCkgY29uc3Q7Ci0gICAg
aW50IHkoKSBjb25zdDsKLXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIE1vdXNlRXZlbnQ6
OmluaXRNb3VzZUV2ZW50IGNhbiBzZXQgdGhlbQotICAgIGludCBtX3NjcmVlblg7Ci0gICAgaW50
IG1fc2NyZWVuWTsKLSAgICBpbnQgbV9jbGllbnRYOwotICAgIGludCBtX2NsaWVudFk7Ci0gICAg
dm9pZCBpbml0Q29vcmRpbmF0ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQo
KTsKLXByaXZhdGU6Ci0gICAgaW50IG1fcGFnZVg7Ci0gICAgaW50IG1fcGFnZVk7Ci0gICAgaW50
IG1fbGF5ZXJYOwotICAgIGludCBtX2xheWVyWTsKLSAgICBpbnQgbV9vZmZzZXRYOwotICAgIGlu
dCBtX29mZnNldFk7Ci0gICAgYm9vbCBtX2lzU2ltdWxhdGVkOwotfTsKLQotLy8gSW50cm9kdWNl
ZCBpbiBET00gTGV2ZWwgMgotY2xhc3MgTW91c2VFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRF
dmVudCB7Ci1wdWJsaWM6Ci0gICAgTW91c2VFdmVudCgpOwotICAgIE1vdXNlRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAg
ICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGRldGFp
bEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAg
ICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywK
LSAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBi
b29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAg
ICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29s
IG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJn
LAotICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywK
LSAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZyA9IDAsCi0gICAgICAg
ICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5Nb3Vz
ZUV2ZW50KCk7Ci0gICAgLy8gV2luSUUgdXNlcyAxLDQsMiBmb3IgbGVmdC9taWRkbGUvcmlnaHQg
YnV0IG5vdCBmb3IgY2xpY2sgKGp1c3QgZm9yIG1vdXNlZG93bi91cCwgbWF5YmUgb3RoZXJzKSwg
YnV0IHdlIHdpbGwgbWF0Y2ggdGhlIHN0YW5kYXJkIERPTS4KLSAgICB1bnNpZ25lZCBzaG9ydCBi
dXR0b24oKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbjsgfQotICAgIEV2ZW50VGFyZ2V0Tm9kZSog
cmVsYXRlZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQot
ICAgIENsaXBib2FyZCogY2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0
KCk7IH0KLSAgICBOb2RlKiB0b0VsZW1lbnQoKSBjb25zdDsKLSAgICBOb2RlKiBmcm9tRWxlbWVu
dCgpIGNvbnN0OwotICAgIHZvaWQgaW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVu
dFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcp
OwotICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0Owot
cHJpdmF0ZToKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2J1dHRvbjsKLSAgICBSZWZQdHI8RXZlbnRU
YXJnZXROb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlw
Ym9hcmQ7Ci19OwotCi0KLS8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDMKLWNsYXNzIEtleWJv
YXJkRXZlbnQgOiBwdWJsaWMgVUlFdmVudFdpdGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBLZXlMb2NhdGlvbkNvZGUgewotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEICAg
ICAgPSAweDAwLAotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAx
LAotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX1JJR0hUICAgICAgICAgPSAweDAyLAotICAgICAg
ICBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCAgICAgICAgPSAweDAzLAotICAgIH07Ci0gICAgS2V5
Ym9hcmRFdmVudCgpOwotICAgIEtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2
ZW50JiwgQWJzdHJhY3RWaWV3Kik7Ci0gICAgS2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJnR5cGUsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAg
ICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAq
dmlld0FyZywKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcs
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQga2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAg
ICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAg
ICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRh
S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIHZpcnR1
YWwgfktleWJvYXJkRXZlbnQoKTsKLSAgICAKLSAgICB2b2lkIGluaXRLZXlib2FyZEV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJs
ZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAg
ICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
a2V5SWRlbnRpZmllckFyZywKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFy
ZywKLSAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9v
bCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAg
ICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtl
eUFyZyk7Ci0gICAgCi0gICAgU3RyaW5nIGtleUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2tleUlkZW50aWZpZXIuZ2V0KCk7IH0KLSAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5TG9jYXRpb247IH0KLSAgICAKLSAgICBib29sIGFsdEdyYXBoS2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9hbHRHcmFwaEtleTsgfQotICAgIAotICAgIGNvbnN0IFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCoga2V5RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2tleUV2ZW50OyB9Ci0K
LSAgICBpbnQga2V5Q29kZSgpIGNvbnN0OyAvLyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5
dXAsIGNoYXJhY3RlciBmb3Igb3RoZXIgZXZlbnRzCi0gICAgaW50IGNoYXJDb2RlKCkgY29uc3Q7
Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50KiBtX2tleUV2ZW50OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2tleUlkZW50aWZp
ZXI7Ci0gICAgdW5zaWduZWQgbV9rZXlMb2NhdGlvbjsKLSAgICBib29sIG1fYWx0R3JhcGhLZXkg
OiAxOwotfTsKLQotY2xhc3MgTXV0YXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBhdHRyQ2hhbmdlVHlwZSB7IE1PRElGSUNBVElPTiA9IDEsIEFERElUSU9OID0g
MiwgUkVNT1ZBTCA9IDMgfTsKLSAgICBNdXRhdGlvbkV2ZW50KCk7Ci0gICAgTXV0YXRpb25FdmVu
dChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCBhdHRyQ2hhbmdlQXJnKTsKLSAgICBOb2RlICpyZWxhdGVkTm9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVsYXRlZE5vZGUuZ2V0KCk7IH0KLSAgICBTdHJpbmcgcHJldlZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmV2VmFsdWUuZ2V0KCk7IH0KLSAgICBTdHJpbmcgbmV3VmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX25ld1ZhbHVlLmdldCgpOyB9Ci0gICAgU3RyaW5nIGF0dHJOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9hdHRyTmFtZS5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHNob3J0IGF0dHJD
aGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0dHJDaGFuZ2U7IH0KLSAgICB2b2lkIGluaXRNdXRh
dGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVs
YXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnBy
ZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3
VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJO
YW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNo
YW5nZUFyZyk7Ci0gICAgdmlydHVhbCBib29sIGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotcHJp
dmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9yZWxhdGVkTm9kZTsKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbV9wcmV2VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbmV3VmFsdWU7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fYXR0ck5hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9h
dHRyQ2hhbmdlOwotfTsKLQotY2xhc3MgQ2xpcGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewot
cHVibGljOgotICAgIENsaXBib2FyZEV2ZW50KCk7Ci0gICAgQ2xpcGJvYXJkRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nICZ0eXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJn
LCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZyk7Ci0KLSAgICBDbGlwYm9hcmQgKmNsaXBib2FyZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpcGJvYXJkLmdldCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
Q2xpcGJvYXJkRXZlbnQoKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPENsaXBib2FyZD4g
bV9jbGlwYm9hcmQ7Ci19OwotCi0vLyBleHRlbnNpb246IG1vdXNlIHdoZWVsIGV2ZW50Ci1jbGFz
cyBXaGVlbEV2ZW50IDogcHVibGljIE1vdXNlUmVsYXRlZEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAg
V2hlZWxFdmVudCgpOwotICAgIFdoZWVsRXZlbnQoYm9vbCBob3Jpem9udGFsLCBpbnQgd2hlZWxE
ZWx0YSwgQWJzdHJhY3RWaWV3ICosCi0gICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcs
IGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLCBpbnQg
Y2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0
S2V5QXJnLCBib29sIHNoaWZ0S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpOwotICAgIGJvb2wgaXNI
b3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsOyB9Ci0gICAgaW50IHdoZWVs
RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3doZWVsRGVsdGE7IH0KLQotcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIG1faG9yaXpvbnRh
bDsKLSAgICBpbnQgbV93aGVlbERlbHRhOwotfTsKLQotY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIgOiBwdWJsaWMgU2hhcmVkPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiB7Ci1wdWJsaWM6
Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICBj
b25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBl
OyB9Ci0gICAgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX2xpc3Rl
bmVyLmdldCgpOyB9Ci0gICAgYm9vbCB1c2VDYXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VD
YXB0dXJlOyB9Ci0gICAgYm9vbCByZW1vdmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVkOyB9
Ci0gICAgdm9pZCBzZXRSZW1vdmVkKGJvb2wgcmVtb3ZlZCkgeyBtX3JlbW92ZWQgPSByZW1vdmVk
OyB9Ci0gICAgCi1wcml2YXRlOgotICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKLSAgICBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9saXN0ZW5lcjsKLSAgICBib29sIG1fdXNlQ2FwdHVyZTsK
LSAgICBib29sIG1fcmVtb3ZlZDsKLX07Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJik7Ci1pbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBhLCBjb25z
dCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLS8v
IFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5k
IGNvcHkvcGFzdGUKLWNsYXNzIENsaXBib2FyZCA6IHB1YmxpYyBTaGFyZWQ8Q2xpcGJvYXJkPiB7
Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q2xpcGJvYXJkKCk7Ci0KLSAgICAvLyBJcyB0aGlzIG9w
ZXJhdGlvbiBhIGRyYWctZHJvcCBvciBhIGNvcHktcGFzdGU/Ci0gICAgdmlydHVhbCBib29sIGlz
Rm9yRHJhZ2dpbmcoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBkcm9wRWZmZWN0
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmlu
ZyAmcykgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNldEVmZmVjdEFsbG93ZWQoY29uc3QgU3RyaW5nICZzKSA9IDA7
Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcgJnR5cGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxEYXRhKCkgPSAwOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGdldERhdGEoY29uc3QgU3RyaW5nICZ0eXBlLCBib29sICZzdWNjZXNzKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nICZ0eXBlLCBjb25zdCBTdHJp
bmcgJmRhdGEpID0gMDsKLSAgICAKLSAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQot
ICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZ0xpc3QgdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAg
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBDYWNoZWRJbWFnZSogZHJhZ0ltYWdlKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCAmKSA9IDA7Ci0gICAgdmlydHVhbCBOb2RlICpkcmFnSW1hZ2VFbGVtZW50KCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUgKiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQgJikgPSAwOwotfTsKLQotY2xhc3MgQmVmb3JlVW5sb2FkRXZlbnQgOiBwdWJs
aWMgRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBCZWZvcmVVbmxvYWRFdmVudCgpOwotCi0gICAgdmly
dHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG1fcmVzdWx0OwotfTsKIAotfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gTW91c2VSZWxhdGVkRXZlbnRfaApJbmRleDogV2Vi
Q29yZS9kb20vTXV0YXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTXV0
YXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29yZS9kb20vTXV0YXRpb25F
dmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw5IEBACiAvKioKICAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0gKiAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogKEMpIDIwMDEgVG9iaWFzIEFudG9u
IChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEg
UGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMg
QW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTIyLDU1NSArMjMsNDEgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
ZG9tMl9ldmVudHNpbXBsLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgotI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKLQotRXZlbnQ6OkV2ZW50KCkKLSAgICA6IG1f
Y2FuQnViYmxlKGZhbHNlKQotICAgICwgbV9jYW5jZWxhYmxlKGZhbHNlKQotICAgICwgbV9wcm9w
YWdhdGlvblN0b3BwZWQoZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCi0g
ICAgLCBtX2RlZmF1bHRIYW5kbGVkKGZhbHNlKQotICAgICwgbV9jYW5jZWxCdWJibGUoZmFsc2Up
Ci0gICAgLCBtX2N1cnJlbnRUYXJnZXQoMCkKLSAgICAsIG1fZXZlbnRQaGFzZSgwKQotICAgICwg
bV9jcmVhdGVUaW1lKHN0YXRpY19jYXN0PERPTVRpbWVTdGFtcD4oY3VycmVudFRpbWUoKSAqIDEw
MDAuMCkpCi17Ci19Ci0KLUV2ZW50OjpFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlw
ZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZykKLSAgICA6IG1fdHlwZShl
dmVudFR5cGUpCi0gICAgLCBtX2NhbkJ1YmJsZShjYW5CdWJibGVBcmcpCi0gICAgLCBtX2NhbmNl
bGFibGUoY2FuY2VsYWJsZUFyZykKLSAgICAsIG1fcHJvcGFnYXRpb25TdG9wcGVkKGZhbHNlKQot
ICAgICwgbV9kZWZhdWx0UHJldmVudGVkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0SGFuZGxlZChm
YWxzZSkKLSAgICAsIG1fY2FuY2VsQnViYmxlKGZhbHNlKQotICAgICwgbV9jdXJyZW50VGFyZ2V0
KDApCi0gICAgLCBtX2V2ZW50UGhhc2UoMCkKLSAgICAsIG1fY3JlYXRlVGltZShzdGF0aWNfY2Fz
dDxET01UaW1lU3RhbXA+KGN1cnJlbnRUaW1lKCkgKiAxMDAwLjApKQotewotfQotCi1FdmVudDo6
fkV2ZW50KCkKLXsKLX0KLQotdm9pZCBFdmVudDo6aW5pdEV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmZXZlbnRUeXBlQXJnLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQot
ewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdHlwZSA9
IGV2ZW50VHlwZUFyZzsKLSAgICBtX2NhbkJ1YmJsZSA9IGNhbkJ1YmJsZUFyZzsKLSAgICBtX2Nh
bmNlbGFibGUgPSBjYW5jZWxhYmxlQXJnOwotfQotCi1ib29sIEV2ZW50Ojppc1VJRXZlbnQoKSBj
b25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNNb3VzZUV2ZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzTXV0YXRp
b25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojpp
c0tleWJvYXJkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBF
dmVudDo6aXNEcmFnRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEV2ZW50Ojppc1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBFdmVudDo6aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50OjpzdG9yZXNSZXN1bHRBc1N0cmlu
ZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEV2ZW50OjpzdG9yZVJl
c3VsdChjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIEV2ZW50OjpzZXRUYXJnZXQoTm9kZSog
dGFyZ2V0KQotewotICAgIG1fdGFyZ2V0ID0gdGFyZ2V0OwotICAgIGlmICh0YXJnZXQpCi0gICAg
ICAgIHJlY2VpdmVkVGFyZ2V0KCk7Ci19Ci0KLXZvaWQgRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KCkK
LXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVUlFdmVudDo6VUlFdmVudCgpCi0g
ICAgOiBtX2RldGFpbCgwKQotewotfQotCi1VSUV2ZW50OjpVSUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBB
YnN0cmFjdFZpZXcgKnZpZXdBcmcsIGludCBkZXRhaWxBcmcpCi0gICAgOiBFdmVudChldmVudFR5
cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZykKLSAgICAsIG1fdmlldyh2aWV3QXJnKQot
ICAgICwgbV9kZXRhaWwoZGV0YWlsQXJnKQotewotfQotCi12b2lkIFVJRXZlbnQ6OmluaXRVSUV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFp
bEFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bml0RXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKTsKLQotICAgIG1f
dmlldyA9IHZpZXdBcmc7Ci0gICAgbV9kZXRhaWwgPSBkZXRhaWxBcmc7Ci19Ci0KLWJvb2wgVUlF
dmVudDo6aXNVSUV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFVJ
RXZlbnQ6OmtleUNvZGUoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVu
dDo6Y2hhckNvZGUoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6
bGF5ZXJYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OmxheWVy
WSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpwYWdlWCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpwYWdlWSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50Ojp3aGljaCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIDA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vdXNlUmVsYXRlZEV2
ZW50OjpNb3VzZVJlbGF0ZWRFdmVudCgpCi0gICAgOiBtX3NjcmVlblgoMCksIG1fc2NyZWVuWSgw
KSwgbV9jbGllbnRYKDApLCBtX2NsaWVudFkoMCkKLSAgICAsIG1fcGFnZVgoMCksIG1fcGFnZVko
MCksIG1fbGF5ZXJYKDApLCBtX2xheWVyWSgwKSwgbV9vZmZzZXRYKDApLCBtX29mZnNldFkoMCks
IG1faXNTaW11bGF0ZWQoZmFsc2UpCi17Ci19Ci0KLU1vdXNlUmVsYXRlZEV2ZW50OjpNb3VzZVJl
bGF0ZWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNj
cmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRh
S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQp
Ci0gICAgOiBVSUV2ZW50V2l0aEtleVN0YXRlKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5j
ZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcsCi0gICAgICAgIGN0cmxLZXlBcmcsIGFsdEtl
eUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcpCi0gICAgLCBtX3NjcmVlblgoc2NyZWVuWEFy
ZyksIG1fc2NyZWVuWShzY3JlZW5ZQXJnKQotICAgICwgbV9jbGllbnRYKGNsaWVudFhBcmcpLCBt
X2NsaWVudFkoY2xpZW50WUFyZykKLSAgICAsIG1faXNTaW11bGF0ZWQoaXNTaW11bGF0ZWQpCi17
Ci0gICAgaW5pdENvb3JkaW5hdGVzKCk7Ci19Ci0KLXZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6Omlu
aXRDb29yZGluYXRlcygpCi17Ci0gICAgLy8gU2V0IHVwIGluaXRpYWwgdmFsdWVzIGZvciBjb29y
ZGluYXRlcy4KLSAgICAvLyBDb3JyZWN0IHZhbHVlcyBjYW4ndCBiZSBjb21wdXRlZCB1bnRpbCB3
ZSBoYXZlIGF0IHRhcmdldCwgc28gcmVjZWl2ZWRUYXJnZXQKLSAgICAvLyBkb2VzIHRoZSAicmVh
bCIgY29tcHV0YXRpb24uCi0gICAgbV9wYWdlWCA9IG1fY2xpZW50WDsKLSAgICBtX3BhZ2VZID0g
bV9jbGllbnRZOwotICAgIG1fbGF5ZXJYID0gbV9wYWdlWDsKLSAgICBtX2xheWVyWSA9IG1fcGFn
ZVk7Ci0gICAgbV9vZmZzZXRYID0gbV9wYWdlWDsKLSAgICBtX29mZnNldFkgPSBtX3BhZ2VZOwot
fQotCi12b2lkIE1vdXNlUmVsYXRlZEV2ZW50OjpyZWNlaXZlZFRhcmdldCgpCi17Ci0gICAgLy8g
Q29tcHV0ZSBjb29yZGluYXRlcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUgdGFyZ2V0LgotICAgIG1f
b2Zmc2V0WCA9IG1fcGFnZVg7Ci0gICAgbV9vZmZzZXRZID0gbV9wYWdlWTsKLSAgICBtX2xheWVy
WCA9IG1fcGFnZVg7ICAgIAotICAgIG1fbGF5ZXJZID0gbV9wYWdlWTsgICAgCi0KLSAgICBOb2Rl
KiB0YXJnID0gdGFyZ2V0KCk7Ci0gICAgQVNTRVJUKHRhcmcpOwotCi0gICAgLy8gTXVzdCBoYXZl
IGFuIHVwZGF0ZWQgcmVuZGVyIHRyZWUgZm9yIHRoaXMgbWF0aCB0byB3b3JrIGNvcnJlY3RseS4K
LSAgICB0YXJnLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKLQotICAgIC8vIEZJWE1F
OiBjbGllbnRYL1kgc2hvdWxkIG5vdCBiZSB0aGUgc2FtZSBhcyBwYWdlWC9ZIQotICAgIC8vIEN1
cnJlbnRseSB0aGUgcGFzc2VkLWluIGNsaWVudFggYW5kIGNsaWVudFkgYXJlIGluY29ycmVjdGx5
IGFjdHVhbGx5Ci0gICAgLy8gcGFnZVggYW5kIHBhZ2VZIHZhbHVlcywgc28gd2UgZG9uJ3QgaGF2
ZSBhbnkgd29yayB0byBkbyBoZXJlLCBidXQgaWYKLSAgICAvLyB3ZSBzdGFydGVkIHBhc3Npbmcg
aW4gY29ycmVjdCBjbGllbnRYIGFuZCBjbGllbnRZLCB3ZSdkIHdhbnQgdG8gY29tcHV0ZQotICAg
IC8vIHBhZ2VYIGFuZCBwYWdlWSBoZXJlLgotCi0gICAgLy8gQWRqdXN0IG9mZnNldFgvWSB0byBi
ZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0J3MgcG9zaXRpb24uCi0gICAgaWYgKCFpc1NpbXVsYXRl
ZCgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSB0YXJnLT5yZW5kZXJlcigpKSB7
Ci0gICAgICAgICAgICBpbnQgcngsIHJ5OwotICAgICAgICAgICAgaWYgKHItPmFic29sdXRlUG9z
aXRpb24ocngsIHJ5KSkgewotICAgICAgICAgICAgICAgIG1fb2Zmc2V0WCAtPSByeDsKLSAgICAg
ICAgICAgICAgICBtX29mZnNldFkgLT0gcnk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBBZGp1c3QgbGF5ZXJYL1kgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGxheWVy
LgotICAgIC8vIEZJWE1FOiBXZSdyZSBwcmV0dHkgc3VyZSB0aGlzIGlzIHRoZSB3cm9uZyBkZWZp
bnRpb24gb2YgImxheWVyLiIKLSAgICAvLyBPdXIgUmVuZGVyTGF5ZXIgaXMgYSBtb3JlIG1vZGVy
biBjb25jZXB0LCBhbmQgbGF5ZXJYL1kgaXMgc29tZQotICAgIC8vIG90aGVyIG5vdGlvbiBhYm91
dCBncm91cHMgb2YgZWxlbWVudHM7IHdlIHNob3VsZCB0ZXN0IGFuZCBmaXggdGhpcy4KLSAgICBO
b2RlKiBuID0gdGFyZzsKLSAgICB3aGlsZSAobiAmJiAhbi0+cmVuZGVyZXIoKSkKLSAgICAgICAg
biA9IG4tPnBhcmVudCgpOwotICAgIGlmIChuKSB7Ci0gICAgICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IG4tPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGxheWVyLT51cGRh
dGVMYXllclBvc2l0aW9uKCk7Ci0gICAgICAgIGZvciAoOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+
cGFyZW50KCkpIHsKLSAgICAgICAgICAgIG1fbGF5ZXJYIC09IGxheWVyLT54UG9zKCk7Ci0gICAg
ICAgICAgICBtX2xheWVyWSAtPSBsYXllci0+eVBvcygpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnBhZ2VYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
YWdlWDsKLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2ZW50OjpwYWdlWSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcGFnZVk7Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVudDo6eCgpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNvcnJlY3QuCi0gICAgLy8gU2VlIE1pY3Jvc29m
dCBkb2N1bWVudGF0aW9uIGFuZCA8aHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vdzNjX2V2
ZW50cy5odG1sPi4KLSAgICByZXR1cm4gbV9jbGllbnRYOwotfQotCi1pbnQgTW91c2VSZWxhdGVk
RXZlbnQ6OnkoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb3JyZWN0Lgot
ICAgIC8vIFNlZSBNaWNyb3NvZnQgZG9jdW1lbnRhdGlvbiBhbmQgPGh0dHA6Ly93d3cucXVpcmtz
bW9kZS5vcmcvZG9tL3czY19ldmVudHMuaHRtbD4uCi0gICAgcmV0dXJuIG1fY2xpZW50WTsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTW91c2VFdmVudDo6TW91c2VFdmVudCgpCi0g
ICAgOiBtX2J1dHRvbigwKQotewotfQotCi1Nb3VzZUV2ZW50OjpNb3VzZUV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
Y2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcg
KnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkKQotICAgIDog
TW91c2VSZWxhdGVkRXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcs
IHZpZXdBcmcsIGRldGFpbEFyZywKLSAgICAgICAgc2NyZWVuWEFyZywgc2NyZWVuWUFyZywgY2xp
ZW50WEFyZywgY2xpZW50WUFyZywKLSAgICAgICAgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlm
dEtleUFyZywgbWV0YUtleUFyZywgaXNTaW11bGF0ZWQpCi0gICAgLCBtX2J1dHRvbihidXR0b25B
cmcpCi0gICAgLCBtX3JlbGF0ZWRUYXJnZXQocmVsYXRlZFRhcmdldEFyZykKLSAgICAsIG1fY2xp
cGJvYXJkKGNsaXBib2FyZEFyZykKLXsKLX0KLQotTW91c2VFdmVudDo6fk1vdXNlRXZlbnQoKQot
ewotfQotCi12b2lkIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2Fu
QnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RW
aWV3KiB2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl
dGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5Y
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0QXJn
KQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRV
SUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0
YWlsQXJnKTsKLQotICAgIG1fc2NyZWVuWCA9IHNjcmVlblhBcmc7Ci0gICAgbV9zY3JlZW5ZID0g
c2NyZWVuWUFyZzsKLSAgICBtX2NsaWVudFggPSBjbGllbnRYQXJnOwotICAgIG1fY2xpZW50WSA9
IGNsaWVudFlBcmc7Ci0gICAgbV9jdHJsS2V5ID0gY3RybEtleUFyZzsKLSAgICBtX2FsdEtleSA9
IGFsdEtleUFyZzsKLSAgICBtX3NoaWZ0S2V5ID0gc2hpZnRLZXlBcmc7Ci0gICAgbV9tZXRhS2V5
ID0gbWV0YUtleUFyZzsKLSAgICBtX2J1dHRvbiA9IGJ1dHRvbkFyZzsKLSAgICBtX3JlbGF0ZWRU
YXJnZXQgPSByZWxhdGVkVGFyZ2V0QXJnOwotCi0gICAgaW5pdENvb3JkaW5hdGVzKCk7Ci19Ci0K
LWJvb2wgTW91c2VFdmVudDo6aXNNb3VzZUV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50Ojppc0RyYWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgY29u
c3QgQXRvbWljU3RyaW5nICZ0ID0gdHlwZSgpOwotICAgIHJldHVybiB0ID09IGRyYWdlbnRlckV2
ZW50IHx8IHQgPT0gZHJhZ292ZXJFdmVudCB8fCB0ID09IGRyYWdsZWF2ZUV2ZW50Ci0gICAgICAg
IHx8IHQgPT0gZHJvcEV2ZW50Ci0gICAgICAgIHx8IHQgPT0gZHJhZ3N0YXJ0RXZlbnQgfHwgdCA9
PSBkcmFnRXZlbnQgfHwgdCA9PSBkcmFnZW5kRXZlbnQ7Ci19Ci0KLWludCBNb3VzZUV2ZW50Ojp3
aGljaCgpIGNvbnN0Ci17Ci0gICAgLy8gRm9yIEtIVE1MLCB0aGUgcmV0dXJuIHZhbHVlcyBmb3Ig
bGVmdCwgbWlkZGxlIGFuZCByaWdodCBtb3VzZSBidXR0b25zIGFyZSAwLCAxLCAyLCByZXNwZWN0
aXZlbHkuCi0gICAgLy8gRm9yIHRoZSBOZXRzY2FwZSAid2hpY2giIHByb3BlcnR5LCB0aGUgcmV0
dXJuIHZhbHVlcyBmb3IgbGVmdCwgbWlkZGxlIGFuZCByaWdodCBtb3VzZSBidXR0b25zIGFyZSAx
LCAyLCAzLCByZXNwZWN0aXZlbHkuIAotICAgIC8vIFNvIHdlIG11c3QgYWRkIDEuCi0gICAgcmV0
dXJuIG1fYnV0dG9uICsgMTsKLX0KLQotTm9kZSogTW91c2VFdmVudDo6dG9FbGVtZW50KCkgY29u
c3QKLXsKLSAgICAvLyBNU0lFIGV4dGVuc2lvbiAtICJ0aGUgb2JqZWN0IHRvd2FyZCB3aGljaCB0
aGUgdXNlciBpcyBtb3ZpbmcgdGhlIG1vdXNlIHBvaW50ZXIiCi0gICAgcmV0dXJuIHR5cGUoKSA9
PSBtb3VzZW91dEV2ZW50ID8gcmVsYXRlZFRhcmdldCgpIDogdGFyZ2V0KCk7Ci19Ci0KLU5vZGUq
IE1vdXNlRXZlbnQ6OmZyb21FbGVtZW50KCkgY29uc3QKLXsKLSAgICAvLyBNU0lFIGV4dGVuc2lv
biAtICJvYmplY3QgZnJvbSB3aGljaCBhY3RpdmF0aW9uIG9yIHRoZSBtb3VzZSBwb2ludGVyIGlz
IGV4aXRpbmcgZHVyaW5nIHRoZSBldmVudCIgKGh1aD8pCi0gICAgcmV0dXJuIHR5cGUoKSA9PSBt
b3VzZW91dEV2ZW50ID8gdGFyZ2V0KCkgOiByZWxhdGVkVGFyZ2V0KCk7Ci19Ci0KLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJk
RXZlbnQoKQotICA6IG1fa2V5RXZlbnQoMCkKLSAgLCBtX2tleUxvY2F0aW9uKERPTV9LRVlfTE9D
QVRJT05fU1RBTkRBUkQpCi0gICwgbV9hbHRHcmFwaEtleShmYWxzZSkKLXsKLX0KLQotS2V5Ym9h
cmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleSwg
QWJzdHJhY3RWaWV3ICp2aWV3KQotICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoa2V5LmlzS2V5VXAo
KSA/IGtleXVwRXZlbnQgOiBrZXkuaXNBdXRvUmVwZWF0KCkgPyBrZXlwcmVzc0V2ZW50IDoga2V5
ZG93bkV2ZW50LAotICAgIHRydWUsIHRydWUsIHZpZXcsIDAsIGtleS5jdHJsS2V5KCksIGtleS5h
bHRLZXkoKSwga2V5LnNoaWZ0S2V5KCksIGtleS5tZXRhS2V5KCkpCi0gICwgbV9rZXlFdmVudChu
ZXcgUGxhdGZvcm1LZXlib2FyZEV2ZW50KGtleSkpCi0gICwgbV9rZXlJZGVudGlmaWVyKFN0cmlu
ZyhrZXkua2V5SWRlbnRpZmllcigpKS5pbXBsKCkpCi0gICwgbV9rZXlMb2NhdGlvbihrZXkuaXNL
ZXlwYWQoKSA/IERPTV9LRVlfTE9DQVRJT05fTlVNUEFEIDogRE9NX0tFWV9MT0NBVElPTl9TVEFO
REFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5KGZhbHNlKQotewotfQotCi1LZXlib2FyZEV2ZW50OjpL
ZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
a2V5SWRlbnRpZmllckFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQga2V5TG9jYXRpb25BcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZykKLSAgOiBVSUV2ZW50V2l0
aEtleVN0YXRlKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJn
LCAwLCBjdHJsS2V5QXJnLCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnKQotICAs
IG1fa2V5RXZlbnQoMCkKLSAgLCBtX2tleUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckFyZy5pbXBs
KCkpCi0gICwgbV9rZXlMb2NhdGlvbihrZXlMb2NhdGlvbkFyZykKLSAgLCBtX2FsdEdyYXBoS2V5
KGFsdEdyYXBoS2V5QXJnKQotewotfQotCi1LZXlib2FyZEV2ZW50Ojp+S2V5Ym9hcmRFdmVudCgp
Ci17Ci0gICAgZGVsZXRlIG1fa2V5RXZlbnQ7Ci19Ci0KLXZvaWQgS2V5Ym9hcmRFdmVudDo6aW5p
dEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcg
KnZpZXdBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZrZXlJZGVu
dGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9u
QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNoaWZ0S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtl
eUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKQotewot
ICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRVSUV2ZW50
KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgMCk7Ci0KLSAg
ICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyQXJnLmltcGwoKTsKLSAgICBtX2tleUxv
Y2F0aW9uID0ga2V5TG9jYXRpb25Bcmc7Ci0gICAgbV9jdHJsS2V5ID0gY3RybEtleUFyZzsKLSAg
ICBtX3NoaWZ0S2V5ID0gc2hpZnRLZXlBcmc7Ci0gICAgbV9hbHRLZXkgPSBhbHRLZXlBcmc7Ci0g
ICAgbV9tZXRhS2V5ID0gbWV0YUtleUFyZzsKLSAgICBtX2FsdEdyYXBoS2V5ID0gYWx0R3JhcGhL
ZXlBcmc7Ci19Ci0KLWludCBLZXlib2FyZEV2ZW50OjprZXlDb2RlKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fa2V5RXZlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh0eXBlKCkgPT0ga2V5
ZG93bkV2ZW50IHx8IHR5cGUoKSA9PSBrZXl1cEV2ZW50KQotICAgICAgICByZXR1cm4gbV9rZXlF
dmVudC0+V2luZG93c0tleUNvZGUoKTsKLSAgICByZXR1cm4gY2hhckNvZGUoKTsKLX0KLQotaW50
IEtleWJvYXJkRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fa2V5RXZlbnQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIFN0cmluZyB0ZXh0ID0gbV9rZXlFdmVudC0+dGV4dCgp
OwotICAgIGlmICh0ZXh0Lmxlbmd0aCgpICE9IDEpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiB0ZXh0WzBdOwotfQotCi1ib29sIEtleWJvYXJkRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWludCBLZXlib2FyZEV2ZW50Ojp3aGlj
aCgpIGNvbnN0Ci17Ci0gICAgLy8gTmV0c2NhcGUncyAid2hpY2giIHJldHVybnMgYSB2aXJ0dWFs
IGtleSBjb2RlIGZvciBrZXlkb3duIGFuZCBrZXl1cCwgYW5kIGEgY2hhcmFjdGVyIGNvZGUgZm9y
IGtleXByZXNzLgotICAgIC8vIFRoYXQncyBleGFjdGx5IHdoYXQgSUUncyAia2V5Q29kZSIgcmV0
dXJucy4gU28gdGhleSBhcmUgdGhlIHNhbWUgZm9yIGtleWJvYXJkIGV2ZW50cy4KLSAgICByZXR1
cm4ga2V5Q29kZSgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBNdXRhdGlvbkV2
ZW50OjpNdXRhdGlvbkV2ZW50KCkKICAgICA6IG1fYXR0ckNoYW5nZSgwKQogewogfQogCi1NdXRh
dGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxhdGVkTm9kZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnBy
ZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZykKLSAgICA6IEV2ZW50KGV2ZW50
VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKQotICAgICwgbV9yZWxhdGVkTm9kZShy
ZWxhdGVkTm9kZUFyZykKLSAgICAsIG1fcHJldlZhbHVlKHByZXZWYWx1ZUFyZy5pbXBsKCkpCi0g
ICAgLCBtX25ld1ZhbHVlKG5ld1ZhbHVlQXJnLmltcGwoKSkKLSAgICAsIG1fYXR0ck5hbWUoYXR0
ck5hbWVBcmcuaW1wbCgpKQotICAgICwgbV9hdHRyQ2hhbmdlKGF0dHJDaGFuZ2VBcmcpCitNdXRh
dGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBj
YW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgTm9kZSogcmVsYXRlZE5vZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJldlZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGF0
dHJOYW1lLCB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKQorICAgIDogRXZlbnQodHlwZSwgY2Fu
QnViYmxlLCBjYW5jZWxhYmxlKQorICAgICwgbV9yZWxhdGVkTm9kZShyZWxhdGVkTm9kZSkKKyAg
ICAsIG1fcHJldlZhbHVlKHByZXZWYWx1ZS5pbXBsKCkpCisgICAgLCBtX25ld1ZhbHVlKG5ld1Zh
bHVlLmltcGwoKSkKKyAgICAsIG1fYXR0ck5hbWUoYXR0ck5hbWUuaW1wbCgpKQorICAgICwgbV9h
dHRyQ2hhbmdlKGF0dHJDaGFuZ2UpCiB7CiB9CiAKLXZvaWQgTXV0YXRpb25FdmVudDo6aW5pdE11
dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxhdGVkTm9kZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJn
KQordm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIE5vZGUqIHJlbGF0ZWRO
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHByZXZWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhdHRyTmFtZSwgdW5zaWduZWQgc2hvcnQg
YXR0ckNoYW5nZSkKIHsKICAgICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpbml0RXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKTsKKyAg
ICBpbml0RXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKTsKIAotICAgIG1fcmVsYXRl
ZE5vZGUgPSByZWxhdGVkTm9kZUFyZzsKLSAgICBtX3ByZXZWYWx1ZSA9IHByZXZWYWx1ZUFyZy5p
bXBsKCk7Ci0gICAgbV9uZXdWYWx1ZSA9IG5ld1ZhbHVlQXJnLmltcGwoKTsKLSAgICBtX2F0dHJO
YW1lID0gYXR0ck5hbWVBcmcuaW1wbCgpOwotICAgIG1fYXR0ckNoYW5nZSA9IGF0dHJDaGFuZ2VB
cmc7CisgICAgbV9yZWxhdGVkTm9kZSA9IHJlbGF0ZWROb2RlOworICAgIG1fcHJldlZhbHVlID0g
cHJldlZhbHVlLmltcGwoKTsKKyAgICBtX25ld1ZhbHVlID0gbmV3VmFsdWUuaW1wbCgpOworICAg
IG1fYXR0ck5hbWUgPSBhdHRyTmFtZS5pbXBsKCk7CisgICAgbV9hdHRyQ2hhbmdlID0gYXR0ckNo
YW5nZTsKIH0KIAogYm9vbCBNdXRhdGlvbkV2ZW50Ojppc011dGF0aW9uRXZlbnQoKSBjb25zdApA
QCAtNTc4LDc3ICs2NSw0IEBAIGJvb2wgTXV0YXRpb25FdmVudDo6aXNNdXRhdGlvbkV2ZW50KCkg
Y28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2xp
cGJvYXJkRXZlbnQ6OkNsaXBib2FyZEV2ZW50KCkKLXsKLX0KLQotQ2xpcGJvYXJkRXZlbnQ6OkNs
aXBib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJs
ZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZykKLSAgICA6
IEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKSwgbV9jbGlwYm9h
cmQoY2xpcGJvYXJkQXJnKQotewotfQotCi1ib29sIENsaXBib2FyZEV2ZW50Ojppc0NsaXBib2Fy
ZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotV2hlZWxFdmVudDo6V2hlZWxFdmVudCgpIDogbV9ob3Jpem9udGFsKGZhbHNl
KSwgbV93aGVlbERlbHRhKDApCi17Ci19Ci0KLVdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoYm9vbCBo
LCBpbnQgZCwgQWJzdHJhY3RWaWV3ICp2LAotICAgIGludCBzeCwgaW50IHN5LCBpbnQgY3gsIGlu
dCBjeSwgYm9vbCBjdHJsLCBib29sIGFsdCwgYm9vbCBzaGlmdCwgYm9vbCBtZXRhKQotICAgIDog
TW91c2VSZWxhdGVkRXZlbnQoaCA/IGtodG1sSG9yaXpvbnRhbG1vdXNld2hlZWxFdmVudCA6IG1v
dXNld2hlZWxFdmVudCwKLSAgICAgICAgdHJ1ZSwgdHJ1ZSwgdiwgMCwgc3gsIHN5LCBjeCwgY3ks
IGN0cmwsIGFsdCwgc2hpZnQsIG1ldGEpCi0gICAgLCBtX2hvcml6b250YWwoaCksIG1fd2hlZWxE
ZWx0YShkKQotewotfQotCi1ib29sIFdoZWVsRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9v
bCB1c2VDYXB0dXJlKQotICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICwgbV9saXN0
ZW5lcihsaXN0ZW5lcikKLSAgICAsIG1fdXNlQ2FwdHVyZSh1c2VDYXB0dXJlKQotICAgICwgbV9y
ZW1vdmVkKGZhbHNlKQotewotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIgJmEsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZiKQotewotICAg
IHJldHVybiBhLmV2ZW50VHlwZSgpID09IGIuZXZlbnRUeXBlKCkgJiYgYS5saXN0ZW5lcigpID09
IGIubGlzdGVuZXIoKSAmJiBhLnVzZUNhcHR1cmUoKSA9PSBiLnVzZUNhcHR1cmUoKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2xpcGJvYXJkOjp+Q2xpcGJvYXJkKCkKLXsKLX0K
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQmVmb3JlVW5sb2FkRXZlbnQ6OkJlZm9yZVVu
bG9hZEV2ZW50KCkKLSAgICA6IEV2ZW50KGJlZm9yZXVubG9hZEV2ZW50LCBmYWxzZSwgdHJ1ZSkK
LXsKLX0KLQotYm9vbCBCZWZvcmVVbmxvYWRFdmVudDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBj
b25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJlZm9yZVVubG9hZEV2ZW50Ojpz
dG9yZVJlc3VsdChjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgbV9yZXN1bHQgPSBzLmltcGwoKTsK
LX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vTXV0YXRp
b25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuaAkocmV2
aXNpb24gMTQ5MDApCisrKyBXZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVG9iaWFzIEFudG9uIChhbnRv
bkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw0
NTggKzIzLDQ3IEBACiAgKgogICovCiAKLSNpZm5kZWYgRE9NX0VWRU5UU0lNUExfSAotI2RlZmlu
ZSBET01fRVZFTlRTSU1QTF9ICisjaWZuZGVmIE11dGF0aW9uRXZlbnRfaAorI2RlZmluZSBNdXRh
dGlvbkV2ZW50X2gKIAotI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCi1jbGFzcyBE
ZXByZWNhdGVkU3RyaW5nTGlzdDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNo
ZWRJbWFnZTsKLWNsYXNzIENsaXBib2FyZDsKLWNsYXNzIEV2ZW50TGlzdGVuZXI7Ci1jbGFzcyBF
dmVudFRhcmdldE5vZGU7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgUGxh
dGZvcm1LZXlib2FyZEV2ZW50OwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBET01UaW1l
U3RhbXA7Ci10eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7Ci0KLWNvbnN0IGludCBFdmVu
dEV4Y2VwdGlvbk9mZnNldCA9IDEwMDsKLWNvbnN0IGludCBFdmVudEV4Y2VwdGlvbk1heCA9IDE5
OTsKLWVudW0gRXZlbnRFeGNlcHRpb25Db2RlIHsgVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIg
PSBFdmVudEV4Y2VwdGlvbk9mZnNldCB9OwotCi1jbGFzcyBFdmVudCA6IHB1YmxpYyBTaGFyZWQ8
RXZlbnQ+Ci17Ci1wdWJsaWM6Ci0gICAgZW51bSBQaGFzZVR5cGUgeyAKLSAgICAgICAgQ0FQVFVS
SU5HX1BIQVNFID0gMSwgCi0gICAgICAgIEFUX1RBUkdFVCA9IDIsIAotICAgICAgICBCVUJCTElO
R19QSEFTRSA9IDMgCi0gICAgfTsKLQotICAgIC8vIFJldmVyc2UtZW5naW5lZXJlZCBmcm9tIE5l
dHNjYXBlCi0gICAgZW51bSBFdmVudFR5cGUgewotICAgICAgICBNT1VTRURPV04gICAgICAgICAg
ID0gMSwKLSAgICAgICAgTU9VU0VVUCAgICAgICAgICAgICA9IDIsCi0gICAgICAgIE1PVVNFT1ZF
UiAgICAgICAgICAgPSA0LAotICAgICAgICBNT1VTRU9VVCAgICAgICAgICAgID0gOCwKLSAgICAg
ICAgTU9VU0VNT1ZFICAgICAgICAgICA9IDE2LAotICAgICAgICBNT1VTRURSQUcgICAgICAgICAg
ID0gMzIsCi0gICAgICAgIENMSUNLICAgICAgICAgICAgICAgPSA2NCwKLSAgICAgICAgREJMQ0xJ
Q0sgICAgICAgICAgICA9IDEyOCwKLSAgICAgICAgS0VZRE9XTiAgICAgICAgICAgICA9IDI1NiwK
LSAgICAgICAgS0VZVVAgICAgICAgICAgICAgICA9IDUxMiwKLSAgICAgICAgS0VZUFJFU1MgICAg
ICAgICAgICA9IDEwMjQsCi0gICAgICAgIERSQUdEUk9QICAgICAgICAgICAgPSAyMDQ4LAotICAg
ICAgICBGT0NVUyAgICAgICAgICAgICAgID0gNDA5NiwKLSAgICAgICAgQkxVUiAgICAgICAgICAg
ICAgICA9IDgxOTIsCi0gICAgICAgIFNFTEVDVCAgICAgICAgICAgICAgPSAxNjM4NCwKLSAgICAg
ICAgQ0hBTkdFICAgICAgICAgICAgICA9IDMyNzY4Ci0gICAgfTsKLSAgICAKLSAgICBFdmVudCgp
OwotICAgIEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0gICAgdmlydHVhbCB+RXZlbnQoKTsKLQotICAgIGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIE5vZGUq
IHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9Ci0gICAgdm9pZCBzZXRU
YXJnZXQoTm9kZSopOwotICAgIE5vZGUqIGN1cnJlbnRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRUYXJnZXQ7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRUYXJnZXQoTm9kZSogY3VycmVu
dFRhcmdldCkgeyBtX2N1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0OyB9Ci0gICAgdW5zaWdu
ZWQgc2hvcnQgZXZlbnRQaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRQaGFzZTsgfQotICAg
IHZvaWQgc2V0RXZlbnRQaGFzZSh1bnNpZ25lZCBzaG9ydCBldmVudFBoYXNlKSB7IG1fZXZlbnRQ
aGFzZSA9IGV2ZW50UGhhc2U7IH0KLSAgICBib29sIGJ1YmJsZXMoKSBjb25zdCB7IHJldHVybiBt
X2NhbkJ1YmJsZTsgfQotICAgIGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fu
Y2VsYWJsZTsgfQotICAgIERPTVRpbWVTdGFtcCB0aW1lU3RhbXAoKSB7IHJldHVybiBtX2NyZWF0
ZVRpbWU7IH0KLSAgICB2b2lkIHN0b3BQcm9wYWdhdGlvbigpIHsgbV9wcm9wYWdhdGlvblN0b3Bw
ZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBwcmV2ZW50RGVmYXVsdCgpIHsgaWYgKG1fY2FuY2VsYWJs
ZSkgbV9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgaW5pdEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlQXJnLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5j
ZWxhYmxlQXJnKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTXV0
YXRpb25FdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsgLy8gYSBzdWJzZXQg
b2YgbW91c2UgZXZlbnRzCi0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdDsKLQotICAgIGJvb2wgcHJvcGFn
YXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0b3BwZWQ7IH0KLSAg
ICBib29sIGRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRQcmV2ZW50
ZWQ7IH0KLQotICAgIHZvaWQgc2V0RGVmYXVsdEhhbmRsZWQoKSB7IG1fZGVmYXVsdEhhbmRsZWQg
PSB0cnVlOyB9Ci0gICAgYm9vbCBkZWZhdWx0SGFuZGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVm
YXVsdEhhbmRsZWQ7IH0KLQotICAgIHZvaWQgc2V0Q2FuY2VsQnViYmxlKGJvb2wgY2FuY2VsKSB7
IG1fY2FuY2VsQnViYmxlID0gY2FuY2VsOyB9Ci0gICAgdm9pZCBzZXREZWZhdWx0UHJldmVudGVk
KGJvb2wgZGVmYXVsdFByZXZlbnRlZCkgeyBtX2RlZmF1bHRQcmV2ZW50ZWQgPSBkZWZhdWx0UHJl
dmVudGVkOyB9Ci0gICAgYm9vbCBnZXRDYW5jZWxCdWJibGUoKSBjb25zdCB7IHJldHVybiBtX2Nh
bmNlbEJ1YmJsZTsgfQotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkVGFyZ2V0KCk7Ci0gICAgYm9vbCBk
aXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KLQotcHJpdmF0ZToKLSAgICBB
dG9taWNTdHJpbmcgbV90eXBlOwotICAgIGJvb2wgbV9jYW5CdWJibGU7Ci0gICAgYm9vbCBtX2Nh
bmNlbGFibGU7Ci0KLSAgICBib29sIG1fcHJvcGFnYXRpb25TdG9wcGVkOwotICAgIGJvb2wgbV9k
ZWZhdWx0UHJldmVudGVkOwotICAgIGJvb2wgbV9kZWZhdWx0SGFuZGxlZDsKLSAgICBib29sIG1f
Y2FuY2VsQnViYmxlOwotCi0gICAgTm9kZSogbV9jdXJyZW50VGFyZ2V0OyAvLyByZWYgPiAwIG1h
aW50YWluZWQgZXh0ZXJuYWxseQotICAgIHVuc2lnbmVkIHNob3J0IG1fZXZlbnRQaGFzZTsKLSAg
ICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Ci0gICAgRE9NVGltZVN0YW1wIG1fY3JlYXRlVGltZTsK
LX07Ci0KLWNsYXNzIFVJRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBVSUV2
ZW50KCk7Ci0gICAgVUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAg
ICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxl
QXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAg
ICAgICBpbnQgZGV0YWlsQXJnKTsKLSAgICBBYnN0cmFjdFZpZXcgKnZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZXcuZ2V0KCk7IH0KLSAgICBpbnQgZGV0YWlsKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXRhaWw7IH0KLSAgICB2b2lkIGluaXRVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7Ci0g
ICAgdmlydHVhbCBib29sIGlzVUlFdmVudCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQga2V5
Q29kZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNoYXJDb2RlKCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGludCBsYXllclgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsYXllclkoKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgaW50IHBhZ2VYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFn
ZVkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEFic3RyYWN0Vmlldz4gbV92aWV3OwotICAgIGludCBtX2RldGFpbDsKLX07
Ci0KLWNsYXNzIFVJRXZlbnRXaXRoS2V5U3RhdGUgOiBwdWJsaWMgVUlFdmVudCB7Ci1wdWJsaWM6
Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZSgpIDogbV9jdHJsS2V5KGZhbHNlKSwgbV9hbHRLZXko
ZmFsc2UpLCBtX3NoaWZ0S2V5KGZhbHNlKSwgbV9tZXRhS2V5KGZhbHNlKSB7IH0KLSAgICBVSUV2
ZW50V2l0aEtleVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBjYW5CdWJibGVB
cmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICBp
bnQgZGV0YWlsQXJnLCBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0
S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpCi0gICAgICAgIDogVUlFdmVudCh0eXBlLCBjYW5CdWJi
bGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZykKLSAgICAgICAgLCBtX2N0
cmxLZXkoY3RybEtleUFyZyksIG1fYWx0S2V5KGFsdEtleUFyZyksIG1fc2hpZnRLZXkoc2hpZnRL
ZXlBcmcpLCBtX21ldGFLZXkobWV0YUtleUFyZykgeyB9Ci0KLSAgICBib29sIGN0cmxLZXkoKSBj
b25zdCB7IHJldHVybiBtX2N0cmxLZXk7IH0KLSAgICBib29sIHNoaWZ0S2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGlmdEtleTsgfQotICAgIGJvb2wgYWx0S2V5KCkgY29uc3QgeyByZXR1cm4gbV9h
bHRLZXk7IH0KLSAgICBib29sIG1ldGFLZXkoKSBjb25zdCB7IHJldHVybiBtX21ldGFLZXk7IH0K
LQotcHJvdGVjdGVkOiAvLyBleHBvc2UgdGhlc2Ugc28gaW5pdCBmdW5jdGlvbnMgY2FuIHNldCB0
aGVtCi0gICAgYm9vbCBtX2N0cmxLZXkgOiAxOwotICAgIGJvb2wgbV9hbHRLZXkgOiAxOwotICAg
IGJvb2wgbV9zaGlmdEtleSA6IDE7Ci0gICAgYm9vbCBtX21ldGFLZXkgOiAxOwotfTsKLQotLy8g
SW50ZXJuYWwgb25seTogSGVscGVyIGNsYXNzIGZvciB3aGF0J3MgY29tbW9uIGJldHdlZW4gbW91
c2UgYW5kIHdoZWVsIGV2ZW50cy4KLWNsYXNzIE1vdXNlUmVsYXRlZEV2ZW50IDogcHVibGljIFVJ
RXZlbnRXaXRoS2V5U3RhdGUgewotcHVibGljOgotICAgIE1vdXNlUmVsYXRlZEV2ZW50KCk7Ci0g
ICAgTW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZ
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1l
dGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQgPSBm
YWxzZSk7Ci0gICAgaW50IHNjcmVlblgoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblg7IH0KLSAg
ICBpbnQgc2NyZWVuWSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuWTsgfQotICAgIGludCBjbGll
bnRYKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRYOyB9Ci0gICAgaW50IGNsaWVudFkoKSBjb25z
dCB7IHJldHVybiBtX2NsaWVudFk7IH0KLSAgICBpbnQgbGF5ZXJYKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclg7IH0KLSAgICBpbnQgbGF5ZXJZKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclk7IH0K
LSAgICBpbnQgb2Zmc2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WDsgfQotICAgIGludCBv
ZmZzZXRZKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRZOyB9Ci0gICAgYm9vbCBpc1NpbXVsYXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTaW11bGF0ZWQ7IH0KLSAgICB2aXJ0dWFsIGludCBwYWdl
WCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0gICAgaW50IHgoKSBj
b25zdDsKLSAgICBpbnQgeSgpIGNvbnN0OwotcHJvdGVjdGVkOiAvLyBleHBvc2UgdGhlc2Ugc28g
TW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQgY2FuIHNldCB0aGVtCi0gICAgaW50IG1fc2NyZWVu
WDsKLSAgICBpbnQgbV9zY3JlZW5ZOwotICAgIGludCBtX2NsaWVudFg7Ci0gICAgaW50IG1fY2xp
ZW50WTsKLSAgICB2b2lkIGluaXRDb29yZGluYXRlcygpOwotICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlZFRhcmdldCgpOwotcHJpdmF0ZToKLSAgICBpbnQgbV9wYWdlWDsKLSAgICBpbnQgbV9wYWdl
WTsKLSAgICBpbnQgbV9sYXllclg7Ci0gICAgaW50IG1fbGF5ZXJZOwotICAgIGludCBtX29mZnNl
dFg7Ci0gICAgaW50IG1fb2Zmc2V0WTsKLSAgICBib29sIG1faXNTaW11bGF0ZWQ7Ci19OwotCi0v
LyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi1jbGFzcyBNb3VzZUV2ZW50IDogcHVibGljIE1v
dXNlUmVsYXRlZEV2ZW50IHsKLXB1YmxpYzoKLSAgICBNb3VzZUV2ZW50KCk7Ci0gICAgTW91c2VF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgIEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAgICAgICAgICAgICAg
ICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAg
ICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBj
bGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAg
ICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGFsdEtl
eUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAg
ICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVk
VGFyZ2V0QXJnLAotICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCogY2xpcGJvYXJkQXJnID0g
MCwKLSAgICAgICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIHZp
cnR1YWwgfk1vdXNlRXZlbnQoKTsKLSAgICAvLyBXaW5JRSB1c2VzIDEsNCwyIGZvciBsZWZ0L21p
ZGRsZS9yaWdodCBidXQgbm90IGZvciBjbGljayAoanVzdCBmb3IgbW91c2Vkb3duL3VwLCBtYXli
ZSBvdGhlcnMpLCBidXQgd2Ugd2lsbCBtYXRjaCB0aGUgc3RhbmRhcmQgRE9NLgotICAgIHVuc2ln
bmVkIHNob3J0IGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dG9uOyB9Ci0gICAgRXZlbnRU
YXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkVGFyZ2V0
LmdldCgpOyB9Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aXBib2FyZC5nZXQoKTsgfQotICAgIE5vZGUqIHRvRWxlbWVudCgpIGNvbnN0OwotICAgIE5vZGUq
IGZyb21FbGVtZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0TW91c2VFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Ny
ZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1
dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRl
ZFRhcmdldEFyZyk7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNo
KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIHVuc2lnbmVkIHNob3J0IG1fYnV0dG9uOwotICAgIFJl
ZlB0cjxFdmVudFRhcmdldE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKLSAgICBSZWZQdHI8Q2xpcGJv
YXJkPiBtX2NsaXBib2FyZDsKLX07Ci0KLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMwot
Y2xhc3MgS2V5Ym9hcmRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1Ymxp
YzoKLSAgICBlbnVtIEtleUxvY2F0aW9uQ29kZSB7Ci0gICAgICAgIERPTV9LRVlfTE9DQVRJT05f
U1RBTkRBUkQgICAgICA9IDB4MDAsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fTEVGVCAgICAg
ICAgICA9IDB4MDEsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fUklHSFQgICAgICAgICA9IDB4
MDIsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fTlVNUEFEICAgICAgICA9IDB4MDMsCisgICAg
Y2xhc3MgTXV0YXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7CisgICAgcHVibGljOgorICAgICAg
ICBlbnVtIGF0dHJDaGFuZ2VUeXBlIHsKKyAgICAgICAgICAgIE1PRElGSUNBVElPTiAgICA9IDEs
CisgICAgICAgICAgICBBRERJVElPTiAgICAgICAgPSAyLAorICAgICAgICAgICAgUkVNT1ZBTCAg
ICAgICAgID0gMworICAgICAgICB9OworCisgICAgICAgIE11dGF0aW9uRXZlbnQoKTsKKyAgICAg
ICAgTXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxl
LCBib29sIGNhbmNlbGFibGUsIE5vZGUqIHJlbGF0ZWROb2RlLAorICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgcHJldlZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0ck5hbWUsIHVuc2lnbmVkIHNob3J0
IGF0dHJDaGFuZ2UpOworCisgICAgICAgIHZvaWQgaW5pdE11dGF0aW9uRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBOb2RlKiBy
ZWxhdGVkTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHByZXZWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGF0dHJOYW1lLCB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hh
bmdlKTsKKworICAgICAgICBOb2RlKiByZWxhdGVkTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVs
YXRlZE5vZGUuZ2V0KCk7IH0KKyAgICAgICAgU3RyaW5nIHByZXZWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJldlZhbHVlLmdldCgpOyB9CisgICAgICAgIFN0cmluZyBuZXdWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmV3VmFsdWUuZ2V0KCk7IH0KKyAgICAgICAgU3RyaW5nIGF0dHJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZS5nZXQoKTsgfQorICAgICAgICB1bnNpZ25lZCBzaG9y
dCBhdHRyQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyQ2hhbmdlOyB9CisKKyAgICAgICAg
dmlydHVhbCBib29sIGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUmVmUHRyPE5vZGU+IG1fcmVsYXRlZE5vZGU7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBtX3ByZXZWYWx1ZTsKKyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbmV3VmFsdWU7
CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2F0dHJOYW1lOworICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBtX2F0dHJDaGFuZ2U7CiAgICAgfTsKLSAgICBLZXlib2FyZEV2ZW50KCk7Ci0gICAg
S2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmLCBBYnN0cmFjdFZpZXcq
KTsKLSAgICBLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAg
ICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFi
bGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcs
Ci0gICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBz
aGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgdmlydHVhbCB+S2V5Ym9hcmRFdmVudCgp
OwotICAgIAotICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0
eXBlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZp
ZXdBcmcsCi0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLAot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLAotICAgICAgICAgICAgICAg
IGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAg
ICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtl
eUFyZywKLSAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKTsKLSAgICAKLSAgICBT
dHJpbmcga2V5SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5SWRlbnRpZmllci5nZXQo
KTsgfQotICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9rZXlMb2Nh
dGlvbjsgfQotICAgIAotICAgIGJvb2wgYWx0R3JhcGhLZXkoKSBjb25zdCB7IHJldHVybiBtX2Fs
dEdyYXBoS2V5OyB9Ci0gICAgCi0gICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBrZXlF
dmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5RXZlbnQ7IH0KLQotICAgIGludCBrZXlDb2RlKCkg
Y29uc3Q7IC8vIGtleSBjb2RlIGZvciBrZXlkb3duIGFuZCBrZXl1cCwgY2hhcmFjdGVyIGZvciBv
dGhlciBldmVudHMKLSAgICBpbnQgY2hhckNvZGUoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgd2hpY2goKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIG1fa2V5RXZlbnQ7
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fa2V5SWRlbnRpZmllcjsKLSAgICB1bnNpZ25lZCBt
X2tleUxvY2F0aW9uOwotICAgIGJvb2wgbV9hbHRHcmFwaEtleSA6IDE7Ci19OwotCi1jbGFzcyBN
dXRhdGlvbkV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIGF0dHJDaGFu
Z2VUeXBlIHsgTU9ESUZJQ0FUSU9OID0gMSwgQURESVRJT04gPSAyLCBSRU1PVkFMID0gMyB9Owot
ICAgIE11dGF0aW9uRXZlbnQoKTsKLSAgICBNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZu
ZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1l
QXJnLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcp
OwotICAgIE5vZGUgKnJlbGF0ZWROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWxhdGVkTm9kZS5n
ZXQoKTsgfQotICAgIFN0cmluZyBwcmV2VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ByZXZWYWx1
ZS5nZXQoKTsgfQotICAgIFN0cmluZyBuZXdWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV3VmFs
dWUuZ2V0KCk7IH0KLSAgICBTdHJpbmcgYXR0ck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJO
YW1lLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXR0ckNoYW5nZTsgfQotICAgIHZvaWQgaW5pdE11dGF0aW9uRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5C
dWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxhdGVkTm9kZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNNdXRhdGlvbkV2ZW50KCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFJlZlB0cjxO
b2RlPiBtX3JlbGF0ZWROb2RlOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX3ByZXZWYWx1ZTsK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9uZXdWYWx1ZTsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbV9hdHRyTmFtZTsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2F0dHJDaGFuZ2U7Ci19OwotCi1j
bGFzcyBDbGlwYm9hcmRFdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgQ2xpcGJv
YXJkRXZlbnQoKTsKLSAgICBDbGlwYm9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUs
IGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIENsaXBib2FyZCAqY2xpcGJv
YXJkQXJnKTsKLQotICAgIENsaXBib2FyZCAqY2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9j
bGlwYm9hcmQuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDbGlwYm9hcmRFdmVudCgpIGNv
bnN0OwotcHJpdmF0ZToKLSAgICBSZWZQdHI8Q2xpcGJvYXJkPiBtX2NsaXBib2FyZDsKLX07Ci0K
LS8vIGV4dGVuc2lvbjogbW91c2Ugd2hlZWwgZXZlbnQKLWNsYXNzIFdoZWVsRXZlbnQgOiBwdWJs
aWMgTW91c2VSZWxhdGVkRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBXaGVlbEV2ZW50KCk7Ci0gICAg
V2hlZWxFdmVudChib29sIGhvcml6b250YWwsIGludCB3aGVlbERlbHRhLCBBYnN0cmFjdFZpZXcg
KiwKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywgaW50IHNjcmVlbllBcmcsCi0g
ICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsIGludCBjbGllbnRZQXJnLAotICAgICAg
ICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywgYm9vbCBhbHRLZXlBcmcsIGJvb2wgc2hpZnRL
ZXlBcmcsIGJvb2wgbWV0YUtleUFyZyk7Ci0gICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdCB7
IHJldHVybiBtX2hvcml6b250YWw7IH0KLSAgICBpbnQgd2hlZWxEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fd2hlZWxEZWx0YTsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc1doZWVs
RXZlbnQoKSBjb25zdDsKLQotICAgIGJvb2wgbV9ob3Jpem9udGFsOwotICAgIGludCBtX3doZWVs
RGVsdGE7Ci19OwotCi1jbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBTaGFy
ZWQ8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IHsKLXB1YmxpYzoKLSAgICBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyAm
ZXZlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFR5cGU7IH0KLSAgICBFdmVudExpc3Rl
bmVyICpsaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdGVuZXIuZ2V0KCk7IH0KLSAgICBi
b29sIHVzZUNhcHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3VzZUNhcHR1cmU7IH0KLSAgICBib29s
IHJlbW92ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZWQ7IH0KLSAgICB2b2lkIHNldFJlbW92
ZWQoYm9vbCByZW1vdmVkKSB7IG1fcmVtb3ZlZCA9IHJlbW92ZWQ7IH0KLSAgICAKLXByaXZhdGU6
Ci0gICAgQXRvbWljU3RyaW5nIG1fZXZlbnRUeXBlOwotICAgIFJlZlB0cjxFdmVudExpc3RlbmVy
PiBtX2xpc3RlbmVyOwotICAgIGJvb2wgbV91c2VDYXB0dXJlOwotICAgIGJvb2wgbV9yZW1vdmVk
OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwg
Y29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKLWlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGEsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLQotLy8gU3RhdGUgYXZhaWxhYmxlIGR1
cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotY2xhc3Mg
Q2xpcGJvYXJkIDogcHVibGljIFNoYXJlZDxDbGlwYm9hcmQ+IHsKLXB1YmxpYzoKLSAgICB2aXJ0
dWFsIH5DbGlwYm9hcmQoKTsKLQotICAgIC8vIElzIHRoaXMgb3BlcmF0aW9uIGEgZHJhZy1kcm9w
IG9yIGEgY29weS1wYXN0ZT8KLSAgICB2aXJ0dWFsIGJvb2wgaXNGb3JEcmFnZ2luZygpIGNvbnN0
ID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGRyb3BFZmZlY3QoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldERyb3BFZmZlY3QoY29uc3QgU3RyaW5nICZzKSA9IDA7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZWZmZWN0QWxsb3dlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0RWZmZWN0QWxsb3dlZChjb25zdCBTdHJpbmcgJnMpID0gMDsKLSAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyAmdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckFsbERhdGEoKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0RGF0YShjb25zdCBT
dHJpbmcgJnR5cGUsIGJvb2wgJnN1Y2Nlc3MpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
c2V0RGF0YShjb25zdCBTdHJpbmcgJnR5cGUsIGNvbnN0IFN0cmluZyAmZGF0YSkgPSAwOwotICAg
IAotICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBEZXByZWNh
dGVkU3RyaW5nTGlzdCB0eXBlcygpIGNvbnN0ID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENhY2hl
ZEltYWdlKiBkcmFnSW1hZ2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldERyYWdJ
bWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50ICYpID0gMDsKLSAgICB2
aXJ0dWFsIE5vZGUgKmRyYWdJbWFnZUVsZW1lbnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dERyYWdJbWFnZUVsZW1lbnQoTm9kZSAqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCAmKSA9IDA7
Ci19OwotCi1jbGFzcyBCZWZvcmVVbmxvYWRFdmVudCA6IHB1YmxpYyBFdmVudAotewotcHVibGlj
OgotICAgIEJlZm9yZVVubG9hZEV2ZW50KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVzUmVz
dWx0QXNTdHJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmVSZXN1bHQoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQu
Z2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9yZXN1bHQ7Ci19
OwogCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNl
bmRpZiAvLyBNdXRhdGlvbkV2ZW50X2gKSW5kZXg6IFdlYkNvcmUvZG9tL1JlZ2lzdGVyZWRFdmVu
dExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOSBAQAogLyoqCiAgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCiAgKgot
ICogKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIChDKSAyMDAxIFRvYmlh
cyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQorICogQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEg
VG9iaWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0yMiw2MDAgKzIzLDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyLmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIu
aCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5j
bHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgot
I2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCi1FdmVudDo6
RXZlbnQoKQotICAgIDogbV9jYW5CdWJibGUoZmFsc2UpCi0gICAgLCBtX2NhbmNlbGFibGUoZmFs
c2UpCi0gICAgLCBtX3Byb3BhZ2F0aW9uU3RvcHBlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdFBy
ZXZlbnRlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdEhhbmRsZWQoZmFsc2UpCi0gICAgLCBtX2Nh
bmNlbEJ1YmJsZShmYWxzZSkKLSAgICAsIG1fY3VycmVudFRhcmdldCgwKQotICAgICwgbV9ldmVu
dFBoYXNlKDApCi0gICAgLCBtX2NyZWF0ZVRpbWUoc3RhdGljX2Nhc3Q8RE9NVGltZVN0YW1wPihj
dXJyZW50VGltZSgpICogMTAwMC4wKSkKLXsKLX0KLQotRXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJn
KQotICAgIDogbV90eXBlKGV2ZW50VHlwZSkKLSAgICAsIG1fY2FuQnViYmxlKGNhbkJ1YmJsZUFy
ZykKLSAgICAsIG1fY2FuY2VsYWJsZShjYW5jZWxhYmxlQXJnKQotICAgICwgbV9wcm9wYWdhdGlv
blN0b3BwZWQoZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCi0gICAgLCBt
X2RlZmF1bHRIYW5kbGVkKGZhbHNlKQotICAgICwgbV9jYW5jZWxCdWJibGUoZmFsc2UpCi0gICAg
LCBtX2N1cnJlbnRUYXJnZXQoMCkKLSAgICAsIG1fZXZlbnRQaGFzZSgwKQotICAgICwgbV9jcmVh
dGVUaW1lKHN0YXRpY19jYXN0PERPTVRpbWVTdGFtcD4oY3VycmVudFRpbWUoKSAqIDEwMDAuMCkp
Ci17Ci19Ci0KLUV2ZW50Ojp+RXZlbnQoKQotewotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29s
IGNhbmNlbGFibGVBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV90eXBlID0gZXZlbnRUeXBlQXJnOwotICAgIG1fY2FuQnViYmxlID0gY2FuQnVi
YmxlQXJnOwotICAgIG1fY2FuY2VsYWJsZSA9IGNhbmNlbGFibGVBcmc7Ci19Ci0KLWJvb2wgRXZl
bnQ6OmlzVUlFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2
ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBFdmVudDo6aXNNdXRhdGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0RyYWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0JlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OnN0
b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgRXZlbnQ6OnN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgRXZlbnQ6
OnNldFRhcmdldChOb2RlKiB0YXJnZXQpCi17Ci0gICAgbV90YXJnZXQgPSB0YXJnZXQ7Ci0gICAg
aWYgKHRhcmdldCkKLSAgICAgICAgcmVjZWl2ZWRUYXJnZXQoKTsKLX0KLQotdm9pZCBFdmVudDo6
cmVjZWl2ZWRUYXJnZXQoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1VSUV2
ZW50OjpVSUV2ZW50KCkKLSAgICA6IG1fZGV0YWlsKDApCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29s
IGNhbmNlbGFibGVBcmcsIEFic3RyYWN0VmlldyAqdmlld0FyZywgaW50IGRldGFpbEFyZykKLSAg
ICA6IEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKQotICAgICwg
bV92aWV3KHZpZXdBcmcpCi0gICAgLCBtX2RldGFpbChkZXRhaWxBcmcpCi17Ci19Ci0KLXZvaWQg
VUlFdmVudDo6aW5pdFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZGV0YWlsQXJnKQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGluaXRFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFi
bGVBcmcpOwotCi0gICAgbV92aWV3ID0gdmlld0FyZzsKLSAgICBtX2RldGFpbCA9IGRldGFpbEFy
ZzsKLX0KLQotYm9vbCBVSUV2ZW50Ojppc1VJRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi1pbnQgVUlFdmVudDo6a2V5Q29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWludCBVSUV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLWludCBVSUV2ZW50OjpsYXllclgoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1p
bnQgVUlFdmVudDo6bGF5ZXJZKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJ
RXZlbnQ6OnBhZ2VYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6
OnBhZ2VZKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OndoaWNo
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotTW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNlUmVsYXRlZEV2ZW50KCkKLSAgICA6IG1fc2NyZWVu
WCgwKSwgbV9zY3JlZW5ZKDApLCBtX2NsaWVudFgoMCksIG1fY2xpZW50WSgwKQotICAgICwgbV9w
YWdlWCgwKSwgbV9wYWdlWSgwKSwgbV9sYXllclgoMCksIG1fbGF5ZXJZKDApLCBtX29mZnNldFgo
MCksIG1fb2Zmc2V0WSgwKSwgbV9pc1NpbXVsYXRlZChmYWxzZSkKLXsKLX0KLQotTW91c2VSZWxh
dGVkRXZlbnQ6Ok1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xp
ZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc1NpbXVsYXRlZCkKLSAgICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywKLSAgICAgICAg
Y3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFyZykKLSAgICAsIG1f
c2NyZWVuWChzY3JlZW5YQXJnKSwgbV9zY3JlZW5ZKHNjcmVlbllBcmcpCi0gICAgLCBtX2NsaWVu
dFgoY2xpZW50WEFyZyksIG1fY2xpZW50WShjbGllbnRZQXJnKQotICAgICwgbV9pc1NpbXVsYXRl
ZChpc1NpbXVsYXRlZCkKLXsKLSAgICBpbml0Q29vcmRpbmF0ZXMoKTsKLX0KLQotdm9pZCBNb3Vz
ZVJlbGF0ZWRFdmVudDo6aW5pdENvb3JkaW5hdGVzKCkKLXsKLSAgICAvLyBTZXQgdXAgaW5pdGlh
bCB2YWx1ZXMgZm9yIGNvb3JkaW5hdGVzLgotICAgIC8vIENvcnJlY3QgdmFsdWVzIGNhbid0IGJl
IGNvbXB1dGVkIHVudGlsIHdlIGhhdmUgYXQgdGFyZ2V0LCBzbyByZWNlaXZlZFRhcmdldAotICAg
IC8vIGRvZXMgdGhlICJyZWFsIiBjb21wdXRhdGlvbi4KLSAgICBtX3BhZ2VYID0gbV9jbGllbnRY
OwotICAgIG1fcGFnZVkgPSBtX2NsaWVudFk7Ci0gICAgbV9sYXllclggPSBtX3BhZ2VYOwotICAg
IG1fbGF5ZXJZID0gbV9wYWdlWTsKLSAgICBtX29mZnNldFggPSBtX3BhZ2VYOwotICAgIG1fb2Zm
c2V0WSA9IG1fcGFnZVk7Ci19Ci0KLXZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OnJlY2VpdmVkVGFy
Z2V0KCkKLXsKLSAgICAvLyBDb21wdXRlIGNvb3JkaW5hdGVzIHRoYXQgYXJlIGJhc2VkIG9uIHRo
ZSB0YXJnZXQuCi0gICAgbV9vZmZzZXRYID0gbV9wYWdlWDsKLSAgICBtX29mZnNldFkgPSBtX3Bh
Z2VZOwotICAgIG1fbGF5ZXJYID0gbV9wYWdlWDsgICAgCi0gICAgbV9sYXllclkgPSBtX3BhZ2VZ
OyAgICAKLQotICAgIE5vZGUqIHRhcmcgPSB0YXJnZXQoKTsKLSAgICBBU1NFUlQodGFyZyk7Ci0K
LSAgICAvLyBNdXN0IGhhdmUgYW4gdXBkYXRlZCByZW5kZXIgdHJlZSBmb3IgdGhpcyBtYXRoIHRv
IHdvcmsgY29ycmVjdGx5LgotICAgIHRhcmctPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygp
OwotCi0gICAgLy8gRklYTUU6IGNsaWVudFgvWSBzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFzIHBh
Z2VYL1khCi0gICAgLy8gQ3VycmVudGx5IHRoZSBwYXNzZWQtaW4gY2xpZW50WCBhbmQgY2xpZW50
WSBhcmUgaW5jb3JyZWN0bHkgYWN0dWFsbHkKLSAgICAvLyBwYWdlWCBhbmQgcGFnZVkgdmFsdWVz
LCBzbyB3ZSBkb24ndCBoYXZlIGFueSB3b3JrIHRvIGRvIGhlcmUsIGJ1dCBpZgotICAgIC8vIHdl
IHN0YXJ0ZWQgcGFzc2luZyBpbiBjb3JyZWN0IGNsaWVudFggYW5kIGNsaWVudFksIHdlJ2Qgd2Fu
dCB0byBjb21wdXRlCi0gICAgLy8gcGFnZVggYW5kIHBhZ2VZIGhlcmUuCi0KLSAgICAvLyBBZGp1
c3Qgb2Zmc2V0WC9ZIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQncyBwb3NpdGlvbi4KLSAg
ICBpZiAoIWlzU2ltdWxhdGVkKCkpIHsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IHRh
cmctPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGludCByeCwgcnk7Ci0gICAgICAgICAgICBp
ZiAoci0+YWJzb2x1dGVQb3NpdGlvbihyeCwgcnkpKSB7Ci0gICAgICAgICAgICAgICAgbV9vZmZz
ZXRYIC09IHJ4OwotICAgICAgICAgICAgICAgIG1fb2Zmc2V0WSAtPSByeTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFkanVzdCBsYXllclgvWSB0byBiZSByZWxh
dGl2ZSB0byB0aGUgbGF5ZXIuCi0gICAgLy8gRklYTUU6IFdlJ3JlIHByZXR0eSBzdXJlIHRoaXMg
aXMgdGhlIHdyb25nIGRlZmludGlvbiBvZiAibGF5ZXIuIgotICAgIC8vIE91ciBSZW5kZXJMYXll
ciBpcyBhIG1vcmUgbW9kZXJuIGNvbmNlcHQsIGFuZCBsYXllclgvWSBpcyBzb21lCi0gICAgLy8g
b3RoZXIgbm90aW9uIGFib3V0IGdyb3VwcyBvZiBlbGVtZW50czsgd2Ugc2hvdWxkIHRlc3QgYW5k
IGZpeCB0aGlzLgotICAgIE5vZGUqIG4gPSB0YXJnOwotICAgIHdoaWxlIChuICYmICFuLT5yZW5k
ZXJlcigpKQotICAgICAgICBuID0gbi0+cGFyZW50KCk7Ci0gICAgaWYgKG4pIHsKLSAgICAgICAg
UmVuZGVyTGF5ZXIqIGxheWVyID0gbi0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAg
ICAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLSAgICAgICAgZm9yICg7IGxheWVy
OyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgbV9sYXllclggLT0gbGF5
ZXItPnhQb3MoKTsKLSAgICAgICAgICAgIG1fbGF5ZXJZIC09IGxheWVyLT55UG9zKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVudDo6cGFnZVgoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3BhZ2VYOwotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnBhZ2VZ
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlWTsKLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2
ZW50Ojp4KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVjdC4KLSAg
ICAvLyBTZWUgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24gYW5kIDxodHRwOi8vd3d3LnF1aXJrc21v
ZGUub3JnL2RvbS93M2NfZXZlbnRzLmh0bWw+LgotICAgIHJldHVybiBtX2NsaWVudFg7Ci19Ci0K
LWludCBNb3VzZVJlbGF0ZWRFdmVudDo6eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMg
aXMgbm90IGNvcnJlY3QuCi0gICAgLy8gU2VlIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIGFuZCA8
aHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vdzNjX2V2ZW50cy5odG1sPi4KLSAgICByZXR1
cm4gbV9jbGllbnRZOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Nb3VzZUV2ZW50
OjpNb3VzZUV2ZW50KCkKLSAgICA6IG1fYnV0dG9uKDApCi17Ci19Ci0KLU1vdXNlRXZlbnQ6Ok1v
dXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3Jl
ZW5YQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtl
eUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0
b25BcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiBy
ZWxhdGVkVGFyZ2V0QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2Fy
ZCogY2xpcGJvYXJkQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNT
aW11bGF0ZWQpCi0gICAgOiBNb3VzZVJlbGF0ZWRFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFy
ZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnLAotICAgICAgICBzY3JlZW5YQXJn
LCBzY3JlZW5ZQXJnLCBjbGllbnRYQXJnLCBjbGllbnRZQXJnLAotICAgICAgICBjdHJsS2V5QXJn
LCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnLCBpc1NpbXVsYXRlZCkKLSAgICAs
IG1fYnV0dG9uKGJ1dHRvbkFyZykKLSAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0
QXJnKQotICAgICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkQXJnKQotewotfQotCi1Nb3VzZUV2ZW50
Ojp+TW91c2VFdmVudCgpCi17Ci19Ci0KLXZvaWQgTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNs
aWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxL
ZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25B
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUq
IHJlbGF0ZWRUYXJnZXRBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaW5pdFVJRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxl
QXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcpOwotCi0gICAgbV9zY3JlZW5YID0gc2NyZWVuWEFyZzsK
LSAgICBtX3NjcmVlblkgPSBzY3JlZW5ZQXJnOwotICAgIG1fY2xpZW50WCA9IGNsaWVudFhBcmc7
Ci0gICAgbV9jbGllbnRZID0gY2xpZW50WUFyZzsKLSAgICBtX2N0cmxLZXkgPSBjdHJsS2V5QXJn
OwotICAgIG1fYWx0S2V5ID0gYWx0S2V5QXJnOwotICAgIG1fc2hpZnRLZXkgPSBzaGlmdEtleUFy
ZzsKLSAgICBtX21ldGFLZXkgPSBtZXRhS2V5QXJnOwotICAgIG1fYnV0dG9uID0gYnV0dG9uQXJn
OwotICAgIG1fcmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXRBcmc7Ci0KLSAgICBpbml0Q29v
cmRpbmF0ZXMoKTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAot
ewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE1vdXNlRXZlbnQ6OmlzRHJhZ0V2ZW50KCkg
Y29uc3QKLXsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJnQgPSB0eXBlKCk7Ci0gICAgcmV0dXJu
IHQgPT0gZHJhZ2VudGVyRXZlbnQgfHwgdCA9PSBkcmFnb3ZlckV2ZW50IHx8IHQgPT0gZHJhZ2xl
YXZlRXZlbnQKLSAgICAgICAgfHwgdCA9PSBkcm9wRXZlbnQKLSAgICAgICAgfHwgdCA9PSBkcmFn
c3RhcnRFdmVudCB8fCB0ID09IGRyYWdFdmVudCB8fCB0ID09IGRyYWdlbmRFdmVudDsKLX0KLQot
aW50IE1vdXNlRXZlbnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICAvLyBGb3IgS0hUTUwsIHRoZSBy
ZXR1cm4gdmFsdWVzIGZvciBsZWZ0LCBtaWRkbGUgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMgYXJl
IDAsIDEsIDIsIHJlc3BlY3RpdmVseS4KLSAgICAvLyBGb3IgdGhlIE5ldHNjYXBlICJ3aGljaCIg
cHJvcGVydHksIHRoZSByZXR1cm4gdmFsdWVzIGZvciBsZWZ0LCBtaWRkbGUgYW5kIHJpZ2h0IG1v
dXNlIGJ1dHRvbnMgYXJlIDEsIDIsIDMsIHJlc3BlY3RpdmVseS4gCi0gICAgLy8gU28gd2UgbXVz
dCBhZGQgMS4KLSAgICByZXR1cm4gbV9idXR0b24gKyAxOwotfQotCi1Ob2RlKiBNb3VzZUV2ZW50
Ojp0b0VsZW1lbnQoKSBjb25zdAotewotICAgIC8vIE1TSUUgZXh0ZW5zaW9uIC0gInRoZSBvYmpl
Y3QgdG93YXJkIHdoaWNoIHRoZSB1c2VyIGlzIG1vdmluZyB0aGUgbW91c2UgcG9pbnRlciIKLSAg
ICByZXR1cm4gdHlwZSgpID09IG1vdXNlb3V0RXZlbnQgPyByZWxhdGVkVGFyZ2V0KCkgOiB0YXJn
ZXQoKTsKLX0KLQotTm9kZSogTW91c2VFdmVudDo6ZnJvbUVsZW1lbnQoKSBjb25zdAotewotICAg
IC8vIE1TSUUgZXh0ZW5zaW9uIC0gIm9iamVjdCBmcm9tIHdoaWNoIGFjdGl2YXRpb24gb3IgdGhl
IG1vdXNlIHBvaW50ZXIgaXMgZXhpdGluZyBkdXJpbmcgdGhlIGV2ZW50IiAoaHVoPykKLSAgICBy
ZXR1cm4gdHlwZSgpID09IG1vdXNlb3V0RXZlbnQgPyB0YXJnZXQoKSA6IHJlbGF0ZWRUYXJnZXQo
KTsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotS2V5Ym9h
cmRFdmVudDo6S2V5Ym9hcmRFdmVudCgpCi0gIDogbV9rZXlFdmVudCgwKQotICAsIG1fa2V5TG9j
YXRpb24oRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5KGZhbHNl
KQotewotfQotCi1LZXlib2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5
Ym9hcmRFdmVudCYga2V5LCBBYnN0cmFjdFZpZXcgKnZpZXcpCi0gIDogVUlFdmVudFdpdGhLZXlT
dGF0ZShrZXkuaXNLZXlVcCgpID8ga2V5dXBFdmVudCA6IGtleS5pc0F1dG9SZXBlYXQoKSA/IGtl
eXByZXNzRXZlbnQgOiBrZXlkb3duRXZlbnQsCi0gICAgdHJ1ZSwgdHJ1ZSwgdmlldywgMCwga2V5
LmN0cmxLZXkoKSwga2V5LmFsdEtleSgpLCBrZXkuc2hpZnRLZXkoKSwga2V5Lm1ldGFLZXkoKSkK
LSAgLCBtX2tleUV2ZW50KG5ldyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoa2V5KSkKLSAgLCBtX2tl
eUlkZW50aWZpZXIoU3RyaW5nKGtleS5rZXlJZGVudGlmaWVyKCkpLmltcGwoKSkKLSAgLCBtX2tl
eUxvY2F0aW9uKGtleS5pc0tleXBhZCgpID8gRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgOiBET01f
S0VZX0xPQ0FUSU9OX1NUQU5EQVJEKQotICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCi17Ci19Ci0K
LUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmlldyAqdmlld0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJn
KQotICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNl
bGFibGVBcmcsIHZpZXdBcmcsIDAsIGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcs
IG1ldGFLZXlBcmcpCi0gICwgbV9rZXlFdmVudCgwKQotICAsIG1fa2V5SWRlbnRpZmllcihrZXlJ
ZGVudGlmaWVyQXJnLmltcGwoKSkKLSAgLCBtX2tleUxvY2F0aW9uKGtleUxvY2F0aW9uQXJnKQot
ICAsIG1fYWx0R3JhcGhLZXkoYWx0R3JhcGhLZXlBcmcpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQ6
On5LZXlib2FyZEV2ZW50KCkKLXsKLSAgICBkZWxldGUgbV9rZXlFdmVudDsKLX0KLQotdm9pZCBL
ZXlib2FyZEV2ZW50Ojppbml0S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQga2V5TG9jYXRpb25BcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJs
S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBtZXRhS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0
R3JhcGhLZXlBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW5pdFVJRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2
aWV3QXJnLCAwKTsKLQotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJBcmcuaW1w
bCgpOwotICAgIG1fa2V5TG9jYXRpb24gPSBrZXlMb2NhdGlvbkFyZzsKLSAgICBtX2N0cmxLZXkg
PSBjdHJsS2V5QXJnOwotICAgIG1fc2hpZnRLZXkgPSBzaGlmdEtleUFyZzsKLSAgICBtX2FsdEtl
eSA9IGFsdEtleUFyZzsKLSAgICBtX21ldGFLZXkgPSBtZXRhS2V5QXJnOwotICAgIG1fYWx0R3Jh
cGhLZXkgPSBhbHRHcmFwaEtleUFyZzsKLX0KLQotaW50IEtleWJvYXJkRXZlbnQ6OmtleUNvZGUo
KSBjb25zdAotewotICAgIGlmICghbV9rZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKHR5cGUoKSA9PSBrZXlkb3duRXZlbnQgfHwgdHlwZSgpID09IGtleXVwRXZlbnQpCi0gICAg
ICAgIHJldHVybiBtX2tleUV2ZW50LT5XaW5kb3dzS2V5Q29kZSgpOwotICAgIHJldHVybiBjaGFy
Q29kZSgpOwotfQotCi1pbnQgS2V5Ym9hcmRFdmVudDo6Y2hhckNvZGUoKSBjb25zdAotewotICAg
IGlmICghbV9rZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgU3RyaW5nIHRleHQgPSBt
X2tleUV2ZW50LT50ZXh0KCk7Ci0gICAgaWYgKHRleHQubGVuZ3RoKCkgIT0gMSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRleHRbMF07Ci19Ci0KLWJvb2wgS2V5Ym9hcmRFdmVudDo6
aXNLZXlib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEtl
eWJvYXJkRXZlbnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICAvLyBOZXRzY2FwZSdzICJ3aGljaCIg
cmV0dXJucyBhIHZpcnR1YWwga2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBhbmQgYSBj
aGFyYWN0ZXIgY29kZSBmb3Iga2V5cHJlc3MuCi0gICAgLy8gVGhhdCdzIGV4YWN0bHkgd2hhdCBJ
RSdzICJrZXlDb2RlIiByZXR1cm5zLiBTbyB0aGV5IGFyZSB0aGUgc2FtZSBmb3Iga2V5Ym9hcmQg
ZXZlbnRzLgotICAgIHJldHVybiBrZXlDb2RlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoKQotICAgIDogbV9hdHRyQ2hhbmdl
KDApCi17Ci19Ci0KLU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nICZldmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v
ZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQot
ICAgIDogRXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCi0gICAg
LCBtX3JlbGF0ZWROb2RlKHJlbGF0ZWROb2RlQXJnKQotICAgICwgbV9wcmV2VmFsdWUocHJldlZh
bHVlQXJnLmltcGwoKSkKLSAgICAsIG1fbmV3VmFsdWUobmV3VmFsdWVBcmcuaW1wbCgpKQotICAg
ICwgbV9hdHRyTmFtZShhdHRyTmFtZUFyZy5pbXBsKCkpCi0gICAgLCBtX2F0dHJDaGFuZ2UoYXR0
ckNoYW5nZUFyZykKLXsKLX0KLQotdm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVu
dChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFs
dWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCi17Ci0gICAg
aWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdEV2ZW50KHR5cGVB
cmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICBtX3JlbGF0ZWROb2RlID0g
cmVsYXRlZE5vZGVBcmc7Ci0gICAgbV9wcmV2VmFsdWUgPSBwcmV2VmFsdWVBcmcuaW1wbCgpOwot
ICAgIG1fbmV3VmFsdWUgPSBuZXdWYWx1ZUFyZy5pbXBsKCk7Ci0gICAgbV9hdHRyTmFtZSA9IGF0
dHJOYW1lQXJnLmltcGwoKTsKLSAgICBtX2F0dHJDaGFuZ2UgPSBhdHRyQ2hhbmdlQXJnOwotfQot
Ci1ib29sIE11dGF0aW9uRXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNsaXBib2FyZEV2ZW50
OjpDbGlwYm9hcmRFdmVudCgpCi17Ci19Ci0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wg
Y2FuY2VsYWJsZUFyZywgQ2xpcGJvYXJkICpjbGlwYm9hcmRBcmcpCi0gICAgOiBFdmVudChldmVu
dFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyksIG1fY2xpcGJvYXJkKGNsaXBib2Fy
ZEFyZykKLXsKLX0KLQotYm9vbCBDbGlwYm9hcmRFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LVdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoKSA6IG1faG9yaXpvbnRhbChmYWxzZSksIG1fd2hlZWxE
ZWx0YSgwKQotewotfQotCi1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGJvb2wgaCwgaW50IGQsIEFi
c3RyYWN0VmlldyAqdiwKLSAgICBpbnQgc3gsIGludCBzeSwgaW50IGN4LCBpbnQgY3ksIGJvb2wg
Y3RybCwgYm9vbCBhbHQsIGJvb2wgc2hpZnQsIGJvb2wgbWV0YSkKLSAgICA6IE1vdXNlUmVsYXRl
ZEV2ZW50KGggPyBraHRtbEhvcml6b250YWxtb3VzZXdoZWVsRXZlbnQgOiBtb3VzZXdoZWVsRXZl
bnQsCi0gICAgICAgIHRydWUsIHRydWUsIHYsIDAsIHN4LCBzeSwgY3gsIGN5LCBjdHJsLCBhbHQs
IHNoaWZ0LCBtZXRhKQotICAgICwgbV9ob3Jpem9udGFsKGgpLCBtX3doZWVsRGVsdGEoZCkKLXsK
LX0KLQotYm9vbCBXaGVlbEV2ZW50Ojppc1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVy
biB0cnVlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1SZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lcjo6UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKK1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0
ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQogICAg
ICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKICAgICAsIG1fdXNlQ2FwdHVyZSh1c2VDYXB0dXJlKQpA
QCAtNjIzLDMyICszNyw5IEBAIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpSZWdpc3RlcmVkRXZl
bnQKIHsKIH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
ICZhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciAmYikKK2Jvb2wgb3BlcmF0b3I9PShj
b25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYSwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXImIGIpCiB7CiAgICAgcmV0dXJuIGEuZXZlbnRUeXBlKCkgPT0gYi5ldmVudFR5cGUoKSAm
JiBhLmxpc3RlbmVyKCkgPT0gYi5saXN0ZW5lcigpICYmIGEudXNlQ2FwdHVyZSgpID09IGIudXNl
Q2FwdHVyZSgpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DbGlwYm9hcmQ6On5D
bGlwYm9hcmQoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CZWZvcmVVbmxv
YWRFdmVudDo6QmVmb3JlVW5sb2FkRXZlbnQoKQotICAgIDogRXZlbnQoYmVmb3JldW5sb2FkRXZl
bnQsIGZhbHNlLCB0cnVlKQotewotfQotCi1ib29sIEJlZm9yZVVubG9hZEV2ZW50OjpzdG9yZXNS
ZXN1bHRBc1N0cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQmVm
b3JlVW5sb2FkRXZlbnQ6OnN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBtX3Jl
c3VsdCA9IHMuaW1wbCgpOwotfQotCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDE0OTAwKQorKysgV2Vi
Q29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2
ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJp
LmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDQ1OCArMjMsMzgg
QEAKICAqCiAgKi8KIAotI2lmbmRlZiBET01fRVZFTlRTSU1QTF9ICi0jZGVmaW5lIERPTV9FVkVO
VFNJTVBMX0gKKyNpZm5kZWYgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJfaAorI2RlZmluZSBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcl9oCiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKLSNpbmNs
dWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0KLWNsYXNzIERlcHJlY2F0ZWRT
dHJpbmdMaXN0OworI2luY2x1ZGUgIlNoYXJlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIENhY2hlZEltYWdlOwotY2xhc3MgQ2xpcGJvYXJkOwotY2xhc3MgRXZlbnRMaXN0ZW5l
cjsKLWNsYXNzIEV2ZW50VGFyZ2V0Tm9kZTsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW50UG9pbnQ7
Ci1jbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIERPTVRpbWVTdGFtcDsKLXR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKKyAgICBj
bGFzcyBFdmVudExpc3RlbmVyOwogCi1jb25zdCBpbnQgRXZlbnRFeGNlcHRpb25PZmZzZXQgPSAx
MDA7Ci1jb25zdCBpbnQgRXZlbnRFeGNlcHRpb25NYXggPSAxOTk7Ci1lbnVtIEV2ZW50RXhjZXB0
aW9uQ29kZSB7IFVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSID0gRXZlbnRFeGNlcHRpb25PZmZz
ZXQgfTsKLQotY2xhc3MgRXZlbnQgOiBwdWJsaWMgU2hhcmVkPEV2ZW50PgotewotcHVibGljOgot
ICAgIGVudW0gUGhhc2VUeXBlIHsgCi0gICAgICAgIENBUFRVUklOR19QSEFTRSA9IDEsIAotICAg
ICAgICBBVF9UQVJHRVQgPSAyLCAKLSAgICAgICAgQlVCQkxJTkdfUEhBU0UgPSAzIAorICAgIGNs
YXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIDogcHVibGljIFNoYXJlZDxSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50VHlwZTsgfQorICAgICAgICBFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdGVuZXIuZ2V0KCk7IH0KKyAgICAg
ICAgYm9vbCB1c2VDYXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9CisgICAg
ICAgIAorICAgICAgICBib29sIHJlbW92ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZWQ7IH0K
KyAgICAgICAgdm9pZCBzZXRSZW1vdmVkKGJvb2wgcmVtb3ZlZCkgeyBtX3JlbW92ZWQgPSByZW1v
dmVkOyB9CisgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fZXZlbnRU
eXBlOworICAgICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9saXN0ZW5lcjsKKyAgICAgICAg
Ym9vbCBtX3VzZUNhcHR1cmU7CisgICAgICAgIGJvb2wgbV9yZW1vdmVkOwogICAgIH07CiAKLSAg
ICAvLyBSZXZlcnNlLWVuZ2luZWVyZWQgZnJvbSBOZXRzY2FwZQotICAgIGVudW0gRXZlbnRUeXBl
IHsKLSAgICAgICAgTU9VU0VET1dOICAgICAgICAgICA9IDEsCi0gICAgICAgIE1PVVNFVVAgICAg
ICAgICAgICAgPSAyLAotICAgICAgICBNT1VTRU9WRVIgICAgICAgICAgID0gNCwKLSAgICAgICAg
TU9VU0VPVVQgICAgICAgICAgICA9IDgsCi0gICAgICAgIE1PVVNFTU9WRSAgICAgICAgICAgPSAx
NiwKLSAgICAgICAgTU9VU0VEUkFHICAgICAgICAgICA9IDMyLAotICAgICAgICBDTElDSyAgICAg
ICAgICAgICAgID0gNjQsCi0gICAgICAgIERCTENMSUNLICAgICAgICAgICAgPSAxMjgsCi0gICAg
ICAgIEtFWURPV04gICAgICAgICAgICAgPSAyNTYsCi0gICAgICAgIEtFWVVQICAgICAgICAgICAg
ICAgPSA1MTIsCi0gICAgICAgIEtFWVBSRVNTICAgICAgICAgICAgPSAxMDI0LAotICAgICAgICBE
UkFHRFJPUCAgICAgICAgICAgID0gMjA0OCwKLSAgICAgICAgRk9DVVMgICAgICAgICAgICAgICA9
IDQwOTYsCi0gICAgICAgIEJMVVIgICAgICAgICAgICAgICAgPSA4MTkyLAotICAgICAgICBTRUxF
Q1QgICAgICAgICAgICAgID0gMTYzODQsCi0gICAgICAgIENIQU5HRSAgICAgICAgICAgICAgPSAz
Mjc2OAotICAgIH07Ci0gICAgCi0gICAgRXZlbnQoKTsKLSAgICBFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpOwotICAg
IHZpcnR1YWwgfkV2ZW50KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBOb2RlKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBt
X3RhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KE5vZGUqKTsKLSAgICBOb2RlKiBj
dXJyZW50VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9Ci0gICAgdm9p
ZCBzZXRDdXJyZW50VGFyZ2V0KE5vZGUqIGN1cnJlbnRUYXJnZXQpIHsgbV9jdXJyZW50VGFyZ2V0
ID0gY3VycmVudFRhcmdldDsgfQotICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25z
dCB7IHJldHVybiBtX2V2ZW50UGhhc2U7IH0KLSAgICB2b2lkIHNldEV2ZW50UGhhc2UodW5zaWdu
ZWQgc2hvcnQgZXZlbnRQaGFzZSkgeyBtX2V2ZW50UGhhc2UgPSBldmVudFBoYXNlOyB9Ci0gICAg
Ym9vbCBidWJibGVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW5CdWJibGU7IH0KLSAgICBib29sIGNh
bmNlbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGFibGU7IH0KLSAgICBET01UaW1lU3Rh
bXAgdGltZVN0YW1wKCkgeyByZXR1cm4gbV9jcmVhdGVUaW1lOyB9Ci0gICAgdm9pZCBzdG9wUHJv
cGFnYXRpb24oKSB7IG1fcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgcHJl
dmVudERlZmF1bHQoKSB7IGlmIChtX2NhbmNlbGFibGUpIG1fZGVmYXVsdFByZXZlbnRlZCA9IHRy
dWU7IH0KLSAgICB2b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFy
ZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
RHJhZ0V2ZW50KCkgY29uc3Q7IC8vIGEgc3Vic2V0IG9mIG1vdXNlIGV2ZW50cwotICAgIHZpcnR1
YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzV2hl
ZWxFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2
ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIHByb3BhZ2F0aW9uU3RvcHBlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGFnYXRpb25TdG9wcGVkOyB9Ci0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UHJldmVudGVkOyB9Ci0KLSAgICB2b2lkIHNldERlZmF1
bHRIYW5kbGVkKCkgeyBtX2RlZmF1bHRIYW5kbGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgZGVmYXVs
dEhhbmRsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1bHRIYW5kbGVkOyB9Ci0KLSAgICB2b2lk
IHNldENhbmNlbEJ1YmJsZShib29sIGNhbmNlbCkgeyBtX2NhbmNlbEJ1YmJsZSA9IGNhbmNlbDsg
fQotICAgIHZvaWQgc2V0RGVmYXVsdFByZXZlbnRlZChib29sIGRlZmF1bHRQcmV2ZW50ZWQpIHsg
bV9kZWZhdWx0UHJldmVudGVkID0gZGVmYXVsdFByZXZlbnRlZDsgfQotICAgIGJvb2wgZ2V0Q2Fu
Y2VsQnViYmxlKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxCdWJibGU7IH0KLQotICAgIHZpcnR1
YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBz
dG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZFRhcmdldCgpOwotICAgIGJvb2wgZGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fdHlwZTsKLSAgICBi
b29sIG1fY2FuQnViYmxlOwotICAgIGJvb2wgbV9jYW5jZWxhYmxlOwotCi0gICAgYm9vbCBtX3By
b3BhZ2F0aW9uU3RvcHBlZDsKLSAgICBib29sIG1fZGVmYXVsdFByZXZlbnRlZDsKLSAgICBib29s
IG1fZGVmYXVsdEhhbmRsZWQ7Ci0gICAgYm9vbCBtX2NhbmNlbEJ1YmJsZTsKLQotICAgIE5vZGUq
IG1fY3VycmVudFRhcmdldDsgLy8gcmVmID4gMCBtYWludGFpbmVkIGV4dGVybmFsbHkKLSAgICB1
bnNpZ25lZCBzaG9ydCBtX2V2ZW50UGhhc2U7Ci0gICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0Owot
ICAgIERPTVRpbWVTdGFtcCBtX2NyZWF0ZVRpbWU7Ci19OwotCi1jbGFzcyBVSUV2ZW50IDogcHVi
bGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgVUlFdmVudCgpOwotICAgIFVJRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAot
ICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICBBYnN0
cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7Ci0gICAg
QWJzdHJhY3RWaWV3ICp2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3LmdldCgpOyB9Ci0gICAg
aW50IGRldGFpbCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9Ci0gICAgdm9pZCBpbml0VUlF
dmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAg
ICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IGtleUNvZGUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBjaGFyQ29kZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgbGF5ZXJYKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgbGF5ZXJZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBwYWdl
WCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGludCB3aGljaCgpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBYnN0cmFjdFZpZXc+
IG1fdmlldzsKLSAgICBpbnQgbV9kZXRhaWw7Ci19OwotCi1jbGFzcyBVSUV2ZW50V2l0aEtleVN0
YXRlIDogcHVibGljIFVJRXZlbnQgewotcHVibGljOgotICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUo
KSA6IG1fY3RybEtleShmYWxzZSksIG1fYWx0S2V5KGZhbHNlKSwgbV9zaGlmdEtleShmYWxzZSks
IG1fbWV0YUtleShmYWxzZSkgeyB9Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZShjb25zdCBBdG9t
aWNTdHJpbmcgJnR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFi
c3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgaW50IGRldGFpbEFyZywgYm9vbCBjdHJsS2V5
QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5QXJnKQot
ICAgICAgICA6IFVJRXZlbnQodHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3
QXJnLCBkZXRhaWxBcmcpCi0gICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXlBcmcpLCBtX2FsdEtl
eShhbHRLZXlBcmcpLCBtX3NoaWZ0S2V5KHNoaWZ0S2V5QXJnKSwgbV9tZXRhS2V5KG1ldGFLZXlB
cmcpIHsgfQotCi0gICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9
Ci0gICAgYm9vbCBzaGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAgICBi
b29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9Ci0gICAgYm9vbCBtZXRhS2V5
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9Ci0KLXByb3RlY3RlZDogLy8gZXhwb3NlIHRo
ZXNlIHNvIGluaXQgZnVuY3Rpb25zIGNhbiBzZXQgdGhlbQotICAgIGJvb2wgbV9jdHJsS2V5IDog
MTsKLSAgICBib29sIG1fYWx0S2V5IDogMTsKLSAgICBib29sIG1fc2hpZnRLZXkgOiAxOwotICAg
IGJvb2wgbV9tZXRhS2V5IDogMTsKLX07Ci0KLS8vIEludGVybmFsIG9ubHk6IEhlbHBlciBjbGFz
cyBmb3Igd2hhdCdzIGNvbW1vbiBiZXR3ZWVuIG1vdXNlIGFuZCB3aGVlbCBldmVudHMuCi1jbGFz
cyBNb3VzZVJlbGF0ZWRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1Ymxp
YzoKLSAgICBNb3VzZVJlbGF0ZWRFdmVudCgpOwotICAgIE1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5C
dWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVl
bllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs
dEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIGludCBzY3JlZW5YKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JlZW5YOyB9Ci0gICAgaW50IHNjcmVlblkoKSBjb25zdCB7IHJl
dHVybiBtX3NjcmVlblk7IH0KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xp
ZW50WDsgfQotICAgIGludCBjbGllbnRZKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRZOyB9Ci0g
ICAgaW50IGxheWVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJYOyB9Ci0gICAgaW50IGxheWVy
WSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJZOyB9Ci0gICAgaW50IG9mZnNldFgoKSBjb25zdCB7
IHJldHVybiBtX29mZnNldFg7IH0KLSAgICBpbnQgb2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0WTsgfQotICAgIGJvb2wgaXNTaW11bGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2lt
dWxhdGVkOyB9Ci0gICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGlu
dCBwYWdlWSgpIGNvbnN0OwotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsK
LXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50
IGNhbiBzZXQgdGhlbQotICAgIGludCBtX3NjcmVlblg7Ci0gICAgaW50IG1fc2NyZWVuWTsKLSAg
ICBpbnQgbV9jbGllbnRYOwotICAgIGludCBtX2NsaWVudFk7Ci0gICAgdm9pZCBpbml0Q29vcmRp
bmF0ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLXByaXZhdGU6Ci0g
ICAgaW50IG1fcGFnZVg7Ci0gICAgaW50IG1fcGFnZVk7Ci0gICAgaW50IG1fbGF5ZXJYOwotICAg
IGludCBtX2xheWVyWTsKLSAgICBpbnQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFk7Ci0g
ICAgYm9vbCBtX2lzU2ltdWxhdGVkOwotfTsKLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MgotY2xhc3MgTW91c2VFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudCB7Ci1wdWJsaWM6
Ci0gICAgTW91c2VFdmVudCgpOwotICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZp
ZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAg
ICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVu
WUFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAg
ICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcs
Ci0gICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
Ym9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAg
ICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAgICAg
ICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZyA9IDAsCi0gICAgICAgICAgICAgICAgICAgYm9v
bCBpc1NpbXVsYXRlZCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0gICAg
Ly8gV2luSUUgdXNlcyAxLDQsMiBmb3IgbGVmdC9taWRkbGUvcmlnaHQgYnV0IG5vdCBmb3IgY2xp
Y2sgKGp1c3QgZm9yIG1vdXNlZG93bi91cCwgbWF5YmUgb3RoZXJzKSwgYnV0IHdlIHdpbGwgbWF0
Y2ggdGhlIHN0YW5kYXJkIERPTS4KLSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdCB7
IHJldHVybiBtX2J1dHRvbjsgfQotICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQotICAgIENsaXBib2FyZCog
Y2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0KLSAgICBOb2Rl
KiB0b0VsZW1lbnQoKSBjb25zdDsKLSAgICBOb2RlKiBmcm9tRWxlbWVudCgpIGNvbnN0OwotICAg
IHZvaWQgaW5pdE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFj
dFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGll
bnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpOwotICAgIHZpcnR1YWwg
Ym9vbCBpc01vdXNlRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICB1
bnNpZ25lZCBzaG9ydCBtX2J1dHRvbjsKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX3Jl
bGF0ZWRUYXJnZXQ7Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0K
LS8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDMKLWNsYXNzIEtleWJvYXJkRXZlbnQgOiBwdWJs
aWMgVUlFdmVudFdpdGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBLZXlMb2NhdGlvbkNv
ZGUgewotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEICAgICAgPSAweDAwLAotICAg
ICAgICBET01fS0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAxLAotICAgICAgICBET01f
S0VZX0xPQ0FUSU9OX1JJR0hUICAgICAgICAgPSAweDAyLAotICAgICAgICBET01fS0VZX0xPQ0FU
SU9OX05VTVBBRCAgICAgICAgPSAweDAzLAotICAgIH07Ci0gICAgS2V5Ym9hcmRFdmVudCgpOwot
ICAgIEtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RW
aWV3Kik7Ci0gICAgS2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAg
ICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAg
ICAgdW5zaWduZWQga2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5
QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJv
b2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAg
ICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIHZpcnR1YWwgfktleWJvYXJkRXZl
bnQoKTsKLSAgICAKLSAgICB2b2lkIGluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAg
ICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3
ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFy
ZywKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1l
dGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgCi0g
ICAgU3RyaW5nIGtleUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2tleUlkZW50aWZpZXIu
Z2V0KCk7IH0KLSAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
TG9jYXRpb247IH0KLSAgICAKLSAgICBib29sIGFsdEdyYXBoS2V5KCkgY29uc3QgeyByZXR1cm4g
bV9hbHRHcmFwaEtleTsgfQotICAgIAotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCog
a2V5RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2tleUV2ZW50OyB9Ci0KLSAgICBpbnQga2V5Q29k
ZSgpIGNvbnN0OyAvLyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBm
b3Igb3RoZXIgZXZlbnRzCi0gICAgaW50IGNoYXJDb2RlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmly
dHVhbCBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNo
KCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBtX2tleUV2
ZW50OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2tleUlkZW50aWZpZXI7Ci0gICAgdW5zaWdu
ZWQgbV9rZXlMb2NhdGlvbjsKLSAgICBib29sIG1fYWx0R3JhcGhLZXkgOiAxOwotfTsKLQotY2xh
c3MgTXV0YXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBhdHRy
Q2hhbmdlVHlwZSB7IE1PRElGSUNBVElPTiA9IDEsIEFERElUSU9OID0gMiwgUkVNT1ZBTCA9IDMg
fTsKLSAgICBNdXRhdGlvbkV2ZW50KCk7Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRy
TmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdl
QXJnKTsKLSAgICBOb2RlICpyZWxhdGVkTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZE5v
ZGUuZ2V0KCk7IH0KLSAgICBTdHJpbmcgcHJldlZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2
VmFsdWUuZ2V0KCk7IH0KLSAgICBTdHJpbmcgbmV3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25l
d1ZhbHVlLmdldCgpOyB9Ci0gICAgU3RyaW5nIGF0dHJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyTmFtZS5nZXQoKTsgfQotICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX2F0dHJDaGFuZ2U7IH0KLSAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAg
dmlydHVhbCBib29sIGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8Tm9kZT4gbV9yZWxhdGVkTm9kZTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9wcmV2VmFs
dWU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbmV3VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG1fYXR0ck5hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9hdHRyQ2hhbmdlOwotfTsK
LQotY2xhc3MgQ2xpcGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIENs
aXBib2FyZEV2ZW50KCk7Ci0gICAgQ2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0
eXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNs
aXBib2FyZEFyZyk7Ci0KLSAgICBDbGlwYm9hcmQgKmNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2xpcGJvYXJkLmdldCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQo
KSBjb25zdDsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19
OwotCi0vLyBleHRlbnNpb246IG1vdXNlIHdoZWVsIGV2ZW50Ci1jbGFzcyBXaGVlbEV2ZW50IDog
cHVibGljIE1vdXNlUmVsYXRlZEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgV2hlZWxFdmVudCgpOwot
ICAgIFdoZWVsRXZlbnQoYm9vbCBob3Jpem9udGFsLCBpbnQgd2hlZWxEZWx0YSwgQWJzdHJhY3RW
aWV3ICosCi0gICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsIGludCBzY3JlZW5ZQXJn
LAotICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLCBpbnQgY2xpZW50WUFyZywKLSAg
ICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNo
aWZ0S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29u
c3QgeyByZXR1cm4gbV9ob3Jpem9udGFsOyB9Ci0gICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7
IHJldHVybiBtX3doZWVsRGVsdGE7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNX
aGVlbEV2ZW50KCkgY29uc3Q7Ci0KLSAgICBib29sIG1faG9yaXpvbnRhbDsKLSAgICBpbnQgbV93
aGVlbERlbHRhOwotfTsKLQotY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMg
U2hhcmVkPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJp
bmcgJmV2ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9Ci0gICAgRXZlbnRM
aXN0ZW5lciAqbGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0g
ICAgYm9vbCB1c2VDYXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9Ci0gICAg
Ym9vbCByZW1vdmVkKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVkOyB9Ci0gICAgdm9pZCBzZXRS
ZW1vdmVkKGJvb2wgcmVtb3ZlZCkgeyBtX3JlbW92ZWQgPSByZW1vdmVkOyB9Ci0gICAgCi1wcml2
YXRlOgotICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbV9saXN0ZW5lcjsKLSAgICBib29sIG1fdXNlQ2FwdHVyZTsKLSAgICBib29sIG1fcmVt
b3ZlZDsKLX07Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ciYsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJik7Ci1pbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBhLCBjb25zdCBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLS8vIFN0YXRlIGF2YWlsYWJs
ZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKLWNs
YXNzIENsaXBib2FyZCA6IHB1YmxpYyBTaGFyZWQ8Q2xpcGJvYXJkPiB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+Q2xpcGJvYXJkKCk7Ci0KLSAgICAvLyBJcyB0aGlzIG9wZXJhdGlvbiBhIGRyYWct
ZHJvcCBvciBhIGNvcHktcGFzdGU/Ci0gICAgdmlydHVhbCBib29sIGlzRm9yRHJhZ2dpbmcoKSBj
b25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAg
IHZpcnR1YWwgU3RyaW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEVmZmVjdEFsbG93ZWQoY29uc3QgU3RyaW5nICZzKSA9IDA7Ci0gICAgCi0gICAgdmly
dHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcgJnR5cGUpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxEYXRhKCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29u
c3QgU3RyaW5nICZ0eXBlLCBib29sICZzdWNjZXNzKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIHNldERhdGEoY29uc3QgU3RyaW5nICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpID0gMDsK
LSAgICAKLSAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgRGVw
cmVjYXRlZFN0cmluZ0xpc3QgdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBD
YWNoZWRJbWFnZSogZHJhZ0ltYWdlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRE
cmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCAmKSA9IDA7Ci0g
ICAgdmlydHVhbCBOb2RlICpkcmFnSW1hZ2VFbGVtZW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUgKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikg
PSAwOwotfTsKLQotY2xhc3MgQmVmb3JlVW5sb2FkRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1
YmxpYzoKLSAgICBCZWZvcmVVbmxvYWRFdmVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHN0b3Jl
c1Jlc3VsdEFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNv
bnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dWx0LmdldCgpOyB9CiAKLXByaXZhdGU6Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcmVzdWx0
OwotfTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
LCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYpOworICAgIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGEsIGNvbnN0IFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KIAotfSAvLyBuYW1lc3BhY2UK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXJfaApJbmRleDogV2ViQ29yZS9kb20vVUlFdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vVUlFdmVudC5jcHAJKHJldmlzaW9uIDE0OTAwKQorKysgV2ViQ29yZS9k
b20vVUlFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw5IEBACiAvKioKICAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KICAqCi0g
KiAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogKEMpIDIwMDEgVG9iaWFz
IEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMSBU
b2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTIwLDE0MyArMjEsMjYgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKICAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgogICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkb20yX2V2
ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJVSUV2ZW50LmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0j
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLSNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCi1FdmVudDo6RXZl
bnQoKQotICAgIDogbV9jYW5CdWJibGUoZmFsc2UpCi0gICAgLCBtX2NhbmNlbGFibGUoZmFsc2Up
Ci0gICAgLCBtX3Byb3BhZ2F0aW9uU3RvcHBlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdFByZXZl
bnRlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdEhhbmRsZWQoZmFsc2UpCi0gICAgLCBtX2NhbmNl
bEJ1YmJsZShmYWxzZSkKLSAgICAsIG1fY3VycmVudFRhcmdldCgwKQotICAgICwgbV9ldmVudFBo
YXNlKDApCi0gICAgLCBtX2NyZWF0ZVRpbWUoc3RhdGljX2Nhc3Q8RE9NVGltZVN0YW1wPihjdXJy
ZW50VGltZSgpICogMTAwMC4wKSkKLXsKLX0KLQotRXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQot
ICAgIDogbV90eXBlKGV2ZW50VHlwZSkKLSAgICAsIG1fY2FuQnViYmxlKGNhbkJ1YmJsZUFyZykK
LSAgICAsIG1fY2FuY2VsYWJsZShjYW5jZWxhYmxlQXJnKQotICAgICwgbV9wcm9wYWdhdGlvblN0
b3BwZWQoZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCi0gICAgLCBtX2Rl
ZmF1bHRIYW5kbGVkKGZhbHNlKQotICAgICwgbV9jYW5jZWxCdWJibGUoZmFsc2UpCi0gICAgLCBt
X2N1cnJlbnRUYXJnZXQoMCkKLSAgICAsIG1fZXZlbnRQaGFzZSgwKQotICAgICwgbV9jcmVhdGVU
aW1lKHN0YXRpY19jYXN0PERPTVRpbWVTdGFtcD4oY3VycmVudFRpbWUoKSAqIDEwMDAuMCkpCi17
Ci19Ci0KLUV2ZW50Ojp+RXZlbnQoKQotewotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNh
bmNlbGFibGVBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV90eXBlID0gZXZlbnRUeXBlQXJnOwotICAgIG1fY2FuQnViYmxlID0gY2FuQnViYmxl
QXJnOwotICAgIG1fY2FuY2VsYWJsZSA9IGNhbmNlbGFibGVBcmc7Ci19Ci0KLWJvb2wgRXZlbnQ6
OmlzVUlFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50
Ojppc01vdXNlRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBF
dmVudDo6aXNNdXRhdGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEV2ZW50Ojppc0RyYWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0JlZm9yZVRleHRJbnNlcnRlZEV2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OnN0b3Jl
c1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
RXZlbnQ6OnN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgRXZlbnQ6OnNl
dFRhcmdldChOb2RlKiB0YXJnZXQpCi17Ci0gICAgbV90YXJnZXQgPSB0YXJnZXQ7Ci0gICAgaWYg
KHRhcmdldCkKLSAgICAgICAgcmVjZWl2ZWRUYXJnZXQoKTsKLX0KLQotdm9pZCBFdmVudDo6cmVj
ZWl2ZWRUYXJnZXQoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBVSUV2ZW50
OjpVSUV2ZW50KCkKICAgICA6IG1fZGV0YWlsKDApCiB7CiB9CiAKLVVJRXZlbnQ6OlVJRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNh
bmNlbGFibGVBcmcsIEFic3RyYWN0VmlldyAqdmlld0FyZywgaW50IGRldGFpbEFyZykKK1VJRXZl
bnQ6OlVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxl
QXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3RyYWN0Vmlldyogdmlld0FyZywgaW50IGRldGFp
bEFyZykKICAgICA6IEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJn
KQogICAgICwgbV92aWV3KHZpZXdBcmcpCiAgICAgLCBtX2RldGFpbChkZXRhaWxBcmcpCiB7CiB9
CiAKLXZvaWQgVUlFdmVudDo6aW5pdFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnKQordm9pZCBVSUV2ZW50Ojppbml0VUlFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNh
bmNlbGFibGVBcmcsIEFic3RyYWN0Vmlldyogdmlld0FyZywgaW50IGRldGFpbEFyZykKIHsKICAg
ICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMDcsNDQ4ICs5MSw0IEBA
IGludCBVSUV2ZW50Ojp3aGljaCgpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLU1vdXNlUmVsYXRlZEV2ZW50OjpNb3VzZVJlbGF0ZWRFdmVudCgp
Ci0gICAgOiBtX3NjcmVlblgoMCksIG1fc2NyZWVuWSgwKSwgbV9jbGllbnRYKDApLCBtX2NsaWVu
dFkoMCkKLSAgICAsIG1fcGFnZVgoMCksIG1fcGFnZVkoMCksIG1fbGF5ZXJYKDApLCBtX2xheWVy
WSgwKSwgbV9vZmZzZXRYKDApLCBtX29mZnNldFkoMCksIG1faXNTaW11bGF0ZWQoZmFsc2UpCi17
Ci19Ci0KLU1vdXNlUmVsYXRlZEV2ZW50OjpNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9taWNT
dHJpbmcgJmV2ZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNh
bkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJs
S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQpCi0gICAgOiBVSUV2ZW50V2l0aEtleVN0
YXRlKGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRh
aWxBcmcsCi0gICAgICAgIGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFL
ZXlBcmcpCi0gICAgLCBtX3NjcmVlblgoc2NyZWVuWEFyZyksIG1fc2NyZWVuWShzY3JlZW5ZQXJn
KQotICAgICwgbV9jbGllbnRYKGNsaWVudFhBcmcpLCBtX2NsaWVudFkoY2xpZW50WUFyZykKLSAg
ICAsIG1faXNTaW11bGF0ZWQoaXNTaW11bGF0ZWQpCi17Ci0gICAgaW5pdENvb3JkaW5hdGVzKCk7
Ci19Ci0KLXZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OmluaXRDb29yZGluYXRlcygpCi17Ci0gICAg
Ly8gU2V0IHVwIGluaXRpYWwgdmFsdWVzIGZvciBjb29yZGluYXRlcy4KLSAgICAvLyBDb3JyZWN0
IHZhbHVlcyBjYW4ndCBiZSBjb21wdXRlZCB1bnRpbCB3ZSBoYXZlIGF0IHRhcmdldCwgc28gcmVj
ZWl2ZWRUYXJnZXQKLSAgICAvLyBkb2VzIHRoZSAicmVhbCIgY29tcHV0YXRpb24uCi0gICAgbV9w
YWdlWCA9IG1fY2xpZW50WDsKLSAgICBtX3BhZ2VZID0gbV9jbGllbnRZOwotICAgIG1fbGF5ZXJY
ID0gbV9wYWdlWDsKLSAgICBtX2xheWVyWSA9IG1fcGFnZVk7Ci0gICAgbV9vZmZzZXRYID0gbV9w
YWdlWDsKLSAgICBtX29mZnNldFkgPSBtX3BhZ2VZOwotfQotCi12b2lkIE1vdXNlUmVsYXRlZEV2
ZW50OjpyZWNlaXZlZFRhcmdldCgpCi17Ci0gICAgLy8gQ29tcHV0ZSBjb29yZGluYXRlcyB0aGF0
IGFyZSBiYXNlZCBvbiB0aGUgdGFyZ2V0LgotICAgIG1fb2Zmc2V0WCA9IG1fcGFnZVg7Ci0gICAg
bV9vZmZzZXRZID0gbV9wYWdlWTsKLSAgICBtX2xheWVyWCA9IG1fcGFnZVg7ICAgIAotICAgIG1f
bGF5ZXJZID0gbV9wYWdlWTsgICAgCi0KLSAgICBOb2RlKiB0YXJnID0gdGFyZ2V0KCk7Ci0gICAg
QVNTRVJUKHRhcmcpOwotCi0gICAgLy8gTXVzdCBoYXZlIGFuIHVwZGF0ZWQgcmVuZGVyIHRyZWUg
Zm9yIHRoaXMgbWF0aCB0byB3b3JrIGNvcnJlY3RseS4KLSAgICB0YXJnLT5kb2N1bWVudCgpLT51
cGRhdGVSZW5kZXJpbmcoKTsKLQotICAgIC8vIEZJWE1FOiBjbGllbnRYL1kgc2hvdWxkIG5vdCBi
ZSB0aGUgc2FtZSBhcyBwYWdlWC9ZIQotICAgIC8vIEN1cnJlbnRseSB0aGUgcGFzc2VkLWluIGNs
aWVudFggYW5kIGNsaWVudFkgYXJlIGluY29ycmVjdGx5IGFjdHVhbGx5Ci0gICAgLy8gcGFnZVgg
YW5kIHBhZ2VZIHZhbHVlcywgc28gd2UgZG9uJ3QgaGF2ZSBhbnkgd29yayB0byBkbyBoZXJlLCBi
dXQgaWYKLSAgICAvLyB3ZSBzdGFydGVkIHBhc3NpbmcgaW4gY29ycmVjdCBjbGllbnRYIGFuZCBj
bGllbnRZLCB3ZSdkIHdhbnQgdG8gY29tcHV0ZQotICAgIC8vIHBhZ2VYIGFuZCBwYWdlWSBoZXJl
LgotCi0gICAgLy8gQWRqdXN0IG9mZnNldFgvWSB0byBiZSByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0
J3MgcG9zaXRpb24uCi0gICAgaWYgKCFpc1NpbXVsYXRlZCgpKSB7Ci0gICAgICAgIGlmIChSZW5k
ZXJPYmplY3QqIHIgPSB0YXJnLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpbnQgcngsIHJ5
OwotICAgICAgICAgICAgaWYgKHItPmFic29sdXRlUG9zaXRpb24ocngsIHJ5KSkgewotICAgICAg
ICAgICAgICAgIG1fb2Zmc2V0WCAtPSByeDsKLSAgICAgICAgICAgICAgICBtX29mZnNldFkgLT0g
cnk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBZGp1c3QgbGF5
ZXJYL1kgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGxheWVyLgotICAgIC8vIEZJWE1FOiBXZSdyZSBw
cmV0dHkgc3VyZSB0aGlzIGlzIHRoZSB3cm9uZyBkZWZpbnRpb24gb2YgImxheWVyLiIKLSAgICAv
LyBPdXIgUmVuZGVyTGF5ZXIgaXMgYSBtb3JlIG1vZGVybiBjb25jZXB0LCBhbmQgbGF5ZXJYL1kg
aXMgc29tZQotICAgIC8vIG90aGVyIG5vdGlvbiBhYm91dCBncm91cHMgb2YgZWxlbWVudHM7IHdl
IHNob3VsZCB0ZXN0IGFuZCBmaXggdGhpcy4KLSAgICBOb2RlKiBuID0gdGFyZzsKLSAgICB3aGls
ZSAobiAmJiAhbi0+cmVuZGVyZXIoKSkKLSAgICAgICAgbiA9IG4tPnBhcmVudCgpOwotICAgIGlm
IChuKSB7Ci0gICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IG4tPnJlbmRlcmVyKCktPmVuY2xv
c2luZ0xheWVyKCk7Ci0gICAgICAgIGxheWVyLT51cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0gICAg
ICAgIGZvciAoOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAg
IG1fbGF5ZXJYIC09IGxheWVyLT54UG9zKCk7Ci0gICAgICAgICAgICBtX2xheWVyWSAtPSBsYXll
ci0+eVBvcygpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6
OnBhZ2VYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wYWdlWDsKLX0KLQotaW50IE1vdXNlUmVs
YXRlZEV2ZW50OjpwYWdlWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZVk7Ci19Ci0KLWlu
dCBNb3VzZVJlbGF0ZWRFdmVudDo6eCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMg
bm90IGNvcnJlY3QuCi0gICAgLy8gU2VlIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIGFuZCA8aHR0
cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vdzNjX2V2ZW50cy5odG1sPi4KLSAgICByZXR1cm4g
bV9jbGllbnRYOwotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnkoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb3JyZWN0LgotICAgIC8vIFNlZSBNaWNyb3NvZnQgZG9j
dW1lbnRhdGlvbiBhbmQgPGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9tL3czY19ldmVudHMu
aHRtbD4uCi0gICAgcmV0dXJuIG1fY2xpZW50WTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotTW91c2VFdmVudDo6TW91c2VFdmVudCgpCi0gICAgOiBtX2J1dHRvbigwKQotewotfQot
Ci1Nb3VzZUV2ZW50OjpNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50
WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2
ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGlzU2ltdWxhdGVkKQotICAgIDogTW91c2VSZWxhdGVkRXZlbnQoZXZlbnRU
eXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywKLSAg
ICAgICAgc2NyZWVuWEFyZywgc2NyZWVuWUFyZywgY2xpZW50WEFyZywgY2xpZW50WUFyZywKLSAg
ICAgICAgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFyZywgaXNT
aW11bGF0ZWQpCi0gICAgLCBtX2J1dHRvbihidXR0b25BcmcpCi0gICAgLCBtX3JlbGF0ZWRUYXJn
ZXQocmVsYXRlZFRhcmdldEFyZykKLSAgICAsIG1fY2xpcGJvYXJkKGNsaXBib2FyZEFyZykKLXsK
LX0KLQotTW91c2VFdmVudDo6fk1vdXNlRXZlbnQoKQotewotfQotCi12b2lkIE1vdXNlRXZlbnQ6
OmluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3KiB2aWV3QXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0QXJnKQotewotICAgIGlmIChkaXNwYXRjaGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluaXRVSUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJs
ZUFyZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnKTsKLQotICAgIG1fc2NyZWVu
WCA9IHNjcmVlblhBcmc7Ci0gICAgbV9zY3JlZW5ZID0gc2NyZWVuWUFyZzsKLSAgICBtX2NsaWVu
dFggPSBjbGllbnRYQXJnOwotICAgIG1fY2xpZW50WSA9IGNsaWVudFlBcmc7Ci0gICAgbV9jdHJs
S2V5ID0gY3RybEtleUFyZzsKLSAgICBtX2FsdEtleSA9IGFsdEtleUFyZzsKLSAgICBtX3NoaWZ0
S2V5ID0gc2hpZnRLZXlBcmc7Ci0gICAgbV9tZXRhS2V5ID0gbWV0YUtleUFyZzsKLSAgICBtX2J1
dHRvbiA9IGJ1dHRvbkFyZzsKLSAgICBtX3JlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0QXJn
OwotCi0gICAgaW5pdENvb3JkaW5hdGVzKCk7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6aXNNb3Vz
ZUV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50
Ojppc0RyYWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nICZ0ID0gdHlw
ZSgpOwotICAgIHJldHVybiB0ID09IGRyYWdlbnRlckV2ZW50IHx8IHQgPT0gZHJhZ292ZXJFdmVu
dCB8fCB0ID09IGRyYWdsZWF2ZUV2ZW50Ci0gICAgICAgIHx8IHQgPT0gZHJvcEV2ZW50Ci0gICAg
ICAgIHx8IHQgPT0gZHJhZ3N0YXJ0RXZlbnQgfHwgdCA9PSBkcmFnRXZlbnQgfHwgdCA9PSBkcmFn
ZW5kRXZlbnQ7Ci19Ci0KLWludCBNb3VzZUV2ZW50Ojp3aGljaCgpIGNvbnN0Ci17Ci0gICAgLy8g
Rm9yIEtIVE1MLCB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgbGVmdCwgbWlkZGxlIGFuZCByaWdodCBt
b3VzZSBidXR0b25zIGFyZSAwLCAxLCAyLCByZXNwZWN0aXZlbHkuCi0gICAgLy8gRm9yIHRoZSBO
ZXRzY2FwZSAid2hpY2giIHByb3BlcnR5LCB0aGUgcmV0dXJuIHZhbHVlcyBmb3IgbGVmdCwgbWlk
ZGxlIGFuZCByaWdodCBtb3VzZSBidXR0b25zIGFyZSAxLCAyLCAzLCByZXNwZWN0aXZlbHkuIAot
ICAgIC8vIFNvIHdlIG11c3QgYWRkIDEuCi0gICAgcmV0dXJuIG1fYnV0dG9uICsgMTsKLX0KLQot
Tm9kZSogTW91c2VFdmVudDo6dG9FbGVtZW50KCkgY29uc3QKLXsKLSAgICAvLyBNU0lFIGV4dGVu
c2lvbiAtICJ0aGUgb2JqZWN0IHRvd2FyZCB3aGljaCB0aGUgdXNlciBpcyBtb3ZpbmcgdGhlIG1v
dXNlIHBvaW50ZXIiCi0gICAgcmV0dXJuIHR5cGUoKSA9PSBtb3VzZW91dEV2ZW50ID8gcmVsYXRl
ZFRhcmdldCgpIDogdGFyZ2V0KCk7Ci19Ci0KLU5vZGUqIE1vdXNlRXZlbnQ6OmZyb21FbGVtZW50
KCkgY29uc3QKLXsKLSAgICAvLyBNU0lFIGV4dGVuc2lvbiAtICJvYmplY3QgZnJvbSB3aGljaCBh
Y3RpdmF0aW9uIG9yIHRoZSBtb3VzZSBwb2ludGVyIGlzIGV4aXRpbmcgZHVyaW5nIHRoZSBldmVu
dCIgKGh1aD8pCi0gICAgcmV0dXJuIHR5cGUoKSA9PSBtb3VzZW91dEV2ZW50ID8gdGFyZ2V0KCkg
OiByZWxhdGVkVGFyZ2V0KCk7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoKQotICA6IG1fa2V5RXZlbnQo
MCkKLSAgLCBtX2tleUxvY2F0aW9uKERPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQpCi0gICwgbV9h
bHRHcmFwaEtleShmYWxzZSkKLXsKLX0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChj
b25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleSwgQWJzdHJhY3RWaWV3ICp2aWV3KQotICA6
IFVJRXZlbnRXaXRoS2V5U3RhdGUoa2V5LmlzS2V5VXAoKSA/IGtleXVwRXZlbnQgOiBrZXkuaXNB
dXRvUmVwZWF0KCkgPyBrZXlwcmVzc0V2ZW50IDoga2V5ZG93bkV2ZW50LAotICAgIHRydWUsIHRy
dWUsIHZpZXcsIDAsIGtleS5jdHJsS2V5KCksIGtleS5hbHRLZXkoKSwga2V5LnNoaWZ0S2V5KCks
IGtleS5tZXRhS2V5KCkpCi0gICwgbV9rZXlFdmVudChuZXcgUGxhdGZvcm1LZXlib2FyZEV2ZW50
KGtleSkpCi0gICwgbV9rZXlJZGVudGlmaWVyKFN0cmluZyhrZXkua2V5SWRlbnRpZmllcigpKS5p
bXBsKCkpCi0gICwgbV9rZXlMb2NhdGlvbihrZXkuaXNLZXlwYWQoKSA/IERPTV9LRVlfTE9DQVRJ
T05fTlVNUEFEIDogRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5
KGZhbHNlKQotewotfQotCi1LZXlib2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQga2V5TG9jYXRpb25B
cmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtl
eUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRL
ZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hp
ZnRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bWV0YUtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbHRHcmFwaEtleUFyZykKLSAgOiBVSUV2ZW50V2l0aEtleVN0YXRlKGV2ZW50VHlwZSwgY2Fu
QnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCAwLCBjdHJsS2V5QXJnLCBhbHRLZXlB
cmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnKQotICAsIG1fa2V5RXZlbnQoMCkKLSAgLCBtX2tl
eUlkZW50aWZpZXIoa2V5SWRlbnRpZmllckFyZy5pbXBsKCkpCi0gICwgbV9rZXlMb2NhdGlvbihr
ZXlMb2NhdGlvbkFyZykKLSAgLCBtX2FsdEdyYXBoS2V5KGFsdEdyYXBoS2V5QXJnKQotewotfQot
Ci1LZXlib2FyZEV2ZW50Ojp+S2V5Ym9hcmRFdmVudCgpCi17Ci0gICAgZGVsZXRlIG1fa2V5RXZl
bnQ7Ci19Ci0KLXZvaWQgS2V5Ym9hcmRFdmVudDo6aW5pdEtleWJvYXJkRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY3RybEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs
dEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGluaXRVSUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywg
Y2FuY2VsYWJsZUFyZywgdmlld0FyZywgMCk7Ci0KLSAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJ
ZGVudGlmaWVyQXJnLmltcGwoKTsKLSAgICBtX2tleUxvY2F0aW9uID0ga2V5TG9jYXRpb25Bcmc7
Ci0gICAgbV9jdHJsS2V5ID0gY3RybEtleUFyZzsKLSAgICBtX3NoaWZ0S2V5ID0gc2hpZnRLZXlB
cmc7Ci0gICAgbV9hbHRLZXkgPSBhbHRLZXlBcmc7Ci0gICAgbV9tZXRhS2V5ID0gbWV0YUtleUFy
ZzsKLSAgICBtX2FsdEdyYXBoS2V5ID0gYWx0R3JhcGhLZXlBcmc7Ci19Ci0KLWludCBLZXlib2Fy
ZEV2ZW50OjprZXlDb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fa2V5RXZlbnQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGlmICh0eXBlKCkgPT0ga2V5ZG93bkV2ZW50IHx8IHR5cGUoKSA9PSBr
ZXl1cEV2ZW50KQotICAgICAgICByZXR1cm4gbV9rZXlFdmVudC0+V2luZG93c0tleUNvZGUoKTsK
LSAgICByZXR1cm4gY2hhckNvZGUoKTsKLX0KLQotaW50IEtleWJvYXJkRXZlbnQ6OmNoYXJDb2Rl
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fa2V5RXZlbnQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFN0cmluZyB0ZXh0ID0gbV9rZXlFdmVudC0+dGV4dCgpOwotICAgIGlmICh0ZXh0Lmxlbmd0aCgp
ICE9IDEpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0ZXh0WzBdOwotfQotCi1ib29s
IEtleWJvYXJkRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWludCBLZXlib2FyZEV2ZW50Ojp3aGljaCgpIGNvbnN0Ci17Ci0gICAgLy8gTmV0
c2NhcGUncyAid2hpY2giIHJldHVybnMgYSB2aXJ0dWFsIGtleSBjb2RlIGZvciBrZXlkb3duIGFu
ZCBrZXl1cCwgYW5kIGEgY2hhcmFjdGVyIGNvZGUgZm9yIGtleXByZXNzLgotICAgIC8vIFRoYXQn
cyBleGFjdGx5IHdoYXQgSUUncyAia2V5Q29kZSIgcmV0dXJucy4gU28gdGhleSBhcmUgdGhlIHNh
bWUgZm9yIGtleWJvYXJkIGV2ZW50cy4KLSAgICByZXR1cm4ga2V5Q29kZSgpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NdXRhdGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50KCkKLSAg
ICA6IG1fYXR0ckNoYW5nZSgwKQotewotfQotCi1NdXRhdGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlICpyZWxhdGVkTm9kZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
YXR0ckNoYW5nZUFyZykKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5j
ZWxhYmxlQXJnKQotICAgICwgbV9yZWxhdGVkTm9kZShyZWxhdGVkTm9kZUFyZykKLSAgICAsIG1f
cHJldlZhbHVlKHByZXZWYWx1ZUFyZy5pbXBsKCkpCi0gICAgLCBtX25ld1ZhbHVlKG5ld1ZhbHVl
QXJnLmltcGwoKSkKLSAgICAsIG1fYXR0ck5hbWUoYXR0ck5hbWVBcmcuaW1wbCgpKQotICAgICwg
bV9hdHRyQ2hhbmdlKGF0dHJDaGFuZ2VBcmcpCi17Ci19Ci0KLXZvaWQgTXV0YXRpb25FdmVudDo6
aW5pdE11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxhdGVk
Tm9kZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hh
bmdlQXJnKQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGluaXRFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOwotCi0gICAg
bV9yZWxhdGVkTm9kZSA9IHJlbGF0ZWROb2RlQXJnOwotICAgIG1fcHJldlZhbHVlID0gcHJldlZh
bHVlQXJnLmltcGwoKTsKLSAgICBtX25ld1ZhbHVlID0gbmV3VmFsdWVBcmcuaW1wbCgpOwotICAg
IG1fYXR0ck5hbWUgPSBhdHRyTmFtZUFyZy5pbXBsKCk7Ci0gICAgbV9hdHRyQ2hhbmdlID0gYXR0
ckNoYW5nZUFyZzsKLX0KLQotYm9vbCBNdXRhdGlvbkV2ZW50Ojppc011dGF0aW9uRXZlbnQoKSBj
b25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1DbGlwYm9hcmRFdmVudDo6Q2xpcGJvYXJkRXZlbnQoKQotewotfQotCi1DbGlwYm9hcmRFdmVu
dDo6Q2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2Fu
QnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIENsaXBib2FyZCAqY2xpcGJvYXJkQXJnKQot
ICAgIDogRXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpLCBtX2Ns
aXBib2FyZChjbGlwYm9hcmRBcmcpCi17Ci19Ci0KLWJvb2wgQ2xpcGJvYXJkRXZlbnQ6OmlzQ2xp
cGJvYXJkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KCkgOiBtX2hvcml6b250YWwo
ZmFsc2UpLCBtX3doZWVsRGVsdGEoMCkKLXsKLX0KLQotV2hlZWxFdmVudDo6V2hlZWxFdmVudChi
b29sIGgsIGludCBkLCBBYnN0cmFjdFZpZXcgKnYsCi0gICAgaW50IHN4LCBpbnQgc3ksIGludCBj
eCwgaW50IGN5LCBib29sIGN0cmwsIGJvb2wgYWx0LCBib29sIHNoaWZ0LCBib29sIG1ldGEpCi0g
ICAgOiBNb3VzZVJlbGF0ZWRFdmVudChoID8ga2h0bWxIb3Jpem9udGFsbW91c2V3aGVlbEV2ZW50
IDogbW91c2V3aGVlbEV2ZW50LAotICAgICAgICB0cnVlLCB0cnVlLCB2LCAwLCBzeCwgc3ksIGN4
LCBjeSwgY3RybCwgYWx0LCBzaGlmdCwgbWV0YSkKLSAgICAsIG1faG9yaXpvbnRhbChoKSwgbV93
aGVlbERlbHRhKGQpCi17Ci19Ci0KLWJvb2wgV2hlZWxFdmVudDo6aXNXaGVlbEV2ZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI6OlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyAmZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
LCBib29sIHVzZUNhcHR1cmUpCi0gICAgOiBtX2V2ZW50VHlwZShldmVudFR5cGUpCi0gICAgLCBt
X2xpc3RlbmVyKGxpc3RlbmVyKQotICAgICwgbV91c2VDYXB0dXJlKHVzZUNhcHR1cmUpCi0gICAg
LCBtX3JlbW92ZWQoZmFsc2UpCi17Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciAmYSwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJmIpCi17
Ci0gICAgcmV0dXJuIGEuZXZlbnRUeXBlKCkgPT0gYi5ldmVudFR5cGUoKSAmJiBhLmxpc3RlbmVy
KCkgPT0gYi5saXN0ZW5lcigpICYmIGEudXNlQ2FwdHVyZSgpID09IGIudXNlQ2FwdHVyZSgpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DbGlwYm9hcmQ6On5DbGlwYm9hcmQoKQot
ewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CZWZvcmVVbmxvYWRFdmVudDo6QmVm
b3JlVW5sb2FkRXZlbnQoKQotICAgIDogRXZlbnQoYmVmb3JldW5sb2FkRXZlbnQsIGZhbHNlLCB0
cnVlKQotewotfQotCi1ib29sIEJlZm9yZVVubG9hZEV2ZW50OjpzdG9yZXNSZXN1bHRBc1N0cmlu
ZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQmVmb3JlVW5sb2FkRXZl
bnQ6OnN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBtX3Jlc3VsdCA9IHMuaW1w
bCgpOwotfQotCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9V
SUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVUlFdmVudC5oCShyZXZpc2lvbiAx
NDkwMCkKKysrIFdlYkNvcmUvZG9tL1VJRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICsz
LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZo
LWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0u
d2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDQ1OCArMjMsNDUgQEAK
ICAqCiAgKi8KIAotI2lmbmRlZiBET01fRVZFTlRTSU1QTF9ICi0jZGVmaW5lIERPTV9FVkVOVFNJ
TVBMX0gKKyNpZm5kZWYgVUlFdmVudF9oCisjZGVmaW5lIFVJRXZlbnRfaAogCiAjaW5jbHVkZSAi
QXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiTm9kZS5o
IgotCi1jbGFzcyBEZXByZWNhdGVkU3RyaW5nTGlzdDsKKyNpbmNsdWRlICJFdmVudC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZEltYWdlOwotY2xhc3MgQ2xpcGJvYXJk
OwotY2xhc3MgRXZlbnRMaXN0ZW5lcjsKLWNsYXNzIEV2ZW50VGFyZ2V0Tm9kZTsKLWNsYXNzIElt
YWdlOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7Ci0KLXR5
cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIERPTVRpbWVTdGFtcDsKLXR5cGVkZWYgRE9NV2luZG93
IEFic3RyYWN0VmlldzsKLQotY29uc3QgaW50IEV2ZW50RXhjZXB0aW9uT2Zmc2V0ID0gMTAwOwot
Y29uc3QgaW50IEV2ZW50RXhjZXB0aW9uTWF4ID0gMTk5OwotZW51bSBFdmVudEV4Y2VwdGlvbkNv
ZGUgeyBVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUiA9IEV2ZW50RXhjZXB0aW9uT2Zmc2V0IH07
Ci0KLWNsYXNzIEV2ZW50IDogcHVibGljIFNoYXJlZDxFdmVudD4KLXsKLXB1YmxpYzoKLSAgICBl
bnVtIFBoYXNlVHlwZSB7IAotICAgICAgICBDQVBUVVJJTkdfUEhBU0UgPSAxLCAKLSAgICAgICAg
QVRfVEFSR0VUID0gMiwgCi0gICAgICAgIEJVQkJMSU5HX1BIQVNFID0gMyAKLSAgICB9OworICAg
IHR5cGVkZWYgRE9NV2luZG93IEFic3RyYWN0VmlldzsKIAotICAgIC8vIFJldmVyc2UtZW5naW5l
ZXJlZCBmcm9tIE5ldHNjYXBlCi0gICAgZW51bSBFdmVudFR5cGUgewotICAgICAgICBNT1VTRURP
V04gICAgICAgICAgID0gMSwKLSAgICAgICAgTU9VU0VVUCAgICAgICAgICAgICA9IDIsCi0gICAg
ICAgIE1PVVNFT1ZFUiAgICAgICAgICAgPSA0LAotICAgICAgICBNT1VTRU9VVCAgICAgICAgICAg
ID0gOCwKLSAgICAgICAgTU9VU0VNT1ZFICAgICAgICAgICA9IDE2LAotICAgICAgICBNT1VTRURS
QUcgICAgICAgICAgID0gMzIsCi0gICAgICAgIENMSUNLICAgICAgICAgICAgICAgPSA2NCwKLSAg
ICAgICAgREJMQ0xJQ0sgICAgICAgICAgICA9IDEyOCwKLSAgICAgICAgS0VZRE9XTiAgICAgICAg
ICAgICA9IDI1NiwKLSAgICAgICAgS0VZVVAgICAgICAgICAgICAgICA9IDUxMiwKLSAgICAgICAg
S0VZUFJFU1MgICAgICAgICAgICA9IDEwMjQsCi0gICAgICAgIERSQUdEUk9QICAgICAgICAgICAg
PSAyMDQ4LAotICAgICAgICBGT0NVUyAgICAgICAgICAgICAgID0gNDA5NiwKLSAgICAgICAgQkxV
UiAgICAgICAgICAgICAgICA9IDgxOTIsCi0gICAgICAgIFNFTEVDVCAgICAgICAgICAgICAgPSAx
NjM4NCwKLSAgICAgICAgQ0hBTkdFICAgICAgICAgICAgICA9IDMyNzY4Ci0gICAgfTsKLSAgICAK
LSAgICBFdmVudCgpOwotICAgIEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBj
YW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0gICAgdmlydHVhbCB+RXZlbnQoKTsK
LQotICAgIGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQotICAgIE5vZGUqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRUYXJnZXQoTm9kZSopOwotICAgIE5vZGUqIGN1cnJlbnRUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRUYXJnZXQ7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRUYXJnZXQo
Tm9kZSogY3VycmVudFRhcmdldCkgeyBtX2N1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0OyB9
Ci0gICAgdW5zaWduZWQgc2hvcnQgZXZlbnRQaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRQ
aGFzZTsgfQotICAgIHZvaWQgc2V0RXZlbnRQaGFzZSh1bnNpZ25lZCBzaG9ydCBldmVudFBoYXNl
KSB7IG1fZXZlbnRQaGFzZSA9IGV2ZW50UGhhc2U7IH0KLSAgICBib29sIGJ1YmJsZXMoKSBjb25z
dCB7IHJldHVybiBtX2NhbkJ1YmJsZTsgfQotICAgIGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FuY2VsYWJsZTsgfQotICAgIERPTVRpbWVTdGFtcCB0aW1lU3RhbXAoKSB7IHJl
dHVybiBtX2NyZWF0ZVRpbWU7IH0KLSAgICB2b2lkIHN0b3BQcm9wYWdhdGlvbigpIHsgbV9wcm9w
YWdhdGlvblN0b3BwZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBwcmV2ZW50RGVmYXVsdCgpIHsgaWYg
KG1fY2FuY2VsYWJsZSkgbV9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgaW5p
dEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlQXJnLCBib29sIGNhbkJ1YmJsZUFy
ZywgYm9vbCBjYW5jZWxhYmxlQXJnKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJv
YXJkRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsg
Ly8gYSBzdWJzZXQgb2YgbW91c2UgZXZlbnRzCi0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJk
RXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdDsKLQotICAg
IGJvb2wgcHJvcGFnYXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0
b3BwZWQ7IH0KLSAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2Rl
ZmF1bHRQcmV2ZW50ZWQ7IH0KLQotICAgIHZvaWQgc2V0RGVmYXVsdEhhbmRsZWQoKSB7IG1fZGVm
YXVsdEhhbmRsZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBkZWZhdWx0SGFuZGxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVmYXVsdEhhbmRsZWQ7IH0KLQotICAgIHZvaWQgc2V0Q2FuY2VsQnViYmxlKGJv
b2wgY2FuY2VsKSB7IG1fY2FuY2VsQnViYmxlID0gY2FuY2VsOyB9Ci0gICAgdm9pZCBzZXREZWZh
dWx0UHJldmVudGVkKGJvb2wgZGVmYXVsdFByZXZlbnRlZCkgeyBtX2RlZmF1bHRQcmV2ZW50ZWQg
PSBkZWZhdWx0UHJldmVudGVkOyB9Ci0gICAgYm9vbCBnZXRDYW5jZWxCdWJibGUoKSBjb25zdCB7
IHJldHVybiBtX2NhbmNlbEJ1YmJsZTsgfQotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3Vs
dEFzU3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0
cmluZyYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkVGFyZ2V0KCk7
Ci0gICAgYm9vbCBkaXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KLQotcHJp
dmF0ZToKLSAgICBBdG9taWNTdHJpbmcgbV90eXBlOwotICAgIGJvb2wgbV9jYW5CdWJibGU7Ci0g
ICAgYm9vbCBtX2NhbmNlbGFibGU7Ci0KLSAgICBib29sIG1fcHJvcGFnYXRpb25TdG9wcGVkOwot
ICAgIGJvb2wgbV9kZWZhdWx0UHJldmVudGVkOwotICAgIGJvb2wgbV9kZWZhdWx0SGFuZGxlZDsK
LSAgICBib29sIG1fY2FuY2VsQnViYmxlOwotCi0gICAgTm9kZSogbV9jdXJyZW50VGFyZ2V0OyAv
LyByZWYgPiAwIG1haW50YWluZWQgZXh0ZXJuYWxseQotICAgIHVuc2lnbmVkIHNob3J0IG1fZXZl
bnRQaGFzZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Ci0gICAgRE9NVGltZVN0YW1wIG1f
Y3JlYXRlVGltZTsKLX07Ci0KLWNsYXNzIFVJRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1Ymxp
YzoKLSAgICBVSUV2ZW50KCk7Ci0gICAgVUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUs
Ci0gICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywK
LSAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnKTsKLSAgICBBYnN0cmFjdFZpZXcgKnZpZXco
KSBjb25zdCB7IHJldHVybiBtX3ZpZXcuZ2V0KCk7IH0KLSAgICBpbnQgZGV0YWlsKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXRhaWw7IH0KLSAgICB2b2lkIGluaXRVSUV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgaW50IGRl
dGFpbEFyZyk7Ci0gICAgdmlydHVhbCBib29sIGlzVUlFdmVudCgpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBpbnQga2V5Q29kZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNoYXJDb2RlKCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBsYXllclgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBs
YXllclkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IHBhZ2VYKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgcGFnZVkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEFic3RyYWN0Vmlldz4gbV92aWV3OwotICAgIGludCBt
X2RldGFpbDsKLX07Ci0KLWNsYXNzIFVJRXZlbnRXaXRoS2V5U3RhdGUgOiBwdWJsaWMgVUlFdmVu
dCB7Ci1wdWJsaWM6Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZSgpIDogbV9jdHJsS2V5KGZhbHNl
KSwgbV9hbHRLZXkoZmFsc2UpLCBtX3NoaWZ0S2V5KGZhbHNlKSwgbV9tZXRhS2V5KGZhbHNlKSB7
IH0KLSAgICBVSUV2ZW50V2l0aEtleVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9v
bCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQWJzdHJhY3RWaWV3ICp2aWV3QXJn
LAotICAgICAgICBpbnQgZGV0YWlsQXJnLCBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJn
LCBib29sIHNoaWZ0S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpCi0gICAgICAgIDogVUlFdmVudCh0
eXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZykKLSAg
ICAgICAgLCBtX2N0cmxLZXkoY3RybEtleUFyZyksIG1fYWx0S2V5KGFsdEtleUFyZyksIG1fc2hp
ZnRLZXkoc2hpZnRLZXlBcmcpLCBtX21ldGFLZXkobWV0YUtleUFyZykgeyB9Ci0KLSAgICBib29s
IGN0cmxLZXkoKSBjb25zdCB7IHJldHVybiBtX2N0cmxLZXk7IH0KLSAgICBib29sIHNoaWZ0S2V5
KCkgY29uc3QgeyByZXR1cm4gbV9zaGlmdEtleTsgfQotICAgIGJvb2wgYWx0S2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9hbHRLZXk7IH0KLSAgICBib29sIG1ldGFLZXkoKSBjb25zdCB7IHJldHVybiBt
X21ldGFLZXk7IH0KLQotcHJvdGVjdGVkOiAvLyBleHBvc2UgdGhlc2Ugc28gaW5pdCBmdW5jdGlv
bnMgY2FuIHNldCB0aGVtCi0gICAgYm9vbCBtX2N0cmxLZXkgOiAxOwotICAgIGJvb2wgbV9hbHRL
ZXkgOiAxOwotICAgIGJvb2wgbV9zaGlmdEtleSA6IDE7Ci0gICAgYm9vbCBtX21ldGFLZXkgOiAx
OwotfTsKLQotLy8gSW50ZXJuYWwgb25seTogSGVscGVyIGNsYXNzIGZvciB3aGF0J3MgY29tbW9u
IGJldHdlZW4gbW91c2UgYW5kIHdoZWVsIGV2ZW50cy4KLWNsYXNzIE1vdXNlUmVsYXRlZEV2ZW50
IDogcHVibGljIFVJRXZlbnRXaXRoS2V5U3RhdGUgewotcHVibGljOgotICAgIE1vdXNlUmVsYXRl
ZEV2ZW50KCk7Ci0gICAgTW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNT
aW11bGF0ZWQgPSBmYWxzZSk7Ci0gICAgaW50IHNjcmVlblgoKSBjb25zdCB7IHJldHVybiBtX3Nj
cmVlblg7IH0KLSAgICBpbnQgc2NyZWVuWSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuWTsgfQot
ICAgIGludCBjbGllbnRYKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRYOyB9Ci0gICAgaW50IGNs
aWVudFkoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudFk7IH0KLSAgICBpbnQgbGF5ZXJYKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclg7IH0KLSAgICBpbnQgbGF5ZXJZKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllclk7IH0KLSAgICBpbnQgb2Zmc2V0WCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WDsg
fQotICAgIGludCBvZmZzZXRZKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRZOyB9Ci0gICAgYm9v
bCBpc1NpbXVsYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTaW11bGF0ZWQ7IH0KLSAgICB2aXJ0
dWFsIGludCBwYWdlWCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0g
ICAgaW50IHgoKSBjb25zdDsKLSAgICBpbnQgeSgpIGNvbnN0OwotcHJvdGVjdGVkOiAvLyBleHBv
c2UgdGhlc2Ugc28gTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQgY2FuIHNldCB0aGVtCi0gICAg
aW50IG1fc2NyZWVuWDsKLSAgICBpbnQgbV9zY3JlZW5ZOwotICAgIGludCBtX2NsaWVudFg7Ci0g
ICAgaW50IG1fY2xpZW50WTsKLSAgICB2b2lkIGluaXRDb29yZGluYXRlcygpOwotICAgIHZpcnR1
YWwgdm9pZCByZWNlaXZlZFRhcmdldCgpOwotcHJpdmF0ZToKLSAgICBpbnQgbV9wYWdlWDsKLSAg
ICBpbnQgbV9wYWdlWTsKLSAgICBpbnQgbV9sYXllclg7Ci0gICAgaW50IG1fbGF5ZXJZOwotICAg
IGludCBtX29mZnNldFg7Ci0gICAgaW50IG1fb2Zmc2V0WTsKLSAgICBib29sIG1faXNTaW11bGF0
ZWQ7Ci19OwotCi0vLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi1jbGFzcyBNb3VzZUV2ZW50
IDogcHVibGljIE1vdXNlUmVsYXRlZEV2ZW50IHsKLXB1YmxpYzoKLSAgICBNb3VzZUV2ZW50KCk7
Ci0gICAgTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxh
YmxlQXJnLAotICAgICAgICAgICAgICAgICAgIEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAg
ICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBzY3Jl
ZW5YQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAg
ICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJn
LAotICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAg
ICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAot
ICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXRO
b2RlKiByZWxhdGVkVGFyZ2V0QXJnLAotICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCogY2xp
cGJvYXJkQXJnID0gMCwKLSAgICAgICAgICAgICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFs
c2UpOwotICAgIHZpcnR1YWwgfk1vdXNlRXZlbnQoKTsKLSAgICAvLyBXaW5JRSB1c2VzIDEsNCwy
IGZvciBsZWZ0L21pZGRsZS9yaWdodCBidXQgbm90IGZvciBjbGljayAoanVzdCBmb3IgbW91c2Vk
b3duL3VwLCBtYXliZSBvdGhlcnMpLCBidXQgd2Ugd2lsbCBtYXRjaCB0aGUgc3RhbmRhcmQgRE9N
LgotICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dG9uOyB9
Ci0gICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWxhdGVkVGFyZ2V0LmdldCgpOyB9Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSBjb25zdCB7
IHJldHVybiBtX2NsaXBib2FyZC5nZXQoKTsgfQotICAgIE5vZGUqIHRvRWxlbWVudCgpIGNvbnN0
OwotICAgIE5vZGUqIGZyb21FbGVtZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBpbml0TW91c2VFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0Vmlldyogdmlld0FyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5Z
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0
Tm9kZSogcmVsYXRlZFRhcmdldEFyZyk7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIHVuc2lnbmVkIHNob3J0IG1fYnV0
dG9uOwotICAgIFJlZlB0cjxFdmVudFRhcmdldE5vZGU+IG1fcmVsYXRlZFRhcmdldDsKLSAgICBS
ZWZQdHI8Q2xpcGJvYXJkPiBtX2NsaXBib2FyZDsKLX07Ci0KLQotLy8gSW50cm9kdWNlZCBpbiBE
T00gTGV2ZWwgMwotY2xhc3MgS2V5Ym9hcmRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0
YXRlIHsKLXB1YmxpYzoKLSAgICBlbnVtIEtleUxvY2F0aW9uQ29kZSB7Ci0gICAgICAgIERPTV9L
RVlfTE9DQVRJT05fU1RBTkRBUkQgICAgICA9IDB4MDAsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJ
T05fTEVGVCAgICAgICAgICA9IDB4MDEsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fUklHSFQg
ICAgICAgICA9IDB4MDIsCi0gICAgICAgIERPTV9LRVlfTE9DQVRJT05fTlVNUEFEICAgICAgICA9
IDB4MDMsCisgICAgY2xhc3MgVUlFdmVudCA6IHB1YmxpYyBFdmVudCB7CisgICAgcHVibGljOgor
ICAgICAgICBVSUV2ZW50KCk7CisgICAgICAgIFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqIHZpZXcs
IGludCBkZXRhaWwpOworCisgICAgICAgIHZvaWQgaW5pdFVJRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcq
IHZpZXcsIGludCBkZXRhaWwpOworCisgICAgICAgIEFic3RyYWN0VmlldyogdmlldygpIGNvbnN0
IHsgcmV0dXJuIG1fdmlldy5nZXQoKTsgfQorICAgICAgICBpbnQgZGV0YWlsKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXRhaWw7IH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZl
bnQoKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGludCBrZXlDb2RlKCkgY29uc3Q7CisgICAg
ICAgIHZpcnR1YWwgaW50IGNoYXJDb2RlKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBpbnQg
bGF5ZXJYKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IGxheWVyWSgpIGNvbnN0OworCisg
ICAgICAgIHZpcnR1YWwgaW50IHBhZ2VYKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgaW50IHBh
Z2VZKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdDsKKworICAg
IHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxBYnN0cmFjdFZpZXc+IG1fdmlldzsKKyAgICAgICAg
aW50IG1fZGV0YWlsOwogICAgIH07Ci0gICAgS2V5Ym9hcmRFdmVudCgpOwotICAgIEtleWJvYXJk
RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RWaWV3Kik7Ci0gICAg
S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAgICAgICAg
Ym9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAot
ICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQg
a2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAg
ICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlB
cmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgIGJv
b2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIHZpcnR1YWwgfktleWJvYXJkRXZlbnQoKTsKLSAgICAK
LSAgICB2b2lkIGluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywK
LSAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICBib29s
IGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAot
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAgICAgICBib29sIGN0
cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgCi0gICAgU3RyaW5nIGtl
eUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2tleUlkZW50aWZpZXIuZ2V0KCk7IH0KLSAg
ICB1bnNpZ25lZCBrZXlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5TG9jYXRpb247IH0K
LSAgICAKLSAgICBib29sIGFsdEdyYXBoS2V5KCkgY29uc3QgeyByZXR1cm4gbV9hbHRHcmFwaEtl
eTsgfQotICAgIAotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQoKSBj
b25zdCB7IHJldHVybiBtX2tleUV2ZW50OyB9Ci0KLSAgICBpbnQga2V5Q29kZSgpIGNvbnN0OyAv
LyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBmb3Igb3RoZXIgZXZl
bnRzCi0gICAgaW50IGNoYXJDb2RlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlz
S2V5Ym9hcmRFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBtX2tleUV2ZW50OwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBtX2tleUlkZW50aWZpZXI7Ci0gICAgdW5zaWduZWQgbV9rZXlMb2Nh
dGlvbjsKLSAgICBib29sIG1fYWx0R3JhcGhLZXkgOiAxOwotfTsKLQotY2xhc3MgTXV0YXRpb25F
dmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBhdHRyQ2hhbmdlVHlwZSB7
IE1PRElGSUNBVElPTiA9IDEsIEFERElUSU9OID0gMiwgUkVNT1ZBTCA9IDMgfTsKLSAgICBNdXRh
dGlvbkV2ZW50KCk7Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIE5vZGUg
KnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmcHJl
dlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKTsKLSAgICBO
b2RlICpyZWxhdGVkTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZE5vZGUuZ2V0KCk7IH0K
LSAgICBTdHJpbmcgcHJldlZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2VmFsdWUuZ2V0KCk7
IH0KLSAgICBTdHJpbmcgbmV3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25ld1ZhbHVlLmdldCgp
OyB9Ci0gICAgU3RyaW5nIGF0dHJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZS5nZXQo
KTsgfQotICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJDaGFuZ2U7IH0KLSAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAgdmlydHVhbCBib29s
IGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9y
ZWxhdGVkTm9kZTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9wcmV2VmFsdWU7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IG1fbmV3VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fYXR0
ck5hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9hdHRyQ2hhbmdlOwotfTsKLQotY2xhc3MgQ2xp
cGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIENsaXBib2FyZEV2ZW50
KCk7Ci0gICAgQ2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLCBib29sIGNh
bkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZyk7
Ci0KLSAgICBDbGlwYm9hcmQgKmNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcGJvYXJk
LmdldCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdDsKLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0vLyBleHRl
bnNpb246IG1vdXNlIHdoZWVsIGV2ZW50Ci1jbGFzcyBXaGVlbEV2ZW50IDogcHVibGljIE1vdXNl
UmVsYXRlZEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgV2hlZWxFdmVudCgpOwotICAgIFdoZWVsRXZl
bnQoYm9vbCBob3Jpem9udGFsLCBpbnQgd2hlZWxEZWx0YSwgQWJzdHJhY3RWaWV3ICosCi0gICAg
ICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAg
ICAgICAgICAgIGludCBjbGllbnRYQXJnLCBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0S2V5QXJnLCBi
b29sIG1ldGFLZXlBcmcpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4g
bV9ob3Jpem9udGFsOyB9Ci0gICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3do
ZWVsRGVsdGE7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkg
Y29uc3Q7Ci0KLSAgICBib29sIG1faG9yaXpvbnRhbDsKLSAgICBpbnQgbV93aGVlbERlbHRhOwot
fTsKLQotY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgU2hhcmVkPFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyPiB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciAqbGlz
dGVuZXIoKSBjb25zdCB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0gICAgYm9vbCB1c2VD
YXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9Ci0gICAgYm9vbCByZW1vdmVk
KCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVkOyB9Ci0gICAgdm9pZCBzZXRSZW1vdmVkKGJvb2wg
cmVtb3ZlZCkgeyBtX3JlbW92ZWQgPSByZW1vdmVkOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIEF0
b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9saXN0
ZW5lcjsKLSAgICBib29sIG1fdXNlQ2FwdHVyZTsKLSAgICBib29sIG1fcmVtb3ZlZDsKLX07Ci0K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJik7Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiBhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYg
YikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLS8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUn
cyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKLWNsYXNzIENsaXBib2Fy
ZCA6IHB1YmxpYyBTaGFyZWQ8Q2xpcGJvYXJkPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q2xp
cGJvYXJkKCk7Ci0KLSAgICAvLyBJcyB0aGlzIG9wZXJhdGlvbiBhIGRyYWctZHJvcCBvciBhIGNv
cHktcGFzdGU/Ci0gICAgdmlydHVhbCBib29sIGlzRm9yRHJhZ2dpbmcoKSBjb25zdCA9IDA7Ci0K
LSAgICB2aXJ0dWFsIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEVmZmVj
dEFsbG93ZWQoY29uc3QgU3RyaW5nICZzKSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyRGF0YShjb25zdCBTdHJpbmcgJnR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJB
bGxEYXRhKCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nICZ0
eXBlLCBib29sICZzdWNjZXNzKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldERhdGEo
Y29uc3QgU3RyaW5nICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpID0gMDsKLSAgICAKLSAgICAv
LyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmlu
Z0xpc3QgdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQ
b2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBDYWNoZWRJbWFnZSog
ZHJhZ0ltYWdlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoQ2Fj
aGVkSW1hZ2UqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCAmKSA9IDA7Ci0gICAgdmlydHVhbCBO
b2RlICpkcmFnSW1hZ2VFbGVtZW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1h
Z2VFbGVtZW50KE5vZGUgKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotfTsKLQot
Y2xhc3MgQmVmb3JlVW5sb2FkRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBC
ZWZvcmVVbmxvYWRFdmVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFzU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYp
OwotCi0gICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcmVzdWx0OwotfTsKIAotfSAv
LyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8g
VUlFdmVudF9oCkluZGV4OiBXZWJDb3JlL2RvbS9VSUV2ZW50V2l0aEtleVN0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vVUlFdmVudFdpdGhLZXlTdGF0ZS5oCShyZXZpc2lvbiAxNDkw
MCkKKysrIFdlYkNvcmUvZG9tL1VJRXZlbnRXaXRoS2V5U3RhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0
dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDQ1OCAr
MjMsNTAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBET01fRVZFTlRTSU1QTF9ICi0jZGVmaW5lIERP
TV9FVkVOVFNJTVBMX0gKKyNpZm5kZWYgVUlFdmVudFdpdGhLZXlTdGF0ZV9oCisjZGVmaW5lIFVJ
RXZlbnRXaXRoS2V5U3RhdGVfaAogCiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotCi1jbGFzcyBEZXByZWNhdGVkU3Ry
aW5nTGlzdDsKKyNpbmNsdWRlICJVSUV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBFdmVudExpc3RlbmVy
OwotY2xhc3MgRXZlbnRUYXJnZXROb2RlOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbnRQb2ludDsK
LWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv
bmcgRE9NVGltZVN0YW1wOwotdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwotCi1jb25z
dCBpbnQgRXZlbnRFeGNlcHRpb25PZmZzZXQgPSAxMDA7Ci1jb25zdCBpbnQgRXZlbnRFeGNlcHRp
b25NYXggPSAxOTk7Ci1lbnVtIEV2ZW50RXhjZXB0aW9uQ29kZSB7IFVOU1BFQ0lGSUVEX0VWRU5U
X1RZUEVfRVJSID0gRXZlbnRFeGNlcHRpb25PZmZzZXQgfTsKLQotY2xhc3MgRXZlbnQgOiBwdWJs
aWMgU2hhcmVkPEV2ZW50PgotewotcHVibGljOgotICAgIGVudW0gUGhhc2VUeXBlIHsgCi0gICAg
ICAgIENBUFRVUklOR19QSEFTRSA9IDEsIAotICAgICAgICBBVF9UQVJHRVQgPSAyLCAKLSAgICAg
ICAgQlVCQkxJTkdfUEhBU0UgPSAzIAotICAgIH07Ci0KLSAgICAvLyBSZXZlcnNlLWVuZ2luZWVy
ZWQgZnJvbSBOZXRzY2FwZQotICAgIGVudW0gRXZlbnRUeXBlIHsKLSAgICAgICAgTU9VU0VET1dO
ICAgICAgICAgICA9IDEsCi0gICAgICAgIE1PVVNFVVAgICAgICAgICAgICAgPSAyLAotICAgICAg
ICBNT1VTRU9WRVIgICAgICAgICAgID0gNCwKLSAgICAgICAgTU9VU0VPVVQgICAgICAgICAgICA9
IDgsCi0gICAgICAgIE1PVVNFTU9WRSAgICAgICAgICAgPSAxNiwKLSAgICAgICAgTU9VU0VEUkFH
ICAgICAgICAgICA9IDMyLAotICAgICAgICBDTElDSyAgICAgICAgICAgICAgID0gNjQsCi0gICAg
ICAgIERCTENMSUNLICAgICAgICAgICAgPSAxMjgsCi0gICAgICAgIEtFWURPV04gICAgICAgICAg
ICAgPSAyNTYsCi0gICAgICAgIEtFWVVQICAgICAgICAgICAgICAgPSA1MTIsCi0gICAgICAgIEtF
WVBSRVNTICAgICAgICAgICAgPSAxMDI0LAotICAgICAgICBEUkFHRFJPUCAgICAgICAgICAgID0g
MjA0OCwKLSAgICAgICAgRk9DVVMgICAgICAgICAgICAgICA9IDQwOTYsCi0gICAgICAgIEJMVVIg
ICAgICAgICAgICAgICAgPSA4MTkyLAotICAgICAgICBTRUxFQ1QgICAgICAgICAgICAgID0gMTYz
ODQsCi0gICAgICAgIENIQU5HRSAgICAgICAgICAgICAgPSAzMjc2OAotICAgIH07CiAgICAgCi0g
ICAgRXZlbnQoKTsKLSAgICBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2Fu
QnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpOwotICAgIHZpcnR1YWwgfkV2ZW50KCk7Ci0K
LSAgICBjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LSAgICBOb2RlKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQotICAg
IHZvaWQgc2V0VGFyZ2V0KE5vZGUqKTsKLSAgICBOb2RlKiBjdXJyZW50VGFyZ2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50VGFyZ2V0KE5v
ZGUqIGN1cnJlbnRUYXJnZXQpIHsgbV9jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDsgfQot
ICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50UGhh
c2U7IH0KLSAgICB2b2lkIHNldEV2ZW50UGhhc2UodW5zaWduZWQgc2hvcnQgZXZlbnRQaGFzZSkg
eyBtX2V2ZW50UGhhc2UgPSBldmVudFBoYXNlOyB9Ci0gICAgYm9vbCBidWJibGVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW5CdWJibGU7IH0KLSAgICBib29sIGNhbmNlbGFibGUoKSBjb25zdCB7IHJl
dHVybiBtX2NhbmNlbGFibGU7IH0KLSAgICBET01UaW1lU3RhbXAgdGltZVN0YW1wKCkgeyByZXR1
cm4gbV9jcmVhdGVUaW1lOyB9Ci0gICAgdm9pZCBzdG9wUHJvcGFnYXRpb24oKSB7IG1fcHJvcGFn
YXRpb25TdG9wcGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgcHJldmVudERlZmF1bHQoKSB7IGlmICht
X2NhbmNlbGFibGUpIG1fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH0KLSAgICB2b2lkIGluaXRF
dmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2ZW50KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2Fy
ZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7IC8v
IGEgc3Vic2V0IG9mIG1vdXNlIGV2ZW50cwotICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2
ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3Q7Ci0KLSAgICBi
b29sIHByb3BhZ2F0aW9uU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGFnYXRpb25TdG9w
cGVkOyB9Ci0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWZh
dWx0UHJldmVudGVkOyB9Ci0KLSAgICB2b2lkIHNldERlZmF1bHRIYW5kbGVkKCkgeyBtX2RlZmF1
bHRIYW5kbGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2RlZmF1bHRIYW5kbGVkOyB9Ci0KLSAgICB2b2lkIHNldENhbmNlbEJ1YmJsZShib29s
IGNhbmNlbCkgeyBtX2NhbmNlbEJ1YmJsZSA9IGNhbmNlbDsgfQotICAgIHZvaWQgc2V0RGVmYXVs
dFByZXZlbnRlZChib29sIGRlZmF1bHRQcmV2ZW50ZWQpIHsgbV9kZWZhdWx0UHJldmVudGVkID0g
ZGVmYXVsdFByZXZlbnRlZDsgfQotICAgIGJvb2wgZ2V0Q2FuY2VsQnViYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW5jZWxCdWJibGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRB
c1N0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChjb25zdCBTdHJp
bmcmKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFRhcmdldCgpOwot
ICAgIGJvb2wgZGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9Ci0KLXByaXZh
dGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fdHlwZTsKLSAgICBib29sIG1fY2FuQnViYmxlOwotICAg
IGJvb2wgbV9jYW5jZWxhYmxlOwotCi0gICAgYm9vbCBtX3Byb3BhZ2F0aW9uU3RvcHBlZDsKLSAg
ICBib29sIG1fZGVmYXVsdFByZXZlbnRlZDsKLSAgICBib29sIG1fZGVmYXVsdEhhbmRsZWQ7Ci0g
ICAgYm9vbCBtX2NhbmNlbEJ1YmJsZTsKLQotICAgIE5vZGUqIG1fY3VycmVudFRhcmdldDsgLy8g
cmVmID4gMCBtYWludGFpbmVkIGV4dGVybmFsbHkKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2V2ZW50
UGhhc2U7Ci0gICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OwotICAgIERPTVRpbWVTdGFtcCBtX2Ny
ZWF0ZVRpbWU7Ci19OwotCi1jbGFzcyBVSUV2ZW50IDogcHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6
Ci0gICAgVUlFdmVudCgpOwotICAgIFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAot
ICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wg
Y2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0g
ICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7Ci0gICAgQWJzdHJhY3RWaWV3ICp2aWV3KCkg
Y29uc3QgeyByZXR1cm4gbV92aWV3LmdldCgpOyB9Ci0gICAgaW50IGRldGFpbCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGV0YWlsOyB9Ci0gICAgdm9pZCBpbml0VUlFdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgIGludCBkZXRh
aWxBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgaW50IGtleUNvZGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjaGFyQ29kZSgpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBpbnQgbGF5ZXJYKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGF5
ZXJZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBwYWdlWCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxBYnN0cmFjdFZpZXc+IG1fdmlldzsKLSAgICBpbnQgbV9k
ZXRhaWw7Ci19OwotCi1jbGFzcyBVSUV2ZW50V2l0aEtleVN0YXRlIDogcHVibGljIFVJRXZlbnQg
ewotcHVibGljOgotICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUoKSA6IG1fY3RybEtleShmYWxzZSks
IG1fYWx0S2V5KGZhbHNlKSwgbV9zaGlmdEtleShmYWxzZSksIG1fbWV0YUtleShmYWxzZSkgeyB9
Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsIGJvb2wg
Y2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3RyYWN0VmlldyAqdmlld0FyZywK
LSAgICAgICAgaW50IGRldGFpbEFyZywgYm9vbCBjdHJsS2V5QXJnLCBib29sIGFsdEtleUFyZywg
Ym9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5QXJnKQotICAgICAgICA6IFVJRXZlbnQodHlw
ZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcpCi0gICAg
ICAgICwgbV9jdHJsS2V5KGN0cmxLZXlBcmcpLCBtX2FsdEtleShhbHRLZXlBcmcpLCBtX3NoaWZ0
S2V5KHNoaWZ0S2V5QXJnKSwgbV9tZXRhS2V5KG1ldGFLZXlBcmcpIHsgfQotCi0gICAgYm9vbCBj
dHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9Ci0gICAgYm9vbCBzaGlmdEtleSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAgICBib29sIGFsdEtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fYWx0S2V5OyB9Ci0gICAgYm9vbCBtZXRhS2V5KCkgY29uc3QgeyByZXR1cm4gbV9t
ZXRhS2V5OyB9Ci0KLXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIGluaXQgZnVuY3Rpb25z
IGNhbiBzZXQgdGhlbQotICAgIGJvb2wgbV9jdHJsS2V5IDogMTsKLSAgICBib29sIG1fYWx0S2V5
IDogMTsKLSAgICBib29sIG1fc2hpZnRLZXkgOiAxOwotICAgIGJvb2wgbV9tZXRhS2V5IDogMTsK
LX07Ci0KLS8vIEludGVybmFsIG9ubHk6IEhlbHBlciBjbGFzcyBmb3Igd2hhdCdzIGNvbW1vbiBi
ZXR3ZWVuIG1vdXNlIGFuZCB3aGVlbCBldmVudHMuCi1jbGFzcyBNb3VzZVJlbGF0ZWRFdmVudCA6
IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1YmxpYzoKLSAgICBNb3VzZVJlbGF0ZWRF
dmVudCgpOwotICAgIE1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2lt
dWxhdGVkID0gZmFsc2UpOwotICAgIGludCBzY3JlZW5YKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jl
ZW5YOyB9Ci0gICAgaW50IHNjcmVlblkoKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblk7IH0KLSAg
ICBpbnQgY2xpZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50WDsgfQotICAgIGludCBjbGll
bnRZKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRZOyB9Ci0gICAgaW50IGxheWVyWCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJYOyB9Ci0gICAgaW50IGxheWVyWSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJZOyB9Ci0gICAgaW50IG9mZnNldFgoKSBjb25zdCB7IHJldHVybiBtX29mZnNldFg7IH0K
LSAgICBpbnQgb2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WTsgfQotICAgIGJvb2wg
aXNTaW11bGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2ltdWxhdGVkOyB9Ci0gICAgdmlydHVh
bCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWdlWSgpIGNvbnN0OwotICAg
IGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsKLXByb3RlY3RlZDogLy8gZXhwb3Nl
IHRoZXNlIHNvIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50IGNhbiBzZXQgdGhlbQotICAgIGlu
dCBtX3NjcmVlblg7Ci0gICAgaW50IG1fc2NyZWVuWTsKLSAgICBpbnQgbV9jbGllbnRYOwotICAg
IGludCBtX2NsaWVudFk7Ci0gICAgdm9pZCBpbml0Q29vcmRpbmF0ZXMoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLXByaXZhdGU6Ci0gICAgaW50IG1fcGFnZVg7Ci0gICAg
aW50IG1fcGFnZVk7Ci0gICAgaW50IG1fbGF5ZXJYOwotICAgIGludCBtX2xheWVyWTsKLSAgICBp
bnQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFk7Ci0gICAgYm9vbCBtX2lzU2ltdWxhdGVk
OwotfTsKLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotY2xhc3MgTW91c2VFdmVudCA6
IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudCB7Ci1wdWJsaWM6Ci0gICAgTW91c2VFdmVudCgpOwot
ICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAgICAgICAgICAg
ICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAg
ICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVu
WEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAg
ICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywK
LSAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
Ym9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9k
ZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQqIGNsaXBi
b2FyZEFyZyA9IDAsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCA9IGZhbHNl
KTsKLSAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0gICAgLy8gV2luSUUgdXNlcyAxLDQsMiBm
b3IgbGVmdC9taWRkbGUvcmlnaHQgYnV0IG5vdCBmb3IgY2xpY2sgKGp1c3QgZm9yIG1vdXNlZG93
bi91cCwgbWF5YmUgb3RoZXJzKSwgYnV0IHdlIHdpbGwgbWF0Y2ggdGhlIHN0YW5kYXJkIERPTS4K
LSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdCB7IHJldHVybiBtX2J1dHRvbjsgfQot
ICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVs
YXRlZFRhcmdldC5nZXQoKTsgfQotICAgIENsaXBib2FyZCogY2xpcGJvYXJkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0KLSAgICBOb2RlKiB0b0VsZW1lbnQoKSBjb25zdDsK
LSAgICBOb2RlKiBmcm9tRWxlbWVudCgpIGNvbnN0OwotICAgIHZvaWQgaW5pdE1vdXNlRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5v
ZGUqIHJlbGF0ZWRUYXJnZXRBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCB3aGljaCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2J1dHRv
bjsKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7Ci0gICAgUmVm
UHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OworCXR5cGVkZWYgRE9NV2luZG93IEFic3Ry
YWN0VmlldzsKIAotCi0vLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzCi1jbGFzcyBLZXlib2Fy
ZEV2ZW50IDogcHVibGljIFVJRXZlbnRXaXRoS2V5U3RhdGUgewotcHVibGljOgotICAgIGVudW0g
S2V5TG9jYXRpb25Db2RlIHsKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9TVEFOREFSRCAgICAg
ID0gMHgwMCwKLSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9MRUZUICAgICAgICAgID0gMHgwMSwK
LSAgICAgICAgRE9NX0tFWV9MT0NBVElPTl9SSUdIVCAgICAgICAgID0gMHgwMiwKLSAgICAgICAg
RE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgICAgICAgID0gMHgwMywKKyAgICBjbGFzcyBVSUV2ZW50
V2l0aEtleVN0YXRlIDogcHVibGljIFVJRXZlbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgVUlF
dmVudFdpdGhLZXlTdGF0ZSgpCisgICAgICAgICAgICA6IG1fY3RybEtleShmYWxzZSkKKyAgICAg
ICAgICAgICwgbV9hbHRLZXkoZmFsc2UpCisgICAgICAgICAgICAsIG1fc2hpZnRLZXkoZmFsc2Up
CisgICAgICAgICAgICAsIG1fbWV0YUtleShmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBVSUV2ZW50V2l0aEtleVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgQWJzdHJhY3RWaWV3KiB2aWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWwsIGJvb2wgY3RybEtleSwg
Ym9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSkKKyAgICAgICAgICAgIDog
VUlFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIHZpZXcsIGRldGFpbCkKKyAgICAg
ICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXkpCisgICAgICAgICAgICAsIG1fYWx0S2V5KGFsdEtl
eSkKKyAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdEtleSkKKyAgICAgICAgICAgICwgbV9t
ZXRhS2V5KG1ldGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgY3Ry
bEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3RybEtleTsgfQorICAgICAgICBib29sIHNoaWZ0S2V5
KCkgY29uc3QgeyByZXR1cm4gbV9zaGlmdEtleTsgfQorICAgICAgICBib29sIGFsdEtleSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9CisgICAgICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWV0YUtleTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICAvLyBFeHBvc2Ug
dGhlc2Ugc28gaW5pdCBmdW5jdGlvbnMgY2FuIHNldCB0aGVtLgorICAgICAgICBib29sIG1fY3Ry
bEtleSA6IDE7CisgICAgICAgIGJvb2wgbV9hbHRLZXkgOiAxOworICAgICAgICBib29sIG1fc2hp
ZnRLZXkgOiAxOworICAgICAgICBib29sIG1fbWV0YUtleSA6IDE7CiAgICAgfTsKLSAgICBLZXli
b2FyZEV2ZW50KCk7Ci0gICAgS2V5Ym9hcmRFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQmLCBBYnN0cmFjdFZpZXcqKTsKLSAgICBLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmdHlwZSwKLSAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAg
ICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2
aWV3QXJnLAotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAgICAg
ICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAg
ICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1ldGFL
ZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgdmlydHVh
bCB+S2V5Ym9hcmRFdmVudCgpOwotICAgIAotICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxl
QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZr
ZXlJZGVudGlmaWVyQXJnLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJn
LAotICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICBib29s
IGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAg
ICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5
QXJnKTsKLSAgICAKLSAgICBTdHJpbmcga2V5SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5SWRlbnRpZmllci5nZXQoKTsgfQotICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlMb2NhdGlvbjsgfQotICAgIAotICAgIGJvb2wgYWx0R3JhcGhLZXkoKSBj
b25zdCB7IHJldHVybiBtX2FsdEdyYXBoS2V5OyB9Ci0gICAgCi0gICAgY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KiBrZXlFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5RXZlbnQ7IH0KLQot
ICAgIGludCBrZXlDb2RlKCkgY29uc3Q7IC8vIGtleSBjb2RlIGZvciBrZXlkb3duIGFuZCBrZXl1
cCwgY2hhcmFjdGVyIGZvciBvdGhlciBldmVudHMKLSAgICBpbnQgY2hhckNvZGUoKSBjb25zdDsK
LSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgd2hpY2goKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQqIG1fa2V5RXZlbnQ7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fa2V5SWRlbnRpZmll
cjsKLSAgICB1bnNpZ25lZCBtX2tleUxvY2F0aW9uOwotICAgIGJvb2wgbV9hbHRHcmFwaEtleSA6
IDE7Ci19OwotCi1jbGFzcyBNdXRhdGlvbkV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoK
LSAgICBlbnVtIGF0dHJDaGFuZ2VUeXBlIHsgTU9ESUZJQ0FUSU9OID0gMSwgQURESVRJT04gPSAy
LCBSRU1PVkFMID0gMyB9OwotICAgIE11dGF0aW9uRXZlbnQoKTsKLSAgICBNdXRhdGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICBib29sIGNh
bkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo
b3J0IGF0dHJDaGFuZ2VBcmcpOwotICAgIE5vZGUgKnJlbGF0ZWROb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9yZWxhdGVkTm9kZS5nZXQoKTsgfQotICAgIFN0cmluZyBwcmV2VmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ByZXZWYWx1ZS5nZXQoKTsgfQotICAgIFN0cmluZyBuZXdWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmV3VmFsdWUuZ2V0KCk7IH0KLSAgICBTdHJpbmcgYXR0ck5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2F0dHJOYW1lLmdldCgpOyB9Ci0gICAgdW5zaWduZWQgc2hvcnQgYXR0ckNo
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ckNoYW5nZTsgfQotICAgIHZvaWQgaW5pdE11dGF0
aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpyZWxh
dGVkTm9kZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmcHJl
dlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZuZXdW
YWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5h
bWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hh
bmdlQXJnKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNdXRhdGlvbkV2ZW50KCkgY29uc3Q7Ci1wcml2
YXRlOgotICAgIFJlZlB0cjxOb2RlPiBtX3JlbGF0ZWROb2RlOwotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiBtX3ByZXZWYWx1ZTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9uZXdWYWx1ZTsKLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9hdHRyTmFtZTsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2F0
dHJDaGFuZ2U7Ci19OwotCi1jbGFzcyBDbGlwYm9hcmRFdmVudCA6IHB1YmxpYyBFdmVudCB7Ci1w
dWJsaWM6Ci0gICAgQ2xpcGJvYXJkRXZlbnQoKTsKLSAgICBDbGlwYm9hcmRFdmVudChjb25zdCBB
dG9taWNTdHJpbmcgJnR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcs
IENsaXBib2FyZCAqY2xpcGJvYXJkQXJnKTsKLQotICAgIENsaXBib2FyZCAqY2xpcGJvYXJkKCkg
Y29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXND
bGlwYm9hcmRFdmVudCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBSZWZQdHI8Q2xpcGJvYXJkPiBt
X2NsaXBib2FyZDsKLX07Ci0KLS8vIGV4dGVuc2lvbjogbW91c2Ugd2hlZWwgZXZlbnQKLWNsYXNz
IFdoZWVsRXZlbnQgOiBwdWJsaWMgTW91c2VSZWxhdGVkRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBX
aGVlbEV2ZW50KCk7Ci0gICAgV2hlZWxFdmVudChib29sIGhvcml6b250YWwsIGludCB3aGVlbERl
bHRhLCBBYnN0cmFjdFZpZXcgKiwKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywg
aW50IHNjcmVlbllBcmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsIGludCBj
bGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywgYm9vbCBhbHRL
ZXlBcmcsIGJvb2wgc2hpZnRLZXlBcmcsIGJvb2wgbWV0YUtleUFyZyk7Ci0gICAgYm9vbCBpc0hv
cml6b250YWwoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWw7IH0KLSAgICBpbnQgd2hlZWxE
ZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fd2hlZWxEZWx0YTsgfQotCi1wcml2YXRlOgotICAgIHZp
cnR1YWwgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25zdDsKLQotICAgIGJvb2wgbV9ob3Jpem9udGFs
OwotICAgIGludCBtX3doZWVsRGVsdGE7Ci19OwotCi1jbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBTaGFyZWQ8UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI+IHsKLXB1YmxpYzoK
LSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKLQotICAgIGNv
bnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudFR5cGU7
IH0KLSAgICBFdmVudExpc3RlbmVyICpsaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdGVu
ZXIuZ2V0KCk7IH0KLSAgICBib29sIHVzZUNhcHR1cmUoKSBjb25zdCB7IHJldHVybiBtX3VzZUNh
cHR1cmU7IH0KLSAgICBib29sIHJlbW92ZWQoKSBjb25zdCB7IHJldHVybiBtX3JlbW92ZWQ7IH0K
LSAgICB2b2lkIHNldFJlbW92ZWQoYm9vbCByZW1vdmVkKSB7IG1fcmVtb3ZlZCA9IHJlbW92ZWQ7
IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fZXZlbnRUeXBlOwotICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBtX2xpc3RlbmVyOwotICAgIGJvb2wgbV91c2VDYXB0dXJlOwot
ICAgIGJvb2wgbV9yZW1vdmVkOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImKTsKLWlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGEsIGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLQotLy8g
U3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQg
Y29weS9wYXN0ZQotY2xhc3MgQ2xpcGJvYXJkIDogcHVibGljIFNoYXJlZDxDbGlwYm9hcmQ+IHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DbGlwYm9hcmQoKTsKLQotICAgIC8vIElzIHRoaXMgb3Bl
cmF0aW9uIGEgZHJhZy1kcm9wIG9yIGEgY29weS1wYXN0ZT8KLSAgICB2aXJ0dWFsIGJvb2wgaXNG
b3JEcmFnZ2luZygpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgU3RyaW5nIGRyb3BFZmZlY3Qo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldERyb3BFZmZlY3QoY29uc3QgU3RyaW5n
ICZzKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZWZmZWN0QWxsb3dlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0RWZmZWN0QWxsb3dlZChjb25zdCBTdHJpbmcgJnMpID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyAmdHlwZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbERhdGEoKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0RGF0YShjb25zdCBTdHJpbmcgJnR5cGUsIGJvb2wgJnN1Y2Nlc3MpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcgJnR5cGUsIGNvbnN0IFN0cmlu
ZyAmZGF0YSkgPSAwOwotICAgIAotICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0g
ICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nTGlzdCB0eXBlcygpIGNvbnN0ID0gMDsKLSAgICAK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50ICYpID0gMDsKLSAgICB2aXJ0dWFsIE5vZGUgKmRyYWdJbWFnZUVsZW1lbnQoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZUVsZW1lbnQoTm9kZSAqLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCAmKSA9IDA7Ci19OwotCi1jbGFzcyBCZWZvcmVVbmxvYWRFdmVudCA6IHB1Ymxp
YyBFdmVudAotewotcHVibGljOgotICAgIEJlZm9yZVVubG9hZEV2ZW50KCk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgc3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBTdHJpbmcgcmVzdWx0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXN1bHQuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gbV9yZXN1bHQ7Ci19OwogCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBVSUV2ZW50V2l0aEtleVN0YXRlX2gKSW5kZXg6IFdl
YkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1doZWVs
RXZlbnQuY3BwCShyZXZpc2lvbiAxNDkwMCkKKysrIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOSBAQAogLyoqCiAgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCiAgKgotICogKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25A
c3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVG9iaWFzIEFudG9uIChh
bnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw1ODkg
KzIzLDI4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImRvbTJfZXZl
bnRzaW1wbC5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7CiAKLUV2ZW50OjpFdmVudCgpCi0gICAgOiBtX2NhbkJ1YmJsZShm
YWxzZSkKLSAgICAsIG1fY2FuY2VsYWJsZShmYWxzZSkKLSAgICAsIG1fcHJvcGFnYXRpb25TdG9w
cGVkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0UHJldmVudGVkKGZhbHNlKQotICAgICwgbV9kZWZh
dWx0SGFuZGxlZChmYWxzZSkKLSAgICAsIG1fY2FuY2VsQnViYmxlKGZhbHNlKQotICAgICwgbV9j
dXJyZW50VGFyZ2V0KDApCi0gICAgLCBtX2V2ZW50UGhhc2UoMCkKLSAgICAsIG1fY3JlYXRlVGlt
ZShzdGF0aWNfY2FzdDxET01UaW1lU3RhbXA+KGN1cnJlbnRUaW1lKCkgKiAxMDAwLjApKQorV2hl
ZWxFdmVudDo6V2hlZWxFdmVudCgpCisgICAgOiBtX2hvcml6b250YWwoZmFsc2UpCisgICAgLCBt
X3doZWVsRGVsdGEoMCkKIHsKIH0KIAotRXZlbnQ6OkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAm
ZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQotICAgIDog
bV90eXBlKGV2ZW50VHlwZSkKLSAgICAsIG1fY2FuQnViYmxlKGNhbkJ1YmJsZUFyZykKLSAgICAs
IG1fY2FuY2VsYWJsZShjYW5jZWxhYmxlQXJnKQotICAgICwgbV9wcm9wYWdhdGlvblN0b3BwZWQo
ZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRQcmV2ZW50ZWQoZmFsc2UpCi0gICAgLCBtX2RlZmF1bHRI
YW5kbGVkKGZhbHNlKQotICAgICwgbV9jYW5jZWxCdWJibGUoZmFsc2UpCi0gICAgLCBtX2N1cnJl
bnRUYXJnZXQoMCkKLSAgICAsIG1fZXZlbnRQaGFzZSgwKQotICAgICwgbV9jcmVhdGVUaW1lKHN0
YXRpY19jYXN0PERPTVRpbWVTdGFtcD4oY3VycmVudFRpbWUoKSAqIDEwMDAuMCkpCi17Ci19Ci0K
LUV2ZW50Ojp+RXZlbnQoKQotewotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFi
bGVBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV90eXBlID0gZXZlbnRUeXBlQXJnOwotICAgIG1fY2FuQnViYmxlID0gY2FuQnViYmxlQXJnOwot
ICAgIG1fY2FuY2VsYWJsZSA9IGNhbmNlbGFibGVBcmc7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzVUlF
dmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc01v
dXNlRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6
aXNNdXRhdGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
RXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEV2ZW50Ojppc0RyYWdFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OnN0b3Jlc1Jlc3Vs
dEFzU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRXZlbnQ6
OnN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgRXZlbnQ6OnNldFRhcmdl
dChOb2RlKiB0YXJnZXQpCi17Ci0gICAgbV90YXJnZXQgPSB0YXJnZXQ7Ci0gICAgaWYgKHRhcmdl
dCkKLSAgICAgICAgcmVjZWl2ZWRUYXJnZXQoKTsKLX0KLQotdm9pZCBFdmVudDo6cmVjZWl2ZWRU
YXJnZXQoKQotewotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1VSUV2ZW50OjpVSUV2
ZW50KCkKLSAgICA6IG1fZGV0YWlsKDApCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFi
bGVBcmcsIEFic3RyYWN0VmlldyAqdmlld0FyZywgaW50IGRldGFpbEFyZykKLSAgICA6IEV2ZW50
KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKQotICAgICwgbV92aWV3KHZp
ZXdBcmcpCi0gICAgLCBtX2RldGFpbChkZXRhaWxBcmcpCi17Ci19Ci0KLXZvaWQgVUlFdmVudDo6
aW5pdFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGV0YWlsQXJnKQotewotICAgIGlmIChkaXNwYXRjaGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGluaXRFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpOwot
Ci0gICAgbV92aWV3ID0gdmlld0FyZzsKLSAgICBtX2RldGFpbCA9IGRldGFpbEFyZzsKLX0KLQot
Ym9vbCBVSUV2ZW50Ojppc1VJRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci1pbnQgVUlFdmVudDo6a2V5Q29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu
dCBVSUV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBV
SUV2ZW50OjpsYXllclgoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVu
dDo6bGF5ZXJZKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBh
Z2VYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VZKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OndoaWNoKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTW91c2VS
ZWxhdGVkRXZlbnQ6Ok1vdXNlUmVsYXRlZEV2ZW50KCkKLSAgICA6IG1fc2NyZWVuWCgwKSwgbV9z
Y3JlZW5ZKDApLCBtX2NsaWVudFgoMCksIG1fY2xpZW50WSgwKQotICAgICwgbV9wYWdlWCgwKSwg
bV9wYWdlWSgwKSwgbV9sYXllclgoMCksIG1fbGF5ZXJZKDApLCBtX29mZnNldFgoMCksIG1fb2Zm
c2V0WSgwKSwgbV9pc1NpbXVsYXRlZChmYWxzZSkKLXsKLX0KLQotTW91c2VSZWxhdGVkRXZlbnQ6
Ok1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Ny
ZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Np
bXVsYXRlZCkKLSAgICA6IFVJRXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVB
cmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFpbEFyZywKLSAgICAgICAgY3RybEtleUFy
ZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFyZykKLSAgICAsIG1fc2NyZWVuWChz
Y3JlZW5YQXJnKSwgbV9zY3JlZW5ZKHNjcmVlbllBcmcpCi0gICAgLCBtX2NsaWVudFgoY2xpZW50
WEFyZyksIG1fY2xpZW50WShjbGllbnRZQXJnKQotICAgICwgbV9pc1NpbXVsYXRlZChpc1NpbXVs
YXRlZCkKLXsKLSAgICBpbml0Q29vcmRpbmF0ZXMoKTsKLX0KLQotdm9pZCBNb3VzZVJlbGF0ZWRF
dmVudDo6aW5pdENvb3JkaW5hdGVzKCkKLXsKLSAgICAvLyBTZXQgdXAgaW5pdGlhbCB2YWx1ZXMg
Zm9yIGNvb3JkaW5hdGVzLgotICAgIC8vIENvcnJlY3QgdmFsdWVzIGNhbid0IGJlIGNvbXB1dGVk
IHVudGlsIHdlIGhhdmUgYXQgdGFyZ2V0LCBzbyByZWNlaXZlZFRhcmdldAotICAgIC8vIGRvZXMg
dGhlICJyZWFsIiBjb21wdXRhdGlvbi4KLSAgICBtX3BhZ2VYID0gbV9jbGllbnRYOwotICAgIG1f
cGFnZVkgPSBtX2NsaWVudFk7Ci0gICAgbV9sYXllclggPSBtX3BhZ2VYOwotICAgIG1fbGF5ZXJZ
ID0gbV9wYWdlWTsKLSAgICBtX29mZnNldFggPSBtX3BhZ2VYOwotICAgIG1fb2Zmc2V0WSA9IG1f
cGFnZVk7Ci19Ci0KLXZvaWQgTW91c2VSZWxhdGVkRXZlbnQ6OnJlY2VpdmVkVGFyZ2V0KCkKLXsK
LSAgICAvLyBDb21wdXRlIGNvb3JkaW5hdGVzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSB0YXJnZXQu
Ci0gICAgbV9vZmZzZXRYID0gbV9wYWdlWDsKLSAgICBtX29mZnNldFkgPSBtX3BhZ2VZOwotICAg
IG1fbGF5ZXJYID0gbV9wYWdlWDsgICAgCi0gICAgbV9sYXllclkgPSBtX3BhZ2VZOyAgICAKLQot
ICAgIE5vZGUqIHRhcmcgPSB0YXJnZXQoKTsKLSAgICBBU1NFUlQodGFyZyk7Ci0KLSAgICAvLyBN
dXN0IGhhdmUgYW4gdXBkYXRlZCByZW5kZXIgdHJlZSBmb3IgdGhpcyBtYXRoIHRvIHdvcmsgY29y
cmVjdGx5LgotICAgIHRhcmctPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwotCi0gICAg
Ly8gRklYTUU6IGNsaWVudFgvWSBzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFzIHBhZ2VYL1khCi0g
ICAgLy8gQ3VycmVudGx5IHRoZSBwYXNzZWQtaW4gY2xpZW50WCBhbmQgY2xpZW50WSBhcmUgaW5j
b3JyZWN0bHkgYWN0dWFsbHkKLSAgICAvLyBwYWdlWCBhbmQgcGFnZVkgdmFsdWVzLCBzbyB3ZSBk
b24ndCBoYXZlIGFueSB3b3JrIHRvIGRvIGhlcmUsIGJ1dCBpZgotICAgIC8vIHdlIHN0YXJ0ZWQg
cGFzc2luZyBpbiBjb3JyZWN0IGNsaWVudFggYW5kIGNsaWVudFksIHdlJ2Qgd2FudCB0byBjb21w
dXRlCi0gICAgLy8gcGFnZVggYW5kIHBhZ2VZIGhlcmUuCi0KLSAgICAvLyBBZGp1c3Qgb2Zmc2V0
WC9ZIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSB0YXJnZXQncyBwb3NpdGlvbi4KLSAgICBpZiAoIWlz
U2ltdWxhdGVkKCkpIHsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IHRhcmctPnJlbmRl
cmVyKCkpIHsKLSAgICAgICAgICAgIGludCByeCwgcnk7Ci0gICAgICAgICAgICBpZiAoci0+YWJz
b2x1dGVQb3NpdGlvbihyeCwgcnkpKSB7Ci0gICAgICAgICAgICAgICAgbV9vZmZzZXRYIC09IHJ4
OwotICAgICAgICAgICAgICAgIG1fb2Zmc2V0WSAtPSByeTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIEFkanVzdCBsYXllclgvWSB0byBiZSByZWxhdGl2ZSB0byB0
aGUgbGF5ZXIuCi0gICAgLy8gRklYTUU6IFdlJ3JlIHByZXR0eSBzdXJlIHRoaXMgaXMgdGhlIHdy
b25nIGRlZmludGlvbiBvZiAibGF5ZXIuIgotICAgIC8vIE91ciBSZW5kZXJMYXllciBpcyBhIG1v
cmUgbW9kZXJuIGNvbmNlcHQsIGFuZCBsYXllclgvWSBpcyBzb21lCi0gICAgLy8gb3RoZXIgbm90
aW9uIGFib3V0IGdyb3VwcyBvZiBlbGVtZW50czsgd2Ugc2hvdWxkIHRlc3QgYW5kIGZpeCB0aGlz
LgotICAgIE5vZGUqIG4gPSB0YXJnOwotICAgIHdoaWxlIChuICYmICFuLT5yZW5kZXJlcigpKQot
ICAgICAgICBuID0gbi0+cGFyZW50KCk7Ci0gICAgaWYgKG4pIHsKLSAgICAgICAgUmVuZGVyTGF5
ZXIqIGxheWVyID0gbi0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLSAgICAgICAgZm9yICg7IGxheWVyOyBsYXllciA9
IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgbV9sYXllclggLT0gbGF5ZXItPnhQb3Mo
KTsKLSAgICAgICAgICAgIG1fbGF5ZXJZIC09IGxheWVyLT55UG9zKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVudDo6cGFnZVgoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3BhZ2VYOwotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OnBhZ2VZKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wYWdlWTsKLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2ZW50Ojp4KCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29ycmVjdC4KLSAgICAvLyBTZWUg
TWljcm9zb2Z0IGRvY3VtZW50YXRpb24gYW5kIDxodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Rv
bS93M2NfZXZlbnRzLmh0bWw+LgotICAgIHJldHVybiBtX2NsaWVudFg7Ci19Ci0KLWludCBNb3Vz
ZVJlbGF0ZWRFdmVudDo6eSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGNv
cnJlY3QuCi0gICAgLy8gU2VlIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIGFuZCA8aHR0cDovL3d3
dy5xdWlya3Ntb2RlLm9yZy9kb20vdzNjX2V2ZW50cy5odG1sPi4KLSAgICByZXR1cm4gbV9jbGll
bnRZOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Nb3VzZUV2ZW50OjpNb3VzZUV2
ZW50KCkKLSAgICA6IG1fYnV0dG9uKDApCi17Ci19Ci0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0
YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFy
Z2V0QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZCogY2xpcGJv
YXJkQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTaW11bGF0ZWQp
Ci0gICAgOiBNb3VzZVJlbGF0ZWRFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2Vs
YWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnLAotICAgICAgICBzY3JlZW5YQXJnLCBzY3JlZW5Z
QXJnLCBjbGllbnRYQXJnLCBjbGllbnRZQXJnLAotICAgICAgICBjdHJsS2V5QXJnLCBhbHRLZXlB
cmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnLCBpc1NpbXVsYXRlZCkKLSAgICAsIG1fYnV0dG9u
KGJ1dHRvbkFyZykKLSAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0QXJnKQotICAg
ICwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkQXJnKQotewotfQotCi1Nb3VzZUV2ZW50Ojp+TW91c2VF
dmVudCgpCi17Ci19Ci0KLXZvaWQgTW91c2VFdmVudDo6aW5pdE1vdXNlRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
YnN0cmFjdFZpZXcqIHZpZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Ny
ZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRY
QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRU
YXJnZXRBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW5pdFVJRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3
QXJnLCBkZXRhaWxBcmcpOwotCi0gICAgbV9zY3JlZW5YID0gc2NyZWVuWEFyZzsKLSAgICBtX3Nj
cmVlblkgPSBzY3JlZW5ZQXJnOwotICAgIG1fY2xpZW50WCA9IGNsaWVudFhBcmc7Ci0gICAgbV9j
bGllbnRZID0gY2xpZW50WUFyZzsKLSAgICBtX2N0cmxLZXkgPSBjdHJsS2V5QXJnOwotICAgIG1f
YWx0S2V5ID0gYWx0S2V5QXJnOwotICAgIG1fc2hpZnRLZXkgPSBzaGlmdEtleUFyZzsKLSAgICBt
X21ldGFLZXkgPSBtZXRhS2V5QXJnOwotICAgIG1fYnV0dG9uID0gYnV0dG9uQXJnOwotICAgIG1f
cmVsYXRlZFRhcmdldCA9IHJlbGF0ZWRUYXJnZXRBcmc7Ci0KLSAgICBpbml0Q29vcmRpbmF0ZXMo
KTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAotewotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIE1vdXNlRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKLXsK
LSAgICBjb25zdCBBdG9taWNTdHJpbmcgJnQgPSB0eXBlKCk7Ci0gICAgcmV0dXJuIHQgPT0gZHJh
Z2VudGVyRXZlbnQgfHwgdCA9PSBkcmFnb3ZlckV2ZW50IHx8IHQgPT0gZHJhZ2xlYXZlRXZlbnQK
LSAgICAgICAgfHwgdCA9PSBkcm9wRXZlbnQKLSAgICAgICAgfHwgdCA9PSBkcmFnc3RhcnRFdmVu
dCB8fCB0ID09IGRyYWdFdmVudCB8fCB0ID09IGRyYWdlbmRFdmVudDsKLX0KLQotaW50IE1vdXNl
RXZlbnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICAvLyBGb3IgS0hUTUwsIHRoZSByZXR1cm4gdmFs
dWVzIGZvciBsZWZ0LCBtaWRkbGUgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbnMgYXJlIDAsIDEsIDIs
IHJlc3BlY3RpdmVseS4KLSAgICAvLyBGb3IgdGhlIE5ldHNjYXBlICJ3aGljaCIgcHJvcGVydHks
IHRoZSByZXR1cm4gdmFsdWVzIGZvciBsZWZ0LCBtaWRkbGUgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRv
bnMgYXJlIDEsIDIsIDMsIHJlc3BlY3RpdmVseS4gCi0gICAgLy8gU28gd2UgbXVzdCBhZGQgMS4K
LSAgICByZXR1cm4gbV9idXR0b24gKyAxOwotfQotCi1Ob2RlKiBNb3VzZUV2ZW50Ojp0b0VsZW1l
bnQoKSBjb25zdAotewotICAgIC8vIE1TSUUgZXh0ZW5zaW9uIC0gInRoZSBvYmplY3QgdG93YXJk
IHdoaWNoIHRoZSB1c2VyIGlzIG1vdmluZyB0aGUgbW91c2UgcG9pbnRlciIKLSAgICByZXR1cm4g
dHlwZSgpID09IG1vdXNlb3V0RXZlbnQgPyByZWxhdGVkVGFyZ2V0KCkgOiB0YXJnZXQoKTsKLX0K
LQotTm9kZSogTW91c2VFdmVudDo6ZnJvbUVsZW1lbnQoKSBjb25zdAotewotICAgIC8vIE1TSUUg
ZXh0ZW5zaW9uIC0gIm9iamVjdCBmcm9tIHdoaWNoIGFjdGl2YXRpb24gb3IgdGhlIG1vdXNlIHBv
aW50ZXIgaXMgZXhpdGluZyBkdXJpbmcgdGhlIGV2ZW50IiAoaHVoPykKLSAgICByZXR1cm4gdHlw
ZSgpID09IG1vdXNlb3V0RXZlbnQgPyB0YXJnZXQoKSA6IHJlbGF0ZWRUYXJnZXQoKTsKLX0KLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotS2V5Ym9hcmRFdmVudDo6
S2V5Ym9hcmRFdmVudCgpCi0gIDogbV9rZXlFdmVudCgwKQotICAsIG1fa2V5TG9jYXRpb24oRE9N
X0tFWV9MT0NBVElPTl9TVEFOREFSRCkKLSAgLCBtX2FsdEdyYXBoS2V5KGZhbHNlKQotewotfQot
Ci1LZXlib2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCYga2V5LCBBYnN0cmFjdFZpZXcgKnZpZXcpCi0gIDogVUlFdmVudFdpdGhLZXlTdGF0ZShrZXku
aXNLZXlVcCgpID8ga2V5dXBFdmVudCA6IGtleS5pc0F1dG9SZXBlYXQoKSA/IGtleXByZXNzRXZl
bnQgOiBrZXlkb3duRXZlbnQsCi0gICAgdHJ1ZSwgdHJ1ZSwgdmlldywgMCwga2V5LmN0cmxLZXko
KSwga2V5LmFsdEtleSgpLCBrZXkuc2hpZnRLZXkoKSwga2V5Lm1ldGFLZXkoKSkKLSAgLCBtX2tl
eUV2ZW50KG5ldyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoa2V5KSkKLSAgLCBtX2tleUlkZW50aWZp
ZXIoU3RyaW5nKGtleS5rZXlJZGVudGlmaWVyKCkpLmltcGwoKSkKLSAgLCBtX2tleUxvY2F0aW9u
KGtleS5pc0tleXBhZCgpID8gRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgOiBET01fS0VZX0xPQ0FU
SU9OX1NUQU5EQVJEKQotICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCi17Ci19Ci0KLUtleWJvYXJk
RXZlbnQ6OktleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAq
dmlld0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKQotICA6IFVJ
RXZlbnRXaXRoS2V5U3RhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcs
IHZpZXdBcmcsIDAsIGN0cmxLZXlBcmcsIGFsdEtleUFyZywgc2hpZnRLZXlBcmcsIG1ldGFLZXlB
cmcpCi0gICwgbV9rZXlFdmVudCgwKQotICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVy
QXJnLmltcGwoKSkKLSAgLCBtX2tleUxvY2F0aW9uKGtleUxvY2F0aW9uQXJnKQotICAsIG1fYWx0
R3JhcGhLZXkoYWx0R3JhcGhLZXlBcmcpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQ6On5LZXlib2Fy
ZEV2ZW50KCkKLXsKLSAgICBkZWxldGUgbV9rZXlFdmVudDsKLX0KLQotdm9pZCBLZXlib2FyZEV2
ZW50Ojppbml0S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIEFic3Ry
YWN0VmlldyAqdmlld0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcg
JmtleUlkZW50aWZpZXJBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQga2V5
TG9jYXRpb25BcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtZXRhS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlB
cmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5p
dFVJRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCAw
KTsKLQotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJBcmcuaW1wbCgpOwotICAg
IG1fa2V5TG9jYXRpb24gPSBrZXlMb2NhdGlvbkFyZzsKLSAgICBtX2N0cmxLZXkgPSBjdHJsS2V5
QXJnOwotICAgIG1fc2hpZnRLZXkgPSBzaGlmdEtleUFyZzsKLSAgICBtX2FsdEtleSA9IGFsdEtl
eUFyZzsKLSAgICBtX21ldGFLZXkgPSBtZXRhS2V5QXJnOwotICAgIG1fYWx0R3JhcGhLZXkgPSBh
bHRHcmFwaEtleUFyZzsKLX0KLQotaW50IEtleWJvYXJkRXZlbnQ6OmtleUNvZGUoKSBjb25zdAot
ewotICAgIGlmICghbV9rZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHR5cGUo
KSA9PSBrZXlkb3duRXZlbnQgfHwgdHlwZSgpID09IGtleXVwRXZlbnQpCi0gICAgICAgIHJldHVy
biBtX2tleUV2ZW50LT5XaW5kb3dzS2V5Q29kZSgpOwotICAgIHJldHVybiBjaGFyQ29kZSgpOwot
fQotCi1pbnQgS2V5Ym9hcmRFdmVudDo6Y2hhckNvZGUoKSBjb25zdAotewotICAgIGlmICghbV9r
ZXlFdmVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgU3RyaW5nIHRleHQgPSBtX2tleUV2ZW50
LT50ZXh0KCk7Ci0gICAgaWYgKHRleHQubGVuZ3RoKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIHRleHRbMF07Ci19Ci0KLWJvb2wgS2V5Ym9hcmRFdmVudDo6aXNLZXlib2Fy
ZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IEtleWJvYXJkRXZl
bnQ6OndoaWNoKCkgY29uc3QKLXsKLSAgICAvLyBOZXRzY2FwZSdzICJ3aGljaCIgcmV0dXJucyBh
IHZpcnR1YWwga2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBhbmQgYSBjaGFyYWN0ZXIg
Y29kZSBmb3Iga2V5cHJlc3MuCi0gICAgLy8gVGhhdCdzIGV4YWN0bHkgd2hhdCBJRSdzICJrZXlD
b2RlIiByZXR1cm5zLiBTbyB0aGV5IGFyZSB0aGUgc2FtZSBmb3Iga2V5Ym9hcmQgZXZlbnRzLgot
ICAgIHJldHVybiBrZXlDb2RlKCk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU11
dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoKQotICAgIDogbV9hdHRyQ2hhbmdlKDApCi17Ci19
Ci0KLU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVu
dFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxh
YmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0
ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQotICAgIDogRXZl
bnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3JlbGF0
ZWROb2RlKHJlbGF0ZWROb2RlQXJnKQotICAgICwgbV9wcmV2VmFsdWUocHJldlZhbHVlQXJnLmlt
cGwoKSkKLSAgICAsIG1fbmV3VmFsdWUobmV3VmFsdWVBcmcuaW1wbCgpKQotICAgICwgbV9hdHRy
TmFtZShhdHRyTmFtZUFyZy5pbXBsKCkpCi0gICAgLCBtX2F0dHJDaGFuZ2UoYXR0ckNoYW5nZUFy
ZykKLXsKLX0KLQotdm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChjb25zdCBB
dG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5l
d1ZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCi17Ci0gICAgaWYgKGRpc3Bh
dGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5pdEV2ZW50KHR5cGVBcmcsIGNhbkJ1
YmJsZUFyZywgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICBtX3JlbGF0ZWROb2RlID0gcmVsYXRlZE5v
ZGVBcmc7Ci0gICAgbV9wcmV2VmFsdWUgPSBwcmV2VmFsdWVBcmcuaW1wbCgpOwotICAgIG1fbmV3
VmFsdWUgPSBuZXdWYWx1ZUFyZy5pbXBsKCk7Ci0gICAgbV9hdHRyTmFtZSA9IGF0dHJOYW1lQXJn
LmltcGwoKTsKLSAgICBtX2F0dHJDaGFuZ2UgPSBhdHRyQ2hhbmdlQXJnOwotfQotCi1ib29sIE11
dGF0aW9uRXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9h
cmRFdmVudCgpCi17Ci19Ci0KLUNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVudChjb25zdCBB
dG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJs
ZUFyZywgQ2xpcGJvYXJkICpjbGlwYm9hcmRBcmcpCi0gICAgOiBFdmVudChldmVudFR5cGUsIGNh
bkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyksIG1fY2xpcGJvYXJkKGNsaXBib2FyZEFyZykKLXsK
LX0KLQotYm9vbCBDbGlwYm9hcmRFdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoZWVsRXZl
bnQ6OldoZWVsRXZlbnQoKSA6IG1faG9yaXpvbnRhbChmYWxzZSksIG1fd2hlZWxEZWx0YSgwKQot
ewotfQotCi1XaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGJvb2wgaCwgaW50IGQsIEFic3RyYWN0Vmll
dyAqdiwKLSAgICBpbnQgc3gsIGludCBzeSwgaW50IGN4LCBpbnQgY3ksIGJvb2wgY3RybCwgYm9v
bCBhbHQsIGJvb2wgc2hpZnQsIGJvb2wgbWV0YSkKLSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGgg
PyBraHRtbEhvcml6b250YWxtb3VzZXdoZWVsRXZlbnQgOiBtb3VzZXdoZWVsRXZlbnQsCi0gICAg
ICAgIHRydWUsIHRydWUsIHYsIDAsIHN4LCBzeSwgY3gsIGN5LCBjdHJsLCBhbHQsIHNoaWZ0LCBt
ZXRhKQotICAgICwgbV9ob3Jpem9udGFsKGgpLCBtX3doZWVsRGVsdGEoZCkKK1doZWVsRXZlbnQ6
OldoZWVsRXZlbnQoYm9vbCBob3Jpem9udGFsLCBpbnQgd2hlZWxEZWx0YSwgQWJzdHJhY3RWaWV3
KiB2aWV3LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblks
IGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KQorICAgIDog
TW91c2VSZWxhdGVkRXZlbnQoaG9yaXpvbnRhbCA/IGtodG1sSG9yaXpvbnRhbG1vdXNld2hlZWxF
dmVudCA6IG1vdXNld2hlZWxFdmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRy
dWUsIHZpZXcsIDAsIHNjcmVlblgsIHNjcmVlblksIGNsaWVudFgsIGNsaWVudFksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlmdEtleSwgbWV0YUtleSkKKyAg
ICAsIG1faG9yaXpvbnRhbChob3Jpem9udGFsKQorICAgICwgbV93aGVlbERlbHRhKHdoZWVsRGVs
dGEpCiB7CiB9CiAKQEAgLTYxMyw0MiArNTMsNCBAQCBib29sIFdoZWVsRXZlbnQ6OmlzV2hlZWxF
dmVudCgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQotICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQot
ICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKLSAgICAsIG1fdXNlQ2FwdHVyZSh1c2VDYXB0dXJl
KQotICAgICwgbV9yZW1vdmVkKGZhbHNlKQotewotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJmEsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
ICZiKQotewotICAgIHJldHVybiBhLmV2ZW50VHlwZSgpID09IGIuZXZlbnRUeXBlKCkgJiYgYS5s
aXN0ZW5lcigpID09IGIubGlzdGVuZXIoKSAmJiBhLnVzZUNhcHR1cmUoKSA9PSBiLnVzZUNhcHR1
cmUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2xpcGJvYXJkOjp+Q2xpcGJv
YXJkKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQmVmb3JlVW5sb2FkRXZl
bnQ6OkJlZm9yZVVubG9hZEV2ZW50KCkKLSAgICA6IEV2ZW50KGJlZm9yZXVubG9hZEV2ZW50LCBm
YWxzZSwgdHJ1ZSkKLXsKLX0KLQotYm9vbCBCZWZvcmVVbmxvYWRFdmVudDo6c3RvcmVzUmVzdWx0
QXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJlZm9yZVVu
bG9hZEV2ZW50OjpzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgbV9yZXN1bHQg
PSBzLmltcGwoKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9kb20vV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQu
aAkocmV2aXNpb24gMTQ5MDApCisrKyBXZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVG9iaWFzIEFudG9uIChh
bnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0y
Miw0NTggKzIzLDMxIEBACiAgKgogICovCiAKLSNpZm5kZWYgRE9NX0VWRU5UU0lNUExfSAotI2Rl
ZmluZSBET01fRVZFTlRTSU1QTF9ICisjaWZuZGVmIFdoZWVsRXZlbnRfaAorI2RlZmluZSBXaGVl
bEV2ZW50X2gKIAotI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLQotY2xhc3MgRGVwcmVjYXRlZFN0cmluZ0xpc3Q7Cisj
aW5jbHVkZSAiTW91c2VSZWxhdGVkRXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBDYWNoZWRJbWFnZTsKLWNsYXNzIENsaXBib2FyZDsKLWNsYXNzIEV2ZW50TGlzdGVuZXI7
Ci1jbGFzcyBFdmVudFRhcmdldE5vZGU7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEludFBvaW50Owot
Y2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBET01UaW1lU3RhbXA7Ci10eXBlZGVmIERPTVdpbmRvdyBBYnN0cmFjdFZpZXc7Ci0KLWNvbnN0
IGludCBFdmVudEV4Y2VwdGlvbk9mZnNldCA9IDEwMDsKLWNvbnN0IGludCBFdmVudEV4Y2VwdGlv
bk1heCA9IDE5OTsKLWVudW0gRXZlbnRFeGNlcHRpb25Db2RlIHsgVU5TUEVDSUZJRURfRVZFTlRf
VFlQRV9FUlIgPSBFdmVudEV4Y2VwdGlvbk9mZnNldCB9OwotCi1jbGFzcyBFdmVudCA6IHB1Ymxp
YyBTaGFyZWQ8RXZlbnQ+Ci17Ci1wdWJsaWM6Ci0gICAgZW51bSBQaGFzZVR5cGUgeyAKLSAgICAg
ICAgQ0FQVFVSSU5HX1BIQVNFID0gMSwgCi0gICAgICAgIEFUX1RBUkdFVCA9IDIsIAotICAgICAg
ICBCVUJCTElOR19QSEFTRSA9IDMgCi0gICAgfTsKLQotICAgIC8vIFJldmVyc2UtZW5naW5lZXJl
ZCBmcm9tIE5ldHNjYXBlCi0gICAgZW51bSBFdmVudFR5cGUgewotICAgICAgICBNT1VTRURPV04g
ICAgICAgICAgID0gMSwKLSAgICAgICAgTU9VU0VVUCAgICAgICAgICAgICA9IDIsCi0gICAgICAg
IE1PVVNFT1ZFUiAgICAgICAgICAgPSA0LAotICAgICAgICBNT1VTRU9VVCAgICAgICAgICAgID0g
OCwKLSAgICAgICAgTU9VU0VNT1ZFICAgICAgICAgICA9IDE2LAotICAgICAgICBNT1VTRURSQUcg
ICAgICAgICAgID0gMzIsCi0gICAgICAgIENMSUNLICAgICAgICAgICAgICAgPSA2NCwKLSAgICAg
ICAgREJMQ0xJQ0sgICAgICAgICAgICA9IDEyOCwKLSAgICAgICAgS0VZRE9XTiAgICAgICAgICAg
ICA9IDI1NiwKLSAgICAgICAgS0VZVVAgICAgICAgICAgICAgICA9IDUxMiwKLSAgICAgICAgS0VZ
UFJFU1MgICAgICAgICAgICA9IDEwMjQsCi0gICAgICAgIERSQUdEUk9QICAgICAgICAgICAgPSAy
MDQ4LAotICAgICAgICBGT0NVUyAgICAgICAgICAgICAgID0gNDA5NiwKLSAgICAgICAgQkxVUiAg
ICAgICAgICAgICAgICA9IDgxOTIsCi0gICAgICAgIFNFTEVDVCAgICAgICAgICAgICAgPSAxNjM4
NCwKLSAgICAgICAgQ0hBTkdFICAgICAgICAgICAgICA9IDMyNzY4Ci0gICAgfTsKLSAgICAKLSAg
ICBFdmVudCgpOwotICAgIEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5C
dWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0gICAgdmlydHVhbCB+RXZlbnQoKTsKLQot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQot
ICAgIE5vZGUqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9Ci0gICAg
dm9pZCBzZXRUYXJnZXQoTm9kZSopOwotICAgIE5vZGUqIGN1cnJlbnRUYXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnRUYXJnZXQ7IH0KLSAgICB2b2lkIHNldEN1cnJlbnRUYXJnZXQoTm9k
ZSogY3VycmVudFRhcmdldCkgeyBtX2N1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0OyB9Ci0g
ICAgdW5zaWduZWQgc2hvcnQgZXZlbnRQaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRQaGFz
ZTsgfQotICAgIHZvaWQgc2V0RXZlbnRQaGFzZSh1bnNpZ25lZCBzaG9ydCBldmVudFBoYXNlKSB7
IG1fZXZlbnRQaGFzZSA9IGV2ZW50UGhhc2U7IH0KLSAgICBib29sIGJ1YmJsZXMoKSBjb25zdCB7
IHJldHVybiBtX2NhbkJ1YmJsZTsgfQotICAgIGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FuY2VsYWJsZTsgfQotICAgIERPTVRpbWVTdGFtcCB0aW1lU3RhbXAoKSB7IHJldHVy
biBtX2NyZWF0ZVRpbWU7IH0KLSAgICB2b2lkIHN0b3BQcm9wYWdhdGlvbigpIHsgbV9wcm9wYWdh
dGlvblN0b3BwZWQgPSB0cnVlOyB9Ci0gICAgdm9pZCBwcmV2ZW50RGVmYXVsdCgpIHsgaWYgKG1f
Y2FuY2VsYWJsZSkgbV9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgaW5pdEV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlQXJnLCBib29sIGNhbkJ1YmJsZUFyZywg
Ym9vbCBjYW5jZWxhYmxlQXJnKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJk
RXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsgLy8g
YSBzdWJzZXQgb2YgbW91c2UgZXZlbnRzCi0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZl
bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdDsKLQotICAgIGJv
b2wgcHJvcGFnYXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0b3Bw
ZWQ7IH0KLSAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmF1
bHRQcmV2ZW50ZWQ7IH0KLQotICAgIHZvaWQgc2V0RGVmYXVsdEhhbmRsZWQoKSB7IG1fZGVmYXVs
dEhhbmRsZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBkZWZhdWx0SGFuZGxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVmYXVsdEhhbmRsZWQ7IH0KLQotICAgIHZvaWQgc2V0Q2FuY2VsQnViYmxlKGJvb2wg
Y2FuY2VsKSB7IG1fY2FuY2VsQnViYmxlID0gY2FuY2VsOyB9Ci0gICAgdm9pZCBzZXREZWZhdWx0
UHJldmVudGVkKGJvb2wgZGVmYXVsdFByZXZlbnRlZCkgeyBtX2RlZmF1bHRQcmV2ZW50ZWQgPSBk
ZWZhdWx0UHJldmVudGVkOyB9Ci0gICAgYm9vbCBnZXRDYW5jZWxCdWJibGUoKSBjb25zdCB7IHJl
dHVybiBtX2NhbmNlbEJ1YmJsZTsgfQotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFz
U3RyaW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmlu
ZyYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkVGFyZ2V0KCk7Ci0g
ICAgYm9vbCBkaXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KLQotcHJpdmF0
ZToKLSAgICBBdG9taWNTdHJpbmcgbV90eXBlOwotICAgIGJvb2wgbV9jYW5CdWJibGU7Ci0gICAg
Ym9vbCBtX2NhbmNlbGFibGU7Ci0KLSAgICBib29sIG1fcHJvcGFnYXRpb25TdG9wcGVkOwotICAg
IGJvb2wgbV9kZWZhdWx0UHJldmVudGVkOwotICAgIGJvb2wgbV9kZWZhdWx0SGFuZGxlZDsKLSAg
ICBib29sIG1fY2FuY2VsQnViYmxlOwotCi0gICAgTm9kZSogbV9jdXJyZW50VGFyZ2V0OyAvLyBy
ZWYgPiAwIG1haW50YWluZWQgZXh0ZXJuYWxseQotICAgIHVuc2lnbmVkIHNob3J0IG1fZXZlbnRQ
aGFzZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV90YXJnZXQ7Ci0gICAgRE9NVGltZVN0YW1wIG1fY3Jl
YXRlVGltZTsKLX07Ci0KLWNsYXNzIFVJRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1YmxpYzoK
LSAgICBVSUV2ZW50KCk7Ci0gICAgVUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0g
ICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBj
YW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAg
ICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnKTsKLSAgICBBYnN0cmFjdFZpZXcgKnZpZXcoKSBj
b25zdCB7IHJldHVybiBtX3ZpZXcuZ2V0KCk7IH0KLSAgICBpbnQgZGV0YWlsKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXRhaWw7IH0KLSAgICB2b2lkIGluaXRVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFp
bEFyZyk7Ci0gICAgdmlydHVhbCBib29sIGlzVUlFdmVudCgpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBpbnQga2V5Q29kZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNoYXJDb2RlKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIGludCBsYXllclgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsYXll
clkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IHBhZ2VYKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBpbnQgcGFnZVkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgUmVmUHRyPEFic3RyYWN0Vmlldz4gbV92aWV3OwotICAgIGludCBtX2Rl
dGFpbDsKLX07CisgICAgLy8gZXh0ZW5zaW9uOiBtb3VzZSB3aGVlbCBldmVudAorICAgIGNsYXNz
IFdoZWVsRXZlbnQgOiBwdWJsaWMgTW91c2VSZWxhdGVkRXZlbnQgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgV2hlZWxFdmVudCgpOworICAgICAgICBXaGVlbEV2ZW50KGJvb2wgaG9yaXpvbnRhbCwg
aW50IHdoZWVsRGVsdGEsIEFic3RyYWN0VmlldyosCisgICAgICAgICAgICAgICAgICAgaW50IHNj
cmVlblgsIGludCBzY3JlZW5ZLCBpbnQgY2xpZW50WCwgaW50IGNsaWVudFksCisgICAgICAgICAg
ICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBt
ZXRhS2V5KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyBy
ZXR1cm4gbV9ob3Jpem9udGFsOyB9CisgICAgICAgIGludCB3aGVlbERlbHRhKCkgY29uc3QgeyBy
ZXR1cm4gbV93aGVlbERlbHRhOyB9CiAKLWNsYXNzIFVJRXZlbnRXaXRoS2V5U3RhdGUgOiBwdWJs
aWMgVUlFdmVudCB7Ci1wdWJsaWM6Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZSgpIDogbV9jdHJs
S2V5KGZhbHNlKSwgbV9hbHRLZXkoZmFsc2UpLCBtX3NoaWZ0S2V5KGZhbHNlKSwgbV9tZXRhS2V5
KGZhbHNlKSB7IH0KLSAgICBVSUV2ZW50V2l0aEtleVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyAm
dHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQWJzdHJhY3RWaWV3
ICp2aWV3QXJnLAotICAgICAgICBpbnQgZGV0YWlsQXJnLCBib29sIGN0cmxLZXlBcmcsIGJvb2wg
YWx0S2V5QXJnLCBib29sIHNoaWZ0S2V5QXJnLCBib29sIG1ldGFLZXlBcmcpCi0gICAgICAgIDog
VUlFdmVudCh0eXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIGRldGFp
bEFyZykKLSAgICAgICAgLCBtX2N0cmxLZXkoY3RybEtleUFyZyksIG1fYWx0S2V5KGFsdEtleUFy
ZyksIG1fc2hpZnRLZXkoc2hpZnRLZXlBcmcpLCBtX21ldGFLZXkobWV0YUtleUFyZykgeyB9Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0Owog
Ci0gICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9Ci0gICAgYm9v
bCBzaGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAgICBib29sIGFsdEtl
eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9Ci0gICAgYm9vbCBtZXRhS2V5KCkgY29uc3Qg
eyByZXR1cm4gbV9tZXRhS2V5OyB9Ci0KLXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIGlu
aXQgZnVuY3Rpb25zIGNhbiBzZXQgdGhlbQotICAgIGJvb2wgbV9jdHJsS2V5IDogMTsKLSAgICBi
b29sIG1fYWx0S2V5IDogMTsKLSAgICBib29sIG1fc2hpZnRLZXkgOiAxOwotICAgIGJvb2wgbV9t
ZXRhS2V5IDogMTsKLX07Ci0KLS8vIEludGVybmFsIG9ubHk6IEhlbHBlciBjbGFzcyBmb3Igd2hh
dCdzIGNvbW1vbiBiZXR3ZWVuIG1vdXNlIGFuZCB3aGVlbCBldmVudHMuCi1jbGFzcyBNb3VzZVJl
bGF0ZWRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1YmxpYzoKLSAgICBN
b3VzZVJlbGF0ZWRFdmVudCgpOwotICAgIE1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIGludCBzY3JlZW5YKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JlZW5YOyB9Ci0gICAgaW50IHNjcmVlblkoKSBjb25zdCB7IHJldHVybiBtX3Nj
cmVlblk7IH0KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50WDsgfQot
ICAgIGludCBjbGllbnRZKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRZOyB9Ci0gICAgaW50IGxh
eWVyWCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJYOyB9Ci0gICAgaW50IGxheWVyWSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJZOyB9Ci0gICAgaW50IG9mZnNldFgoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldFg7IH0KLSAgICBpbnQgb2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WTsg
fQotICAgIGJvb2wgaXNTaW11bGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2ltdWxhdGVkOyB9
Ci0gICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWdlWSgp
IGNvbnN0OwotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsKLXByb3RlY3Rl
ZDogLy8gZXhwb3NlIHRoZXNlIHNvIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50IGNhbiBzZXQg
dGhlbQotICAgIGludCBtX3NjcmVlblg7Ci0gICAgaW50IG1fc2NyZWVuWTsKLSAgICBpbnQgbV9j
bGllbnRYOwotICAgIGludCBtX2NsaWVudFk7Ci0gICAgdm9pZCBpbml0Q29vcmRpbmF0ZXMoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLXByaXZhdGU6Ci0gICAgaW50IG1f
cGFnZVg7Ci0gICAgaW50IG1fcGFnZVk7Ci0gICAgaW50IG1fbGF5ZXJYOwotICAgIGludCBtX2xh
eWVyWTsKLSAgICBpbnQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFk7Ci0gICAgYm9vbCBt
X2lzU2ltdWxhdGVkOwotfTsKLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotY2xhc3Mg
TW91c2VFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudCB7Ci1wdWJsaWM6Ci0gICAgTW91
c2VFdmVudCgpOwotICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLAotICAg
ICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgIGJv
b2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdB
cmcsCi0gICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAg
ICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAg
ICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQg
Y2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBzaGlm
dEtleUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgIEV2
ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAgICAgICAgICBDbGlw
Ym9hcmQqIGNsaXBib2FyZEFyZyA9IDAsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVs
YXRlZCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0gICAgLy8gV2luSUUg
dXNlcyAxLDQsMiBmb3IgbGVmdC9taWRkbGUvcmlnaHQgYnV0IG5vdCBmb3IgY2xpY2sgKGp1c3Qg
Zm9yIG1vdXNlZG93bi91cCwgbWF5YmUgb3RoZXJzKSwgYnV0IHdlIHdpbGwgbWF0Y2ggdGhlIHN0
YW5kYXJkIERPTS4KLSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdCB7IHJldHVybiBt
X2J1dHRvbjsgfQotICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQotICAgIENsaXBib2FyZCogY2xpcGJvYXJk
KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0KLSAgICBOb2RlKiB0b0VsZW1l
bnQoKSBjb25zdDsKLSAgICBOb2RlKiBmcm9tRWxlbWVudCgpIGNvbnN0OwotICAgIHZvaWQgaW5p
dE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZp
ZXdBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs
dEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBF
dmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc01v
dXNlRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBz
aG9ydCBtX2J1dHRvbjsKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX3JlbGF0ZWRUYXJn
ZXQ7Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0KLS8vIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDMKLWNsYXNzIEtleWJvYXJkRXZlbnQgOiBwdWJsaWMgVUlFdmVu
dFdpdGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBLZXlMb2NhdGlvbkNvZGUgewotICAg
ICAgICBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEICAgICAgPSAweDAwLAotICAgICAgICBET01f
S0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAxLAotICAgICAgICBET01fS0VZX0xPQ0FU
SU9OX1JJR0hUICAgICAgICAgPSAweDAyLAotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX05VTVBB
RCAgICAgICAgPSAweDAzLAorICAgICAgICBib29sIG1faG9yaXpvbnRhbDsKKyAgICAgICAgaW50
IG1fd2hlZWxEZWx0YTsKICAgICB9OwotICAgIEtleWJvYXJkRXZlbnQoKTsKLSAgICBLZXlib2Fy
ZEV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYsIEFic3RyYWN0VmlldyopOwotICAg
IEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLAotICAgICAgICAgICAgICAg
IGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywK
LSAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZpZXdBcmcsCi0gICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLAotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGtleUxvY2F0aW9uQXJnLAotICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAg
ICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5
QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICBi
b29sIGFsdEdyYXBoS2V5QXJnKTsKLSAgICB2aXJ0dWFsIH5LZXlib2FyZEV2ZW50KCk7Ci0gICAg
Ci0gICAgdm9pZCBpbml0S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcs
Ci0gICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywK
LSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAg
ICAgICAgICAgdW5zaWduZWQga2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAg
ICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAot
ICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIAotICAgIFN0cmluZyBr
ZXlJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9rZXlJZGVudGlmaWVyLmdldCgpOyB9Ci0g
ICAgdW5zaWduZWQga2V5TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2tleUxvY2F0aW9uOyB9
Ci0gICAgCi0gICAgYm9vbCBhbHRHcmFwaEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0R3JhcGhL
ZXk7IH0KLSAgICAKLSAgICBjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9rZXlFdmVudDsgfQotCi0gICAgaW50IGtleUNvZGUoKSBjb25zdDsg
Ly8ga2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBjaGFyYWN0ZXIgZm9yIG90aGVyIGV2
ZW50cwotICAgIGludCBjaGFyQ29kZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBp
c0tleWJvYXJkRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogbV9rZXlFdmVudDsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gbV9rZXlJZGVudGlmaWVyOwotICAgIHVuc2lnbmVkIG1fa2V5TG9j
YXRpb247Ci0gICAgYm9vbCBtX2FsdEdyYXBoS2V5IDogMTsKLX07Ci0KLWNsYXNzIE11dGF0aW9u
RXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIGVudW0gYXR0ckNoYW5nZVR5cGUg
eyBNT0RJRklDQVRJT04gPSAxLCBBRERJVElPTiA9IDIsIFJFTU9WQUwgPSAzIH07Ci0gICAgTXV0
YXRpb25FdmVudCgpOwotICAgIE11dGF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBOb2Rl
ICpyZWxhdGVkTm9kZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnBy
ZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVl
QXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmYXR0ck5hbWVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAg
Tm9kZSAqcmVsYXRlZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3JlbGF0ZWROb2RlLmdldCgpOyB9
Ci0gICAgU3RyaW5nIHByZXZWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJldlZhbHVlLmdldCgp
OyB9Ci0gICAgU3RyaW5nIG5ld1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uZXdWYWx1ZS5nZXQo
KTsgfQotICAgIFN0cmluZyBhdHRyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ck5hbWUuZ2V0
KCk7IH0KLSAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9h
dHRyQ2hhbmdlOyB9Ci0gICAgdm9pZCBpbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpOwotICAgIHZpcnR1YWwgYm9v
bCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IG1f
cmVsYXRlZE5vZGU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcHJldlZhbHVlOwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBtX25ld1ZhbHVlOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2F0
dHJOYW1lOwotICAgIHVuc2lnbmVkIHNob3J0IG1fYXR0ckNoYW5nZTsKLX07Ci0KLWNsYXNzIENs
aXBib2FyZEV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBDbGlwYm9hcmRFdmVu
dCgpOwotICAgIENsaXBib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZSwgYm9vbCBj
YW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgQ2xpcGJvYXJkICpjbGlwYm9hcmRBcmcp
OwotCi0gICAgQ2xpcGJvYXJkICpjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBib2Fy
ZC5nZXQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci1w
cml2YXRlOgotICAgIFJlZlB0cjxDbGlwYm9hcmQ+IG1fY2xpcGJvYXJkOwotfTsKLQotLy8gZXh0
ZW5zaW9uOiBtb3VzZSB3aGVlbCBldmVudAotY2xhc3MgV2hlZWxFdmVudCA6IHB1YmxpYyBNb3Vz
ZVJlbGF0ZWRFdmVudAotewotcHVibGljOgotICAgIFdoZWVsRXZlbnQoKTsKLSAgICBXaGVlbEV2
ZW50KGJvb2wgaG9yaXpvbnRhbCwgaW50IHdoZWVsRGVsdGEsIEFic3RyYWN0VmlldyAqLAotICAg
ICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJnLCBpbnQgc2NyZWVuWUFyZywKLSAgICAgICAg
ICAgICAgICAgICBpbnQgY2xpZW50WEFyZywgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLCBib29sIGFsdEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywg
Ym9vbCBtZXRhS2V5QXJnKTsKLSAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0IHsgcmV0dXJu
IG1faG9yaXpvbnRhbDsgfQotICAgIGludCB3aGVlbERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV93
aGVlbERlbHRhOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgp
IGNvbnN0OwotCi0gICAgYm9vbCBtX2hvcml6b250YWw7Ci0gICAgaW50IG1fd2hlZWxEZWx0YTsK
LX07Ci0KLWNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIDogcHVibGljIFNoYXJlZDxSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lcj4gewotcHVibGljOgotICAgIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+LCBib29sIHVzZUNhcHR1cmUpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50VHlwZTsgfQotICAgIEV2ZW50TGlzdGVuZXIgKmxp
c3RlbmVyKCkgY29uc3QgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQotICAgIGJvb2wgdXNl
Q2FwdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlQ2FwdHVyZTsgfQotICAgIGJvb2wgcmVtb3Zl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlZDsgfQotICAgIHZvaWQgc2V0UmVtb3ZlZChib29s
IHJlbW92ZWQpIHsgbV9yZW1vdmVkID0gcmVtb3ZlZDsgfQotICAgIAotcHJpdmF0ZToKLSAgICBB
dG9taWNTdHJpbmcgbV9ldmVudFR5cGU7Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fbGlz
dGVuZXI7Ci0gICAgYm9vbCBtX3VzZUNhcHR1cmU7Ci0gICAgYm9vbCBtX3JlbW92ZWQ7Ci19Owot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYpOwotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgYSwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIm
IGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQotCi0vLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElF
J3MgZXZlbnRzIGZvciBkcmFnIGFuZCBkcm9wIGFuZCBjb3B5L3Bhc3RlCi1jbGFzcyBDbGlwYm9h
cmQgOiBwdWJsaWMgU2hhcmVkPENsaXBib2FyZD4gewotcHVibGljOgotICAgIHZpcnR1YWwgfkNs
aXBib2FyZCgpOwotCi0gICAgLy8gSXMgdGhpcyBvcGVyYXRpb24gYSBkcmFnLWRyb3Agb3IgYSBj
b3B5LXBhc3RlPwotICAgIHZpcnR1YWwgYm9vbCBpc0ZvckRyYWdnaW5nKCkgY29uc3QgPSAwOwot
Ci0gICAgdmlydHVhbCBTdHJpbmcgZHJvcEVmZmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcgJnMpID0gMDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBlZmZlY3RBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRFZmZl
Y3RBbGxvd2VkKGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBj
bGVhckRhdGEoY29uc3QgU3RyaW5nICZ0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
QWxsRGF0YSgpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyAm
dHlwZSwgYm9vbCAmc3VjY2VzcykgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzZXREYXRh
KGNvbnN0IFN0cmluZyAmdHlwZSwgY29uc3QgU3RyaW5nICZkYXRhKSA9IDA7Ci0gICAgCi0gICAg
Ly8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJp
bmdMaXN0IHR5cGVzKCkgY29uc3QgPSAwOwotICAgIAotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ2FjaGVkSW1hZ2Uq
IGRyYWdJbWFnZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKENh
Y2hlZEltYWdlKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotICAgIHZpcnR1YWwg
Tm9kZSAqZHJhZ0ltYWdlRWxlbWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0lt
YWdlRWxlbWVudChOb2RlICosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50ICYpID0gMDsKLX07Ci0K
LWNsYXNzIEJlZm9yZVVubG9hZEV2ZW50IDogcHVibGljIEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAg
QmVmb3JlVW5sb2FkRXZlbnQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0
cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcm
KTsKLQotICAgIFN0cmluZyByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdC5nZXQoKTsg
fQotCi1wcml2YXRlOgotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX3Jlc3VsdDsKLX07CiAKLX0g
Ly8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8v
IFdoZWVsRXZlbnRfaApJbmRleDogV2ViQ29yZS9kb20vZG9tMl9ldmVudHNpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9kb20yX2V2ZW50c2ltcGwuY3BwCShyZXZpc2lvbiAxNDkw
OSkKKysrIFdlYkNvcmUvZG9tL2RvbTJfZXZlbnRzaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNjU0ICswLDAgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBs
ZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1z
dGFkdC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKLQot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJTeXN0
ZW1UaW1lLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAi
U3lzdGVtVGltZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Ci0KLUV2ZW50OjpFdmVudCgpCi0g
ICAgOiBtX2NhbkJ1YmJsZShmYWxzZSkKLSAgICAsIG1fY2FuY2VsYWJsZShmYWxzZSkKLSAgICAs
IG1fcHJvcGFnYXRpb25TdG9wcGVkKGZhbHNlKQotICAgICwgbV9kZWZhdWx0UHJldmVudGVkKGZh
bHNlKQotICAgICwgbV9kZWZhdWx0SGFuZGxlZChmYWxzZSkKLSAgICAsIG1fY2FuY2VsQnViYmxl
KGZhbHNlKQotICAgICwgbV9jdXJyZW50VGFyZ2V0KDApCi0gICAgLCBtX2V2ZW50UGhhc2UoMCkK
LSAgICAsIG1fY3JlYXRlVGltZShzdGF0aWNfY2FzdDxET01UaW1lU3RhbXA+KGN1cnJlbnRUaW1l
KCkgKiAxMDAwLjApKQotewotfQotCi1FdmVudDo6RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZl
dmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCi0gICAgOiBt
X3R5cGUoZXZlbnRUeXBlKQotICAgICwgbV9jYW5CdWJibGUoY2FuQnViYmxlQXJnKQotICAgICwg
bV9jYW5jZWxhYmxlKGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3Byb3BhZ2F0aW9uU3RvcHBlZChm
YWxzZSkKLSAgICAsIG1fZGVmYXVsdFByZXZlbnRlZChmYWxzZSkKLSAgICAsIG1fZGVmYXVsdEhh
bmRsZWQoZmFsc2UpCi0gICAgLCBtX2NhbmNlbEJ1YmJsZShmYWxzZSkKLSAgICAsIG1fY3VycmVu
dFRhcmdldCgwKQotICAgICwgbV9ldmVudFBoYXNlKDApCi0gICAgLCBtX2NyZWF0ZVRpbWUoc3Rh
dGljX2Nhc3Q8RE9NVGltZVN0YW1wPihjdXJyZW50VGltZSgpICogMTAwMC4wKSkKLXsKLX0KLQot
RXZlbnQ6On5FdmVudCgpCi17Ci19Ci0KLXZvaWQgRXZlbnQ6OmluaXRFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJs
ZUFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3R5cGUgPSBldmVudFR5cGVBcmc7Ci0gICAgbV9jYW5CdWJibGUgPSBjYW5CdWJibGVBcmc7Ci0g
ICAgbV9jYW5jZWxhYmxlID0gY2FuY2VsYWJsZUFyZzsKLX0KLQotYm9vbCBFdmVudDo6aXNVSUV2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzTW91
c2VFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojpp
c011dGF0aW9uRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBF
dmVudDo6aXNLZXlib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNXaGVlbEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBj
b25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6c3RvcmVzUmVzdWx0
QXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBFdmVudDo6
c3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJikKLXsKLX0KLQotdm9pZCBFdmVudDo6c2V0VGFyZ2V0
KE5vZGUqIHRhcmdldCkKLXsKLSAgICBtX3RhcmdldCA9IHRhcmdldDsKLSAgICBpZiAodGFyZ2V0
KQotICAgICAgICByZWNlaXZlZFRhcmdldCgpOwotfQotCi12b2lkIEV2ZW50OjpyZWNlaXZlZFRh
cmdldCgpCi17Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVVJRXZlbnQ6OlVJRXZl
bnQoKQotICAgIDogbV9kZXRhaWwoMCkKLXsKLX0KLQotVUlFdmVudDo6VUlFdmVudChjb25zdCBB
dG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJs
ZUFyZywgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLCBpbnQgZGV0YWlsQXJnKQotICAgIDogRXZlbnQo
ZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpCi0gICAgLCBtX3ZpZXcodmll
d0FyZykKLSAgICAsIG1fZGV0YWlsKGRldGFpbEFyZykKLXsKLX0KLQotdm9pZCBVSUV2ZW50Ojpp
bml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBkZXRhaWxBcmcpCi17Ci0gICAgaWYgKGRpc3BhdGNoZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaW5pdEV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZyk7Ci0K
LSAgICBtX3ZpZXcgPSB2aWV3QXJnOwotICAgIG1fZGV0YWlsID0gZGV0YWlsQXJnOwotfQotCi1i
b29sIFVJRXZlbnQ6OmlzVUlFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWludCBVSUV2ZW50OjprZXlDb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50
IFVJRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJ
RXZlbnQ6OmxheWVyWCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50
OjpsYXllclkoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6cGFn
ZVgoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6cGFnZVkoKSBj
b25zdAotewotICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6d2hpY2goKSBjb25zdAot
ewotICAgIHJldHVybiAwOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Nb3VzZVJl
bGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoKQotICAgIDogbV9zY3JlZW5YKDApLCBtX3Nj
cmVlblkoMCksIG1fY2xpZW50WCgwKSwgbV9jbGllbnRZKDApCi0gICAgLCBtX3BhZ2VYKDApLCBt
X3BhZ2VZKDApLCBtX2xheWVyWCgwKSwgbV9sYXllclkoMCksIG1fb2Zmc2V0WCgwKSwgbV9vZmZz
ZXRZKDApLCBtX2lzU2ltdWxhdGVkKGZhbHNlKQotewotfQotCi1Nb3VzZVJlbGF0ZWRFdmVudDo6
TW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzY3JlZW5YQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3Jl
ZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2lt
dWxhdGVkKQotICAgIDogVUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFy
ZywgY2FuY2VsYWJsZUFyZywgdmlld0FyZywgZGV0YWlsQXJnLAotICAgICAgICBjdHJsS2V5QXJn
LCBhbHRLZXlBcmcsIHNoaWZ0S2V5QXJnLCBtZXRhS2V5QXJnKQotICAgICwgbV9zY3JlZW5YKHNj
cmVlblhBcmcpLCBtX3NjcmVlblkoc2NyZWVuWUFyZykKLSAgICAsIG1fY2xpZW50WChjbGllbnRY
QXJnKSwgbV9jbGllbnRZKGNsaWVudFlBcmcpCi0gICAgLCBtX2lzU2ltdWxhdGVkKGlzU2ltdWxh
dGVkKQotewotICAgIGluaXRDb29yZGluYXRlcygpOwotfQotCi12b2lkIE1vdXNlUmVsYXRlZEV2
ZW50Ojppbml0Q29vcmRpbmF0ZXMoKQotewotICAgIC8vIFNldCB1cCBpbml0aWFsIHZhbHVlcyBm
b3IgY29vcmRpbmF0ZXMuCi0gICAgLy8gQ29ycmVjdCB2YWx1ZXMgY2FuJ3QgYmUgY29tcHV0ZWQg
dW50aWwgd2UgaGF2ZSBhdCB0YXJnZXQsIHNvIHJlY2VpdmVkVGFyZ2V0Ci0gICAgLy8gZG9lcyB0
aGUgInJlYWwiIGNvbXB1dGF0aW9uLgotICAgIG1fcGFnZVggPSBtX2NsaWVudFg7Ci0gICAgbV9w
YWdlWSA9IG1fY2xpZW50WTsKLSAgICBtX2xheWVyWCA9IG1fcGFnZVg7Ci0gICAgbV9sYXllclkg
PSBtX3BhZ2VZOwotICAgIG1fb2Zmc2V0WCA9IG1fcGFnZVg7Ci0gICAgbV9vZmZzZXRZID0gbV9w
YWdlWTsKLX0KLQotdm9pZCBNb3VzZVJlbGF0ZWRFdmVudDo6cmVjZWl2ZWRUYXJnZXQoKQotewot
ICAgIC8vIENvbXB1dGUgY29vcmRpbmF0ZXMgdGhhdCBhcmUgYmFzZWQgb24gdGhlIHRhcmdldC4K
LSAgICBtX29mZnNldFggPSBtX3BhZ2VYOwotICAgIG1fb2Zmc2V0WSA9IG1fcGFnZVk7Ci0gICAg
bV9sYXllclggPSBtX3BhZ2VYOyAgICAKLSAgICBtX2xheWVyWSA9IG1fcGFnZVk7ICAgIAotCi0g
ICAgTm9kZSogdGFyZyA9IHRhcmdldCgpOwotICAgIEFTU0VSVCh0YXJnKTsKLQotICAgIC8vIE11
c3QgaGF2ZSBhbiB1cGRhdGVkIHJlbmRlciB0cmVlIGZvciB0aGlzIG1hdGggdG8gd29yayBjb3Jy
ZWN0bHkuCi0gICAgdGFyZy0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7Ci0KLSAgICAv
LyBGSVhNRTogY2xpZW50WC9ZIHNob3VsZCBub3QgYmUgdGhlIHNhbWUgYXMgcGFnZVgvWSEKLSAg
ICAvLyBDdXJyZW50bHkgdGhlIHBhc3NlZC1pbiBjbGllbnRYIGFuZCBjbGllbnRZIGFyZSBpbmNv
cnJlY3RseSBhY3R1YWxseQotICAgIC8vIHBhZ2VYIGFuZCBwYWdlWSB2YWx1ZXMsIHNvIHdlIGRv
bid0IGhhdmUgYW55IHdvcmsgdG8gZG8gaGVyZSwgYnV0IGlmCi0gICAgLy8gd2Ugc3RhcnRlZCBw
YXNzaW5nIGluIGNvcnJlY3QgY2xpZW50WCBhbmQgY2xpZW50WSwgd2UnZCB3YW50IHRvIGNvbXB1
dGUKLSAgICAvLyBwYWdlWCBhbmQgcGFnZVkgaGVyZS4KLQotICAgIC8vIEFkanVzdCBvZmZzZXRY
L1kgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCdzIHBvc2l0aW9uLgotICAgIGlmICghaXNT
aW11bGF0ZWQoKSkgewotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByID0gdGFyZy0+cmVuZGVy
ZXIoKSkgewotICAgICAgICAgICAgaW50IHJ4LCByeTsKLSAgICAgICAgICAgIGlmIChyLT5hYnNv
bHV0ZVBvc2l0aW9uKHJ4LCByeSkpIHsKLSAgICAgICAgICAgICAgICBtX29mZnNldFggLT0gcng7
Ci0gICAgICAgICAgICAgICAgbV9vZmZzZXRZIC09IHJ5OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gQWRqdXN0IGxheWVyWC9ZIHRvIGJlIHJlbGF0aXZlIHRvIHRo
ZSBsYXllci4KLSAgICAvLyBGSVhNRTogV2UncmUgcHJldHR5IHN1cmUgdGhpcyBpcyB0aGUgd3Jv
bmcgZGVmaW50aW9uIG9mICJsYXllci4iCi0gICAgLy8gT3VyIFJlbmRlckxheWVyIGlzIGEgbW9y
ZSBtb2Rlcm4gY29uY2VwdCwgYW5kIGxheWVyWC9ZIGlzIHNvbWUKLSAgICAvLyBvdGhlciBub3Rp
b24gYWJvdXQgZ3JvdXBzIG9mIGVsZW1lbnRzOyB3ZSBzaG91bGQgdGVzdCBhbmQgZml4IHRoaXMu
Ci0gICAgTm9kZSogbiA9IHRhcmc7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPnJlbmRlcmVyKCkpCi0g
ICAgICAgIG4gPSBuLT5wYXJlbnQoKTsKLSAgICBpZiAobikgewotICAgICAgICBSZW5kZXJMYXll
ciogbGF5ZXIgPSBuLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBsYXll
ci0+dXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotICAgICAgICBmb3IgKDsgbGF5ZXI7IGxheWVyID0g
bGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBtX2xheWVyWCAtPSBsYXllci0+eFBvcygp
OwotICAgICAgICAgICAgbV9sYXllclkgLT0gbGF5ZXItPnlQb3MoKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotaW50IE1vdXNlUmVsYXRlZEV2ZW50OjpwYWdlWCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fcGFnZVg7Ci19Ci0KLWludCBNb3VzZVJlbGF0ZWRFdmVudDo6cGFnZVkoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3BhZ2VZOwotfQotCi1pbnQgTW91c2VSZWxhdGVkRXZlbnQ6OngoKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb3JyZWN0LgotICAgIC8vIFNlZSBN
aWNyb3NvZnQgZG9jdW1lbnRhdGlvbiBhbmQgPGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvZG9t
L3czY19ldmVudHMuaHRtbD4uCi0gICAgcmV0dXJuIG1fY2xpZW50WDsKLX0KLQotaW50IE1vdXNl
UmVsYXRlZEV2ZW50Ojp5KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29y
cmVjdC4KLSAgICAvLyBTZWUgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24gYW5kIDxodHRwOi8vd3d3
LnF1aXJrc21vZGUub3JnL2RvbS93M2NfZXZlbnRzLmh0bWw+LgotICAgIHJldHVybiBtX2NsaWVu
dFk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZl
bnQoKQotICAgIDogbV9idXR0b24oMCkKLXsKLX0KLQotTW91c2VFdmVudDo6TW91c2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRh
aWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJn
ZXRBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkKiBjbGlwYm9h
cmRBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRlZCkK
LSAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxh
YmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxBcmcsCi0gICAgICAgIHNjcmVlblhBcmcsIHNjcmVlbllB
cmcsIGNsaWVudFhBcmcsIGNsaWVudFlBcmcsCi0gICAgICAgIGN0cmxLZXlBcmcsIGFsdEtleUFy
Zywgc2hpZnRLZXlBcmcsIG1ldGFLZXlBcmcsIGlzU2ltdWxhdGVkKQotICAgICwgbV9idXR0b24o
YnV0dG9uQXJnKQotICAgICwgbV9yZWxhdGVkVGFyZ2V0KHJlbGF0ZWRUYXJnZXRBcmcpCi0gICAg
LCBtX2NsaXBib2FyZChjbGlwYm9hcmRBcmcpCi17Ci19Ci0KLU1vdXNlRXZlbnQ6On5Nb3VzZUV2
ZW50KCkKLXsKLX0KLQotdm9pZCBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFi
c3RyYWN0Vmlldyogdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3Jl
ZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRh
cmdldEFyZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbml0VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdB
cmcsIGRldGFpbEFyZyk7Ci0KLSAgICBtX3NjcmVlblggPSBzY3JlZW5YQXJnOwotICAgIG1fc2Ny
ZWVuWSA9IHNjcmVlbllBcmc7Ci0gICAgbV9jbGllbnRYID0gY2xpZW50WEFyZzsKLSAgICBtX2Ns
aWVudFkgPSBjbGllbnRZQXJnOwotICAgIG1fY3RybEtleSA9IGN0cmxLZXlBcmc7Ci0gICAgbV9h
bHRLZXkgPSBhbHRLZXlBcmc7Ci0gICAgbV9zaGlmdEtleSA9IHNoaWZ0S2V5QXJnOwotICAgIG1f
bWV0YUtleSA9IG1ldGFLZXlBcmc7Ci0gICAgbV9idXR0b24gPSBidXR0b25Bcmc7Ci0gICAgbV9y
ZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRhcmdldEFyZzsKLQotICAgIGluaXRDb29yZGluYXRlcygp
OwotfQotCi1ib29sIE1vdXNlRXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6aXNEcmFnRXZlbnQoKSBjb25zdAotewot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyAmdCA9IHR5cGUoKTsKLSAgICByZXR1cm4gdCA9PSBkcmFn
ZW50ZXJFdmVudCB8fCB0ID09IGRyYWdvdmVyRXZlbnQgfHwgdCA9PSBkcmFnbGVhdmVFdmVudAot
ICAgICAgICB8fCB0ID09IGRyb3BFdmVudAotICAgICAgICB8fCB0ID09IGRyYWdzdGFydEV2ZW50
IHx8IHQgPT0gZHJhZ0V2ZW50IHx8IHQgPT0gZHJhZ2VuZEV2ZW50OwotfQotCi1pbnQgTW91c2VF
dmVudDo6d2hpY2goKSBjb25zdAotewotICAgIC8vIEZvciBLSFRNTCwgdGhlIHJldHVybiB2YWx1
ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0dG9ucyBhcmUgMCwgMSwgMiwg
cmVzcGVjdGl2ZWx5LgotICAgIC8vIEZvciB0aGUgTmV0c2NhcGUgIndoaWNoIiBwcm9wZXJ0eSwg
dGhlIHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0dG9u
cyBhcmUgMSwgMiwgMywgcmVzcGVjdGl2ZWx5LiAKLSAgICAvLyBTbyB3ZSBtdXN0IGFkZCAxLgot
ICAgIHJldHVybiBtX2J1dHRvbiArIDE7Ci19Ci0KLU5vZGUqIE1vdXNlRXZlbnQ6OnRvRWxlbWVu
dCgpIGNvbnN0Ci17Ci0gICAgLy8gTVNJRSBleHRlbnNpb24gLSAidGhlIG9iamVjdCB0b3dhcmQg
d2hpY2ggdGhlIHVzZXIgaXMgbW92aW5nIHRoZSBtb3VzZSBwb2ludGVyIgotICAgIHJldHVybiB0
eXBlKCkgPT0gbW91c2VvdXRFdmVudCA/IHJlbGF0ZWRUYXJnZXQoKSA6IHRhcmdldCgpOwotfQot
Ci1Ob2RlKiBNb3VzZUV2ZW50Ojpmcm9tRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgLy8gTVNJRSBl
eHRlbnNpb24gLSAib2JqZWN0IGZyb20gd2hpY2ggYWN0aXZhdGlvbiBvciB0aGUgbW91c2UgcG9p
bnRlciBpcyBleGl0aW5nIGR1cmluZyB0aGUgZXZlbnQiIChodWg/KQotICAgIHJldHVybiB0eXBl
KCkgPT0gbW91c2VvdXRFdmVudCA/IHRhcmdldCgpIDogcmVsYXRlZFRhcmdldCgpOwotfQotCi0v
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1LZXlib2FyZEV2ZW50OjpL
ZXlib2FyZEV2ZW50KCkKLSAgOiBtX2tleUV2ZW50KDApCi0gICwgbV9rZXlMb2NhdGlvbihET01f
S0VZX0xPQ0FUSU9OX1NUQU5EQVJEKQotICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCi17Ci19Ci0K
LUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50
JiBrZXksIEFic3RyYWN0VmlldyAqdmlldykKLSAgOiBVSUV2ZW50V2l0aEtleVN0YXRlKGtleS5p
c0tleVVwKCkgPyBrZXl1cEV2ZW50IDoga2V5LmlzQXV0b1JlcGVhdCgpID8ga2V5cHJlc3NFdmVu
dCA6IGtleWRvd25FdmVudCwKLSAgICB0cnVlLCB0cnVlLCB2aWV3LCAwLCBrZXkuY3RybEtleSgp
LCBrZXkuYWx0S2V5KCksIGtleS5zaGlmdEtleSgpLCBrZXkubWV0YUtleSgpKQotICAsIG1fa2V5
RXZlbnQobmV3IFBsYXRmb3JtS2V5Ym9hcmRFdmVudChrZXkpKQotICAsIG1fa2V5SWRlbnRpZmll
cihTdHJpbmcoa2V5LmtleUlkZW50aWZpZXIoKSkuaW1wbCgpKQotICAsIG1fa2V5TG9jYXRpb24o
a2V5LmlzS2V5cGFkKCkgPyBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCA6IERPTV9LRVlfTE9DQVRJ
T05fU1RBTkRBUkQpCi0gICwgbV9hbHRHcmFwaEtleShmYWxzZSkKLXsKLX0KLQotS2V5Ym9hcmRF
dmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2
aWV3QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcgJmtleUlkZW50aWZpZXJBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0R3JhcGhLZXlBcmcpCi0gIDogVUlF
dmVudFdpdGhLZXlTdGF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywg
dmlld0FyZywgMCwgY3RybEtleUFyZywgYWx0S2V5QXJnLCBzaGlmdEtleUFyZywgbWV0YUtleUFy
ZykKLSAgLCBtX2tleUV2ZW50KDApCi0gICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZpZXJB
cmcuaW1wbCgpKQotICAsIG1fa2V5TG9jYXRpb24oa2V5TG9jYXRpb25BcmcpCi0gICwgbV9hbHRH
cmFwaEtleShhbHRHcmFwaEtleUFyZykKLXsKLX0KLQotS2V5Ym9hcmRFdmVudDo6fktleWJvYXJk
RXZlbnQoKQotewotICAgIGRlbGV0ZSBtX2tleUV2ZW50OwotfQotCi12b2lkIEtleWJvYXJkRXZl
bnQ6OmluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJh
Y3RWaWV3ICp2aWV3QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAm
a2V5SWRlbnRpZmllckFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlM
b2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IG1ldGFLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFy
ZykKLXsKLSAgICBpZiAoZGlzcGF0Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0
VUlFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHZpZXdBcmcsIDAp
OwotCi0gICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckFyZy5pbXBsKCk7Ci0gICAg
bV9rZXlMb2NhdGlvbiA9IGtleUxvY2F0aW9uQXJnOwotICAgIG1fY3RybEtleSA9IGN0cmxLZXlB
cmc7Ci0gICAgbV9zaGlmdEtleSA9IHNoaWZ0S2V5QXJnOwotICAgIG1fYWx0S2V5ID0gYWx0S2V5
QXJnOwotICAgIG1fbWV0YUtleSA9IG1ldGFLZXlBcmc7Ci0gICAgbV9hbHRHcmFwaEtleSA9IGFs
dEdyYXBoS2V5QXJnOwotfQotCi1pbnQgS2V5Ym9hcmRFdmVudDo6a2V5Q29kZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2tleUV2ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAodHlwZSgp
ID09IGtleWRvd25FdmVudCB8fCB0eXBlKCkgPT0ga2V5dXBFdmVudCkKLSAgICAgICAgcmV0dXJu
IG1fa2V5RXZlbnQtPldpbmRvd3NLZXlDb2RlKCk7Ci0gICAgcmV0dXJuIGNoYXJDb2RlKCk7Ci19
Ci0KLWludCBLZXlib2FyZEV2ZW50OjpjaGFyQ29kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2tl
eUV2ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBTdHJpbmcgdGV4dCA9IG1fa2V5RXZlbnQt
PnRleHQoKTsKLSAgICBpZiAodGV4dC5sZW5ndGgoKSAhPSAxKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gdGV4dFswXTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50Ojppc0tleWJvYXJk
RXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgS2V5Ym9hcmRFdmVu
dDo6d2hpY2goKSBjb25zdAotewotICAgIC8vIE5ldHNjYXBlJ3MgIndoaWNoIiByZXR1cm5zIGEg
dmlydHVhbCBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGFuZCBhIGNoYXJhY3RlciBj
b2RlIGZvciBrZXlwcmVzcy4KLSAgICAvLyBUaGF0J3MgZXhhY3RseSB3aGF0IElFJ3MgImtleUNv
ZGUiIHJldHVybnMuIFNvIHRoZXkgYXJlIHRoZSBzYW1lIGZvciBrZXlib2FyZCBldmVudHMuCi0g
ICAgcmV0dXJuIGtleUNvZGUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTXV0
YXRpb25FdmVudDo6TXV0YXRpb25FdmVudCgpCi0gICAgOiBtX2F0dHJDaGFuZ2UoMCkKLXsKLX0K
LQotTXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50
VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFi
bGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRl
ZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2VBcmcpCi0gICAgOiBFdmVu
dChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZykKLSAgICAsIG1fcmVsYXRl
ZE5vZGUocmVsYXRlZE5vZGVBcmcpCi0gICAgLCBtX3ByZXZWYWx1ZShwcmV2VmFsdWVBcmcuaW1w
bCgpKQotICAgICwgbV9uZXdWYWx1ZShuZXdWYWx1ZUFyZy5pbXBsKCkpCi0gICAgLCBtX2F0dHJO
YW1lKGF0dHJOYW1lQXJnLmltcGwoKSkKLSAgICAsIG1fYXR0ckNoYW5nZShhdHRyQ2hhbmdlQXJn
KQotewotfQotCi12b2lkIE11dGF0aW9uRXZlbnQ6OmluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3
VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZykKLXsKLSAgICBpZiAoZGlzcGF0
Y2hlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbml0RXZlbnQodHlwZUFyZywgY2FuQnVi
YmxlQXJnLCBjYW5jZWxhYmxlQXJnKTsKLQotICAgIG1fcmVsYXRlZE5vZGUgPSByZWxhdGVkTm9k
ZUFyZzsKLSAgICBtX3ByZXZWYWx1ZSA9IHByZXZWYWx1ZUFyZy5pbXBsKCk7Ci0gICAgbV9uZXdW
YWx1ZSA9IG5ld1ZhbHVlQXJnLmltcGwoKTsKLSAgICBtX2F0dHJOYW1lID0gYXR0ck5hbWVBcmcu
aW1wbCgpOwotICAgIG1fYXR0ckNoYW5nZSA9IGF0dHJDaGFuZ2VBcmc7Ci19Ci0KLWJvb2wgTXV0
YXRpb25FdmVudDo6aXNNdXRhdGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ2xpcGJvYXJkRXZlbnQ6OkNsaXBib2Fy
ZEV2ZW50KCkKLXsKLX0KLQotQ2xpcGJvYXJkRXZlbnQ6OkNsaXBib2FyZEV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxl
QXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZykKLSAgICA6IEV2ZW50KGV2ZW50VHlwZSwgY2Fu
QnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKSwgbV9jbGlwYm9hcmQoY2xpcGJvYXJkQXJnKQotewot
fQotCi1ib29sIENsaXBib2FyZEV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlZWxFdmVu
dDo6V2hlZWxFdmVudCgpIDogbV9ob3Jpem9udGFsKGZhbHNlKSwgbV93aGVlbERlbHRhKDApCi17
Ci19Ci0KLVdoZWVsRXZlbnQ6OldoZWVsRXZlbnQoYm9vbCBoLCBpbnQgZCwgQWJzdHJhY3RWaWV3
ICp2LAotICAgIGludCBzeCwgaW50IHN5LCBpbnQgY3gsIGludCBjeSwgYm9vbCBjdHJsLCBib29s
IGFsdCwgYm9vbCBzaGlmdCwgYm9vbCBtZXRhKQotICAgIDogTW91c2VSZWxhdGVkRXZlbnQoaCA/
IGtodG1sSG9yaXpvbnRhbG1vdXNld2hlZWxFdmVudCA6IG1vdXNld2hlZWxFdmVudCwKLSAgICAg
ICAgdHJ1ZSwgdHJ1ZSwgdiwgMCwgc3gsIHN5LCBjeCwgY3ksIGN0cmwsIGFsdCwgc2hpZnQsIG1l
dGEpCi0gICAgLCBtX2hvcml6b250YWwoaCksIG1fd2hlZWxEZWx0YShkKQotewotfQotCi1ib29s
IFdoZWVsRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOjpS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQotICAgIDog
bV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKLSAgICAs
IG1fdXNlQ2FwdHVyZSh1c2VDYXB0dXJlKQotICAgICwgbV9yZW1vdmVkKGZhbHNlKQotewotfQot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgJmEsIGNvbnN0
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyICZiKQotewotICAgIHJldHVybiBhLmV2ZW50VHlwZSgp
ID09IGIuZXZlbnRUeXBlKCkgJiYgYS5saXN0ZW5lcigpID09IGIubGlzdGVuZXIoKSAmJiBhLnVz
ZUNhcHR1cmUoKSA9PSBiLnVzZUNhcHR1cmUoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotQ2xpcGJvYXJkOjp+Q2xpcGJvYXJkKCkKLXsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotQmVmb3JlVW5sb2FkRXZlbnQ6OkJlZm9yZVVubG9hZEV2ZW50KCkKLSAgICA6IEV2
ZW50KGJlZm9yZXVubG9hZEV2ZW50LCBmYWxzZSwgdHJ1ZSkKLXsKLX0KLQotYm9vbCBCZWZvcmVV
bmxvYWRFdmVudDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEJlZm9yZVVubG9hZEV2ZW50OjpzdG9yZVJlc3VsdChjb25zdCBTdHJp
bmcmIHMpCi17Ci0gICAgbV9yZXN1bHQgPSBzLmltcGwoKTsKLX0KLQotfQpJbmRleDogV2ViQ29y
ZS9kb20vZG9tMl9ldmVudHNpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vZG9tMl9l
dmVudHNpbXBsLmgJKHJldmlzaW9uIDE0OTA5KQorKysgV2ViQ29yZS9kb20vZG9tMl9ldmVudHNp
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDc5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDEgVG9iaWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBET01fRVZFTlRTSU1QTF9ICi0jZGVmaW5lIERPTV9FVkVOVFNJTVBMX0gKLQotI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUg
Ik5vZGUuaCIKLQotY2xhc3MgRGVwcmVjYXRlZFN0cmluZ0xpc3Q7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci1jbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBFdmVu
dExpc3RlbmVyOwotY2xhc3MgRXZlbnRUYXJnZXROb2RlOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJ
bnRQb2ludDsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKLQotdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgRE9NVGltZVN0YW1wOwotdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3
OwotCi1jb25zdCBpbnQgRXZlbnRFeGNlcHRpb25PZmZzZXQgPSAxMDA7Ci1jb25zdCBpbnQgRXZl
bnRFeGNlcHRpb25NYXggPSAxOTk7Ci1lbnVtIEV2ZW50RXhjZXB0aW9uQ29kZSB7IFVOU1BFQ0lG
SUVEX0VWRU5UX1RZUEVfRVJSID0gRXZlbnRFeGNlcHRpb25PZmZzZXQgfTsKLQotY2xhc3MgRXZl
bnQgOiBwdWJsaWMgU2hhcmVkPEV2ZW50PgotewotcHVibGljOgotICAgIGVudW0gUGhhc2VUeXBl
IHsgCi0gICAgICAgIENBUFRVUklOR19QSEFTRSA9IDEsIAotICAgICAgICBBVF9UQVJHRVQgPSAy
LCAKLSAgICAgICAgQlVCQkxJTkdfUEhBU0UgPSAzIAotICAgIH07Ci0KLSAgICAvLyBSZXZlcnNl
LWVuZ2luZWVyZWQgZnJvbSBOZXRzY2FwZQotICAgIGVudW0gRXZlbnRUeXBlIHsKLSAgICAgICAg
TU9VU0VET1dOICAgICAgICAgICA9IDEsCi0gICAgICAgIE1PVVNFVVAgICAgICAgICAgICAgPSAy
LAotICAgICAgICBNT1VTRU9WRVIgICAgICAgICAgID0gNCwKLSAgICAgICAgTU9VU0VPVVQgICAg
ICAgICAgICA9IDgsCi0gICAgICAgIE1PVVNFTU9WRSAgICAgICAgICAgPSAxNiwKLSAgICAgICAg
TU9VU0VEUkFHICAgICAgICAgICA9IDMyLAotICAgICAgICBDTElDSyAgICAgICAgICAgICAgID0g
NjQsCi0gICAgICAgIERCTENMSUNLICAgICAgICAgICAgPSAxMjgsCi0gICAgICAgIEtFWURPV04g
ICAgICAgICAgICAgPSAyNTYsCi0gICAgICAgIEtFWVVQICAgICAgICAgICAgICAgPSA1MTIsCi0g
ICAgICAgIEtFWVBSRVNTICAgICAgICAgICAgPSAxMDI0LAotICAgICAgICBEUkFHRFJPUCAgICAg
ICAgICAgID0gMjA0OCwKLSAgICAgICAgRk9DVVMgICAgICAgICAgICAgICA9IDQwOTYsCi0gICAg
ICAgIEJMVVIgICAgICAgICAgICAgICAgPSA4MTkyLAotICAgICAgICBTRUxFQ1QgICAgICAgICAg
ICAgID0gMTYzODQsCi0gICAgICAgIENIQU5HRSAgICAgICAgICAgICAgPSAzMjc2OAotICAgIH07
Ci0gICAgCi0gICAgRXZlbnQoKTsKLSAgICBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUs
IGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpOwotICAgIHZpcnR1YWwgfkV2
ZW50KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KLSAgICBOb2RlKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQo
KTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0KE5vZGUqKTsKLSAgICBOb2RlKiBjdXJyZW50VGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VGFyZ2V0OyB9Ci0gICAgdm9pZCBzZXRDdXJyZW50
VGFyZ2V0KE5vZGUqIGN1cnJlbnRUYXJnZXQpIHsgbV9jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRh
cmdldDsgfQotICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25zdCB7IHJldHVybiBt
X2V2ZW50UGhhc2U7IH0KLSAgICB2b2lkIHNldEV2ZW50UGhhc2UodW5zaWduZWQgc2hvcnQgZXZl
bnRQaGFzZSkgeyBtX2V2ZW50UGhhc2UgPSBldmVudFBoYXNlOyB9Ci0gICAgYm9vbCBidWJibGVz
KCkgY29uc3QgeyByZXR1cm4gbV9jYW5CdWJibGU7IH0KLSAgICBib29sIGNhbmNlbGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2NhbmNlbGFibGU7IH0KLSAgICBET01UaW1lU3RhbXAgdGltZVN0YW1w
KCkgeyByZXR1cm4gbV9jcmVhdGVUaW1lOyB9Ci0gICAgdm9pZCBzdG9wUHJvcGFnYXRpb24oKSB7
IG1fcHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgcHJldmVudERlZmF1bHQo
KSB7IGlmIChtX2NhbmNlbGFibGUpIG1fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH0KLSAgICB2
b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9vbCBjYW5C
dWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNVSUV2
ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNLZXlib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRHJhZ0V2ZW50KCkg
Y29uc3Q7IC8vIGEgc3Vic2V0IG9mIG1vdXNlIGV2ZW50cwotICAgIHZpcnR1YWwgYm9vbCBpc0Ns
aXBib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3Q7
Ci0KLSAgICBib29sIHByb3BhZ2F0aW9uU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGFn
YXRpb25TdG9wcGVkOyB9Ci0gICAgYm9vbCBkZWZhdWx0UHJldmVudGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kZWZhdWx0UHJldmVudGVkOyB9Ci0KLSAgICB2b2lkIHNldERlZmF1bHRIYW5kbGVkKCkg
eyBtX2RlZmF1bHRIYW5kbGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlZmF1bHRIYW5kbGVkOyB9Ci0KLSAgICB2b2lkIHNldENhbmNlbEJ1
YmJsZShib29sIGNhbmNlbCkgeyBtX2NhbmNlbEJ1YmJsZSA9IGNhbmNlbDsgfQotICAgIHZvaWQg
c2V0RGVmYXVsdFByZXZlbnRlZChib29sIGRlZmF1bHRQcmV2ZW50ZWQpIHsgbV9kZWZhdWx0UHJl
dmVudGVkID0gZGVmYXVsdFByZXZlbnRlZDsgfQotICAgIGJvb2wgZ2V0Q2FuY2VsQnViYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9jYW5jZWxCdWJibGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBzdG9y
ZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzdG9yZVJlc3VsdChj
b25zdCBTdHJpbmcmKTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFRh
cmdldCgpOwotICAgIGJvb2wgZGlzcGF0Y2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9
Ci0KLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fdHlwZTsKLSAgICBib29sIG1fY2FuQnVi
YmxlOwotICAgIGJvb2wgbV9jYW5jZWxhYmxlOwotCi0gICAgYm9vbCBtX3Byb3BhZ2F0aW9uU3Rv
cHBlZDsKLSAgICBib29sIG1fZGVmYXVsdFByZXZlbnRlZDsKLSAgICBib29sIG1fZGVmYXVsdEhh
bmRsZWQ7Ci0gICAgYm9vbCBtX2NhbmNlbEJ1YmJsZTsKLQotICAgIE5vZGUqIG1fY3VycmVudFRh
cmdldDsgLy8gcmVmID4gMCBtYWludGFpbmVkIGV4dGVybmFsbHkKLSAgICB1bnNpZ25lZCBzaG9y
dCBtX2V2ZW50UGhhc2U7Ci0gICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OwotICAgIERPTVRpbWVT
dGFtcCBtX2NyZWF0ZVRpbWU7Ci19OwotCi1jbGFzcyBVSUV2ZW50IDogcHVibGljIEV2ZW50Ci17
Ci1wdWJsaWM6Ci0gICAgVUlFdmVudCgpOwotICAgIFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
ICZ0eXBlLAotICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAg
ICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcgKnZp
ZXdBcmcsCi0gICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZyk7Ci0gICAgQWJzdHJhY3RWaWV3
ICp2aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3LmdldCgpOyB9Ci0gICAgaW50IGRldGFpbCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGV0YWlsOyB9Ci0gICAgdm9pZCBpbml0VUlFdmVudChjb25zdCBB
dG9taWNTdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJs
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAg
IGludCBkZXRhaWxBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgaW50IGtleUNvZGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjaGFyQ29k
ZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBpbnQgbGF5ZXJYKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBpbnQgbGF5ZXJZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBwYWdlWCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgaW50IHBhZ2VZKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCB3aGljaCgp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxBYnN0cmFjdFZpZXc+IG1fdmlldzsKLSAg
ICBpbnQgbV9kZXRhaWw7Ci19OwotCi1jbGFzcyBVSUV2ZW50V2l0aEtleVN0YXRlIDogcHVibGlj
IFVJRXZlbnQgewotcHVibGljOgotICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUoKSA6IG1fY3RybEtl
eShmYWxzZSksIG1fYWx0S2V5KGZhbHNlKSwgbV9zaGlmdEtleShmYWxzZSksIG1fbWV0YUtleShm
YWxzZSkgeyB9Ci0gICAgVUlFdmVudFdpdGhLZXlTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcgJnR5
cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3RyYWN0VmlldyAq
dmlld0FyZywKLSAgICAgICAgaW50IGRldGFpbEFyZywgYm9vbCBjdHJsS2V5QXJnLCBib29sIGFs
dEtleUFyZywgYm9vbCBzaGlmdEtleUFyZywgYm9vbCBtZXRhS2V5QXJnKQotICAgICAgICA6IFVJ
RXZlbnQodHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCB2aWV3QXJnLCBkZXRhaWxB
cmcpCi0gICAgICAgICwgbV9jdHJsS2V5KGN0cmxLZXlBcmcpLCBtX2FsdEtleShhbHRLZXlBcmcp
LCBtX3NoaWZ0S2V5KHNoaWZ0S2V5QXJnKSwgbV9tZXRhS2V5KG1ldGFLZXlBcmcpIHsgfQotCi0g
ICAgYm9vbCBjdHJsS2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdHJsS2V5OyB9Ci0gICAgYm9vbCBz
aGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAgICBib29sIGFsdEtleSgp
IGNvbnN0IHsgcmV0dXJuIG1fYWx0S2V5OyB9Ci0gICAgYm9vbCBtZXRhS2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXRhS2V5OyB9Ci0KLXByb3RlY3RlZDogLy8gZXhwb3NlIHRoZXNlIHNvIGluaXQg
ZnVuY3Rpb25zIGNhbiBzZXQgdGhlbQotICAgIGJvb2wgbV9jdHJsS2V5IDogMTsKLSAgICBib29s
IG1fYWx0S2V5IDogMTsKLSAgICBib29sIG1fc2hpZnRLZXkgOiAxOwotICAgIGJvb2wgbV9tZXRh
S2V5IDogMTsKLX07Ci0KLS8vIEludGVybmFsIG9ubHk6IEhlbHBlciBjbGFzcyBmb3Igd2hhdCdz
IGNvbW1vbiBiZXR3ZWVuIG1vdXNlIGFuZCB3aGVlbCBldmVudHMuCi1jbGFzcyBNb3VzZVJlbGF0
ZWRFdmVudCA6IHB1YmxpYyBVSUV2ZW50V2l0aEtleVN0YXRlIHsKLXB1YmxpYzoKLSAgICBNb3Vz
ZVJlbGF0ZWRFdmVudCgpOwotICAgIE1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Ny
ZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIGludCBzY3JlZW5YKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JlZW5YOyB9Ci0gICAgaW50IHNjcmVlblkoKSBjb25zdCB7IHJldHVybiBtX3NjcmVl
blk7IH0KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50WDsgfQotICAg
IGludCBjbGllbnRZKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRZOyB9Ci0gICAgaW50IGxheWVy
WCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJYOyB9Ci0gICAgaW50IGxheWVyWSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5ZXJZOyB9Ci0gICAgaW50IG9mZnNldFgoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldFg7IH0KLSAgICBpbnQgb2Zmc2V0WSgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0WTsgfQot
ICAgIGJvb2wgaXNTaW11bGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2ltdWxhdGVkOyB9Ci0g
ICAgdmlydHVhbCBpbnQgcGFnZVgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWdlWSgpIGNv
bnN0OwotICAgIGludCB4KCkgY29uc3Q7Ci0gICAgaW50IHkoKSBjb25zdDsKLXByb3RlY3RlZDog
Ly8gZXhwb3NlIHRoZXNlIHNvIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50IGNhbiBzZXQgdGhl
bQotICAgIGludCBtX3NjcmVlblg7Ci0gICAgaW50IG1fc2NyZWVuWTsKLSAgICBpbnQgbV9jbGll
bnRYOwotICAgIGludCBtX2NsaWVudFk7Ci0gICAgdm9pZCBpbml0Q29vcmRpbmF0ZXMoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsKLXByaXZhdGU6Ci0gICAgaW50IG1fcGFn
ZVg7Ci0gICAgaW50IG1fcGFnZVk7Ci0gICAgaW50IG1fbGF5ZXJYOwotICAgIGludCBtX2xheWVy
WTsKLSAgICBpbnQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFk7Ci0gICAgYm9vbCBtX2lz
U2ltdWxhdGVkOwotfTsKLQotLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotY2xhc3MgTW91
c2VFdmVudCA6IHB1YmxpYyBNb3VzZVJlbGF0ZWRFdmVudCB7Ci1wdWJsaWM6Ci0gICAgTW91c2VF
dmVudCgpOwotICAgIE1vdXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLAotICAgICAg
ICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdBcmcs
Ci0gICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZywKLSAgICAgICAgICAgICAgICAgICBp
bnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWUFyZywKLSAgICAg
ICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAgICAgICAgICAgICAgICBpbnQgY2xp
ZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAg
ICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtl
eUFyZywKLSAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAgICAgIEV2ZW50
VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldEFyZywKLSAgICAgICAgICAgICAgICAgICBDbGlwYm9h
cmQqIGNsaXBib2FyZEFyZyA9IDAsCi0gICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpbXVsYXRl
ZCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0gICAgLy8gV2luSUUgdXNl
cyAxLDQsMiBmb3IgbGVmdC9taWRkbGUvcmlnaHQgYnV0IG5vdCBmb3IgY2xpY2sgKGp1c3QgZm9y
IG1vdXNlZG93bi91cCwgbWF5YmUgb3RoZXJzKSwgYnV0IHdlIHdpbGwgbWF0Y2ggdGhlIHN0YW5k
YXJkIERPTS4KLSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdCB7IHJldHVybiBtX2J1
dHRvbjsgfQotICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsgfQotICAgIENsaXBib2FyZCogY2xpcGJvYXJkKCkg
Y29uc3QgeyByZXR1cm4gbV9jbGlwYm9hcmQuZ2V0KCk7IH0KLSAgICBOb2RlKiB0b0VsZW1lbnQo
KSBjb25zdDsKLSAgICBOb2RlKiBmcm9tRWxlbWVudCgpIGNvbnN0OwotICAgIHZvaWQgaW5pdE1v
dXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGNh
bmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFZpZXcqIHZpZXdB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c2NyZWVuWUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRYQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFlBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsdEtl
eUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBidXR0b25BcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBFdmVu
dFRhcmdldE5vZGUqIHJlbGF0ZWRUYXJnZXRBcmcpOwotICAgIHZpcnR1YWwgYm9vbCBpc01vdXNl
RXZlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBzaG9y
dCBtX2J1dHRvbjsKLSAgICBSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7
Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0KLS8vIEludHJvZHVj
ZWQgaW4gRE9NIExldmVsIDMKLWNsYXNzIEtleWJvYXJkRXZlbnQgOiBwdWJsaWMgVUlFdmVudFdp
dGhLZXlTdGF0ZSB7Ci1wdWJsaWM6Ci0gICAgZW51bSBLZXlMb2NhdGlvbkNvZGUgewotICAgICAg
ICBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEICAgICAgPSAweDAwLAotICAgICAgICBET01fS0VZ
X0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAxLAotICAgICAgICBET01fS0VZX0xPQ0FUSU9O
X1JJR0hUICAgICAgICAgPSAweDAyLAotICAgICAgICBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCAg
ICAgICAgPSAweDAzLAotICAgIH07Ci0gICAgS2V5Ym9hcmRFdmVudCgpOwotICAgIEtleWJvYXJk
RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RWaWV3Kik7Ci0gICAg
S2V5Ym9hcmRFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUsCi0gICAgICAgICAgICAgICAg
Ym9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAot
ICAgICAgICAgICAgICAgIEFic3RyYWN0VmlldyAqdmlld0FyZywKLSAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQg
a2V5TG9jYXRpb25BcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAg
ICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgIGJvb2wgc2hpZnRLZXlB
cmcsCi0gICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgIGJv
b2wgYWx0R3JhcGhLZXlBcmcpOwotICAgIHZpcnR1YWwgfktleWJvYXJkRXZlbnQoKTsKLSAgICAK
LSAgICB2b2lkIGluaXRLZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmdHlwZUFyZywK
LSAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICBib29s
IGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RWaWV3ICp2aWV3QXJnLAot
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAma2V5SWRlbnRpZmllckFyZywKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywKLSAgICAgICAgICAgICAgICBib29sIGN0
cmxLZXlBcmcsCi0gICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAg
ICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsCi0g
ICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFyZyk7Ci0gICAgCi0gICAgU3RyaW5nIGtl
eUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2tleUlkZW50aWZpZXIuZ2V0KCk7IH0KLSAg
ICB1bnNpZ25lZCBrZXlMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fa2V5TG9jYXRpb247IH0K
LSAgICAKLSAgICBib29sIGFsdEdyYXBoS2V5KCkgY29uc3QgeyByZXR1cm4gbV9hbHRHcmFwaEtl
eTsgfQotICAgIAotICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQoKSBj
b25zdCB7IHJldHVybiBtX2tleUV2ZW50OyB9Ci0KLSAgICBpbnQga2V5Q29kZSgpIGNvbnN0OyAv
LyBrZXkgY29kZSBmb3Iga2V5ZG93biBhbmQga2V5dXAsIGNoYXJhY3RlciBmb3Igb3RoZXIgZXZl
bnRzCi0gICAgaW50IGNoYXJDb2RlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlz
S2V5Ym9hcmRFdmVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHdoaWNoKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBtX2tleUV2ZW50OwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBtX2tleUlkZW50aWZpZXI7Ci0gICAgdW5zaWduZWQgbV9rZXlMb2Nh
dGlvbjsKLSAgICBib29sIG1fYWx0R3JhcGhLZXkgOiAxOwotfTsKLQotY2xhc3MgTXV0YXRpb25F
dmVudCA6IHB1YmxpYyBFdmVudCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBhdHRyQ2hhbmdlVHlwZSB7
IE1PRElGSUNBVElPTiA9IDEsIEFERElUSU9OID0gMiwgUkVNT1ZBTCA9IDMgfTsKLSAgICBNdXRh
dGlvbkV2ZW50KCk7Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcgJnR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIE5vZGUg
KnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmcHJl
dlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZhdHRyTmFtZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKTsKLSAgICBO
b2RlICpyZWxhdGVkTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRlZE5vZGUuZ2V0KCk7IH0K
LSAgICBTdHJpbmcgcHJldlZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmV2VmFsdWUuZ2V0KCk7
IH0KLSAgICBTdHJpbmcgbmV3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25ld1ZhbHVlLmdldCgp
OyB9Ci0gICAgU3RyaW5nIGF0dHJOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyTmFtZS5nZXQo
KTsgfQotICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJDaGFuZ2U7IH0KLSAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSAqcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmbmV3VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci0gICAgdmlydHVhbCBib29s
IGlzTXV0YXRpb25FdmVudCgpIGNvbnN0OwotcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9y
ZWxhdGVkTm9kZTsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9wcmV2VmFsdWU7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IG1fbmV3VmFsdWU7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fYXR0
ck5hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9hdHRyQ2hhbmdlOwotfTsKLQotY2xhc3MgQ2xp
cGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGljOgotICAgIENsaXBib2FyZEV2ZW50
KCk7Ci0gICAgQ2xpcGJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZ0eXBlLCBib29sIGNh
bkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQgKmNsaXBib2FyZEFyZyk7
Ci0KLSAgICBDbGlwYm9hcmQgKmNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcGJvYXJk
LmdldCgpOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdDsKLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9jbGlwYm9hcmQ7Ci19OwotCi0vLyBleHRl
bnNpb246IG1vdXNlIHdoZWVsIGV2ZW50Ci1jbGFzcyBXaGVlbEV2ZW50IDogcHVibGljIE1vdXNl
UmVsYXRlZEV2ZW50Ci17Ci1wdWJsaWM6Ci0gICAgV2hlZWxFdmVudCgpOwotICAgIFdoZWVsRXZl
bnQoYm9vbCBob3Jpem9udGFsLCBpbnQgd2hlZWxEZWx0YSwgQWJzdHJhY3RWaWV3ICosCi0gICAg
ICAgICAgICAgICAgICAgaW50IHNjcmVlblhBcmcsIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAg
ICAgICAgICAgIGludCBjbGllbnRYQXJnLCBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXlBcmcsIGJvb2wgYWx0S2V5QXJnLCBib29sIHNoaWZ0S2V5QXJnLCBi
b29sIG1ldGFLZXlBcmcpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4g
bV9ob3Jpem9udGFsOyB9Ci0gICAgaW50IHdoZWVsRGVsdGEoKSBjb25zdCB7IHJldHVybiBtX3do
ZWVsRGVsdGE7IH0KLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkg
Y29uc3Q7Ci0KLSAgICBib29sIG1faG9yaXpvbnRhbDsKLSAgICBpbnQgbV93aGVlbERlbHRhOwot
fTsKLQotY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgU2hhcmVkPFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyPiB7Ci1wdWJsaWM6Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4sIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9Ci0gICAgRXZlbnRMaXN0ZW5lciAqbGlz
dGVuZXIoKSBjb25zdCB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0gICAgYm9vbCB1c2VD
YXB0dXJlKCkgY29uc3QgeyByZXR1cm4gbV91c2VDYXB0dXJlOyB9Ci0gICAgYm9vbCByZW1vdmVk
KCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdmVkOyB9Ci0gICAgdm9pZCBzZXRSZW1vdmVkKGJvb2wg
cmVtb3ZlZCkgeyBtX3JlbW92ZWQgPSByZW1vdmVkOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIEF0
b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9saXN0
ZW5lcjsKLSAgICBib29sIG1fdXNlQ2FwdHVyZTsKLSAgICBib29sIG1fcmVtb3ZlZDsKLX07Ci0K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJik7Ci1pbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiBhLCBjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYg
YikgeyByZXR1cm4gIShhID09IGIpOyB9Ci0KLS8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUn
cyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFzdGUKLWNsYXNzIENsaXBib2Fy
ZCA6IHB1YmxpYyBTaGFyZWQ8Q2xpcGJvYXJkPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q2xp
cGJvYXJkKCk7Ci0KLSAgICAvLyBJcyB0aGlzIG9wZXJhdGlvbiBhIGRyYWctZHJvcCBvciBhIGNv
cHktcGFzdGU/Ci0gICAgdmlydHVhbCBib29sIGlzRm9yRHJhZ2dpbmcoKSBjb25zdCA9IDA7Ci0K
LSAgICB2aXJ0dWFsIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyAmcykgPSAwOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGVmZmVjdEFsbG93ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEVmZmVj
dEFsbG93ZWQoY29uc3QgU3RyaW5nICZzKSA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyRGF0YShjb25zdCBTdHJpbmcgJnR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJB
bGxEYXRhKCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nICZ0
eXBlLCBib29sICZzdWNjZXNzKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNldERhdGEo
Y29uc3QgU3RyaW5nICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpID0gMDsKLSAgICAKLSAgICAv
LyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmlu
Z0xpc3QgdHlwZXMoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQ
b2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBDYWNoZWRJbWFnZSog
ZHJhZ0ltYWdlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoQ2Fj
aGVkSW1hZ2UqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCAmKSA9IDA7Ci0gICAgdmlydHVhbCBO
b2RlICpkcmFnSW1hZ2VFbGVtZW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1h
Z2VFbGVtZW50KE5vZGUgKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgJikgPSAwOwotfTsKLQot
Y2xhc3MgQmVmb3JlVW5sb2FkRXZlbnQgOiBwdWJsaWMgRXZlbnQKLXsKLXB1YmxpYzoKLSAgICBC
ZWZvcmVVbmxvYWRFdmVudCgpOwotCi0gICAgdmlydHVhbCBib29sIHN0b3Jlc1Jlc3VsdEFzU3Ry
aW5nKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYp
OwotCi0gICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0LmdldCgpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fcmVzdWx0OwotfTsKLQotfSAv
LyBuYW1lc3BhY2UKLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJKHJldmlz
aW9uIDE0OTA5KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0OTA5KQorKysg
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgImRvbTJf
ZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJs
ZV91bml0cy5oIgogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE0OTA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTUgKzI0LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SFRNTEFuY2hvckVsZW1lbnQuaCIKIAotI2luY2x1ZGUgImNzc2hlbHBlci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCisjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJN
dXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRl
ckltYWdlLmgiCisjaW5jbHVkZSAiVUlFdmVudC5oIgorI2luY2x1ZGUgImNzc2hlbHBlci5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cAkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTMgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVt
ZW50LmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAiRm9ybURhdGFM
aXN0LmgiCi0KLSNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKIAorI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIlJlbmRlckJ1dHRvbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNyArNTUsMTYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKIAorI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgot
I2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKKyNp
bmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAKICNpbmNsdWRlICJEb2NUeXBlU3RyaW5ncy5j
cHAiCiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMCArMjUsMTkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRl
ICJtYXJrdXAuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJtYXJrdXAu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1l
U2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTQgKzIyLDE2IEBACiAgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lU2V0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKLSNpbmNsdWRlICJkb20yX2V2
ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJh
bWVTZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIzICsyOSwyNiBAQAogCiAjaW5jbHVkZSAiQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisj
aW5jbHVkZSAiRGVwcmVjYXRlZFNsaWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9ybURh
dGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MSW1hZ2VMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKICNp
bmNsdWRlICJSZW5kZXJGaWxlQnV0dG9uLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2VCdXR0b24u
aCIKICNpbmNsdWRlICJSZW5kZXJMaW5lRWRpdC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0RmllbGQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgot
I2luY2x1ZGUgIkRlcHJlY2F0ZWRTbGlkZXIuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91YnJr
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE0OTA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTcgKzI3LDE4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKIAorI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1
ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgi
CisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlclNlbGVjdC5oIgot
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9y
LmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTcgKzI1LDE4IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgIkhU
TUxUZXh0QXJlYUVsZW1lbnQuaCIKKwogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRGaWVsZC5oIgotI2luY2x1
ZGUgInJlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJyZW5kZXJf
c3R5bGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL2tzdmcyL2V2
ZW50cy9TVkdab29tRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL2V2ZW50cy9T
Vkdab29tRXZlbnQuaAkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL2tzdmcyL2V2ZW50cy9T
Vkdab29tRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogI2RlZmluZSBT
Vkdab29tRXZlbnRfSAogI2lmIFNWR19TVVBQT1JUCiAKLSNpbmNsdWRlICJkb20yX2V2ZW50c2lt
cGwuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJVSUV2ZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2
aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDEzICsyNiwxNSBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxw
ZXIuaCIKLSNpbmNsdWRlICJkb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXNDb250YWluZXIuaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAj
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgpJbmRleDogV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShy
ZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudFR5cGUuaCIKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCkBAIC01MCwxNSArNTEsMTUgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEdlbmVyaWNGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgotI2luY2x1ZGUgIk1lZGlhRmVhdHVyZU5hbWVzLmgiCiAjaW5jbHVkZSAiSFRN
TE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZURvY3VtZW50LmgiCisjaW5jbHVkZSAi
TWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1
bHRzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUGx1Z0luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUGx1
Z2luRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJS
ZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC02OCw3ICs2OSw2IEBACiAjaW5jbHVkZSAiVHJhbnNmZXJKb2IuaCIKICNpbmNs
dWRlICJUeXBpbmdDb21tYW5kLmgiCiAjaW5jbHVkZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5j
bHVkZSAia2pzX3dpbmRvdy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgpJbmRleDogV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHJldmlzaW9uIDE0OTA5KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDI2ICsyNSwyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdENhY2hlLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkltYWdlLmgi
Ci0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdENhY2hlLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJjc3NzdHls
ZXNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyQXJl
bmEuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCShyZXZpc2lvbiAx
NDkwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5k
ZWYgS2V5RXZlbnRfSAotI2RlZmluZSBLZXlFdmVudF9ICisjaWZuZGVmIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudF9oCisjZGVmaW5lIFBsYXRmb3JtS2V5Ym9hcmRFdmVudF9oCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogCkBAIC04Nyw2ICs4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBtX21ldGFLZXk7CiAgICAgfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBQbGF0Zm9ybUtleWJvYXJkRXZlbnRfaApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCShyZXZpc2lvbiAxNDkwOSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgTW91c2VFdmVudF9o
Ci0jZGVmaW5lIE1vdXNlRXZlbnRfaAorI2lmbmRlZiBQbGF0Zm9ybU1vdXNlRXZlbnRfaAorI2Rl
ZmluZSBQbGF0Zm9ybU1vdXNlRXZlbnRfaAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKIApAQCAt
NTUsMTEgKzU1LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IFBsYXRmb3JtTW91c2VFdmVudCgpOyAvLyAiY3VycmVudCBldmVudCIKICAgICAgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50KGNvbnN0IEludFBvaW50JiBwb3MsIGNvbnN0IEludFBvaW50JiBnbG9iYWxQ
b3MsIE1vdXNlQnV0dG9uIGJ1dHRvbiwKLSAgICAgICAgICAgICAgICBpbnQgY2xpY2tDb3VudCwg
Ym9vbCBzaGlmdCwgYm9vbCBjdHJsLCBib29sIGFsdCwgYm9vbCBtZXRhKQorCQkJCQkJICAgaW50
IGNsaWNrQ291bnQsIGJvb2wgc2hpZnQsIGJvb2wgY3RybCwgYm9vbCBhbHQsIGJvb2wgbWV0YSkK
ICAgICAgICAgICAgIDogbV9wb3NpdGlvbihwb3MpLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBv
cyksIG1fYnV0dG9uKGJ1dHRvbikKICAgICAgICAgICAgICwgbV9jbGlja0NvdW50KGNsaWNrQ291
bnQpCi0gICAgICAgICAgICAsIG1fc2hpZnRLZXkoc2hpZnQpLCBtX2N0cmxLZXkoY3RybCksIG1f
YWx0S2V5KGFsdCksIG1fbWV0YUtleShtZXRhKQotICAgICAgICAgICAgeyB9CisgICAgICAgICAg
ICAsIG1fc2hpZnRLZXkoc2hpZnQpCisJCQksIG1fY3RybEtleShjdHJsKQorCQkJLCBtX2FsdEtl
eShhbHQpCisJCQksIG1fbWV0YUtleShtZXRhKQorCQl7CisJCX0KIAogICAgICAgICBjb25zdCBJ
bnRQb2ludCYgcG9zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgICAgICBpbnQg
eCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24ueCgpOyB9CkBAIC05NCw2ICs5OCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX21ldGFLZXk7CiAgICAgfTsKIAotfQor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBQbGF0Zm9ybU1vdXNl
RXZlbnRfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCShyZXZpc2lv
biAxNDkwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5k
ZWYgV2hlZWxFdmVudF9oCi0jZGVmaW5lIFdoZWVsRXZlbnRfaAorI2lmbmRlZiBQbGF0Zm9ybVdo
ZWVsRXZlbnRfaAorI2RlZmluZSBQbGF0Zm9ybVdoZWVsRXZlbnRfaAogCiAjaW5jbHVkZSAiSW50
UG9pbnQuaCIKIApAQCAtODIsNiArODIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgbV9tZXRhS2V5OwogICAgIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmCisjZW5kaWYgLy8gUGxhdGZvcm1XaGVlbEV2ZW50X2gKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL0NsaXBib2FyZE1hYy5oCShyZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL0NsaXBib2FyZE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiZG9tMl9l
dmVudHNpbXBsLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiQ2FjaGVkT2Jq
ZWN0Q2xpZW50LmgiCiAKICNpZmRlZiBfX09CSkNfXwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZyYW1lU2V0LmNwcAkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMiBAQAogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVTZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiS1dRVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQu
aCIKKyNpbmNsdWRlICJSZW5kZXJGcmFtZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiAxNDkwOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDQsMjEgKzQ0LDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiSFRNTE1hcnF1ZWVFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogCiAjaWYg
U1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
MTQ5MDkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiS1dRV01hdHJpeC5oIgogI2luY2x1ZGUg
IlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEuaCIKLSNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJ
bmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtNDksMTEgKzQ4LDEwIEBA
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiY3Nzc3R5bGVzZWxlY3Rvci5oIgotI2luY2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgogI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KIAotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RmllbGQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGaWVsZC5jcHAJKHJldmlz
aW9uIDE0OTA5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZpZWxkLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIsMTkgKzIyLDE5IEBACiAjaW5jbHVkZSAiUmVuZGVyVGV4dEZpZWxk
LmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0
RmllbGRJbm5lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUg
IlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNs
dWRlICJkb20yX2V2ZW50c2ltcGwuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2libGVf
dW5pdHMuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRl
eDogV2ViQ29yZS94bWwveG1saHR0cHJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL3htbGh0dHByZXF1ZXN0LmNwcAkocmV2aXNpb24gMTQ5MDkpCisrKyBXZWJDb3JlL3htbC94
bWxodHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs
dWRlICJDYWNoZS5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
RGVjb2Rlci5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb3JtRGF0YS5oIgpAQCAtMzMs
NyArMzQsNiBAQAogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiVGV4
dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVHJhbnNmZXJKb2IuaCIKLSNpbmNsdWRlICJkb20yX2V2
ZW50c2ltcGwuaCIKICNpbmNsdWRlICJranNfYmluZGluZy5oIgogI2luY2x1ZGUgPGtqcy9wcm90
ZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgo=
</data>
<flag name="review"
          id="2613"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>