<?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>22888</bug_id>
          
          <creation_ts>2008-12-16 14:59:24 -0800</creation_ts>
          <short_desc>Move TransformOperations files (e.g., TranslateTransformOperation.(cpp,h} to platform</short_desc>
          <delta_ts>2008-12-18 13:08:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>102709</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-16 14:59:24 -0800</bug_when>
    <thetext>To avoid future dependency issues, all the TransformOperations related files need to be moved to platform. This is an easy move since they currently don&apos;t depend on anything outside platform. I will move these to platform/graphics, which is where AffineTransform lives today. I will put them into a separate &apos;transforms&apos; subdir to avoid polluting the main dir. I will move AffineTransform here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102725</commentid>
    <comment_count>1</comment_count>
      <attachid>26077</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-16 16:13:27 -0800</bug_when>
    <thetext>Created attachment 26077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102905</commentid>
    <comment_count>2</comment_count>
      <attachid>26077</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-18 10:00:23 -0800</bug_when>
    <thetext>Comment on attachment 26077
Patch

I need to add a couple more files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102908</commentid>
    <comment_count>3</comment_count>
      <attachid>26123</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-18 10:26:35 -0800</bug_when>
    <thetext>Created attachment 26123
Replacement patch with a couple more moved files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102912</commentid>
    <comment_count>4</comment_count>
      <attachid>26123</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-12-18 11:55:02 -0800</bug_when>
    <thetext>Comment on attachment 26123
Replacement patch with a couple more moved files

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102919</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-12-18 13:08:25 -0800</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Adding         WebCore/platform/animation
Adding         WebCore/platform/animation/Animation.cpp
Adding         WebCore/platform/animation/Animation.h
Adding         WebCore/platform/animation/AnimationList.cpp
Adding         WebCore/platform/animation/AnimationList.h
Adding         WebCore/platform/animation/TimingFunction.h
Deleting       WebCore/platform/graphics/AffineTransform.cpp
Deleting       WebCore/platform/graphics/AffineTransform.h
Adding         WebCore/platform/graphics/transforms
Adding         WebCore/platform/graphics/transforms/AffineTransform.cpp
Adding         WebCore/platform/graphics/transforms/AffineTransform.h
Adding         WebCore/platform/graphics/transforms/IdentityTransformOperation.h
Adding         WebCore/platform/graphics/transforms/MatrixTransformOperation.cpp
Adding         WebCore/platform/graphics/transforms/MatrixTransformOperation.h
Adding         WebCore/platform/graphics/transforms/RotateTransformOperation.cpp
Adding         WebCore/platform/graphics/transforms/RotateTransformOperation.h
Adding         WebCore/platform/graphics/transforms/ScaleTransformOperation.cpp
Adding         WebCore/platform/graphics/transforms/ScaleTransformOperation.h
Adding         WebCore/platform/graphics/transforms/SkewTransformOperation.cpp
Adding         WebCore/platform/graphics/transforms/SkewTransformOperation.h
Adding         WebCore/platform/graphics/transforms/TransformOperation.h
Adding         WebCore/platform/graphics/transforms/TransformOperations.cpp
Adding         WebCore/platform/graphics/transforms/TransformOperations.h
Adding         WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp
Adding         WebCore/platform/graphics/transforms/TranslateTransformOperation.h
Deleting       WebCore/rendering/style/Animation.cpp
Deleting       WebCore/rendering/style/Animation.h
Deleting       WebCore/rendering/style/AnimationList.cpp
Deleting       WebCore/rendering/style/AnimationList.h
Deleting       WebCore/rendering/style/IdentityTransformOperation.h
Deleting       WebCore/rendering/style/MatrixTransformOperation.cpp
Deleting       WebCore/rendering/style/MatrixTransformOperation.h
Deleting       WebCore/rendering/style/RotateTransformOperation.cpp
Deleting       WebCore/rendering/style/RotateTransformOperation.h
Deleting       WebCore/rendering/style/ScaleTransformOperation.cpp
Deleting       WebCore/rendering/style/ScaleTransformOperation.h
Deleting       WebCore/rendering/style/SkewTransformOperation.cpp
Deleting       WebCore/rendering/style/SkewTransformOperation.h
Deleting       WebCore/rendering/style/TimingFunction.h
Deleting       WebCore/rendering/style/TransformOperation.h
Deleting       WebCore/rendering/style/TransformOperations.cpp
Deleting       WebCore/rendering/style/TransformOperations.h
Deleting       WebCore/rendering/style/TranslateTransformOperation.cpp
Deleting       WebCore/rendering/style/TranslateTransformOperation.h
Transmitting file data .......................
Committed revision 39378.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26077</attachid>
            <date>2008-12-16 16:13:27 -0800</date>
            <delta_ts>2008-12-18 10:00:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>22888.patch</filename>
            <type>text/plain</type>
            <size>129320</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTM0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDgtMTItMTYgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg4OAorCisgICAgICAgIFRv
IGF2b2lkIGZ1dHVyZSBkZXBlbmRlbmN5IGlzc3VlcywgYWxsIHRoZSBUcmFuc2Zvcm1PcGVyYXRp
b25zIHJlbGF0ZWQgZmlsZXMgbmVlZCB0byBiZSBtb3ZlZCB0byBwbGF0Zm9ybQorCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3JtczogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaDogQ29waWVkIGZyb20gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
LmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg6IENvcGllZCBmcm9tIFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDogQ29waWVkIGZyb20gV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDog
Q29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Ta2V3
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmg6IENvcGllZCBmcm9tIFdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9ybU9wZXJhdGlvbi5oLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3BwLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
cy5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRp
b25zLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6IENvcGllZCBm
cm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
LgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5o
OiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvc3R5bGUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDogUmVtb3ZlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24u
aDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9u
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9ybU9wZXJhdGlv
bnMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVy
YXRpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1RyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOiBSZW1vdmVkLgorCiAyMDA4LTEyLTE2ICBQ
ZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXZpZCBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAzOTMzOCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsNiArNTgwLDIyIEBACiAJCTQ2RjlE
NUREMEIwRDYwMTcwMDI4RUUzNiAvKiBhbGlhc0N1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2RjlENURBMEIwRDYwMTcwMDI4RUUzNiAv
KiBhbGlhc0N1cnNvci5wbmcgKi87IH07CiAJCTQ2RjlENURFMEIwRDYwMTcwMDI4RUUzNiAvKiBu
b0Ryb3BDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NkY5RDVEQjBCMEQ2MDE3MDAyOEVFMzYgLyogbm9Ecm9wQ3Vyc29yLnBuZyAqLzsg
fTsKIAkJNDZGOUQ1REYwQjBENjAxNzAwMjhFRTM2IC8qIHByb2dyZXNzQ3Vyc29yLnBuZyBpbiBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZGOUQ1REMwQjBE
NjAxNzAwMjhFRTM2IC8qIHByb2dyZXNzQ3Vyc29yLnBuZyAqLzsgfTsKKwkJNDlFOTExQzMwRUY4
NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFCMzBFRjg2RDQ3MDA5RDBDQUYgLyogQWZm
aW5lVHJhbnNmb3JtLmNwcCAqLzsgfTsKKwkJNDlFOTExQzQwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFm
ZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFOTExQjQwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5oICovOyB9
OworCQk0OUU5MTFDNTBFRjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkx
MUI1MEVGODZENDcwMDlEMENBRiAvKiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oICovOyB9
OworCQk0OUU5MTFDNjBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkx
MUI2MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9
OworCQk0OUU5MTFDNzBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFC
NzBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IH07CisJ
CTQ5RTkxMUM4MEVGODZENDcwMDlEMENBRiAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTExQjgw
RUY4NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi87IH07CisJ
CTQ5RTkxMUM5MEVGODZENDcwMDlEMENBRiAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUI5MEVG
ODZENDcwMDlEMENBRiAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLzsgfTsKKwkJNDlF
OTExQ0EwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUJBMEVGODZE
NDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi87IH07CisJCTQ5RTkx
MUNCMEVGODZENDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTExQkIwRUY4NkQ0NzAw
OUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IH07CisJCTQ5RTkxMUNDMEVG
ODZENDcwMDlEMENBRiAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUJDMEVGODZENDcwMDlEMENB
RiAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLzsgfTsKKwkJNDlFOTExQ0QwRUY4NkQ0
NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUJEMEVGODZENDcwMDlEMENBRiAvKiBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IH07CisJCTQ5RTkxMUNFMEVGODZENDcwMDlEMENB
RiAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUJFMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVy
YXRpb24uaCAqLzsgfTsKKwkJNDlFOTExQ0YwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9w
ZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFOTExQkYwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwICov
OyB9OworCQk0OUU5MTFEMDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTExQzAw
RUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuaCAqLzsgfTsKKwkJNDlFOTEx
RDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFDMTBFRjg2
RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLzsgfTsKKwkJ
NDlFOTExRDIwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTExQzIw
RUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oICovOyB9Owog
CQk0QThDOTZFQjBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5NkVBMEJF
NjkwMzIwMDRFRUZGMCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovOyB9OwogCQk0QjE3
Q0JDOTBEOTQ1QjM3MDA1M0YxODMgLyogQWNjZXNzaWJpbGl0eU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIxN0NCQzgwRDk0NUIzNzAwNTNG
MTgzIC8qIEFjY2Vzc2liaWxpdHlPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0QjE3Q0JDQzBEOTQ1QjkxMDA1M0YxODMgLyogQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QjE3Q0JDQTBEOTQ1QjkxMDA1M0YxODMgLyogQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIubW0gKi87IH07CkBAIC0zMjc3LDggKzMyOTMsNiBAQAogCQlCMjY1NTRFQjBC
ODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4dFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNjU1NEU5MEI4MEQ3NDkwMEE1MEVDMyAvKiBS
ZW5kZXJTVkdUZXh0UGF0aC5oICovOyB9OwogCQlCMjY2Q0Q0RDBDM0FFQzY1MDBFQjA4RDIgLyog
SlNTVkdFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI2NkNENEIwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAq
LzsgfTsKIAkJQjI2NkNENEUwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjY2Q0Q0QzBDM0FF
QzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uaCAqLzsgfTsKLQkJQjI3NTM1NTYwQjA1Mzgx
NDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyNzBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5l
VHJhbnNmb3JtLmNwcCAqLzsgfTsKLQkJQjI3NTM1NTcwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmlu
ZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI3NTM1MjgwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTU4MEIwNTM4
MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zvcm1DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogQWZm
aW5lVHJhbnNmb3JtQ0cuY3BwICovOyB9OwogCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovOyB9
OwogCQlCMjc1MzU1QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkMwQjA1MzgxNDAw
MkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLzsgfTsKQEAgLTM4NjAsMjAgKzM4NzQsNiBAQAog
CQlCQzVFQjcyQTBFODFERTgxMDBCMjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RUI3MjgwRTgxREU4MTAw
QjI1OTY1IC8qIFN0eWxlTWFycXVlZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzVFQjc0RDBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVN
dWx0aUNvbERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM1RUI3NEIwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmNwcCAq
LzsgfTsKIAkJQkM1RUI3NEUwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjc0QzBF
ODFFMDY3MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzVFQjc3RTBFODFFQkE2MDBCMjU5NjUg
LyogVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzVFQjc3RDBFODFFQkE2MDBCMjU5NjUgLyogVHJhbnNmb3JtT3BlcmF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
QkM1RUI3ODEwRTgxRUM1QjAwQjI1OTY1IC8qIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjc4MDBF
ODFFQzVCMDBCMjU5NjUgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwotCQlCQzVFQjc4MzBFODFFQ0YyMDBCMjU5NjUg
LyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCNzgyMEU4MUVDRjIwMEIyNTk2NSAvKiBTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0J
CUJDNUVCNzlEMEU4MUVENUYwMEIyNTk2NSAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCNzlDMEU4
MUVENUYwMEIyNTk2NSAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwotCQlCQzVFQjc5RjBFODFFREQyMDBCMjU5NjUgLyog
U2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM1RUI3OUUwRTgxRUREMjAwQjI1OTY1IC8qIFNrZXdUcmFuc2Zvcm1P
cGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwotCQlCQzVF
QjdBMzBFODFFRUFGMDBCMjU5NjUgLyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCN0EwMEU4MUVF
QUYwMEIyNTk2NSAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9OwotCQlCQzVF
QjdBNDBFODFFRUFGMDBCMjU5NjUgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RUI3QTEwRTgxRUVB
RjAwQjI1OTY1IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLzsgfTsKLQkJQkM1RUI3
QTUwRTgxRUVBRjAwQjI1OTY1IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RUI3QTIwRTgxRUVBRjAw
QjI1OTY1IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9OwotCQlCQzVFQjdDQzBF
ODFFRjVEMDBCMjU5NjUgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCN0NBMEU4MUVGNUQw
MEIyNTk2NSAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9OwotCQlCQzVF
QjdDRDBFODFFRjVEMDBCMjU5NjUgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjdDQjBFODFF
RjVEMDBCMjU5NjUgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKLQkJQkM1RUI3RjcwRTgxRjA1NzAwQjI1OTY1IC8q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjdGNTBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmNwcCAqLzsgfTsKLQkJQkM1RUI3RjgwRTgxRjA1NzAwQjI1OTY1IC8q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM1RUI3RjYwRTgxRjA1NzAwQjI1OTY1IC8qIE1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0J
CUJDNUVCODBBMEU4MUYxMTIwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCODA4MEU4MUYx
MTIwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCAqLzsgfTsKLQkJQkM1RUI4MEIw
RTgxRjExMjAwQjI1OTY1IC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCODA5MEU4MUYxMTIwMEIyNTk2NSAv
KiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQkM1RUI4MEYwRTgxRjJDRTAwQjI1OTY1IC8qIFN0eWxlVHJhbnNm
b3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzVFQjgwRDBFODFGMkNFMDBCMjU5NjUgLyogU3R5bGVUcmFuc2Zvcm1EYXRhLmNwcCAqLzsg
fTsKIAkJQkM1RUI4MTAwRTgxRjJDRTAwQjI1OTY1IC8qIFN0eWxlVHJhbnNmb3JtRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RUI4MEUwRTgx
RjJDRTAwQjI1OTY1IC8qIFN0eWxlVHJhbnNmb3JtRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNUVCOEI4MEU4MjAxQkQwMEIyNTk2NSAv
KiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjhCNjBFODIwMUJEMDBCMjU5NjUgLyogU3R5bGVGbGV4aWJs
ZUJveERhdGEuY3BwICovOyB9OwpAQCAtNTQxNyw2ICs1NDE3LDIyIEBACiAJCTQ2RjlENURBMEIw
RDYwMTcwMDI4RUUzNiAvKiBhbGlhc0N1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSBhbGlhc0N1cnNvci5w
bmc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2RjlENURCMEIwRDYwMTcwMDI4RUUz
NiAvKiBub0Ryb3BDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gbm9Ecm9wQ3Vyc29yLnBuZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REMwQjBENjAxNzAwMjhFRTM2IC8qIHByb2dy
ZXNzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IHByb2dyZXNzQ3Vyc29yLnBuZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQjMwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5z
Zm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBZmZpbmVUcmFu
c2Zvcm0uY3BwOyBwYXRoID0gdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0OUU5MTFCNDBFRjg2RDQ3MDA5RDBDQUYgLyogQWZmaW5l
VHJhbnNmb3JtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFmZmluZVRyYW5z
Zm9ybS5oOyBwYXRoID0gdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQjUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJh
bnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg7IHBhdGggPSB0cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMUI2MEVG
ODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsg
cGF0aCA9IHRyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQjcwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9IHRyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMUI4MEVGODZE
NDcwMDlEMENBRiAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0
aCA9IHRyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQjkwRUY4NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9IHRyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMUJBMEVGODZENDcw
MDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHBhdGggPSB0
cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDlFOTExQkIwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uLmg7IHBhdGggPSB0cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMUJDMEVGODZENDcwMDlEMENBRiAv
KiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBwYXRoID0gdHJhbnNmb3Jtcy9T
a2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDlFOTExQkQwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oOyBw
YXRoID0gdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5RTkxMUJFMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVy
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVHJhbnNmb3JtT3BlcmF0
aW9uLmg7IHBhdGggPSB0cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0OUU5MTFCRjBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3Jt
T3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUcmFu
c2Zvcm1PcGVyYXRpb25zLmNwcDsgcGF0aCA9IHRyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMUMwMEVGODZENDcwMDlE
MENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFRyYW5zZm9ybU9wZXJhdGlvbnMuaDsgcGF0aCA9IHRyYW5zZm9ybXMvVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUU5MTFDMTBFRjg2
RDQ3MDA5RDBDQUYgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5j
cHA7IHBhdGggPSB0cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMUMyMEVGODZENDcwMDlEMENBRiAvKiBU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg7IHBhdGggPSB0cmFuc2Zvcm1zL1Ry
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBTZWxlY3Rpb25Db250cm9s
bGVyTWFjLm1tOyBwYXRoID0gbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCMTdDQkM4MEQ5NDVCMzcwMDUzRjE4MyAvKiBBY2Nlc3Np
YmlsaXR5T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2li
aWxpdHlPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEIxN0NCQ0EwRDk0
NUI5MTAwNTNGMTgzIC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03OTY2LDggKzc5ODIsNiBAQAogCQlC
MjY1NTRFOTBCODBENzQ5MDBBNTBFQzMgLyogUmVuZGVyU1ZHVGV4dFBhdGguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RleHRQYXRoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyNjZDRDRCMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2Vw
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdFeGNl
cHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjY2Q0Q0QzBDM0FFQzY1
MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU1ZHRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIy
NzUzNTI3MEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFmZmluZVRyYW5zZm9ybS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyNzUzNTI4MEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVU
cmFuc2Zvcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFmZmluZVRyYW5z
Zm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUyQTBCMDUzODE0MDAy
Q0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFmZmluZVRyYW5zZm9ybUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRQb2ludENHLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9h
dFJlY3RDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NTYwLDIwICs4NTc0
LDYgQEAKIAkJQkM1RUI3MjgwRTgxREU4MTAwQjI1OTY1IC8qIFN0eWxlTWFycXVlZURhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3R5bGVNYXJxdWVlRGF0YS5oOyBwYXRo
ID0gc3R5bGUvU3R5bGVNYXJxdWVlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzVFQjc0QjBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3R5bGVNdWx0aUNvbERhdGEuY3BwOyBw
YXRoID0gc3R5bGUvU3R5bGVNdWx0aUNvbERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzVFQjc0QzBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3R5bGVNdWx0aUNvbERhdGEuaDsgcGF0
aCA9IHN0eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUJDNUVCNzdEMEU4MUVCQTYwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVHJhbnNmb3JtT3BlcmF0aW9uLmg7IHBhdGgg
PSBzdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkM1RUI3ODAwRTgxRUM1QjAwQjI1OTY1IC8qIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElkZW50aXR5VHJhbnNmb3JtT3Bl
cmF0aW9uLmg7IHBhdGggPSBzdHlsZS9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzVFQjc4MjBFODFFQ0YyMDBCMjU5NjUgLyogU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9IHN0eWxlL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNUVCNzlDMEU4MUVENUYw
MEIyNTk2NSAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg7IHBhdGggPSBzdHlsZS9S
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QkM1RUI3OUUwRTgxRUREMjAwQjI1OTY1IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oOyBw
YXRoID0gc3R5bGUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCQzVFQjdBMDBFODFFRUFGMDBCMjU5NjUgLyogUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHA7IHBhdGggPSBzdHlsZS9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzVFQjdBMTBFODFFRUFGMDBC
MjU5NjUgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBwYXRoID0gc3R5
bGUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCQzVFQjdBMjBFODFFRUFGMDBCMjU5NjUgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcDsgcGF0aCA9IHN0eWxlL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzVFQjdDQTBFODFFRjVEMDBCMjU5NjUgLyogVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHBhdGggPSBzdHlsZS9U
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCQzVFQjdDQjBFODFFRjVEMDBCMjU5NjUgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5oOyBwYXRoID0gc3R5bGUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNUVCN0Y1MEU4MUYwNTcwMEIyNTk2NSAv
KiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHN0eWxlL01h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUJDNUVCN0Y2MEU4MUYwNTcwMEIyNTk2NSAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
Lmg7IHBhdGggPSBzdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkM1RUI4MDgwRTgxRjExMjAwQjI1OTY1IC8qIFRyYW5zZm9ybU9w
ZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVHJhbnNm
b3JtT3BlcmF0aW9ucy5jcHA7IHBhdGggPSBzdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM1RUI4MDkwRTgxRjExMjAwQjI1OTY1IC8q
IFRyYW5zZm9ybU9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
VHJhbnNmb3JtT3BlcmF0aW9ucy5oOyBwYXRoID0gc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzVFQjgwRDBFODFGMkNFMDBCMjU5NjUg
LyogU3R5bGVUcmFuc2Zvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFN0eWxlVHJhbnNmb3JtRGF0YS5jcHA7IHBhdGggPSBzdHlsZS9TdHlsZVRyYW5zZm9y
bURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzVFQjgwRTBFODFGMkNF
MDBCMjU5NjUgLyogU3R5bGVUcmFuc2Zvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFN0eWxlVHJhbnNmb3JtRGF0YS5oOyBwYXRoID0gc3R5bGUvU3R5bGVUcmFuc2Zv
cm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNUVCOEI2MEU4MjAxQkQw
MEIyNTk2NSAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHA7IHBhdGggPSBzdHlsZS9T
dHlsZUZsZXhpYmxlQm94RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
NTU3LDYgKzk1NTcsMjkgQEAKIAkJCW5hbWUgPSBhbmltYXRpb247CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OworCQk0OUU5MTFCMjBFRjg2RDI3MDA5RDBDQUYgLyogdHJhbnNmb3Jt
cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNDlFOTEx
QjMwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8sCisJCQkJNDlFOTEx
QjQwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5oICovLAorCQkJCTQ5RTkxMUI1
MEVGODZENDcwMDlEMENBRiAvKiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oICovLAorCQkJ
CTQ5RTkxMUI2MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
ICovLAorCQkJCTQ5RTkxMUI3MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uaCAqLywKKwkJCQk0OUU5MTFCODBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmNwcCAqLywKKwkJCQk0OUU5MTFCOTBFRjg2RDQ3MDA5RDBDQUYgLyogUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCisJCQkJNDlFOTExQkEwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLywKKwkJCQk0OUU5MTFCQjBFRjg2RDQ3
MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKKwkJCQk0OUU5MTFCQzBF
Rjg2RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8sCisJCQkJNDlF
OTExQkQwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKKwkJ
CQk0OUU5MTFCRTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCisJ
CQkJNDlFOTExQkYwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwICov
LAorCQkJCTQ5RTkxMUMwMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmgg
Ki8sCisJCQkJNDlFOTExQzEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAgKi8sCisJCQkJNDlFOTExQzIwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSB0cmFuc2Zvcm1zOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNEM2Qjk5MTUwRTUyRTM3MzAwNDg3
QkI3IC8qIHdtbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0xMjgyNiw4ICsxMjg0OSw3IEBACiAJCQkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNn
ICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovLAogCQkJCUIy
NzUzNTQ5MEIwNTM4MTQwMDJDRTY0RiAvKiBtYWMgKi8sCi0JCQkJQjI3NTM1MjcwQjA1MzgxNDAw
MkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8sCi0JCQkJQjI3NTM1MjgwQjA1MzgxNDAw
MkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5oICovLAorCQkJCTQ5RTkxMUIyMEVGODZEMjcwMDlE
MENBRiAvKiB0cmFuc2Zvcm1zICovLAogCQkJCUE4OTk0MzI3MEI0MjMzODcwMEQ3QzgwMiAvKiBC
aXRtYXBJbWFnZS5jcHAgKi8sCiAJCQkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1h
cEltYWdlLmggKi8sCiAJCQkJQjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmNwcCAq
LywKQEAgLTEzMjU2LDI5ICsxMzI3OCwyMCBAQAogCQkJCUJDMjI3NDZFMEU4MzY2NDUwMEU3Rjk3
NSAvKiBEYXRhUmVmLmggKi8sCiAJCQkJQkM1RUI2OUMwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxM
YXllci5jcHAgKi8sCiAJCQkJQkM1RUI2OUQwRTgxREFFQjAwQjI1OTY1IC8qIEZpbGxMYXllci5o
ICovLAotCQkJCUJDNUVCNzgwMEU4MUVDNUIwMEIyNTk2NSAvKiBJZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbi5oICovLAogCQkJCUJDNUVCQTBFMEU4MjNFNDcwMEIyNTk2NSAvKiBLZXlmcmFtZUxp
c3QuY3BwICovLAogCQkJCUJDNUVCQTBGMEU4MjNFNDcwMEIyNTk2NSAvKiBLZXlmcmFtZUxpc3Qu
aCAqLywKLQkJCQlCQzVFQjdGNTBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCAqLywKLQkJCQlCQzVFQjdGNjBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJCQkJQkNFRjQzREYwRTY3NDExMDAwMUMxMjg3IC8qIE5p
bmVQaWVjZUltYWdlLmNwcCAqLywKIAkJCQlCQ0VGNDNEQzBFNjc0MDEyMDAxQzEyODcgLyogTmlu
ZVBpZWNlSW1hZ2UuaCAqLywKIAkJCQlCQzVFQjVEQzBFODFCOEREMDBCMjU5NjUgLyogT3V0bGlu
ZVZhbHVlLmggKi8sCiAJCQkJQkM4QzhGQUIwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxl
LmNwcCAqLywKIAkJCQlCQzhDOEZBQzBERENEMzFCMDBCNTkyRjQgLyogUmVuZGVyU3R5bGUuaCAq
LywKIAkJCQlCQzVFQjY2NzBFODFDQjcxMDBCMjU5NjUgLyogUmVuZGVyU3R5bGVDb25zdGFudHMu
aCAqLywKLQkJCQlCQzVFQjdBMDBFODFFRUFGMDBCMjU5NjUgLyogUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCAqLywKLQkJCQlCQzVFQjc5QzBFODFFRDVGMDBCMjU5NjUgLyogUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJCQkJQkMyMjc0NzQwRTgzNjZFMjAwRTdGOTc1IC8qIFNW
R1JlbmRlclN0eWxlLmNwcCAqLywKIAkJCQlCQzIyNzQ3NTBFODM2NkUyMDBFN0Y5NzUgLyogU1ZH
UmVuZGVyU3R5bGUuaCAqLywKIAkJCQlCQzIyNzQ3NjBFODM2NkUyMDBFN0Y5NzUgLyogU1ZHUmVu
ZGVyU3R5bGVEZWZzLmNwcCAqLywKIAkJCQlCQzIyNzQ3NzBFODM2NkUyMDBFN0Y5NzUgLyogU1ZH
UmVuZGVyU3R5bGVEZWZzLmggKi8sCi0JCQkJQkM1RUI3QTEwRTgxRUVBRjAwQjI1OTY1IC8qIFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLywKLQkJCQlCQzVFQjc4MjBFODFFQ0YyMDBCMjU5
NjUgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKIAkJCQlCQzVFQjhDMTBFODIwMzFC
MDBCMjU5NjUgLyogU2hhZG93RGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI4QzIwRTgyMDMxQjAwQjI1
OTY1IC8qIFNoYWRvd0RhdGEuaCAqLywKLQkJCQlCQzVFQjdBMjBFODFFRUFGMDBCMjU5NjUgLyog
U2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8sCi0JCQkJQkM1RUI3OUUwRTgxRUREMjAwQjI1
OTY1IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKIAkJCQlCQzVFQjZBMDBFODFEQzRG
MDBCMjU5NjUgLyogU3R5bGVCYWNrZ3JvdW5kRGF0YS5jcHAgKi8sCiAJCQkJQkM1RUI2QTEwRTgx
REM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuaCAqLywKIAkJCQlCQzVFQjY3QzBF
ODFENDIwMDBCMjU5NjUgLyogU3R5bGVCb3hEYXRhLmNwcCAqLywKQEAgLTEzMzA5LDExICsxMzMy
Miw2IEBACiAJCQkJQkM1RUI2OTcwRTgxREE2MzAwQjI1OTY1IC8qIFN0eWxlVmlzdWFsRGF0YS5j
cHAgKi8sCiAJCQkJQkM1RUI2OTgwRTgxREE2MzAwQjI1OTY1IC8qIFN0eWxlVmlzdWFsRGF0YS5o
ICovLAogCQkJCUJDNUVCOUI3MEU4MjBDQTAwMEIyNTk2NSAvKiBUaW1pbmdGdW5jdGlvbi5oICov
LAotCQkJCUJDNUVCNzdEMEU4MUVCQTYwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCAq
LywKLQkJCQlCQzVFQjgwODBFODFGMTEyMDBCMjU5NjUgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5j
cHAgKi8sCi0JCQkJQkM1RUI4MDkwRTgxRjExMjAwQjI1OTY1IC8qIFRyYW5zZm9ybU9wZXJhdGlv
bnMuaCAqLywKLQkJCQlCQzVFQjdDQTBFODFFRjVEMDBCMjU5NjUgLyogVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmNwcCAqLywKLQkJCQlCQzVFQjdDQjBFODFFRjVEMDBCMjU5NjUgLyogVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IHN0eWxlOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0MjcxLDcgKzE0Mjc5LDYgQEAKIAkJCQky
OUFBQzUxRjBFNTM5NjNCMDA4RjlCM0IgLyogQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFp
bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTgwMEM5NTBFNTI0QzhCMDAwMjU1MzYgLyogQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUM0REU2OTBFQTc1QzFF
MDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQlCMjc1MzU1
NzBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzVFQkEwRDBFODIzQTFDMDBCMjU5NjUgLyogQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTZGRTExMjBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE2RkUxMTQwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTUzNjgsNyArMTUzNzUsNiBAQAogCQkJCTFBMkQ3NTNE
MERFNDdGQUIwMEYwQTY0OCAvKiBJY29uRmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
RjE0NTQwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxRTFFQ0MxMEM5MUM5MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmggaW4gSGVhZGVycyAqLywK
LQkJCQlCQzVFQjc4MTBFODFFQzVCMDBCMjU5NjUgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkgLyog
SW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTE1Nzc2LDcgKzE1NzgyLDYgQEAKIAkJCQkx
QThGNkJDNjBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QzRBODA1MDlENTYzMjcwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1dGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QzRBODRDMDlENTY0OUQwMDAzQUM4RCAvKiBNYXBwZWRBdHRyaWJ1
dGVFbnRyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM1RUI3RjgwRTgxRjA1NzAwQjI1OTY1IC8q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUJGRTdFMTMw
RDMyRkFGNjAwNjZGNEQyIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQjQwNDg0RTBFMDgzRkE4MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ0NjEzQUQwQ0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlhRXJyb3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTU5NjEsNyArMTU5NjYsNiBAQAogCQkJCTUxNEM3NjU0MENFOTIzNEUw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRDNzY3
RjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4Q0ZGNUUxMEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlCQzVFQjc5RDBFODFFRDVGMDBCMjU5NjUgLyogUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEFGRDAwQzBEQUYzMzU0MDBGNUY1NUMg
LyogU01JTFRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QUZEMDBFMERBRjMzNTUwMEY1RjU1
QyAvKiBTTUlMVGltZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFQzkyNTkwQ0U5
MERCNDAwRjkwMzA4IC8qIFNRTEVycm9yLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MTU4LDcgKzE2
MTYyLDYgQEAKIAkJCQlCMjIyN0FGMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVmlld1NwZWMuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMjI3QUY2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdab29tQW5k
UGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkU0RUM5ODBEMDBDMjJCMDA0MzI2NDMgLyogU1ZH
Wm9vbUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzVFQjc4MzBFODFFQ0YyMDBCMjU5NjUg
LyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFDRUZDOUI5
MEQ3OERDOEMwMDdEMjU3OSAvKiBTY2hlZHVsZVBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVE
RkU4RjU3MEQxNjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUMwMUJFMEMyNzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uaCBpbiBIZWFkZXJzICov
LApAQCAtMTYxOTcsNyArMTYyMDAsNiBAQAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAv
KiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RUEzMDk5RUI3OEMwMDU2
RTU4MSAvKiBTaGFyZWRUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjUwRDAwNkNE
NjAwRUY2RjI2IC8qIFNpbXBsZUZvbnREYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzVFQjc5
RjBFODFFREQyMDBCMjU5NjUgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNEI2RkE2RjQwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEE0ODQ0OTkwQ0E0NENCMjAwQjdCRDQ4IC8qIFNvZnRMaW5raW5nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0QjMwNDNDNzBBRTAzNzAzMDBBODI2NDcgLyogU291bmQuaCBp
biBIZWFkZXJzICovLApAQCAtMTYyNzYsOSArMTYyNzgsNiBAQAogCQkJCTkzMDVCMjREMDk4RjFC
NkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI5QjgwRTgyMENB
MDAwQjI1OTY1IC8qIFRpbWluZ0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGQkFF
ODBCNTE1MkVEMDAwMUYxRDcgLyogVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzVF
Qjc3RTBFODFFQkE2MDBCMjU5NjUgLyogVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAq
LywKLQkJCQlCQzVFQjgwQjBFODFGMTEyMDBCMjU5NjUgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQkM1RUI3Q0QwRTgxRUY1RDAwQjI1OTY1IC8qIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzcwQTIyOTdC
RTAwNThEN0FEIC8qIFRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxOUQyQzUwQ0VB
NkY2MTAwRkY1MDdBIC8qIFRyZWVTaGFyZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzM5
MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmVlV2Fsa2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTE2NDMy
LDYgKzE2NDMxLDE1IEBACiAJCQkJMUE1NjlEMjUwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVf
cm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUUwOTlFNjQ5MjAwNTZFNTgxIC8qIHZp
c2libGVfdW5pdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4ODIwQkRGMEVGNUQzODEwMDkwOTlB
OCAvKiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkxMUM0MEVGODZE
NDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkx
MUM1MEVGODZENDcwMDlEMENBRiAvKiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDlFOTExQzcwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQzkwRUY4NkQ0NzAwOUQwQ0FG
IC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTEx
Q0IwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0OUU5MTFDRDBFRjg2RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExQ0UwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRy
YW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTExRDAwRUY4NkQ0NzAw
OUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkx
MUQyMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMTY3MTcsNyArMTY3MjUsNiBAQAogCQkJCTI5QUFDNTIwMEU1Mzk2M0Iw
MDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjk4MDBDOTYwRTUyNEM4QjAwMDI1NTM2IC8qIEFjY2Vzc2liaWxpdHlUYWJs
ZVJvdy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUM0REU2RTBFQTc1QzY1MDAyM0NDRDYgLyog
QWN0aXZlRE9NT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNzUzNTU2MEIwNTM4MTQw
MDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1
NTgwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybUNHLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDNUVCQTBDMEU4MjNBMUMwMEIyNTk2NSAvKiBBbmltYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzE2RkUxMTEwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0xNzc4NCw3ICsxNzc5MSw2IEBACiAJCQkJOTNFMjI3RTEwQUY1
ODlBRDAwRDQ4MzI0IC8qIE1haW5SZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQThGNkJDNTBEQjU1Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDNEE4MDYwOUQ1NjMyNzAwMDNBQzhEIC8qIE1hcHBlZEF0dHJpYnV0ZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzVFQjdGNzBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCRkU3RTEyMEQzMkZB
RjYwMDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBQjQwNDg0RDBFMDgzRkE4MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0RTE5NTkyMTBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNzk0OCw3ICsxNzk1NCw2IEBACiAJCQkJNTE0Qzc2N0Uw
Q0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxNEM3NjU1MENFOTIzNEYwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThDRkY1RTcwQTE1NUEwNTAwMEE0MjM0IC8qIFJvb3RJbmxp
bmVCb3guY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM1RUI3QTMwRTgxRUVBRjAwQjI1OTY1IC8q
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAw
QjBEQUYzMzU0MDBGNUY1NUMgLyogU01JTFRpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRB
RkQwMEQwREFGMzM1NTAwRjVGNTVDIC8qIFNNSUxUaW1lQ29udGFpbmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxOTYxMTczMENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRTZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xODEzOCw3ICsxODE0Myw2IEBACiAJCQkJQjIyMjdBRjIwRDAwQkYy
MjAwNzFCNzgyIC8qIFNWR1ZpZXdTcGVjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUY1
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyRTRFQzk3MEQwMEMyMkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQkM1RUI3QTQwRTgxRUVBRjAwQjI1OTY1IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDRUZDOUJBMEQ3OERDOEMwMDdEMjU3OSAvKiBT
Y2hlZHVsZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFMjRGOTcwRDdDQUYwRTAwN0Uw
NEMyIC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVERkU4RjU2MEQx
NjQ3N0IwMDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
ODE3Niw3ICsxODE4MCw2IEBACiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJl
ZFRpbWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2
IC8qIFNpbXBsZUZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1
QzEwMDMwMDc0RCAvKiBTaW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJD
NUVCN0E1MEU4MUVFQUYwMEIyNTk2NSAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTRCNkZBNkY1MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0
UmVwbGFjZUNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0
NyAvKiBTb3VuZE1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTgyNDIsOCArMTgyNDUsNiBAQAog
CQkJCTUxREY2RDgwMEI5MkExOEUwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0NDYxM0FGMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFuZ2VzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzMzA5RUE0MDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1lci5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCQzVFQjgwQTBFODFGMTEyMDBCMjU5NjUgLyogVHJhbnNmb3JtT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzVFQjdDQzBFODFFRjVEMDBCMjU5NjUg
LyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1
NEZFNzM2MEEyMjk3QkUwMDU4RDdBRCAvKiBUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODU0RkU3MzgwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMzMDlFMTkwOTlFNjQ5MjAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xODM4Myw2ICsxODM4NCwxMyBAQAogCQkJCTFBNTY5RDI0MEQ3RTJC
ODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MUQwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMDg4MjBCREUwRUY1RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0OUU5MTFDMzBFRjg2RDQ3MDA5RDBDQUYgLyogQWZmaW5lVHJhbnNmb3Jt
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAvKiBNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExQzgwRUY4
NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0OUU5MTFDQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExQ0MwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExQ0YwRUY4
NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDlFOTExRDEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZm
aW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDM5MzM4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNp
bmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGFm
ZmluZVRyYW5zZm9ybURlY29tcG9zZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCwgZG91
YmxlIHNyWzldKQotewotICAgIEFmZmluZVRyYW5zZm9ybSBtKG1hdHJpeCk7Ci0KLSAgICAvLyBD
b21wdXRlIHNjYWxpbmcgZmFjdG9ycwotICAgIGRvdWJsZSBzeCA9IHNxcnQobS5hKCkgKiBtLmEo
KSArIG0uYigpICogbS5iKCkpOwotICAgIGRvdWJsZSBzeSA9IHNxcnQobS5jKCkgKiBtLmMoKSAr
IG0uZCgpICogbS5kKCkpOwotCi0gICAgLyogQ29tcHV0ZSBjcm9zcyBwcm9kdWN0IG9mIHRyYW5z
Zm9ybWVkIHVuaXQgdmVjdG9ycy4gSWYgbmVnYXRpdmUsCi0gICAgICAgIG9uZSBheGlzIHdhcyBm
bGlwcGVkLiAqLwotCi0gICAgaWYgKG0uYSgpICogbS5kKCkgLSBtLmMoKSAqIG0uYigpIDwgMC4w
KSB7Ci0gICAgICAgIC8vIEZsaXAgYXhpcyB3aXRoIG1pbmltdW0gdW5pdCB2ZWN0b3IgZG90IHBy
b2R1Y3QKLQotICAgICAgICBpZiAobS5hKCkgPCBtLmQoKSkKLSAgICAgICAgICAgIHN4ID0gLXN4
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzeSA9IC1zeTsKLSAgICB9Ci0KLSAgICAvLyBS
ZW1vdmUgc2NhbGUgZnJvbSBtYXRyaXgKLQotICAgIG0uc2NhbGUoMS4wIC8gc3gsIDEuMCAvIHN5
KTsKLQotICAgIC8vIENvbXB1dGUgcm90YXRpb24KLQotICAgIGRvdWJsZSBhbmdsZSA9IGF0YW4y
KG0uYigpLCBtLmEoKSk7Ci0KLSAgICAvLyBSZW1vdmUgcm90YXRpb24gZnJvbSBtYXRyaXgKLQot
ICAgIG0ucm90YXRlKHJhZDJkZWcoLWFuZ2xlKSk7Ci0KLSAgICAvLyBSZXR1cm4gcmVzdWx0cwot
Ci0gICAgc3JbMF0gPSBzeDsgc3JbMV0gPSBzeTsgc3JbMl0gPSBhbmdsZTsKLSAgICBzclszXSA9
IG0uYSgpOyBzcls0XSA9IG0uYigpOwotICAgIHNyWzVdID0gbS5jKCk7IHNyWzZdID0gbS5kKCk7
Ci0gICAgc3JbN10gPSBtLmUoKTsgc3JbOF0gPSBtLmYoKTsKLX0KLQotc3RhdGljIHZvaWQgYWZm
aW5lVHJhbnNmb3JtQ29tcG9zZShBZmZpbmVUcmFuc2Zvcm0mIG0sIGNvbnN0IGRvdWJsZSBzcls5
XSkKLXsKLSAgICBtLnNldEEoc3JbM10pOwotICAgIG0uc2V0Qihzcls0XSk7Ci0gICAgbS5zZXRD
KHNyWzVdKTsKLSAgICBtLnNldEQoc3JbNl0pOwotICAgIG0uc2V0RShzcls3XSk7Ci0gICAgbS5z
ZXRGKHNyWzhdKTsKLSAgICBtLnJvdGF0ZShyYWQyZGVnKHNyWzJdKSk7Ci0gICAgbS5zY2FsZShz
clswXSwgc3JbMV0pOwotfQotCi1ib29sIEFmZmluZVRyYW5zZm9ybTo6aXNJbnZlcnRpYmxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZGV0KCkgIT0gMC4wOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0m
IEFmZmluZVRyYW5zZm9ybTo6bXVsdGlwbHkoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcikK
LXsKLSAgICByZXR1cm4gKCp0aGlzKSAqPSBvdGhlcjsKLX0KLQotQWZmaW5lVHJhbnNmb3JtJiBB
ZmZpbmVUcmFuc2Zvcm06OnNjYWxlKGRvdWJsZSBzKQotewotICAgIHJldHVybiBzY2FsZShzLCBz
KTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlTm9uVW5pZm9y
bShkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAgICByZXR1cm4gc2NhbGUoc3gsIHN5KTsKLX0K
LQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnJvdGF0ZUZyb21WZWN0b3IoZG91
YmxlIHgsIGRvdWJsZSB5KQotewotICAgIHJldHVybiByb3RhdGUocmFkMmRlZyhhdGFuMih5LCB4
KSkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6ZmxpcFgoKQotewot
ICAgIHJldHVybiBzY2FsZSgtMS4wZiwgMS4wZik7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSYgQWZm
aW5lVHJhbnNmb3JtOjpmbGlwWSgpCi17Ci0gICAgcmV0dXJuIHNjYWxlKDEuMGYsIC0xLjBmKTsK
LX0KLQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNrZXcoZG91YmxlIGFuZ2xl
WCwgZG91YmxlIGFuZ2xlWSkKLXsKLSAgICByZXR1cm4gc2hlYXIodGFuKGRlZzJyYWQoYW5nbGVY
KSksIHRhbihkZWcycmFkKGFuZ2xlWSkpKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVU
cmFuc2Zvcm06OnNrZXdYKGRvdWJsZSBhbmdsZSkKLXsKLSAgICByZXR1cm4gc2hlYXIodGFuKGRl
ZzJyYWQoYW5nbGUpKSwgMC4wZik7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNm
b3JtOjpza2V3WShkb3VibGUgYW5nbGUpCi17Ci0gICAgcmV0dXJuIHNoZWFyKDAuMGYsIHRhbihk
ZWcycmFkKGFuZ2xlKSkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0
cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KQotewotICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShkZXN0
LngoKSAtIHNvdXJjZS54KCksIGRlc3QueSgpIC0gc291cmNlLnkoKSk7Ci0gICAgdHJhbnNmb3Jt
LnNjYWxlKGRlc3Qud2lkdGgoKSAvIHNvdXJjZS53aWR0aCgpLCBkZXN0LmhlaWdodCgpIC8gc291
cmNlLmhlaWdodCgpKTsKLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCi1JbnRQb2ludCBBZmZp
bmVUcmFuc2Zvcm06Om1hcFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAg
ICBkb3VibGUgeDIsIHkyOwotICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwgJngyLCAmeTIp
OwotICAgIAotICAgIC8vIFJvdW5kIHRoZSBwb2ludC4KLSAgICByZXR1cm4gSW50UG9pbnQobHJv
dW5kKHgyKSwgbHJvdW5kKHkyKSk7Ci19Ci0KLUZsb2F0UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjpt
YXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBkb3VibGUgeDIs
IHkyOwotICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwgJngyLCAmeTIpOwotCi0gICAgcmV0
dXJuIEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHkyKSk7Ci19Ci0KLUZsb2F0UXVhZCBBZmZpbmVUcmFuc2Zvcm06Om1hcFF1YWQoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBhdm9pZCA0IHNlcGVyYXRlIGxp
YnJhcnkgY2FsbHMuIFBvaW50IG1hcHBpbmcgcmVhbGx5IG5lZWRzCi0gICAgLy8gdG8gYmUgcGxh
dGZvcm0taW5kZXBlbmRlbnQgY29kZS4KLSAgICByZXR1cm4gRmxvYXRRdWFkKG1hcFBvaW50KHF1
YWQucDEoKSksCi0gICAgICAgICAgICAgICAgICAgICBtYXBQb2ludChxdWFkLnAyKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgbWFwUG9pbnQocXVhZC5wMygpKSwKLSAgICAgICAgICAgICAgICAg
ICAgIG1hcFBvaW50KHF1YWQucDQoKSkpOwotfQotCi12b2lkIEFmZmluZVRyYW5zZm9ybTo6Ymxl
bmQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAg
ZG91YmxlIHNyQVs5XSwgc3JCWzldOwotCi0gICAgYWZmaW5lVHJhbnNmb3JtRGVjb21wb3NlKGZy
b20sIHNyQSk7Ci0gICAgYWZmaW5lVHJhbnNmb3JtRGVjb21wb3NlKCp0aGlzLCBzckIpOwotCi0g
ICAgLy8gSWYgeC1heGlzIG9mIG9uZSBpcyBmbGlwcGVkLCBhbmQgeS1heGlzIG9mIHRoZSBvdGhl
ciwgY29udmVydCB0byBhbiB1bmZsaXBwZWQgcm90YXRpb24uCi0gICAgaWYgKChzckFbMF0gPCAw
LjAgJiYgc3JCWzFdIDwgMC4wKSB8fCAoc3JBWzFdIDwgMC4wICYmICBzckJbMF0gPCAwLjApKSB7
Ci0gICAgICAgIHNyQVswXSA9IC1zckFbMF07Ci0gICAgICAgIHNyQVsxXSA9IC1zckFbMV07Ci0g
ICAgICAgIHNyQVsyXSArPSBzckFbMl0gPCAwID8gcGlEb3VibGUgOiAtcGlEb3VibGU7Ci0gICAg
fQotCi0gICAgLy8gRG9uJ3Qgcm90YXRlIHRoZSBsb25nIHdheSBhcm91bmQuCi0gICAgc3JBWzJd
ID0gZm1vZChzckFbMl0sIDIuMCAqIHBpRG91YmxlKTsKLSAgICBzckJbMl0gPSBmbW9kKHNyQlsy
XSwgMi4wICogcGlEb3VibGUpOwotCi0gICAgaWYgKGZhYnMoc3JBWzJdIC0gc3JCWzJdKSA+IHBp
RG91YmxlKSB7Ci0gICAgICAgIGlmIChzckFbMl0gPiBzckJbMl0pCi0gICAgICAgICAgICBzckFb
Ml0gLT0gcGlEb3VibGUgKiAyLjA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNyQlsyXSAt
PSBwaURvdWJsZSAqIDIuMDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDk7IGkr
KykKLSAgICAgICAgc3JBW2ldID0gc3JBW2ldICsgcHJvZ3Jlc3MgKiAoc3JCW2ldIC0gc3JBW2ld
KTsKLQotICAgIGFmZmluZVRyYW5zZm9ybUNvbXBvc2UoKnRoaXMsIHNyQSk7Ci19Ci0KLX0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaAkocmV2aXNp
b24gMzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIEFmZmluZVRyYW5zZm9ybV9oCi0jZGVmaW5lIEFmZmluZVRyYW5zZm9ybV9o
Ci0KLSNpZiBQTEFURk9STShDRykKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dBZmZpbmVUcmFu
c2Zvcm0uaD4KLXR5cGVkZWYgQ0dBZmZpbmVUcmFuc2Zvcm0gUGxhdGZvcm1BZmZpbmVUcmFuc2Zv
cm07Ci0jZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxRTWF0cml4PgotdHlwZWRlZiBRTWF0
cml4IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtOwotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0jaW5j
bHVkZSA8Y2Fpcm8uaD4KLXR5cGVkZWYgY2Fpcm9fbWF0cml4X3QgUGxhdGZvcm1BZmZpbmVUcmFu
c2Zvcm07Ci0jZWxpZiBQTEFURk9STShTS0lBKQotI2luY2x1ZGUgIlNrTWF0cml4LmgiCi10eXBl
ZGVmIFNrTWF0cml4IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtOwotI2VsaWYgUExBVEZPUk0oV1gp
ICYmIFVTRShXWEdDKQotI2luY2x1ZGUgPHd4L2RlZnMuaD4KLSNpbmNsdWRlIDx3eC9ncmFwaGlj
cy5oPgotdHlwZWRlZiB3eEdyYXBoaWNzTWF0cml4IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtOwot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJ
bnRSZWN0OwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEZsb2F0
UXVhZDsKLQotY2xhc3MgQWZmaW5lVHJhbnNmb3JtIHsKLXB1YmxpYzoKLSAgICBBZmZpbmVUcmFu
c2Zvcm0oKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUg
YywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7Ci0jaWYgIVBMQVRGT1JNKFdYKSB8fCBV
U0UoV1hHQykKLSAgICBBZmZpbmVUcmFuc2Zvcm0oY29uc3QgUGxhdGZvcm1BZmZpbmVUcmFuc2Zv
cm0mKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBk
b3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7Ci0gICAgdm9pZCBtYXAoZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgKngyLCBkb3VibGUgKnkyKSBjb25zdDsKLQotICAgIC8v
IFJvdW5kcyB0aGUgbWFwcGVkIHBvaW50IHRvIHRoZSBuZWFyZXN0IGludGVnZXIgdmFsdWUuCi0g
ICAgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLQotICAgIEZsb2F0
UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotCi0gICAgLy8gUm91bmRz
IHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQuIFRoaXMgaXMgaGVscGZ1bCBmb3Ig
Ym91bmRpbmcKLSAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1dCBtYXkgbm90IGJlIHdoYXQgaXMg
d2FudGVkIGluIG90aGVyIGNvbnRleHRzLgotICAgIEludFJlY3QgbWFwUmVjdChjb25zdCBJbnRS
ZWN0JikgY29uc3Q7Ci0KLSAgICBGbG9hdFJlY3QgbWFwUmVjdChjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKLQotICAgIEZsb2F0UXVhZCBtYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYpIGNvbnN0Owot
Ci0gICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Q7Ci0KLSAgICBkb3VibGUgYSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0QShkb3VibGUgYSk7Ci0KLSAgICBkb3VibGUgYigpIGNvbnN0OwotICAgIHZv
aWQgc2V0Qihkb3VibGUgYik7Ci0KLSAgICBkb3VibGUgYygpIGNvbnN0OwotICAgIHZvaWQgc2V0
Qyhkb3VibGUgYyk7Ci0KLSAgICBkb3VibGUgZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0RChkb3Vi
bGUgZCk7Ci0KLSAgICBkb3VibGUgZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RShkb3VibGUgZSk7
Ci0KLSAgICBkb3VibGUgZigpIGNvbnN0OwotICAgIHZvaWQgc2V0Rihkb3VibGUgZik7Ci0KLSAg
ICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0mIG11bHRpcGx5KGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpOwotICAgIEFmZmluZVRyYW5zZm9ybSYgc2NhbGUoZG91YmxlKTsgCi0g
ICAgQWZmaW5lVHJhbnNmb3JtJiBzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSk7IAotICAgIEFm
ZmluZVRyYW5zZm9ybSYgc2NhbGVOb25Vbmlmb3JtKGRvdWJsZSBzeCwgZG91YmxlIHN5KTsKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZShkb3VibGUgZCk7Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
JiByb3RhdGVGcm9tVmVjdG9yKGRvdWJsZSB4LCBkb3VibGUgeSk7Ci0gICAgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpOwotICAgIEFmZmluZVRyYW5zZm9y
bSYgc2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpOwotICAgIEFmZmluZVRyYW5zZm9ybSYgZmxp
cFgoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0mIGZsaXBZKCk7Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
JiBza2V3KGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkpOwotICAgIEFmZmluZVRyYW5zZm9y
bSYgc2tld1goZG91YmxlIGFuZ2xlKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXdZKGRvdWJs
ZSBhbmdsZSk7Ci0gCi0gICAgZG91YmxlIGRldCgpIGNvbnN0OwotICAgIGJvb2wgaXNJbnZlcnRp
YmxlKCkgY29uc3Q7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGludmVyc2UoKSBjb25zdDsKLQotICAg
IHZvaWQgYmxlbmQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Mp
OwotCi0jaWYgIVBMQVRGT1JNKFdYKSB8fCBVU0UoV1hHQykKLSAgICBvcGVyYXRvciBQbGF0Zm9y
bUFmZmluZVRyYW5zZm9ybSgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OyB9Ci0gICAgQWZmaW5lVHJhbnNmb3JtJiBvcGVyYXRvcio9KGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpOwotICAgIEFmZmluZVRyYW5zZm9ybSBvcGVyYXRvciooY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7Ci0gICAgCi1wcml2YXRlOgotI2lmICFQTEFURk9STShXWCkgfHwgVVNFKFdYR0MpCi0gICAg
UGxhdGZvcm1BZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci0jZW5kaWYKLX07Ci0KLUFmZmlu
ZVRyYW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3QpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBBZmZpbmVUcmFuc2Zvcm1faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDM5
MzM4KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHA6
MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJh
bnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBhZmZpbmVUcmFuc2Zvcm1EZWNvbXBv
c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgsIGRvdWJsZSBzcls5XSkKK3sKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gbShtYXRyaXgpOworCisgICAgLy8gQ29tcHV0ZSBzY2FsaW5nIGZhY3Rv
cnMKKyAgICBkb3VibGUgc3ggPSBzcXJ0KG0uYSgpICogbS5hKCkgKyBtLmIoKSAqIG0uYigpKTsK
KyAgICBkb3VibGUgc3kgPSBzcXJ0KG0uYygpICogbS5jKCkgKyBtLmQoKSAqIG0uZCgpKTsKKwor
ICAgIC8qIENvbXB1dGUgY3Jvc3MgcHJvZHVjdCBvZiB0cmFuc2Zvcm1lZCB1bml0IHZlY3RvcnMu
IElmIG5lZ2F0aXZlLAorICAgICAgICBvbmUgYXhpcyB3YXMgZmxpcHBlZC4gKi8KKworICAgIGlm
IChtLmEoKSAqIG0uZCgpIC0gbS5jKCkgKiBtLmIoKSA8IDAuMCkgeworICAgICAgICAvLyBGbGlw
IGF4aXMgd2l0aCBtaW5pbXVtIHVuaXQgdmVjdG9yIGRvdCBwcm9kdWN0CisKKyAgICAgICAgaWYg
KG0uYSgpIDwgbS5kKCkpCisgICAgICAgICAgICBzeCA9IC1zeDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3kgPSAtc3k7CisgICAgfQorCisgICAgLy8gUmVtb3ZlIHNjYWxlIGZyb20gbWF0
cml4CisKKyAgICBtLnNjYWxlKDEuMCAvIHN4LCAxLjAgLyBzeSk7CisKKyAgICAvLyBDb21wdXRl
IHJvdGF0aW9uCisKKyAgICBkb3VibGUgYW5nbGUgPSBhdGFuMihtLmIoKSwgbS5hKCkpOworCisg
ICAgLy8gUmVtb3ZlIHJvdGF0aW9uIGZyb20gbWF0cml4CisKKyAgICBtLnJvdGF0ZShyYWQyZGVn
KC1hbmdsZSkpOworCisgICAgLy8gUmV0dXJuIHJlc3VsdHMKKworICAgIHNyWzBdID0gc3g7IHNy
WzFdID0gc3k7IHNyWzJdID0gYW5nbGU7CisgICAgc3JbM10gPSBtLmEoKTsgc3JbNF0gPSBtLmIo
KTsKKyAgICBzcls1XSA9IG0uYygpOyBzcls2XSA9IG0uZCgpOworICAgIHNyWzddID0gbS5lKCk7
IHNyWzhdID0gbS5mKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFmZmluZVRyYW5zZm9ybUNvbXBvc2Uo
QWZmaW5lVHJhbnNmb3JtJiBtLCBjb25zdCBkb3VibGUgc3JbOV0pCit7CisgICAgbS5zZXRBKHNy
WzNdKTsKKyAgICBtLnNldEIoc3JbNF0pOworICAgIG0uc2V0Qyhzcls1XSk7CisgICAgbS5zZXRE
KHNyWzZdKTsKKyAgICBtLnNldEUoc3JbN10pOworICAgIG0uc2V0Rihzcls4XSk7CisgICAgbS5y
b3RhdGUocmFkMmRlZyhzclsyXSkpOworICAgIG0uc2NhbGUoc3JbMF0sIHNyWzFdKTsKK30KKwor
Ym9vbCBBZmZpbmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGRldCgpICE9IDAuMDsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06Om11
bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIpCit7CisgICAgcmV0dXJuICgqdGhp
cykgKj0gb3RoZXI7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2Fs
ZShkb3VibGUgcykKK3sKKyAgICByZXR1cm4gc2NhbGUocywgcyk7Cit9CisKK0FmZmluZVRyYW5z
Zm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2FsZU5vblVuaWZvcm0oZG91YmxlIHN4LCBkb3VibGUg
c3kpCit7CisgICAgcmV0dXJuIHNjYWxlKHN4LCBzeSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYg
QWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sK
KyAgICByZXR1cm4gcm90YXRlKHJhZDJkZWcoYXRhbjIoeSwgeCkpKTsKK30KKworQWZmaW5lVHJh
bnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OmZsaXBYKCkKK3sKKyAgICByZXR1cm4gc2NhbGUoLTEu
MGYsIDEuMGYpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6ZmxpcFko
KQoreworICAgIHJldHVybiBzY2FsZSgxLjBmLCAtMS4wZik7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSYgQWZmaW5lVHJhbnNmb3JtOjpza2V3KGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkpCit7
CisgICAgcmV0dXJuIHNoZWFyKHRhbihkZWcycmFkKGFuZ2xlWCkpLCB0YW4oZGVnMnJhZChhbmds
ZVkpKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpza2V3WChkb3Vi
bGUgYW5nbGUpCit7CisgICAgcmV0dXJuIHNoZWFyKHRhbihkZWcycmFkKGFuZ2xlKSksIDAuMGYp
OworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6c2tld1koZG91YmxlIGFu
Z2xlKQoreworICAgIHJldHVybiBzaGVhcigwLjBmLCB0YW4oZGVnMnJhZChhbmdsZSkpKTsKK30K
KworQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVjdHMoY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCkKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGVzdC54KCkgLSBzb3VyY2UueCgpLCBk
ZXN0LnkoKSAtIHNvdXJjZS55KCkpOworICAgIHRyYW5zZm9ybS5zY2FsZShkZXN0LndpZHRoKCkg
LyBzb3VyY2Uud2lkdGgoKSwgZGVzdC5oZWlnaHQoKSAvIHNvdXJjZS5oZWlnaHQoKSk7CisgICAg
cmV0dXJuIHRyYW5zZm9ybTsKK30KKworSW50UG9pbnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZG91YmxlIHgyLCB5MjsKKyAg
ICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsKKyAgICAKKyAgICAvLyBSb3Vu
ZCB0aGUgcG9pbnQuCisgICAgcmV0dXJuIEludFBvaW50KGxyb3VuZCh4MiksIGxyb3VuZCh5Mikp
OworfQorCitGbG9hdFBvaW50IEFmZmluZVRyYW5zZm9ybTo6bWFwUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZG91YmxlIHgyLCB5MjsKKyAgICBtYXAocG9pbnQu
eCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsKKworICAgIHJldHVybiBGbG9hdFBvaW50KHN0YXRp
Y19jYXN0PGZsb2F0Pih4MiksIHN0YXRpY19jYXN0PGZsb2F0Pih5MikpOworfQorCitGbG9hdFF1
YWQgQWZmaW5lVHJhbnNmb3JtOjptYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogYXZvaWQgNCBzZXBlcmF0ZSBsaWJyYXJ5IGNhbGxzLiBQb2ludCBt
YXBwaW5nIHJlYWxseSBuZWVkcworICAgIC8vIHRvIGJlIHBsYXRmb3JtLWluZGVwZW5kZW50IGNv
ZGUuCisgICAgcmV0dXJuIEZsb2F0UXVhZChtYXBQb2ludChxdWFkLnAxKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgbWFwUG9pbnQocXVhZC5wMigpKSwKKyAgICAgICAgICAgICAgICAgICAgIG1h
cFBvaW50KHF1YWQucDMoKSksCisgICAgICAgICAgICAgICAgICAgICBtYXBQb2ludChxdWFkLnA0
KCkpKTsKK30KKwordm9pZCBBZmZpbmVUcmFuc2Zvcm06OmJsZW5kKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKQoreworICAgIGRvdWJsZSBzckFbOV0sIHNyQls5
XTsKKworICAgIGFmZmluZVRyYW5zZm9ybURlY29tcG9zZShmcm9tLCBzckEpOworICAgIGFmZmlu
ZVRyYW5zZm9ybURlY29tcG9zZSgqdGhpcywgc3JCKTsKKworICAgIC8vIElmIHgtYXhpcyBvZiBv
bmUgaXMgZmxpcHBlZCwgYW5kIHktYXhpcyBvZiB0aGUgb3RoZXIsIGNvbnZlcnQgdG8gYW4gdW5m
bGlwcGVkIHJvdGF0aW9uLgorICAgIGlmICgoc3JBWzBdIDwgMC4wICYmIHNyQlsxXSA8IDAuMCkg
fHwgKHNyQVsxXSA8IDAuMCAmJiAgc3JCWzBdIDwgMC4wKSkgeworICAgICAgICBzckFbMF0gPSAt
c3JBWzBdOworICAgICAgICBzckFbMV0gPSAtc3JBWzFdOworICAgICAgICBzckFbMl0gKz0gc3JB
WzJdIDwgMCA/IHBpRG91YmxlIDogLXBpRG91YmxlOworICAgIH0KKworICAgIC8vIERvbid0IHJv
dGF0ZSB0aGUgbG9uZyB3YXkgYXJvdW5kLgorICAgIHNyQVsyXSA9IGZtb2Qoc3JBWzJdLCAyLjAg
KiBwaURvdWJsZSk7CisgICAgc3JCWzJdID0gZm1vZChzckJbMl0sIDIuMCAqIHBpRG91YmxlKTsK
KworICAgIGlmIChmYWJzKHNyQVsyXSAtIHNyQlsyXSkgPiBwaURvdWJsZSkgeworICAgICAgICBp
ZiAoc3JBWzJdID4gc3JCWzJdKQorICAgICAgICAgICAgc3JBWzJdIC09IHBpRG91YmxlICogMi4w
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzckJbMl0gLT0gcGlEb3VibGUgKiAyLjA7Cisg
ICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCisgICAgICAgIHNyQVtpXSA9
IHNyQVtpXSArIHByb2dyZXNzICogKHNyQltpXSAtIHNyQVtpXSk7CisKKyAgICBhZmZpbmVUcmFu
c2Zvcm1Db21wb3NlKCp0aGlzLCBzckEpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oCShyZXZp
c2lvbiAzOTMzOCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zv
cm0uaDozOTMzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZp
bmVUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBZmZpbmVUcmFuc2Zvcm1faAorI2RlZmluZSBBZmZp
bmVUcmFuc2Zvcm1faAorCisjaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NHQWZmaW5lVHJhbnNmb3JtLmg+Cit0eXBlZGVmIENHQWZmaW5lVHJhbnNmb3JtIFBsYXRmb3Jt
QWZmaW5lVHJhbnNmb3JtOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UU1hdHJpeD4K
K3R5cGVkZWYgUU1hdHJpeCBQbGF0Zm9ybUFmZmluZVRyYW5zZm9ybTsKKyNlbGlmIFBMQVRGT1JN
KENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+Cit0eXBlZGVmIGNhaXJvX21hdHJpeF90IFBsYXRm
b3JtQWZmaW5lVHJhbnNmb3JtOworI2VsaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJTa01h
dHJpeC5oIgordHlwZWRlZiBTa01hdHJpeCBQbGF0Zm9ybUFmZmluZVRyYW5zZm9ybTsKKyNlbGlm
IFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykKKyNpbmNsdWRlIDx3eC9kZWZzLmg+CisjaW5jbHVk
ZSA8d3gvZ3JhcGhpY3MuaD4KK3R5cGVkZWYgd3hHcmFwaGljc01hdHJpeCBQbGF0Zm9ybUFmZmlu
ZVRyYW5zZm9ybTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFBv
aW50OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7
CitjbGFzcyBGbG9hdFF1YWQ7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybSB7CitwdWJsaWM6Cisg
ICAgQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtKGRvdWJsZSBhLCBkb3Vi
bGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworI2lmICFQTEFU
Rk9STShXWCkgfHwgVVNFKFdYR0MpCisgICAgQWZmaW5lVHJhbnNmb3JtKGNvbnN0IFBsYXRmb3Jt
QWZmaW5lVHJhbnNmb3JtJik7CisjZW5kaWYKKworICAgIHZvaWQgc2V0TWF0cml4KGRvdWJsZSBh
LCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworICAg
IHZvaWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlICp4MiwgZG91YmxlICp5MikgY29u
c3Q7CisKKyAgICAvLyBSb3VuZHMgdGhlIG1hcHBlZCBwb2ludCB0byB0aGUgbmVhcmVzdCBpbnRl
Z2VyIHZhbHVlLgorICAgIEludFBvaW50IG1hcFBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7
CisKKyAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKwor
ICAgIC8vIFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCByZWN0YW5nbGUgb3V0LiBUaGlzIGlz
IGhlbHBmdWwgZm9yIGJvdW5kaW5nCisgICAgLy8gYm94IGNvbXB1dGF0aW9ucyBidXQgbWF5IG5v
dCBiZSB3aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0cy4KKyAgICBJbnRSZWN0IG1hcFJl
Y3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IG1hcFJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7CisKKyAgICBGbG9hdFF1YWQgbWFwUXVhZChjb25zdCBGbG9hdFF1
YWQmKSBjb25zdDsKKworICAgIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0OworCisgICAgZG91Ymxl
IGEoKSBjb25zdDsKKyAgICB2b2lkIHNldEEoZG91YmxlIGEpOworCisgICAgZG91YmxlIGIoKSBj
b25zdDsKKyAgICB2b2lkIHNldEIoZG91YmxlIGIpOworCisgICAgZG91YmxlIGMoKSBjb25zdDsK
KyAgICB2b2lkIHNldEMoZG91YmxlIGMpOworCisgICAgZG91YmxlIGQoKSBjb25zdDsKKyAgICB2
b2lkIHNldEQoZG91YmxlIGQpOworCisgICAgZG91YmxlIGUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEUoZG91YmxlIGUpOworCisgICAgZG91YmxlIGYoKSBjb25zdDsKKyAgICB2b2lkIHNldEYoZG91
YmxlIGYpOworCisgICAgdm9pZCByZXNldCgpOworCisgICAgQWZmaW5lVHJhbnNmb3JtJiBtdWx0
aXBseShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxl
KGRvdWJsZSk7IAorICAgIEFmZmluZVRyYW5zZm9ybSYgc2NhbGUoZG91YmxlIHN4LCBkb3VibGUg
c3kpOyAKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRv
dWJsZSBzeSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiByb3RhdGUoZG91YmxlIGQpOworICAgIEFm
ZmluZVRyYW5zZm9ybSYgcm90YXRlRnJvbVZlY3Rvcihkb3VibGUgeCwgZG91YmxlIHkpOworICAg
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0mIHNoZWFyKGRvdWJsZSBzeCwgZG91YmxlIHN5KTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0mIGZsaXBYKCk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiBmbGlwWSgpOworICAgIEFm
ZmluZVRyYW5zZm9ybSYgc2tldyhkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZKTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0mIHNrZXdYKGRvdWJsZSBhbmdsZSk7CisgICAgQWZmaW5lVHJhbnNmb3Jt
JiBza2V3WShkb3VibGUgYW5nbGUpOworIAorICAgIGRvdWJsZSBkZXQoKSBjb25zdDsKKyAgICBi
b29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0OworICAgIEFmZmluZVRyYW5zZm9ybSBpbnZlcnNlKCkg
Y29uc3Q7CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91
YmxlIHByb2dyZXNzKTsKKworI2lmICFQTEFURk9STShXWCkgfHwgVVNFKFdYR0MpCisgICAgb3Bl
cmF0b3IgUGxhdGZvcm1BZmZpbmVUcmFuc2Zvcm0oKSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsgfQorICAgIEFmZmluZVRyYW5zZm9ybSYgb3BlcmF0b3IqPShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gb3BlcmF0b3IqKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpOworICAgIAorcHJpdmF0ZToKKyNpZiAhUExBVEZPUk0oV1gpIHx8IFVT
RShXWEdDKQorICAgIFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOworI2VuZGlm
Cit9OworCitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQWZmaW5lVHJhbnNmb3JtX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRy
YW5zZm9ybU9wZXJhdGlvbi5oCShyZXZpc2lvbiAzOTMzOCkJKGZyb20gV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaDozOTMzOCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uX2gKKyNkZWZpbmUgSWRlbnRpdHlU
cmFuc2Zvcm1PcGVyYXRpb25faAorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24g
OiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24oKSk7CisgICAg
fQorICAgICAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIElERU5USVRZOyB9CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5
cGUoKSA9PSBJREVOVElUWTsgfQorCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzU2Ft
ZVR5cGUobyk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxU
cmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwg
ZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCitwcml2YXRlOgorICAgIElkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uKCkKKyAgICB7CisgICAgfQorCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6MzkzMzgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7CisgICAgaWYgKGZyb20gJiYgIWZyb20t
PmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gdGhpczsKKworICAgIC8vIGNvbnZl
cnQgdGhlIFRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBtYXRyaWNlcworICAgIEludFNpemUgc2l6
ZTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZnJvbVQ7CisgICAgQWZmaW5lVHJhbnNmb3JtIHRvVCht
X2EsIG1fYiwgbV9jLCBtX2QsIG1fZSwgbV9mKTsKKyAgICBpZiAoZnJvbSkgeworICAgICAgICBj
b25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIG0gPSBzdGF0aWNfY2FzdDxjb25zdCBNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKKyAgICAgICAgZnJvbVQuc2V0TWF0cml4KG0t
Pm1fYSwgbS0+bV9iLCBtLT5tX2MsIG0tPm1fZCwgbS0+bV9lLCBtLT5tX2YpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQorICAgICAgICBzdGQ6OnN3YXAoZnJvbVQsIHRv
VCk7CisKKyAgICB0b1QuYmxlbmQoZnJvbVQsIHByb2dyZXNzKTsKKyAgICByZXR1cm4gTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG9ULmEoKSwgdG9ULmIoKSwgdG9ULmMoKSwgdG9U
LmQoKSwgdG9ULmUoKSwgdG9ULmYoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5MzM4KQkoZnJvbSBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaDozOTMzOCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMp
IDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21h
aWwuY29tKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb25faAorI2RlZmluZSBN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb25faAorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIGEsIGRvdWJs
ZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGEsIGIsIGMs
IGQsIGUsIGYpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fYSA9PSAxICYmIG1fYiA9PSAwICYmIG1fYyA9PSAwICYmIG1fZCA9PSAxICYm
IG1fZSA9PSAwICYmIG1fZiA9PSAwOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9w
ZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBNQVRSSVg7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8u
Z2V0T3BlcmF0aW9uVHlwZSgpID09IE1BVFJJWDsgfQorCisgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKKyAgICAgICAgcmV0dXJuIG1fYSA9PSBtLT5t
X2EgJiYgbV9iID09IG0tPm1fYiAmJiBtX2MgPT0gbS0+bV9jICYmIG1fZCA9PSBtLT5tX2QgJiYg
bV9lID09IG0tPm1fZSAmJiBtX2YgPT0gbS0+bV9mOworICAgIH0KKworICAgIHZpcnR1YWwgYm9v
bCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVy
Qm94U2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9h
LCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7CisgICAgICAgIHRyYW5zZm9ybSA9IG1hdHJpeCAq
IHRyYW5zZm9ybTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNl
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBh
LCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCisgICAg
ICAgIDogbV9hKGEpCisgICAgICAgICwgbV9iKGIpCisgICAgICAgICwgbV9jKGMpCisgICAgICAg
ICwgbV9kKGQpCisgICAgICAgICwgbV9lKGUpCisgICAgICAgICwgbV9mKGYpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgbV9hOworICAgIGRvdWJsZSBtX2I7CisgICAgZG91YmxlIG1f
YzsKKyAgICBkb3VibGUgbV9kOworICAgIGRvdWJsZSBtX2U7CisgICAgZG91YmxlIG1fZjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2aXNp
b24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7CisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlz
U2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICAKKyAgICBpZiAoYmxl
bmRUb0lkZW50aXR5KQorICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUobV9hbmdsZSAtIG1fYW5nbGUgKiBwcm9ncmVzcywgbV90eXBlKTsKKyAgICAKKyAgICBj
b25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOworICAgIGRvdWJsZSBmcm9tQW5nbGUg
PSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGUgOiAwOworICAgIHJldHVybiBSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShmcm9tQW5nbGUgKyAobV9hbmdsZSAtIGZyb21BbmdsZSkgKiBw
cm9ncmVzcywgbV90eXBlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9S
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOjM5MzM4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20p
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbl9oCisjZGVmaW5lIFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbl9oCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBw
dWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYW5nbGUsIE9wZXJhdGlv
blR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uKGFuZ2xlLCB0eXBlKSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29s
IGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlID09IDA7IH0KKyAgICB2aXJ0dWFs
IE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYg
bykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gbV90eXBlOyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogciA9IHN0
YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKKyAgICAgICAg
cmV0dXJuIG1fYW5nbGUgPT0gci0+bV9hbmdsZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
YXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJv
eFNpemUpIGNvbnN0CisgICAgeworICAgICAgICB0cmFuc2Zvcm0ucm90YXRlKG1fYW5nbGUpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRy
YW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOworCisgICAgZG91
YmxlIGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQorCitwcml2YXRlOgorICAgIFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgYW5nbGUsIE9wZXJhdGlvblR5cGUgdHlwZSkK
KyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgIHsK
KyAgICB9CisKKyAgICBkb3VibGUgbV9hbmdsZTsKKyAgICBPcGVyYXRpb25UeXBlIG1fdHlwZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAJKHJldmlz
aW9uIDM5MzM4KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVz
cywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7CisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2Ft
ZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICAKKyAgICBpZiAoYmxlbmRU
b0lkZW50aXR5KQorICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShtX3ggKyAoMS4gLSBtX3gpICogcHJvZ3Jlc3MsIG1feSArICgxLiAtIG1feSkgKiBwcm9ncmVz
cywgbV90eXBlKTsKKyAgICAKKyAgICBjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJv
bU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsK
KyAgICBkb3VibGUgZnJvbVggPSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6IDEuOworICAgIGRvdWJs
ZSBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogMS47CisgICAgcmV0dXJuIFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbVggKyAobV94IC0gZnJvbVgpICogcHJvZ3Jlc3Ms
IGZyb21ZICsgKG1feSAtIGZyb21ZKSAqIHByb2dyZXNzLCBtX3R5cGUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNp
b24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmg6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisg
KiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdy
YWhhbS5kZW5uaXNAZ21haWwuY29tKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bl9oCisjZGVmaW5lIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uX2gKKworI2luY2x1ZGUgIlRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3Vi
bGUgc3gsIGRvdWJsZSBzeSwgT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwgc3ksIHR5cGUpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
eCA9PSAxICYmICBtX3kgPT0gMTsgfQorICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVy
YXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBib29sIGlz
U2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdl
dE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29u
c3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHMgPSBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKKyAgICAgICAgcmV0dXJuIG1feCA9PSBzLT5tX3ggJiYg
bV95ID09IHMtPm1feTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0Cisg
ICAgeworICAgICAgICB0cmFuc2Zvcm0uc2NhbGUobV94LCBtX3kpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Ms
IGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUp
CisgICAgICAgIDogbV94KHN4KQorICAgICAgICAsIG1feShzeSkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICB7CisgICAgfQorICAgICAgICAKKyAgICBkb3VibGUgbV94OworICAgIGRvdWJs
ZSBtX3k7CisgICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Nr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCShyZXZpc2lvbiAzOTMzOCkJKGZyb20gV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHA6MzkzMzgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2tld1RyYW5zZm9ybU9wZXJh
dGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8VHJhbnNmb3JtT3Bl
cmF0aW9uPiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7Cisg
ICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4g
dGhpczsKKyAgICAKKyAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQorICAgICAgICByZXR1cm4gU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1fYW5nbGVYIC0gbV9hbmdsZVggKiBwcm9ncmVz
cywgbV9hbmdsZVkgLSBtX2FuZ2xlWSAqIHByb2dyZXNzLCBtX3R5cGUpOworICAgIAorICAgIGNv
bnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKKyAgICBkb3VibGUgZnJvbUFuZ2xlWCA9IGZy
b21PcCA/IGZyb21PcC0+bV9hbmdsZVggOiAwOworICAgIGRvdWJsZSBmcm9tQW5nbGVZID0gZnJv
bU9wID8gZnJvbU9wLT5tX2FuZ2xlWSA6IDA7CisgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShmcm9tQW5nbGVYICsgKG1fYW5nbGVYIC0gZnJvbUFuZ2xlWCkgKiBwcm9n
cmVzcywgZnJvbUFuZ2xlWSArIChtX2FuZ2xlWSAtIGZyb21BbmdsZVkpICogcHJvZ3Jlc3MsIG1f
dHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1P
cGVyYXRpb24uaAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaDozOTMzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBH
cmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgU2tld1Ry
YW5zZm9ybU9wZXJhdGlvbl9oCisjZGVmaW5lIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb25faAorCisj
aW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+
IGNyZWF0ZShkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZLCBPcGVyYXRpb25UeXBlIHR5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRp
b24oYW5nbGVYLCBhbmdsZVksIHR5cGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNJ
ZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGVYID09IDAgJiYgbV9hbmdsZVkgPT0gMDsg
fQorICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBt
X3R5cGU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYgbykgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29uc3QgU2tld1RyYW5zZm9ybU9wZXJh
dGlvbiogcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7
CisgICAgICAgIHJldHVybiBtX2FuZ2xlWCA9PSBzLT5tX2FuZ2xlWCAmJiBtX2FuZ2xlWSA9PSBz
LT5tX2FuZ2xlWTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0CisgICAg
eworICAgICAgICB0cmFuc2Zvcm0uc2tldyhtX2FuZ2xlWCwgbV9hbmdsZVkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOworICAgIAorcHJpdmF0ZToKKyAg
ICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVksIE9w
ZXJhdGlvblR5cGUgdHlwZSkKKyAgICAgICAgOiBtX2FuZ2xlWChhbmdsZVgpCisgICAgICAgICwg
bV9hbmdsZVkoYW5nbGVZKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgZG91YmxlIG1fYW5nbGVYOworICAgIGRvdWJsZSBtX2FuZ2xlWTsKKyAgICBPcGVy
YXRpb25UeXBlIG1fdHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb25faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2
aXNpb24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9ybU9wZXJh
dGlvbi5oOjM5MzM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAg
ICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAg
ICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRl
bm5pc0BnbWFpbC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFRyYW5zZm9ybU9wZXJhdGlvbl9oCisjZGVmaW5l
IFRyYW5zZm9ybU9wZXJhdGlvbl9oCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENTUyBUcmFu
c2Zvcm1zIChtYXkgYmVjb21lIHBhcnQgb2YgQ1NTMykKKworY2xhc3MgVHJhbnNmb3JtT3BlcmF0
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJhbnNmb3JtT3BlcmF0aW9uPiB7CitwdWJsaWM6Cisg
ICAgZW51bSBPcGVyYXRpb25UeXBlIHsKKyAgICAgICAgU0NBTEVfWCwgU0NBTEVfWSwgU0NBTEUs
IAorICAgICAgICBUUkFOU0xBVEVfWCwgVFJBTlNMQVRFX1ksIFRSQU5TTEFURSwgCisgICAgICAg
IFJPVEFURSwgCisgICAgICAgIFNLRVdfWCwgU0tFV19ZLCBTS0VXLCAKKyAgICAgICAgTUFUUklY
LCBJREVOVElUWSwgTk9ORQorICAgIH07CisKKyAgICB2aXJ0dWFsIH5UcmFuc2Zvcm1PcGVyYXRp
b24oKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYpIGNvbnN0ID0gMDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBhcHBs
eShBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVu
ZFRvSWRlbnRpdHkgPSBmYWxzZSkgPSAwOworCisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdl
dE9wZXJhdGlvblR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJhbnNmb3JtT3BlcmF0aW9u
X2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1P
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDM5MzM4KQkoZnJvbSBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDozOTMzOCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgiCisKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybU9wZXJhdGlvbnM6OlRyYW5zZm9ybU9wZXJhdGlv
bnMoYm9vbCBtYWtlSWRlbnRpdHkpCit7CisgICAgaWYgKG1ha2VJZGVudGl0eSkKKyAgICAgICAg
bV9vcGVyYXRpb25zLmFwcGVuZChJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKCkp
OworfQorCitib29sIFRyYW5zZm9ybU9wZXJhdGlvbnM6Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyYgbykgY29uc3QKK3sKKyAgICBpZiAobV9vcGVyYXRpb25zLnNpemUoKSAh
PSBvLm1fb3BlcmF0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgdW5zaWduZWQgcyA9IG1fb3BlcmF0aW9ucy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHM7IGkrKykgeworICAgICAgICBpZiAoKm1fb3BlcmF0aW9uc1tpXSAhPSAq
by5tX29wZXJhdGlvbnNbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1PcGVyYXRpb25zLmgJKHJldmlzaW9uIDM5MzM4KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
R3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFRyYW5z
Zm9ybU9wZXJhdGlvbnNfaAorI2RlZmluZSBUcmFuc2Zvcm1PcGVyYXRpb25zX2gKKworI2luY2x1
ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJhbnNm
b3JtT3BlcmF0aW9ucyB7CitwdWJsaWM6CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyhib29sIG1h
a2VJZGVudGl0eSA9IGZhbHNlKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgbykgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBseShjb25zdCBJbnRTaXplJiBzeiwg
QWZmaW5lVHJhbnNmb3JtJiB0KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fb3BlcmF0
aW9uc1tpXS0+YXBwbHkodCwgc3opOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UmVmUHRyPFRy
YW5zZm9ybU9wZXJhdGlvbj4gPiYgb3BlcmF0aW9ucygpIHsgcmV0dXJuIG1fb3BlcmF0aW9uczsg
fQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+JiBvcGVyYXRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zOyB9CisKK3ByaXZhdGU6CisgICAgVmVj
dG9yPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID4gbV9vcGVyYXRpb25zOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJhbnNmb3JtT3BlcmF0aW9uc19oCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMzkz
MzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7CisgICAgaWYgKGZyb20gJiYgIWZy
b20tPmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICAKKyAgICBp
ZiAoYmxlbmRUb0lkZW50aXR5KQorICAgICAgICByZXR1cm4gVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoTGVuZ3RoKG1feC50eXBlKCkpLmJsZW5kKG1feCwgcHJvZ3Jlc3MpLCBM
ZW5ndGgobV95LnR5cGUoKSkuYmxlbmQobV95LCBwcm9ncmVzcyksIG1fdHlwZSk7CisKKyAgICBj
b25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNv
bnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOworICAgIExlbmd0aCBmcm9t
WCA9IGZyb21PcCA/IGZyb21PcC0+bV94IDogTGVuZ3RoKG1feC50eXBlKCkpOworICAgIExlbmd0
aCBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogTGVuZ3RoKG1feS50eXBlKCkpOworICAg
IHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3guYmxlbmQoZnJv
bVgsIHByb2dyZXNzKSwgbV95LmJsZW5kKGZyb21ZLCBwcm9ncmVzcyksIG1fdHlwZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmgJKHJldmlzaW9uIDM5MzM4KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9U
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDozOTMzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25faAorI2RlZmluZSBUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb25faAorCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSAiVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUo
Y29uc3QgTGVuZ3RoJiB0eCwgY29uc3QgTGVuZ3RoJiB0eSwgT3BlcmF0aW9uVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24odHgsIHR5LCB0eXBlKSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGlzSWRlbnRp
dHkoKSBjb25zdCB7IHJldHVybiBtX3guY2FsY0Zsb2F0VmFsdWUoMSkgPT0gMCAmJiBtX3kuY2Fs
Y0Zsb2F0VmFsdWUoMSkgPT0gMDsgfQorICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVy
YXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBib29sIGlz
U2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdl
dE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29u
c3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOworICAgICAgICByZXR1cm4gbV94ID09IHQt
Pm1feCAmJiBtX3kgPT0gdC0+bV95OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUobV94LmNhbGNGbG9hdFZh
bHVlKGJvcmRlckJveFNpemUud2lkdGgoKSksIG1feS5jYWxjRmxvYXRWYWx1ZShib3JkZXJCb3hT
aXplLmhlaWdodCgpKSk7CisgICAgICAgIHJldHVybiBtX3gudHlwZSgpID09IFBlcmNlbnQgfHwg
bV95LnR5cGUoKSA9PSBQZXJjZW50OworICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxU
cmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwg
ZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKKworcHJpdmF0
ZToKKyAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24oY29uc3QgTGVuZ3RoJiB0eCwgY29u
c3QgTGVuZ3RoJiB0eSwgT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgICAgICA6IG1feCh0eCkKKyAg
ICAgICAgLCBtX3kodHkpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKwor
ICAgIExlbmd0aCBtX3g7CisgICAgTGVuZ3RoIG1feTsKKyAgICBPcGVyYXRpb25UeXBlIG1fdHlw
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9JZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5MzM4KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRl
ZiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbl9oCi0jZGVmaW5lIElkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uX2gKLQotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGlj
IFRyYW5zZm9ybU9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SWRl
bnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uKCkpOwotICAgIH0KLSAgICAg
ICAgCi0gICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBJREVOVElUWTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0g
SURFTlRJVFk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc1NhbWVUeXBlKG8p
OwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBJZGVudGl0eVRyYW5zZm9ybU9wZXJh
dGlvbigpCi0gICAgewotICAgIH0KLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb25faApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCShyZXZp
c2lvbiAzOTMzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL01hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQotewotICAgIGlmIChmcm9tICYmICFmcm9t
LT5pc1NhbWVUeXBlKCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0KLSAgICAvLyBjb252
ZXJ0IHRoZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGludG8gbWF0cmljZXMKLSAgICBJbnRTaXplIHNp
emU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGZyb21UOwotICAgIEFmZmluZVRyYW5zZm9ybSB0b1Qo
bV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7Ci0gICAgaWYgKGZyb20pIHsKLSAgICAgICAg
Y29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiBtID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJvbSk7Ci0gICAgICAgIGZyb21ULnNldE1hdHJpeCht
LT5tX2EsIG0tPm1fYiwgbS0+bV9jLCBtLT5tX2QsIG0tPm1fZSwgbS0+bV9mKTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgc3RkOjpzd2FwKGZyb21ULCB0
b1QpOwotCi0gICAgdG9ULmJsZW5kKGZyb21ULCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJuIE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvVC5hKCksIHRvVC5iKCksIHRvVC5jKCksIHRv
VC5kKCksIHRvVC5lKCksIHRvVC5mKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uaAkocmV2aXNpb24gMzkzMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhh
bS5kZW5uaXNAZ21haWwuY29tKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb25f
aAotI2RlZmluZSBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb25faAotCi0jaW5jbHVkZSAiVHJhbnNm
b3JtT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91
YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uKGEsIGIsIGMsIGQsIGUsIGYpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVu
dGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYSA9PSAxICYmIG1fYiA9PSAwICYmIG1fYyA9PSAwICYm
IG1fZCA9PSAxICYmIG1fZSA9PSAwICYmIG1fZiA9PSAwOyB9Ci0gICAgdmlydHVhbCBPcGVyYXRp
b25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBNQVRSSVg7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0
IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9uVHlwZSgpID09IE1BVFJJWDsgfQotCi0gICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0YXRpY19j
YXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAgICAgcmV0dXJu
IG1fYSA9PSBtLT5tX2EgJiYgbV9iID09IG0tPm1fYiAmJiBtX2MgPT0gbS0+bV9jICYmIG1fZCA9
PSBtLT5tX2QgJiYgbV9lID09IG0tPm1fZSAmJiBtX2YgPT0gbS0+bV9mOwotICAgIH0KLQotICAg
IHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50
U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9y
bSBtYXRyaXgobV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7Ci0gICAgICAgIHRyYW5zZm9y
bSA9IG1hdHJpeCAqIHRyYW5zZm9ybTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVu
dGl0eSA9IGZhbHNlKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91
YmxlIGYpCi0gICAgICAgIDogbV9hKGEpCi0gICAgICAgICwgbV9iKGIpCi0gICAgICAgICwgbV9j
KGMpCi0gICAgICAgICwgbV9kKGQpCi0gICAgICAgICwgbV9lKGUpCi0gICAgICAgICwgbV9mKGYp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBkb3VibGUgbV9hOwotICAgIGRvdWJsZSBtX2I7Ci0g
ICAgZG91YmxlIG1fYzsKLSAgICBkb3VibGUgbV9kOwotICAgIGRvdWJsZSBtX2U7Ci0gICAgZG91
YmxlIG1fZjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Sb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDM5MzM4KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCi17Ci0gICAg
aWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAKLSAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV9hbmdsZSAtIG1fYW5nbGUgKiBwcm9ncmVzcywg
bV90eXBlKTsKLSAgICAKLSAgICBjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21P
cCA9IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwot
ICAgIGRvdWJsZSBmcm9tQW5nbGUgPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGUgOiAwOwotICAg
IHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShmcm9tQW5nbGUgKyAobV9h
bmdsZSAtIGZyb21BbmdsZSkgKiBwcm9ncmVzcywgbV90eXBlKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5MzM4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0g
RGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUm90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uX2gKLSNkZWZpbmUgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKLQotI2lu
Y2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bj4gY3JlYXRlKGRvdWJsZSBhbmdsZSwgT3BlcmF0aW9uVHlwZSB0eXBlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24oYW5nbGUsIHR5
cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGUgPT0gMDsgfQotICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRp
b25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2Ft
ZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9w
ZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
aXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3Qg
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiByID0gc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICByZXR1cm4gbV9hbmdsZSA9PSByLT5tX2Fu
Z2xlOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHRyYW5zZm9ybS5yb3RhdGUobV9hbmdsZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVu
ZFRvSWRlbnRpdHkgPSBmYWxzZSk7Ci0KLSAgICBkb3VibGUgYW5nbGUoKSBjb25zdCB7IHJldHVy
biBtX2FuZ2xlOyB9Ci0KLXByaXZhdGU6Ci0gICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGRv
dWJsZSBhbmdsZSwgT3BlcmF0aW9uVHlwZSB0eXBlKQotICAgICAgICA6IG1fYW5nbGUoYW5nbGUp
Ci0gICAgICAgICwgbV90eXBlKHR5cGUpCi0gICAgewotICAgIH0KLQotICAgIGRvdWJsZSBtX2Fu
Z2xlOwotICAgIE9wZXJhdGlvblR5cGUgbV90eXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAJ
KHJldmlzaW9uIDM5MzM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0
cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRv
SWRlbnRpdHkpCi17Ci0gICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQot
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKLSAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAg
ICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3ggKyAoMS4gLSBt
X3gpICogcHJvZ3Jlc3MsIG1feSArICgxLiAtIG1feSkgKiBwcm9ncmVzcywgbV90eXBlKTsKLSAg
ICAKLSAgICBjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nh
c3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKLSAgICBkb3VibGUgZnJv
bVggPSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6IDEuOwotICAgIGRvdWJsZSBmcm9tWSA9IGZyb21P
cCA/IGZyb21PcC0+bV95IDogMS47Ci0gICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoZnJvbVggKyAobV94IC0gZnJvbVgpICogcHJvZ3Jlc3MsIGZyb21ZICsgKG1feSAt
IGZyb21ZKSAqIHByb2dyZXNzLCBtX3R5cGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmgJKHJldmlzaW9uIDM5MzM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhh
bS5kZW5uaXNAZ21haWwuY29tKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbl9o
Ci0jZGVmaW5lIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uX2gKLQotI2luY2x1ZGUgIlRyYW5zZm9y
bU9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUg
c3gsIGRvdWJsZSBzeSwgT3BlcmF0aW9uVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwgc3ksIHR5cGUpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1feCA9
PSAxICYmICBtX3kgPT0gMTsgfQotICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRp
b25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2Ft
ZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9w
ZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgh
aXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3Qg
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHMgPSBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAgICAgcmV0dXJuIG1feCA9PSBzLT5tX3ggJiYgbV95
ID09IHMtPm1feTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0Ci0gICAg
ewotICAgICAgICB0cmFuc2Zvcm0uc2NhbGUobV94LCBtX3kpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4g
YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJv
b2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwotCi1wcml2YXRlOgotICAgIFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUpCi0g
ICAgICAgIDogbV94KHN4KQotICAgICAgICAsIG1feShzeSkKLSAgICAgICAgLCBtX3R5cGUodHlw
ZSkKLSAgICB7Ci0gICAgfQotICAgICAgICAKLSAgICBkb3VibGUgbV94OwotICAgIGRvdWJsZSBt
X3k7Ci0gICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2
aXNpb24gMzkzMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTa2V3VHJhbnNm
b3JtT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxUcmFu
c2Zvcm1PcGVyYXRpb24+IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSkKLXsKLSAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCi0gICAgICAg
IHJldHVybiB0aGlzOwotICAgIAotICAgIGlmIChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJl
dHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV9hbmdsZVggLSBtX2FuZ2xlWCAq
IHByb2dyZXNzLCBtX2FuZ2xlWSAtIG1fYW5nbGVZICogcHJvZ3Jlc3MsIG1fdHlwZSk7Ci0gICAg
Ci0gICAgY29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8
Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwotICAgIGRvdWJsZSBmcm9tQW5n
bGVYID0gZnJvbU9wID8gZnJvbU9wLT5tX2FuZ2xlWCA6IDA7Ci0gICAgZG91YmxlIGZyb21Bbmds
ZVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGVZIDogMDsKLSAgICByZXR1cm4gU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb21BbmdsZVggKyAobV9hbmdsZVggLSBmcm9tQW5nbGVY
KSAqIHByb2dyZXNzLCBmcm9tQW5nbGVZICsgKG1fYW5nbGVZIC0gZnJvbUFuZ2xlWSkgKiBwcm9n
cmVzcywgbV90eXBlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNp
b24gMzkzMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNmb3JtT3BlcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAw
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNv
bSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgot
ICovCi0KLSNpZm5kZWYgU2tld1RyYW5zZm9ybU9wZXJhdGlvbl9oCi0jZGVmaW5lIFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb25faAotCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiA6IHB1Ymxp
YyBUcmFuc2Zvcm1PcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZ
LCBPcGVyYXRpb25UeXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oYW5nbGVYLCBhbmdsZVksIHR5cGUpKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGVYID09
IDAgJiYgbV9hbmdsZVkgPT0gMDsgfQotICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVy
YXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
U2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdl
dE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
ICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29u
c3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX2FuZ2xlWCA9PSBzLT5tX2Fu
Z2xlWCAmJiBtX2FuZ2xlWSA9PSBzLT5tX2FuZ2xlWTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRl
ckJveFNpemUpIGNvbnN0Ci0gICAgewotICAgICAgICB0cmFuc2Zvcm0uc2tldyhtX2FuZ2xlWCwg
bV9hbmdsZVkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2Up
OwotICAgIAotcHJpdmF0ZToKLSAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhbmds
ZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICAgICAgOiBtX2FuZ2xl
WChhbmdsZVgpCi0gICAgICAgICwgbV9hbmdsZVkoYW5nbGVZKQotICAgICAgICAsIG1fdHlwZSh0
eXBlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZG91YmxlIG1fYW5nbGVYOwotICAgIGRvdWJs
ZSBtX2FuZ2xlWTsKLSAgICBPcGVyYXRpb25UeXBlIG1fdHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb25faApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9u
IDM5MzM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
MCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpZm5kZWYgVHJhbnNmb3JtT3BlcmF0aW9uX2gKLSNkZWZpbmUgVHJhbnNmb3JtT3BlcmF0aW9u
X2gKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIK
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQ1NTIFRyYW5zZm9ybXMgKG1heSBiZWNvbWUg
cGFydCBvZiBDU1MzKQotCi1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291
bnRlZDxUcmFuc2Zvcm1PcGVyYXRpb24+IHsKLXB1YmxpYzoKLSAgICBlbnVtIE9wZXJhdGlvblR5
cGUgewotICAgICAgICBTQ0FMRV9YLCBTQ0FMRV9ZLCBTQ0FMRSwgCi0gICAgICAgIFRSQU5TTEFU
RV9YLCBUUkFOU0xBVEVfWSwgVFJBTlNMQVRFLCAKLSAgICAgICAgUk9UQVRFLCAKLSAgICAgICAg
U0tFV19YLCBTS0VXX1ksIFNLRVcsIAotICAgICAgICBNQVRSSVgsIElERU5USVRZLCBOT05FCi0g
ICAgfTsKLQotICAgIHZpcnR1YWwgflRyYW5zZm9ybU9wZXJhdGlvbigpIHsgfQotCi0gICAgdmly
dHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJikgY29uc3QgPSAw
OwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5
KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNl
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBUcmFuc2Zvcm1PcGVyYXRpb25faApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDM5
MzM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5o
IgotCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1UcmFuc2Zvcm1PcGVyYXRpb25zOjpUcmFuc2Zvcm1PcGVyYXRpb25zKGJv
b2wgbWFrZUlkZW50aXR5KQotewotICAgIGlmIChtYWtlSWRlbnRpdHkpCi0gICAgICAgIG1fb3Bl
cmF0aW9ucy5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKLX0K
LQotYm9vbCBUcmFuc2Zvcm1PcGVyYXRpb25zOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3BlcmF0aW9ucy5zaXplKCkgIT0gby5t
X29wZXJhdGlvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
IHVuc2lnbmVkIHMgPSBtX29wZXJhdGlvbnMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzOyBpKyspIHsKLSAgICAgICAgaWYgKCptX29wZXJhdGlvbnNbaV0gIT0gKm8ubV9v
cGVyYXRpb25zW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAkocmV2aXNpb24gMzkz
MzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNp
Zm5kZWYgVHJhbnNmb3JtT3BlcmF0aW9uc19oCi0jZGVmaW5lIFRyYW5zZm9ybU9wZXJhdGlvbnNf
aAotCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zIHsKLXB1YmxpYzoKLSAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zKGJvb2wgbWFrZUlkZW50aXR5ID0gZmFsc2UpOwotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG8pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFwcGx5KGNvbnN0IElu
dFNpemUmIHN6LCBBZmZpbmVUcmFuc2Zvcm0mIHQpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vcGVyYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgbV9vcGVyYXRpb25zW2ldLT5hcHBseSh0LCBzeik7Ci0gICAgfQotICAgIAotICAgIFZlY3Rv
cjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+JiBvcGVyYXRpb25zKCkgeyByZXR1cm4gbV9v
cGVyYXRpb25zOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+
ID4mIG9wZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlvbnM7IH0KLQotcHJpdmF0
ZToKLSAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPiBtX29wZXJhdGlvbnM7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBUcmFuc2Zvcm1PcGVy
YXRpb25zX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMzkzMzgpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9u
PiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKLXsKLSAg
ICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykpCi0gICAgICAgIHJldHVybiB0
aGlzOwotICAgIAotICAgIGlmIChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJldHVybiBUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgobV94LnR5cGUoKSkuYmxlbmQo
bV94LCBwcm9ncmVzcyksIExlbmd0aChtX3kudHlwZSgpKS5ibGVuZChtX3ksIHByb2dyZXNzKSwg
bV90eXBlKTsKLQotICAgIGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9w
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJvbSk7
Ci0gICAgTGVuZ3RoIGZyb21YID0gZnJvbU9wID8gZnJvbU9wLT5tX3ggOiBMZW5ndGgobV94LnR5
cGUoKSk7Ci0gICAgTGVuZ3RoIGZyb21ZID0gZnJvbU9wID8gZnJvbU9wLT5tX3kgOiBMZW5ndGgo
bV95LnR5cGUoKSk7Ci0gICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKG1feC5ibGVuZChmcm9tWCwgcHJvZ3Jlc3MpLCBtX3kuYmxlbmQoZnJvbVksIHByb2dyZXNz
KSwgbV90eXBlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgJ
KHJldmlzaW9uIDM5MzM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVu
bmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gK
LSNkZWZpbmUgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKLQotI2luY2x1ZGUgIkxlbmd0
aC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zv
cm1PcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IExlbmd0aCYgdHgsIGNvbnN0IExlbmd0aCYg
dHksIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKHR4LCB0eSwgdHlwZSkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV94LmNhbGNGbG9h
dFZhbHVlKDEpID09IDAgJiYgbV95LmNhbGNGbG9hdFZhbHVlKDEpID09IDA7IH0KLSAgICB2aXJ0
dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
biYgbykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gbV90eXBlOyB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8p
IGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiog
dCA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsK
LSAgICAgICAgcmV0dXJuIG1feCA9PSB0LT5tX3ggJiYgbV95ID09IHQtPm1feTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0
IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0Ci0gICAgewotICAgICAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlKG1feC5jYWxjRmxvYXRWYWx1ZShib3JkZXJCb3hTaXplLndpZHRoKCkpLCBtX3ku
Y2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94U2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICByZXR1cm4g
bV94LnR5cGUoKSA9PSBQZXJjZW50IHx8IG1feS50eXBlKCkgPT0gUGVyY2VudDsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRl
bnRpdHkgPSBmYWxzZSk7Ci0KLXByaXZhdGU6Ci0gICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uKGNvbnN0IExlbmd0aCYgdHgsIGNvbnN0IExlbmd0aCYgdHksIE9wZXJhdGlvblR5cGUgdHlw
ZSkKLSAgICAgICAgOiBtX3godHgpCi0gICAgICAgICwgbV95KHR5KQotICAgICAgICAsIG1fdHlw
ZSh0eXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBMZW5ndGggbV94OwotICAgIExlbmd0aCBtX3k7
Ci0gICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26123</attachid>
            <date>2008-12-18 10:26:35 -0800</date>
            <delta_ts>2008-12-18 11:55:02 -0800</delta_ts>
            <desc>Replacement patch with a couple more moved files</desc>
            <filename>22888.patch</filename>
            <type>text/plain</type>
            <size>175796</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzOTM3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDgtMTItMTggIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjg4OAorCisgICAgICAgIFRv
IGF2b2lkIGZ1dHVyZSBkZXBlbmRlbmN5IGlzc3VlcywgYWxsIHRoZSBUcmFuc2Zvcm1PcGVyYXRp
b25zIGFuZCBBbmltYXRpb24gcmVsYXRlZCBmaWxlcyBuZWVkIHRvIGJlIG1vdmVkIHRvIHBsYXRm
b3JtCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogcGxhdGZvcm0vYW5pbWF0aW9uOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
QW5pbWF0aW9uLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmg6
IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0FuaW1hdGlvbi5oLgorICAgICAg
ICAqIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcDogQ29waWVkIGZyb20gV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvQW5pbWF0aW9uTGlzdC5jcHAuCisgICAgICAgICogcGxhdGZv
cm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvQW5pbWF0aW9uTGlzdC5oLgorICAgICAgICAqIHBsYXRmb3JtL2FuaW1hdGlvbi9U
aW1pbmdGdW5jdGlvbi5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UaW1p
bmdGdW5jdGlvbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9y
bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNm
b3JtLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtczog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFu
c2Zvcm0uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRy
YW5zZm9ybS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZp
bmVUcmFuc2Zvcm0uaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZp
bmVUcmFuc2Zvcm0uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lk
ZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL01hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVy
YXRpb24uaDogQ29waWVkIGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2tld1RyYW5zZm9y
bU9wZXJhdGlvbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNmb3JtT3BlcmF0aW9uLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Ry
YW5zZm9ybU9wZXJhdGlvbi5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5oOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmguCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOiBD
b3BpZWQgZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oLgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9BbmltYXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9B
bmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvQW5pbWF0aW9u
TGlzdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0FuaW1hdGlvbkxp
c3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvSWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NrZXdUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNm
b3JtT3BlcmF0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1RpbWlu
Z0Z1bmN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9y
bU9wZXJhdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9UcmFuc2Zv
cm1PcGVyYXRpb25zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvVHJh
bnNmb3JtT3BlcmF0aW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9U
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9zdHlsZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDogUmVtb3ZlZC4KKwogMjAw
OC0xMi0xOCAgQ2FtZXJvbiBad2FyaWNoICA8endhcmljaEBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzkzNzMpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTgwLDYgKzU4MCwyNyBA
QAogCQk0NkY5RDVERDBCMEQ2MDE3MDAyOEVFMzYgLyogYWxpYXNDdXJzb3IucG5nIGluIFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkY5RDVEQTBCMEQ2MDE3
MDAyOEVFMzYgLyogYWxpYXNDdXJzb3IucG5nICovOyB9OwogCQk0NkY5RDVERTBCMEQ2MDE3MDAy
OEVFMzYgLyogbm9Ecm9wQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDZGOUQ1REIwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJvcEN1cnNv
ci5wbmcgKi87IH07CiAJCTQ2RjlENURGMEIwRDYwMTcwMDI4RUUzNiAvKiBwcm9ncmVzc0N1cnNv
ci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2
RjlENURDMEIwRDYwMTcwMDI4RUUzNiAvKiBwcm9ncmVzc0N1cnNvci5wbmcgKi87IH07CisJCTQ5
RTkxMUMzMEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTExQjMwRUY4NkQ0NzAwOUQw
Q0FGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi87IH07CisJCTQ5RTkxMUM0MEVGODZENDcwMDlE
MENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUI0MEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zv
cm0uaCAqLzsgfTsKKwkJNDlFOTExQzUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUU5MTFCNTBFRjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCAqLzsgfTsKKwkJNDlFOTExQzYwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUU5MTFCNjBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
LmNwcCAqLzsgfTsKKwkJNDlFOTExQzcwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFOTExQjcwRUY4NkQ0NzAwOUQwQ0FGIC8qIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5o
ICovOyB9OworCQk0OUU5MTFDODBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RTkxMUI4MEVGODZENDcwMDlEMENBRiAvKiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3Bw
ICovOyB9OworCQk0OUU5MTFDOTBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUU5MTFCOTBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi87
IH07CisJCTQ5RTkxMUNBMEVGODZENDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5
MTFCQTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9
OworCQk0OUU5MTFDQjBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkxMUJC
MEVGODZENDcwMDlEMENBRiAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oICovOyB9OworCQk0
OUU5MTFDQzBFRjg2RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFCQzBFRjg2
RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi87IH07CisJCTQ5RTkx
MUNEMEVGODZENDcwMDlEMENBRiAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFCRDBFRjg2RDQ3MDA5
RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oICovOyB9OworCQk0OUU5MTFDRTBFRjg2
RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTFCRTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJh
bnNmb3JtT3BlcmF0aW9uLmggKi87IH07CisJCTQ5RTkxMUNGMEVGODZENDcwMDlEMENBRiAvKiBU
cmFuc2Zvcm1PcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RTkxMUJGMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRp
b25zLmNwcCAqLzsgfTsKKwkJNDlFOTExRDAwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9w
ZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RTkxMUMwMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmggKi87IH07
CisJCTQ5RTkxMUQxMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlF
OTExQzEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAg
Ki87IH07CisJCTQ5RTkxMUQyMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RTkxMUMyMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCAqLzsgfTsKKwkJNDlFOTEyQUEwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTJBNTBFRkFD
OTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmNwcCAqLzsgfTsKKwkJNDlFOTEyQUIwRUZBQzkwNjAw
OUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlFOTEyQTYwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oICovOyB9
OworCQk0OUU5MTJBQzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTJBNzBFRkFDOTA2
MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgKi87IH07CisJCTQ5RTkxMkFEMEVGQUM5MDYw
MDlEMENBRiAvKiBBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTJBODBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlz
dC5oICovOyB9OworCQk0OUU5MTJBRTBFRkFDOTA2MDA5RDBDQUYgLyogVGltaW5nRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RTkxMkE5
MEVGQUM5MDYwMDlEMENBRiAvKiBUaW1pbmdGdW5jdGlvbi5oICovOyB9OwogCQk0QThDOTZFQjBC
RTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBOEM5NkVBMEJFNjkwMzIwMDRFRUZG
MCAvKiBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tICovOyB9OwogCQk0QjE3Q0JDOTBEOTQ1QjM3
MDA1M0YxODMgLyogQWNjZXNzaWJpbGl0eU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIxN0NCQzgwRDk0NUIzNzAwNTNGMTgzIC8qIEFjY2Vz
c2liaWxpdHlPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk0QjE3Q0JDQzBEOTQ1QjkxMDA1M0YxODMgLyogQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QjE3Q0JDQTBEOTQ1QjkxMDA1M0YxODMgLyogQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0gKi87IH07CkBAIC0zMjc3LDggKzMyOTgsNiBAQAogCQlCMjY1NTRFQjBCODBENzQ5MDBBNTBF
QzMgLyogUmVuZGVyU1ZHVGV4dFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyNjU1NEU5MEI4MEQ3NDkwMEE1MEVDMyAvKiBSZW5kZXJTVkdUZXh0
UGF0aC5oICovOyB9OwogCQlCMjY2Q0Q0RDBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2
NkNENEIwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJQjI2
NkNENEUwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjY2Q0Q0QzBDM0FFQzY1MDBFQjA4RDIg
LyogSlNTVkdFeGNlcHRpb24uaCAqLzsgfTsKLQkJQjI3NTM1NTYwQjA1MzgxNDAwMkNFNjRGIC8q
IEFmZmluZVRyYW5zZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMjc1MzUyNzBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmNw
cCAqLzsgfTsKLQkJQjI3NTM1NTcwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1Mjgw
QjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTU4MEIwNTM4MTQwMDJDRTY0RiAv
KiBBZmZpbmVUcmFuc2Zvcm1DRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3Jt
Q0cuY3BwICovOyB9OwogCQlCMjc1MzU1OTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENH
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUz
NTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovOyB9OwogCQlCMjc1MzU1
QTBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLzsgfTsKQEAgLTM3NDcsOCArMzc2Niw2IEBACiAJCUJDMUEzN0MwMDk3
QzcxNUYwMDE5RjNEOCAvKiBET01WaWV3cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMxQTM3QUEwOTdDNzE1RjAwMTlGM0Q4IC8qIERPTVZpZXdzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxREVB
NEYwRTI2OEVCNjAwODNBNzNGIC8qIEpTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzFERUE0RTBFMjY4RUI2
MDA4M0E3M0YgLyogSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMyMEZC
N0YwQzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFsdWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdG
IC8qIEpTQ1NTVmFsdWVDdXN0b20uY3BwICovOyB9OwotCQlCQzIyNzFEOTBFODI0MDczMDBFN0Y5
NzUgLyogQW5pbWF0aW9uTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzIyNzFENzBFODI0MDczMDBFN0Y5NzUgLyogQW5pbWF0aW9uTGlzdC5j
cHAgKi87IH07Ci0JCUJDMjI3MURBMEU4MjQwNzMwMEU3Rjk3NSAvKiBBbmltYXRpb25MaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzIyNzFEODBF
ODI0MDczMDBFN0Y5NzUgLyogQW5pbWF0aW9uTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMjI3Mjg3MEU4MkU3MDcwMEU3Rjk3NSAvKiBT
dHlsZVJlZmxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDMjI3Mjg2MEU4MkU3MDcwMEU3Rjk3NSAvKiBTdHlsZVJlZmxlY3Rpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzIyNzJBMjBF
ODJFODdDMDBFN0Y5NzUgLyogQ3Vyc29yRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMjcyQTEwRTgyRTg3QzAwRTdGOTc1IC8qIEN1cnNvckRh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
QzIyNzJBRDBFODJFOEYzMDBFN0Y5NzUgLyogQ3Vyc29yTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMjcyQUMwRTgyRThGMzAwRTdGOTc1IC8q
IEN1cnNvckxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMzg2MCwyMCArMzg3Nyw2IEBACiAJCUJDNUVCNzJBMEU4MURFODEwMEIyNTk2NSAv
KiBTdHlsZU1hcnF1ZWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzVFQjcyODBFODFERTgxMDBCMjU5NjUgLyogU3R5bGVNYXJxdWVlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNUVC
NzREMEU4MUUwNjcwMEIyNTk2NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjc0QjBFODFFMDY3MDBCMjU5
NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuY3BwICovOyB9OwogCQlCQzVFQjc0RTBFODFFMDY3MDBC
MjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCNzRDMEU4MUUwNjcwMEIyNTk2NSAvKiBTdHlsZU11bHRp
Q29sRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUJDNUVCNzdFMEU4MUVCQTYwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCNzdEMEU4MUVC
QTYwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzVFQjc4MTBFODFFQzVCMDBCMjU5NjUgLyog
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCNzgwMEU4MUVDNUIwMEIyNTk2NSAvKiBJZGVudGl0eVRy
YW5zZm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07
Ci0JCUJDNUVCNzgzMEU4MUVDRjIwMEIyNTk2NSAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RUI3ODIw
RTgxRUNGMjAwQjI1OTY1IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKLQkJQkM1RUI3OUQwRTgxRUQ1RjAwQjI1OTY1IC8q
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM1RUI3OUMwRTgxRUQ1RjAwQjI1OTY1IC8qIFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07Ci0J
CUJDNUVCNzlGMEU4MUVERDIwMEIyNTk2NSAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjc5RTBFODFF
REQyMDBCMjU5NjUgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKCk7IH07IH07Ci0JCUJDNUVCN0EzMEU4MUVFQUYwMEIyNTk2NSAvKiBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM1RUI3QTAwRTgxRUVBRjAwQjI1OTY1IC8qIFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgKi87IH07Ci0JCUJDNUVCN0E0MEU4MUVFQUYwMEIyNTk2NSAvKiBTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzVFQjdBMTBFODFFRUFGMDBCMjU5NjUgLyogU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwICovOyB9OwotCQlCQzVFQjdBNTBFODFFRUFGMDBCMjU5NjUgLyogU2tld1Ry
YW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzVFQjdBMjBFODFFRUFGMDBCMjU5NjUgLyogU2tld1RyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgKi87IH07Ci0JCUJDNUVCN0NDMEU4MUVGNUQwMEIyNTk2NSAvKiBUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM1RUI3Q0EwRTgxRUY1RDAwQjI1OTY1IC8qIFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgKi87IH07Ci0JCUJDNUVCN0NEMEU4MUVGNUQwMEIyNTk2NSAvKiBUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNUVCN0NCMEU4MUVGNUQwMEIyNTk2NSAvKiBUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owot
CQlCQzVFQjdGNzBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCN0Y1
MEU4MUYwNTcwMEIyNTk2NSAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9Owot
CQlCQzVFQjdGODBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjdGNjBF
ODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKLQkJQkM1RUI4MEEwRTgxRjExMjAwQjI1OTY1IC8q
IFRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM1RUI4MDgwRTgxRjExMjAwQjI1OTY1IC8qIFRyYW5zZm9ybU9wZXJh
dGlvbnMuY3BwICovOyB9OwotCQlCQzVFQjgwQjBFODFGMTEyMDBCMjU5NjUgLyogVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM1RUI4MDkwRTgxRjExMjAwQjI1OTY1IC8qIFRyYW5zZm9ybU9wZXJhdGlvbnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzVFQjgwRjBF
ODFGMkNFMDBCMjU5NjUgLyogU3R5bGVUcmFuc2Zvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCODBEMEU4MUYyQ0UwMEIyNTk2NSAv
KiBTdHlsZVRyYW5zZm9ybURhdGEuY3BwICovOyB9OwogCQlCQzVFQjgxMDBFODFGMkNFMDBCMjU5
NjUgLyogU3R5bGVUcmFuc2Zvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzVFQjgwRTBFODFGMkNFMDBCMjU5NjUgLyogU3R5bGVUcmFuc2Zv
cm1EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkM1RUI4QjgwRTgyMDFCRDAwQjI1OTY1IC8qIFN0eWxlRmxleGlibGVCb3hEYXRhLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVCOEI2MEU4
MjAxQkQwMEIyNTk2NSAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgKi87IH07CkBAIC0zODg3
LDkgKzM4OTAsNiBAQAogCQlCQzVFQjk3OTBFODIwNjkyMDBCMjU5NjUgLyogQ291bnRlckNvbnRl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVC
OTc4MEU4MjA2OTIwMEIyNTk2NSAvKiBDb3VudGVyQ29udGVudC5oICovOyB9OwogCQlCQzVFQjk4
MDBFODIwNzI1MDBCMjU5NjUgLyogQ29udGVudERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RUI5N0UwRTgyMDcyNTAwQjI1OTY1IC8qIENv
bnRlbnREYXRhLmNwcCAqLzsgfTsKIAkJQkM1RUI5ODEwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRl
bnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzVFQjk3RjBFODIwNzI1MDBCMjU5NjUgLyogQ29udGVudERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlCQzVFQjlCODBFODIwQ0EwMDBCMjU5
NjUgLyogVGltaW5nRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNUVCOUI3MEU4MjBDQTAwMEIyNTk2NSAvKiBUaW1pbmdGdW5jdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDNUVC
QTBDMEU4MjNBMUMwMEIyNTk2NSAvKiBBbmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1RUJBMEEwRTgyM0ExQzAwQjI1OTY1IC8qIEFu
aW1hdGlvbi5jcHAgKi87IH07Ci0JCUJDNUVCQTBEMEU4MjNBMUMwMEIyNTk2NSAvKiBBbmltYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNUVC
QTBCMEU4MjNBMUMwMEIyNTk2NSAvKiBBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzVFQkExMDBFODIzRTQ3MDBCMjU5NjUgLyog
S2V5ZnJhbWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNUVCQTBFMEU4MjNFNDcwMEIyNTk2NSAvKiBLZXlmcmFtZUxpc3QuY3BwICovOyB9
OwogCQlCQzVFQkExMTBFODIzRTQ3MDBCMjU5NjUgLyogS2V5ZnJhbWVMaXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzVFQkEwRjBFODIzRTQ3MDBC
MjU5NjUgLyogS2V5ZnJhbWVMaXN0LmggKi87IH07CiAJCUJDNjA0OUNDMERCNTYwQzIwMDIwNDcz
OSAvKiBDU1NDYW52YXNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkM2MDQ5Q0IwREI1NjBDMjAwMjA0NzM5IC8qIENTU0NhbnZhc1ZhbHVlLmgg
Ki87IH07CkBAIC01NDE3LDYgKzU0MTcsMjcgQEAKIAkJNDZGOUQ1REEwQjBENjAxNzAwMjhFRTM2
IC8qIGFsaWFzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGFsaWFzQ3Vyc29yLnBuZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REIwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJvcEN1
cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBpbWFnZS5wbmc7IHBhdGggPSBub0Ryb3BDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NkY5RDVEQzBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3NDdXJzb3IucG5n
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2Uu
cG5nOyBwYXRoID0gcHJvZ3Jlc3NDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUU5MTFCMzBFRjg2RDQ3MDA5RDBDQUYgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFmZmluZVRyYW5zZm9ybS5jcHA7IHBh
dGggPSB0cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5RTkxMUI0MEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWZmaW5lVHJhbnNmb3JtLmg7IHBhdGgg
PSB0cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUU5MTFCNTBFRjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSWRlbnRpdHlUcmFuc2Zvcm1P
cGVyYXRpb24uaDsgcGF0aCA9IHRyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQjYwRUY4NkQ0NzAwOUQwQ0FG
IC8qIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBwYXRoID0gdHJhbnNm
b3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0OUU5MTFCNzBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5oOyBwYXRoID0gdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQjgwRUY4NkQ0NzAwOUQwQ0FGIC8q
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBwYXRoID0gdHJhbnNmb3Jt
cy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUU5MTFCOTBFRjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oOyBwYXRoID0gdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQkEwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHRyYW5zZm9ybXMvU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUU5MTFCQjBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDsg
cGF0aCA9IHRyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQkMwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHBhdGggPSB0cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUU5MTFCRDBFRjg2
RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg7IHBhdGggPSB0cmFuc2Zv
cm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDlFOTExQkUwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUcmFuc2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9
IHRyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5RTkxMUJGMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRyYW5zZm9ybU9wZXJhdGlv
bnMuY3BwOyBwYXRoID0gdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTExQzAwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5z
Zm9ybU9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVHJhbnNm
b3JtT3BlcmF0aW9ucy5oOyBwYXRoID0gdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMUMxMEVGODZENDcwMDlEMENBRiAv
KiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHRy
YW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlFOTExQzIwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9IHRyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RTkxMkE1MEVG
QUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQW5pbWF0aW9uLmNwcDsgcGF0aCA9IGFuaW1hdGlvbi9BbmltYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUU5MTJBNjBFRkFDOTA2MDA5RDBDQUYg
LyogQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFuaW1hdGlv
bi5oOyBwYXRoID0gYW5pbWF0aW9uL0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0OUU5MTJBNzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBbmltYXRpb25MaXN0LmNwcDsgcGF0
aCA9IGFuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDlFOTEyQTgwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbkxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQW5pbWF0aW9uTGlzdC5oOyBwYXRoID0gYW5pbWF0
aW9uL0FuaW1hdGlvbkxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFOTEy
QTkwRUZBQzkwNjAwOUQwQ0FGIC8qIFRpbWluZ0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFRpbWluZ0Z1bmN0aW9uLmg7IHBhdGggPSBhbmltYXRpb24vVGltaW5n
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE4Qzk2RUEwQkU2OTAz
MjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbTsgcGF0aCA9
IG1hYy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0QjE3Q0JDODBEOTQ1QjM3MDA1M0YxODMgLyogQWNjZXNzaWJpbGl0eU9iamVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5T2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCMTdDQkNBMEQ5NDVCOTEwMDUzRjE4MyAvKiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzk2Niw4ICs3OTg3LDYgQEAKIAkJQjI2NTU0RTkwQjgwRDc0OTAw
QTUwRUMzIC8qIFJlbmRlclNWR1RleHRQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJTVkdUZXh0UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMjY2Q0Q0QjBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHRXhjZXB0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI2NkNENEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZH
RXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0V4Y2Vw
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjc1MzUyNzBCMDUzODE0MDAy
Q0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBZmZpbmVUcmFuc2Zvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMjc1MzUyODBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBZmZpbmVUcmFuc2Zvcm0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRy
YW5zZm9ybUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBZmZp
bmVUcmFuc2Zvcm1DRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTJC
MEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UG9pbnRDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRSZWN0Q0cuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODQ0NSw4ICs4NDY0LDYgQEAKIAkJQkMxQTM3QUEw
OTdDNzE1RjAwMTlGM0Q4IC8qIERPTVZpZXdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBET01WaWV3cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzFERUE0
RTBFMjY4RUI2MDA4M0E3M0YgLyogSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjBGQjdFMEMwRThFNkMwMEQxNDQ3
RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0NTU1ZhbHVlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkMyMjcxRDcwRTgyNDA3MzAwRTdGOTc1IC8qIEFuaW1hdGlvbkxpc3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQW5pbWF0aW9uTGlzdC5jcHA7IHBhdGggPSBz
dHlsZS9BbmltYXRpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMy
MjcxRDgwRTgyNDA3MzAwRTdGOTc1IC8qIEFuaW1hdGlvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQW5pbWF0aW9uTGlzdC5oOyBwYXRoID0gc3R5bGUvQW5pbWF0aW9u
TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzIyNzI4NjBFODJFNzA3MDBF
N0Y5NzUgLyogU3R5bGVSZWZsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFN0eWxlUmVmbGVjdGlvbi5oOyBwYXRoID0gc3R5bGUvU3R5bGVSZWZsZWN0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjI3MkExMEU4MkU4N0MwMEU3Rjk3NSAvKiBD
dXJzb3JEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1cnNvckRhdGEu
aDsgcGF0aCA9IHN0eWxlL0N1cnNvckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkMyMjcyQUMwRTgyRThGMzAwRTdGOTc1IC8qIEN1cnNvckxpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQ3Vyc29yTGlzdC5oOyBwYXRoID0gc3R5bGUvQ3Vyc29yTGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODU2MCwyMCArODU3Nyw2IEBACiAJ
CUJDNUVCNzI4MEU4MURFODEwMEIyNTk2NSAvKiBTdHlsZU1hcnF1ZWVEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxlTWFycXVlZURhdGEuaDsgcGF0aCA9IHN0eWxl
L1N0eWxlTWFycXVlZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1RUI3
NEIwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0eWxlTXVsdGlDb2xEYXRhLmNwcDsgcGF0aCA9IHN0
eWxlL1N0eWxlTXVsdGlDb2xEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM1RUI3NEMwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxlTXVsdGlDb2xEYXRhLmg7IHBhdGggPSBzdHls
ZS9TdHlsZU11bHRpQ29sRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzVF
Qjc3RDBFODFFQkE2MDBCMjU5NjUgLyogVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRyYW5zZm9ybU9wZXJhdGlvbi5oOyBwYXRoID0gc3R5bGUv
VHJhbnNmb3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNUVC
NzgwMEU4MUVDNUIwMEIyNTk2NSAvKiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5o
OyBwYXRoID0gc3R5bGUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkM1RUI3ODIwRTgxRUNGMjAwQjI1OTY1IC8qIFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmg7IHBhdGggPSBzdHlsZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzVFQjc5QzBFODFFRDVGMDBCMjU5NjUg
LyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOyBwYXRoID0gc3R5bGUvUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNUVCNzlF
MEU4MUVERDIwMEIyNTk2NSAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9IHN0
eWxlL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkM1RUI3QTAwRTgxRUVBRjAwQjI1OTY1IC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSb3RhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwOyBwYXRoID0gc3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM1RUI3QTEwRTgxRUVBRjAwQjI1OTY1IC8q
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHN0eWxlL1NjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM1
RUI3QTIwRTgxRUVBRjAwQjI1OTY1IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5j
cHA7IHBhdGggPSBzdHlsZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkM1RUI3Q0EwRTgxRUY1RDAwQjI1OTY1IC8qIFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBwYXRoID0gc3R5bGUvVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM1
RUI3Q0IwRTgxRUY1RDAwQjI1OTY1IC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uaDsgcGF0aCA9IHN0eWxlL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzVFQjdGNTBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHBhdGggPSBzdHlsZS9NYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzVFQjdG
NjBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oOyBwYXRo
ID0gc3R5bGUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUJDNUVCODA4MEU4MUYxMTIwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb25z
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRyYW5zZm9ybU9wZXJh
dGlvbnMuY3BwOyBwYXRoID0gc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNUVCODA5MEU4MUYxMTIwMEIyNTk2NSAvKiBUcmFuc2Zv
cm1PcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRyYW5zZm9y
bU9wZXJhdGlvbnMuaDsgcGF0aCA9IHN0eWxlL1RyYW5zZm9ybU9wZXJhdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1RUI4MEQwRTgxRjJDRTAwQjI1OTY1IC8qIFN0eWxl
VHJhbnNmb3JtRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBT
dHlsZVRyYW5zZm9ybURhdGEuY3BwOyBwYXRoID0gc3R5bGUvU3R5bGVUcmFuc2Zvcm1EYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1RUI4MEUwRTgxRjJDRTAwQjI1OTY1
IC8qIFN0eWxlVHJhbnNmb3JtRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBTdHlsZVRyYW5zZm9ybURhdGEuaDsgcGF0aCA9IHN0eWxlL1N0eWxlVHJhbnNmb3JtRGF0YS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzVFQjhCNjBFODIwMUJEMDBCMjU5NjUg
LyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwOyBwYXRoID0gc3R5bGUvU3R5bGVGbGV4
aWJsZUJveERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODU4Nyw5ICs4
NTkwLDYgQEAKIAkJQkM1RUI5NzgwRTgyMDY5MjAwQjI1OTY1IC8qIENvdW50ZXJDb250ZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvdW50ZXJDb250ZW50Lmg7IHBhdGgg
PSBzdHlsZS9Db3VudGVyQ29udGVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzVFQjk3RTBFODIwNzI1MDBCMjU5NjUgLyogQ29udGVudERhdGEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ29udGVudERhdGEuY3BwOyBwYXRoID0gc3R5bGUvQ29u
dGVudERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzVFQjk3RjBFODIw
NzI1MDBCMjU5NjUgLyogQ29udGVudERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQ29udGVudERhdGEuaDsgcGF0aCA9IHN0eWxlL0NvbnRlbnREYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNUVCOUI3MEU4MjBDQTAwMEIyNTk2NSAvKiBUaW1pbmdG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaW1pbmdGdW5jdGlv
bi5oOyBwYXRoID0gc3R5bGUvVGltaW5nRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQkM1RUJBMEEwRTgyM0ExQzAwQjI1OTY1IC8qIEFuaW1hdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBbmltYXRpb24uY3BwOyBwYXRoID0gc3R5
bGUvQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM1RUJBMEIw
RTgyM0ExQzAwQjI1OTY1IC8qIEFuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBbmltYXRpb24uaDsgcGF0aCA9IHN0eWxlL0FuaW1hdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzVFQkEwRTBFODIzRTQ3MDBCMjU5NjUgLyogS2V5ZnJhbWVM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEtleWZyYW1lTGlz
dC5jcHA7IHBhdGggPSBzdHlsZS9LZXlmcmFtZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzVFQkEwRjBFODIzRTQ3MDBCMjU5NjUgLyogS2V5ZnJhbWVMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEtleWZyYW1lTGlzdC5oOyBwYXRoID0gc3R5
bGUvS2V5ZnJhbWVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNUVDMTc2
MEE1MDdFM0UwMDYwMDdGNSAvKiB2aWV3LXNvdXJjZS5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9ICJ2aWV3LXNvdXJjZS5jc3MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU1
Nyw2ICs5NTU3LDQxIEBACiAJCQluYW1lID0gYW5pbWF0aW9uOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJNDlFOTExQjIwRUY4NkQyNzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTQ5RTkxMUIz
MEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uY3BwICovLAorCQkJCTQ5RTkxMUI0
MEVGODZENDcwMDlEMENBRiAvKiBBZmZpbmVUcmFuc2Zvcm0uaCAqLywKKwkJCQk0OUU5MTFCNTBF
Rjg2RDQ3MDA5RDBDQUYgLyogSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKKwkJCQk0
OUU5MTFCNjBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAq
LywKKwkJCQk0OUU5MTFCNzBFRjg2RDQ3MDA5RDBDQUYgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uLmggKi8sCisJCQkJNDlFOTExQjgwRUY4NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgKi8sCisJCQkJNDlFOTExQjkwRUY4NkQ0NzAwOUQwQ0FGIC8qIFJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oICovLAorCQkJCTQ5RTkxMUJBMEVGODZENDcwMDlEMENBRiAv
KiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8sCisJCQkJNDlFOTExQkIwRUY4NkQ0NzAw
OUQwQ0FGIC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCisJCQkJNDlFOTExQkMwRUY4
NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovLAorCQkJCTQ5RTkx
MUJEMEVGODZENDcwMDlEMENBRiAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCisJCQkJ
NDlFOTExQkUwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbi5oICovLAorCQkJ
CTQ5RTkxMUJGMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zvcm1PcGVyYXRpb25zLmNwcCAqLywK
KwkJCQk0OUU5MTFDMDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5oICov
LAorCQkJCTQ5RTkxMUMxMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwICovLAorCQkJCTQ5RTkxMUMyMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKKwkJCSk7CisJCQluYW1lID0gdHJhbnNmb3JtczsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTQ5RTkxMkE0MEVGQUM4RTYwMDlEMENB
RiAvKiBhbmltYXRpb24gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTQ5RTkxMkE1MEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb24uY3BwICovLAorCQkJ
CTQ5RTkxMkE2MEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb24uaCAqLywKKwkJCQk0OUU5MTJB
NzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgKi8sCisJCQkJNDlFOTEyQTgw
RUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbkxpc3QuaCAqLywKKwkJCQk0OUU5MTJBOTBFRkFD
OTA2MDA5RDBDQUYgLyogVGltaW5nRnVuY3Rpb24uaCAqLywKKwkJCSk7CisJCQluYW1lID0gYW5p
bWF0aW9uOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNEM2Qjk5MTUwRTUy
RTM3MzAwNDg3QkI3IC8qIHdtbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0xMjgyNiw4ICsxMjg2MSw3IEBACiAJCQkJQjI3NTM1MjkwQjA1MzgxNDAwMkNF
NjRGIC8qIGNnICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICov
LAogCQkJCUIyNzUzNTQ5MEIwNTM4MTQwMDJDRTY0RiAvKiBtYWMgKi8sCi0JCQkJQjI3NTM1Mjcw
QjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5jcHAgKi8sCi0JCQkJQjI3NTM1Mjgw
QjA1MzgxNDAwMkNFNjRGIC8qIEFmZmluZVRyYW5zZm9ybS5oICovLAorCQkJCTQ5RTkxMUIyMEVG
ODZEMjcwMDlEMENBRiAvKiB0cmFuc2Zvcm1zICovLAogCQkJCUE4OTk0MzI3MEI0MjMzODcwMEQ3
QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgKi8sCiAJCQkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAy
IC8qIEJpdG1hcEltYWdlLmggKi8sCiAJCQkJQjI3NTM1MzgwQjA1MzgxNDAwMkNFNjRGIC8qIENv
bG9yLmNwcCAqLywKQEAgLTEzMjM3LDEwICsxMzI3MSw2IEBACiAJCUJDOEM4RkFBMEREQ0QyRjIw
MEI1OTJGNCAvKiBzdHlsZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCi0JCQkJQkM1RUJBMEEwRTgyM0ExQzAwQjI1OTY1IC8qIEFuaW1hdGlvbi5jcHAgKi8sCi0J
CQkJQkM1RUJBMEIwRTgyM0ExQzAwQjI1OTY1IC8qIEFuaW1hdGlvbi5oICovLAotCQkJCUJDMjI3
MUQ3MEU4MjQwNzMwMEU3Rjk3NSAvKiBBbmltYXRpb25MaXN0LmNwcCAqLywKLQkJCQlCQzIyNzFE
ODBFODI0MDczMDBFN0Y5NzUgLyogQW5pbWF0aW9uTGlzdC5oICovLAogCQkJCUJDNUVCOTFEMEU4
MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCAqLywKIAkJCQlCQzVFQjkxRTBFODIwNDA4
MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oICovLAogCQkJCUJDNUVCNUUwMEU4MUJFODcwMEIyNTk2
NSAvKiBCb3JkZXJEYXRhLmggKi8sCkBAIC0xMzI1NiwyOSArMTMyODYsMjAgQEAKIAkJCQlCQzIy
NzQ2RTBFODM2NjQ1MDBFN0Y5NzUgLyogRGF0YVJlZi5oICovLAogCQkJCUJDNUVCNjlDMEU4MURB
RUIwMEIyNTk2NSAvKiBGaWxsTGF5ZXIuY3BwICovLAogCQkJCUJDNUVCNjlEMEU4MURBRUIwMEIy
NTk2NSAvKiBGaWxsTGF5ZXIuaCAqLywKLQkJCQlCQzVFQjc4MDBFODFFQzVCMDBCMjU5NjUgLyog
SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKIAkJCQlCQzVFQkEwRTBFODIzRTQ3MDBC
MjU5NjUgLyogS2V5ZnJhbWVMaXN0LmNwcCAqLywKIAkJCQlCQzVFQkEwRjBFODIzRTQ3MDBCMjU5
NjUgLyogS2V5ZnJhbWVMaXN0LmggKi8sCi0JCQkJQkM1RUI3RjUwRTgxRjA1NzAwQjI1OTY1IC8q
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8sCi0JCQkJQkM1RUI3RjYwRTgxRjA1NzAw
QjI1OTY1IC8qIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oICovLAogCQkJCUJDRUY0M0RGMEU2
NzQxMTAwMDFDMTI4NyAvKiBOaW5lUGllY2VJbWFnZS5jcHAgKi8sCiAJCQkJQkNFRjQzREMwRTY3
NDAxMjAwMUMxMjg3IC8qIE5pbmVQaWVjZUltYWdlLmggKi8sCiAJCQkJQkM1RUI1REMwRTgxQjhE
RDAwQjI1OTY1IC8qIE91dGxpbmVWYWx1ZS5oICovLAogCQkJCUJDOEM4RkFCMEREQ0QzMUIwMEI1
OTJGNCAvKiBSZW5kZXJTdHlsZS5jcHAgKi8sCiAJCQkJQkM4QzhGQUMwRERDRDMxQjAwQjU5MkY0
IC8qIFJlbmRlclN0eWxlLmggKi8sCiAJCQkJQkM1RUI2NjcwRTgxQ0I3MTAwQjI1OTY1IC8qIFJl
bmRlclN0eWxlQ29uc3RhbnRzLmggKi8sCi0JCQkJQkM1RUI3QTAwRTgxRUVBRjAwQjI1OTY1IC8q
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8sCi0JCQkJQkM1RUI3OUMwRTgxRUQ1RjAw
QjI1OTY1IC8qIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oICovLAogCQkJCUJDMjI3NDc0MEU4
MzY2RTIwMEU3Rjk3NSAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgKi8sCiAJCQkJQkMyMjc0NzUwRTgz
NjZFMjAwRTdGOTc1IC8qIFNWR1JlbmRlclN0eWxlLmggKi8sCiAJCQkJQkMyMjc0NzYwRTgzNjZF
MjAwRTdGOTc1IC8qIFNWR1JlbmRlclN0eWxlRGVmcy5jcHAgKi8sCiAJCQkJQkMyMjc0NzcwRTgz
NjZFMjAwRTdGOTc1IC8qIFNWR1JlbmRlclN0eWxlRGVmcy5oICovLAotCQkJCUJDNUVCN0ExMEU4
MUVFQUYwMEIyNTk2NSAvKiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8sCi0JCQkJQkM1
RUI3ODIwRTgxRUNGMjAwQjI1OTY1IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJ
CQkJQkM1RUI4QzEwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwICovLAogCQkJCUJD
NUVCOEMyMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggKi8sCi0JCQkJQkM1RUI3QTIw
RTgxRUVBRjAwQjI1OTY1IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovLAotCQkJCUJD
NUVCNzlFMEU4MUVERDIwMEIyNTk2NSAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmggKi8sCiAJ
CQkJQkM1RUI2QTAwRTgxREM0RjAwQjI1OTY1IC8qIFN0eWxlQmFja2dyb3VuZERhdGEuY3BwICov
LAogCQkJCUJDNUVCNkExMEU4MURDNEYwMEIyNTk2NSAvKiBTdHlsZUJhY2tncm91bmREYXRhLmgg
Ki8sCiAJCQkJQkM1RUI2N0MwRTgxRDQyMDAwQjI1OTY1IC8qIFN0eWxlQm94RGF0YS5jcHAgKi8s
CkBAIC0xMzMwOCwxMiArMTMzMjksNiBAQAogCQkJCUJDNUVCODBFMEU4MUYyQ0UwMEIyNTk2NSAv
KiBTdHlsZVRyYW5zZm9ybURhdGEuaCAqLywKIAkJCQlCQzVFQjY5NzBFODFEQTYzMDBCMjU5NjUg
LyogU3R5bGVWaXN1YWxEYXRhLmNwcCAqLywKIAkJCQlCQzVFQjY5ODBFODFEQTYzMDBCMjU5NjUg
LyogU3R5bGVWaXN1YWxEYXRhLmggKi8sCi0JCQkJQkM1RUI5QjcwRTgyMENBMDAwQjI1OTY1IC8q
IFRpbWluZ0Z1bmN0aW9uLmggKi8sCi0JCQkJQkM1RUI3N0QwRTgxRUJBNjAwQjI1OTY1IC8qIFRy
YW5zZm9ybU9wZXJhdGlvbi5oICovLAotCQkJCUJDNUVCODA4MEU4MUYxMTIwMEIyNTk2NSAvKiBU
cmFuc2Zvcm1PcGVyYXRpb25zLmNwcCAqLywKLQkJCQlCQzVFQjgwOTBFODFGMTEyMDBCMjU5NjUg
LyogVHJhbnNmb3JtT3BlcmF0aW9ucy5oICovLAotCQkJCUJDNUVCN0NBMEU4MUVGNUQwMEIyNTk2
NSAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovLAotCQkJCUJDNUVCN0NCMEU4
MUVGNUQwMEIyNTk2NSAvKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLywKIAkJCSk7
CiAJCQluYW1lID0gc3R5bGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTM0NjMs
NiArMTM0NzgsNyBAQAogCQlCQ0YxQTVCQTA5NzgzMjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTQ5RTkxMkE0MEVG
QUM4RTYwMDlEMENBRiAvKiBhbmltYXRpb24gKi8sCiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2
MTJEIC8qIGNmICovLAogCQkJCUIyQTAxNTkxMEFGNkNENTMwMDZCQ0UwRSAvKiBncmFwaGljcyAq
LywKIAkJCQk2NTgyQTE0ODA5OTk5RDZDMDBCRUVCNkQgLyogbWFjICovLApAQCAtMTQyNzEsMTEg
KzE0Mjg3LDggQEAKIAkJCQkyOUFBQzUxRjBFNTM5NjNCMDA4RjlCM0IgLyogQWNjZXNzaWJpbGl0
eVRhYmxlSGVhZGVyQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTgwMEM5NTBFNTI0
QzhCMDAwMjU1MzYgLyogQWNjZXNzaWJpbGl0eVRhYmxlUm93LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMUM0REU2OTBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCMjc1MzU1NzBCMDUzODE0MDAyQ0U2NEYgLyogQWZmaW5lVHJhbnNmb3JtLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQzVFQkEwRDBFODIzQTFDMDBCMjU5NjUgLyogQW5pbWF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExMjBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0
aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2RkUxMTQwRTZFMURBNzAwQkY2MDg4IC8q
IEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMjI3MURBMEU4MjQw
NzMwMEU3Rjk3NSAvKiBBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURE
NzA5OUU2NDkyMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBOEY2QkJEMERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQThGNkJCRjBEQjU1Q0RDMDAxREI3OTQgLyogQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MzY4LDcgKzE1MzgxLDYgQEAKIAkJCQkxQTJE
NzUzRDBERTQ3RkFCMDBGMEE2NDggLyogSWNvbkZldGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxM0YxNDU0MEFCNjM0QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUUxRUNDMTBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29yZC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQkM1RUI3ODEwRTgxRUM1QjAwQjI1OTY1IC8qIElkZW50aXR5VHJhbnNmb3JtT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyog
SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJ
bWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5
IC8qIEltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTc3Niw3ICsxNTc4OCw2IEBACiAJ
CQkJMUE4RjZCQzYwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEM0QTgwNTA5RDU2MzI3MDAwM0FDOEQgLyogTWFwcGVkQXR0cmlidXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEM0QTg0QzA5RDU2NDlEMDAwM0FDOEQgLyogTWFwcGVkQXR0
cmlidXRlRW50cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDNUVCN0Y4MEU4MUYwNTcwMEIyNTk2
NSAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUFCRkU3
RTEzMEQzMkZBRjYwMDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQUI0MDQ4NEUwRTA4M0ZBODAwN0Q2OTIwIC8qIE1lZGlhRG9jdW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0NDYxM0FEMENENjMzMTAwMEZBREE3NSAvKiBNZWRpYUVycm9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE1OTYxLDcgKzE1OTcyLDYgQEAKIAkJCQk1MTRDNzY1NDBDRTky
MzRFMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0
Qzc2N0YwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOENGRjVFMTBBMTU1QTA1MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQkM1RUI3OUQwRTgxRUQ1RjAwQjI1OTY1IC8qIFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRBRkQwMEMwREFGMzM1NDAwRjVG
NTVDIC8qIFNNSUxUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEFGRDAwRTBEQUYzMzU1MDBG
NUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRUM5MjU5
MENFOTBEQjQwMEY5MDMwOCAvKiBTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjE1OCw3
ICsxNjE2OCw2IEBACiAJCQkJQjIyMjdBRjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ZpZXdTcGVj
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0FGNjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHWm9v
bUFuZFBhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJFNEVDOTgwRDAwQzIyQjAwNDMyNjQzIC8q
IFNWR1pvb21FdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM1RUI3ODMwRTgxRUNGMjAwQjI1
OTY1IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0VG
QzlCOTBENzhEQzhDMDA3RDI1NzkgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1REZFOEY1NzBEMTY0NzdDMDA3NkU5MzcgLyogU2NoZWR1bGVkQWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0VDMDFCRTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggaW4gSGVhZGVy
cyAqLywKQEAgLTE2MTk3LDcgKzE2MjA2LDYgQEAKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhD
M0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5OUVCNzhD
MDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY1MEQw
MDZDRDYwMEVGNkYyNiAvKiBTaW1wbGVGb250RGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM1
RUI3OUYwRTgxRUREMjAwQjI1OTY1IC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTRCNkZBNkY0MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBTb2Z0TGlua2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5k
LmggaW4gSGVhZGVycyAqLywKQEAgLTE2Mjc0LDExICsxNjI4Miw3IEBACiAJCQkJNTFERjZEN0Uw
QjkyQTE2RDAwQzJEQzg1IC8qIFRocmVhZENoZWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQ2
MTNCMDBDRDYzMzEwMDBGQURBNzUgLyogVGltZVJhbmdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlC
QzVFQjlCODBFODIwQ0EwMDBCMjU5NjUgLyogVGltaW5nRnVuY3Rpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQ0ZCQUU4MEI1MTUyRUQwMDAxRjFENyAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUJDNUVCNzdFMEU4MUVCQTYwMEIyNTk2NSAvKiBUcmFuc2Zvcm1PcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovLAotCQkJCUJDNUVCODBCMEU4MUYxMTIwMEIyNTk2NSAvKiBUcmFuc2Zv
cm1PcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzVFQjdDRDBFODFFRjVEMDBCMjU5
NjUgLyogVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NTRGRTczNzBBMjI5N0JFMDA1OEQ3QUQgLyogVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDE5RDJDNTBDRUE2RjYxMDBGRjUwN0EgLyogVHJlZVNoYXJlZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODU0RkU3MzkwQTIyOTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTY0MzIsNiArMTY0MzYsMTggQEAKIAkJCQkxQTU2OUQyNTBEN0UyQjgyMDA3QzM5
ODMgLyogcnVudGltZV9yb290LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxRTA5OUU2NDky
MDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4MjBCREYw
RUY1RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDlFOTExQzQwRUY4NkQ0NzAwOUQwQ0FGIC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDlFOTExQzUwRUY4NkQ0NzAwOUQwQ0FGIC8qIElkZW50aXR5VHJhbnNmb3JtT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5MTFDNzBFRjg2RDQ3MDA5RDBDQUYgLyog
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5MTFDOTBF
Rjg2RDQ3MDA5RDBDQUYgLyogUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0OUU5MTFDQjBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkxMUNEMEVGODZENDcwMDlEMENBRiAvKiBTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5MTFDRTBFRjg2RDQ3
MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUU5
MTFEMDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDlFOTExRDIwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8q
IEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlFOTEyQUQwRUZBQzkwNjAwOUQwQ0FG
IC8qIEFuaW1hdGlvbkxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RTkxMkFFMEVGQUM5MDYw
MDlEMENBRiAvKiBUaW1pbmdGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNjcxNywxMiAr
MTY3MzMsOSBAQAogCQkJCTI5QUFDNTIwMEU1Mzk2M0IwMDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5
VGFibGVIZWFkZXJDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjk4MDBDOTYwRTUy
NEM4QjAwMDI1NTM2IC8qIEFjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMUM0REU2RTBFQTc1QzY1MDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUIyNzUzNTU2MEIwNTM4MTQwMDJDRTY0RiAvKiBBZmZpbmVUcmFuc2Zv
cm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NTgwQjA1MzgxNDAwMkNFNjRGIC8qIEFm
ZmluZVRyYW5zZm9ybUNHLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDNUVCQTBDMEU4MjNBMUMw
MEIyNTk2NSAvKiBBbmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2RkUxMTEwRTZF
MURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2
RkUxMTMwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQkMyMjcxRDkwRTgyNDA3MzAwRTdGOTc1IC8qIEFuaW1hdGlvbkxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERDYwOTlFNjQ5MjAwNTZFNTgxIC8qIEFwcGVuZE5v
ZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEY2QkJDMERCNTVDREMwMDFEQjc5
NCAvKiBBcHBsaWNhdGlvbkNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEY2QkJFMERC
NTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xNzc4NCw3ICsxNzc5Nyw2IEBACiAJCQkJOTNFMjI3RTEwQUY1ODlBRDAwRDQ4MzI0IC8q
IE1haW5SZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQThGNkJDNTBEQjU1
Q0RDMDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThD
NEE4MDYwOUQ1NjMyNzAwMDNBQzhEIC8qIE1hcHBlZEF0dHJpYnV0ZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlCQzVFQjdGNzBFODFGMDU3MDBCMjU5NjUgLyogTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCRkU3RTEyMEQzMkZBRjYwMDY2RjREMiAvKiBN
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQjQwNDg0RDBFMDgz
RkE4MDA3RDY5MjAgLyogTWVkaWFEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RTE5
NTkyMTBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xNzk0OCw3ICsxNzk2MCw2IEBACiAJCQkJNTE0Qzc2N0UwQ0U5MjNBMTAwN0VGM0NE
IC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjU1
MENFOTIzNEYwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlTWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThDRkY1RTcwQTE1NUEwNTAwMEE0MjM0IC8qIFJvb3RJbmxpbmVCb3guY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJQkM1RUI3QTMwRTgxRUVBRjAwQjI1OTY1IC8qIFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAwQjBEQUYzMzU0MDBGNUY1
NUMgLyogU01JTFRpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRBRkQwMEQwREFGMzM1NTAw
RjVGNTVDIC8qIFNNSUxUaW1lQ29udGFpbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxOTYx
MTczMENBQzU2NTcwMDEwQTgwQyAvKiBTUUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xODEzOCw3ICsxODE0OSw2IEBACiAJCQkJQjIyMjdBRjIwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R1ZpZXdTcGVjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QUY1MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdab29tQW5kUGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRTRFQzk3MEQwMEMy
MkIwMDQzMjY0MyAvKiBTVkdab29tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM1RUI3
QTQwRTgxRUVBRjAwQjI1OTY1IC8qIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDRUZDOUJBMEQ3OERDOEMwMDdEMjU3OSAvKiBTY2hlZHVsZVBhaXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUNFMjRGOTcwRDdDQUYwRTAwN0UwNEMyIC8qIFNjaGVkdWxl
UGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVERkU4RjU2MEQxNjQ3N0IwMDc2RTkzNyAv
KiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xODE3Niw3ICsxODE4Niw2
IEBACiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjQwRDAwNkNENjAwRUY2RjI2IC8qIFNpbXBsZUZvbnRE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdGMEQwMEE1QzEwMDMwMDc0RCAvKiBT
aW1wbGVGb250RGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJDNUVCN0E1MEU4MUVFQUYw
MEIyNTk2NSAvKiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTRCNkZBNkY1MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5t
bSBpbiBTb3VyY2VzICovLApAQCAtMTgyNDIsOCArMTgyNTEsNiBAQAogCQkJCTUxREY2RDgwMEI5
MkExOEUwMEMyREM4NSAvKiBUaHJlYWRDaGVjay5tbSBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYx
M0FGMENENjMzMTAwMEZBREE3NSAvKiBUaW1lUmFuZ2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMzA5RUE0MDk5RUI3OEMwMDU2RTU4MSAvKiBUaW1lci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCQzVFQjgwQTBFODFGMTEyMDBCMjU5NjUgLyogVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCQzVFQjdDQzBFODFFRjVEMDBCMjU5NjUgLyogVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1NEZFNzM2MEEyMjk3QkUw
MDU4RDdBRCAvKiBUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzgwQTIy
OTdCRTAwNThEN0FEIC8qIFRyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MTkwOTlFNjQ5MjAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0xODM4Myw2ICsxODM5MCwxNSBAQAogCQkJCTFBNTY5RDI0MEQ3RTJCODIwMDdDMzk4MyAvKiBy
dW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZF
NTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg4MjBCREUwRUY1
RDM4MTAwOTA5OUE4IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OUU5MTFDMzBFRjg2RDQ3MDA5RDBDQUYgLyogQWZmaW5lVHJhbnNmb3JtLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQ5RTkxMUM2MEVGODZENDcwMDlEMENBRiAvKiBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExQzgwRUY4NkQ0NzAwOUQwQ0FGIC8q
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUU5MTFD
QTBFRjg2RDQ3MDA5RDBDQUYgLyogU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNDlFOTExQ0MwRUY4NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExQ0YwRUY4NkQ0NzAwOUQwQ0FGIC8q
IFRyYW5zZm9ybU9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFOTExRDEwRUY4
NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0OUU5MTJBQTBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQ5RTkxMkFDMEVGQUM5MDYwMDlEMENBRiAvKiBBbmltYXRpb25MaXN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9Bbmlt
YXRpb24uY3BwCShyZXZpc2lvbiAzOTM3MykJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
QW5pbWF0aW9uLmNwcDozOTM3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1h
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFuaW1hdGlvbi5o
IgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitB
bmltYXRpb246OkFuaW1hdGlvbigpCisgICAgOiBtX2RlbGF5KFJlbmRlclN0eWxlOjppbml0aWFs
QW5pbWF0aW9uRGVsYXkoKSkKKyAgICAsIG1fZGlyZWN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFs
QW5pbWF0aW9uRGlyZWN0aW9uKCkpCisgICAgLCBtX2R1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0
aWFsQW5pbWF0aW9uRHVyYXRpb24oKSkKKyAgICAsIG1faXRlcmF0aW9uQ291bnQoUmVuZGVyU3R5
bGU6OmluaXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3VudCgpKQorICAgICwgbV9uYW1lKFJlbmRl
clN0eWxlOjppbml0aWFsQW5pbWF0aW9uTmFtZSgpKQorICAgICwgbV9wcm9wZXJ0eShSZW5kZXJT
dHlsZTo6aW5pdGlhbEFuaW1hdGlvblByb3BlcnR5KCkpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9u
KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKSkKKyAgICAsIG1f
cGxheVN0YXRlKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uUGxheVN0YXRlKCkpCisgICAg
LCBtX2RlbGF5U2V0KGZhbHNlKQorICAgICwgbV9kaXJlY3Rpb25TZXQoZmFsc2UpCisgICAgLCBt
X2R1cmF0aW9uU2V0KGZhbHNlKQorICAgICwgbV9pdGVyYXRpb25Db3VudFNldChmYWxzZSkKKyAg
ICAsIG1fbmFtZVNldChmYWxzZSkKKyAgICAsIG1fcGxheVN0YXRlU2V0KGZhbHNlKQorICAgICwg
bV9wcm9wZXJ0eVNldChmYWxzZSkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb25TZXQoZmFsc2UpCisg
ICAgLCBtX2lzTm9uZShmYWxzZSkKK3sKK30KKworQW5pbWF0aW9uOjpBbmltYXRpb24oY29uc3Qg
QW5pbWF0aW9uJiBvKQorICAgIDogUmVmQ291bnRlZDxBbmltYXRpb24+KCkKKyAgICAsIG1fZGVs
YXkoby5tX2RlbGF5KQorICAgICwgbV9kaXJlY3Rpb24oby5tX2RpcmVjdGlvbikKKyAgICAsIG1f
ZHVyYXRpb24oby5tX2R1cmF0aW9uKQorICAgICwgbV9pdGVyYXRpb25Db3VudChvLm1faXRlcmF0
aW9uQ291bnQpCisgICAgLCBtX25hbWUoby5tX25hbWUpCisgICAgLCBtX3Byb3BlcnR5KG8ubV9w
cm9wZXJ0eSkKKyAgICAsIG1fdGltaW5nRnVuY3Rpb24oby5tX3RpbWluZ0Z1bmN0aW9uKQorICAg
ICwgbV9wbGF5U3RhdGUoby5tX3BsYXlTdGF0ZSkKKyAgICAsIG1fZGVsYXlTZXQoby5tX2RlbGF5
U2V0KQorICAgICwgbV9kaXJlY3Rpb25TZXQoby5tX2RpcmVjdGlvblNldCkKKyAgICAsIG1fZHVy
YXRpb25TZXQoby5tX2R1cmF0aW9uU2V0KQorICAgICwgbV9pdGVyYXRpb25Db3VudFNldChvLm1f
aXRlcmF0aW9uQ291bnRTZXQpCisgICAgLCBtX25hbWVTZXQoby5tX25hbWVTZXQpCisgICAgLCBt
X3BsYXlTdGF0ZVNldChvLm1fcGxheVN0YXRlU2V0KQorICAgICwgbV9wcm9wZXJ0eVNldChvLm1f
cHJvcGVydHlTZXQpCisgICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0KG8ubV90aW1pbmdGdW5jdGlv
blNldCkKKyAgICAsIG1faXNOb25lKG8ubV9pc05vbmUpCit7Cit9CisKK0FuaW1hdGlvbiYgQW5p
bWF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQW5pbWF0aW9uJiBvKQoreworICAgIG1fZGVsYXkgPSBv
Lm1fZGVsYXk7CisgICAgbV9kaXJlY3Rpb24gPSBvLm1fZGlyZWN0aW9uOworICAgIG1fZHVyYXRp
b24gPSBvLm1fZHVyYXRpb247CisgICAgbV9pdGVyYXRpb25Db3VudCA9IG8ubV9pdGVyYXRpb25D
b3VudDsKKyAgICBtX25hbWUgPSBvLm1fbmFtZTsKKyAgICBtX3BsYXlTdGF0ZSA9IG8ubV9wbGF5
U3RhdGU7CisgICAgbV9wcm9wZXJ0eSA9IG8ubV9wcm9wZXJ0eTsKKyAgICBtX3RpbWluZ0Z1bmN0
aW9uID0gby5tX3RpbWluZ0Z1bmN0aW9uOworCisgICAgbV9kZWxheVNldCA9IG8ubV9kZWxheVNl
dDsKKyAgICBtX2RpcmVjdGlvblNldCA9IG8ubV9kaXJlY3Rpb25TZXQ7CisgICAgbV9kdXJhdGlv
blNldCA9IG8ubV9kdXJhdGlvblNldDsKKyAgICBtX2l0ZXJhdGlvbkNvdW50U2V0ID0gby5tX2l0
ZXJhdGlvbkNvdW50U2V0OworICAgIG1fbmFtZVNldCA9IG8ubV9uYW1lU2V0OworICAgIG1fcGxh
eVN0YXRlU2V0ID0gby5tX3BsYXlTdGF0ZVNldDsKKyAgICBtX3Byb3BlcnR5U2V0ID0gby5tX3By
b3BlcnR5U2V0OworICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPSBvLm1fdGltaW5nRnVuY3Rpb25T
ZXQ7CisKKyAgICBtX2lzTm9uZSA9IG8ubV9pc05vbmU7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK0FuaW1hdGlvbjo6fkFuaW1hdGlvbigpCit7Cit9CisKK2Jvb2wgQW5pbWF0aW9uOjphbmlt
YXRpb25zTWF0Y2goY29uc3QgQW5pbWF0aW9uKiBvLCBib29sIG1hdGNoUGxheVN0YXRlcykgY29u
c3QKK3sKKyAgICBpZiAoIW8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBib29s
IHJlc3VsdCA9IG1fZGVsYXkgPT0gby0+bV9kZWxheSAmJgorICAgICAgICAgICAgICAgICAgbV9k
aXJlY3Rpb24gPT0gby0+bV9kaXJlY3Rpb24gJiYKKyAgICAgICAgICAgICAgICAgIG1fZHVyYXRp
b24gPT0gby0+bV9kdXJhdGlvbiAmJgorICAgICAgICAgICAgICAgICAgbV9pdGVyYXRpb25Db3Vu
dCA9PSBvLT5tX2l0ZXJhdGlvbkNvdW50ICYmCisgICAgICAgICAgICAgICAgICBtX25hbWUgPT0g
by0+bV9uYW1lICYmCisgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5ID09IG8tPm1fcHJvcGVy
dHkgJiYgCisgICAgICAgICAgICAgICAgICBtX3RpbWluZ0Z1bmN0aW9uID09IG8tPm1fdGltaW5n
RnVuY3Rpb24gJiYKKyAgICAgICAgICAgICAgICAgIG1fZGVsYXlTZXQgPT0gby0+bV9kZWxheVNl
dCAmJgorICAgICAgICAgICAgICAgICAgbV9kaXJlY3Rpb25TZXQgPT0gby0+bV9kaXJlY3Rpb25T
ZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fZHVyYXRpb25TZXQgPT0gby0+bV9kdXJhdGlvblNl
dCAmJgorICAgICAgICAgICAgICAgICAgbV9pdGVyYXRpb25Db3VudFNldCA9PSBvLT5tX2l0ZXJh
dGlvbkNvdW50U2V0ICYmCisgICAgICAgICAgICAgICAgICBtX25hbWVTZXQgPT0gby0+bV9uYW1l
U2V0ICYmCisgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5U2V0ID09IG8tPm1fcHJvcGVydHlT
ZXQgJiYKKyAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby0+bV90aW1p
bmdGdW5jdGlvblNldCAmJgorICAgICAgICAgICAgICAgICAgbV9pc05vbmUgPT0gby0+bV9pc05v
bmU7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuICFtYXRjaFBsYXlTdGF0ZXMgfHwgKG1fcGxheVN0YXRlID09IG8tPm1fcGxheVN0YXRlICYm
IG1fcGxheVN0YXRlU2V0ID09IG8tPm1fcGxheVN0YXRlU2V0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmgJKHJl
dmlzaW9uIDM5MzczKQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb24uaDoz
OTM3MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBBbmltYXRpb25faAorI2RlZmluZSBBbmltYXRpb25faAorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJUaW1pbmdGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBBbmltYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxBbmltYXRpb24+IHsK
K3B1YmxpYzoKKyAgICB+QW5pbWF0aW9uKCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbmlt
YXRpb24+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBbmltYXRpb24pOyB9OworICAg
IAorICAgIGJvb2wgaXNEZWxheVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsYXlTZXQ7IH0KKyAg
ICBib29sIGlzRGlyZWN0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb25TZXQ7IH0K
KyAgICBib29sIGlzRHVyYXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uU2V0OyB9
CisgICAgYm9vbCBpc0l0ZXJhdGlvbkNvdW50U2V0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRp
b25Db3VudFNldDsgfQorICAgIGJvb2wgaXNOYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
U2V0OyB9CisgICAgYm9vbCBpc1BsYXlTdGF0ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0
YXRlU2V0OyB9CisgICAgYm9vbCBpc1Byb3BlcnR5U2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0eVNldDsgfQorICAgIGJvb2wgaXNUaW1pbmdGdW5jdGlvblNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGltaW5nRnVuY3Rpb25TZXQ7IH0KKworICAgIC8vIEZsYWdzIHRoaXMgdG8gYmUgdGhlIHNw
ZWNpYWwgIm5vbmUiIGFuaW1hdGlvbiAoYW5pbWF0aW9uLW5hbWU6IG5vbmUpCisgICAgYm9vbCBp
c05vbmVBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lzTm9uZTsgfQorICAgIC8vIFdlIGNh
biBtYWtlIHBsYWNlaG9sZGVyIEFuaW1hdGlvbiBvYmplY3RzIHRvIGtlZXAgdGhlIGNvbW1hLXNl
cGFyYXRlZCBsaXN0cworICAgIC8vIG9mIHByb3BlcnRpZXMgaW4gc3luYy4gaXNWYWxpZEFuaW1h
dGlvbiBtZWFucyB0aGlzIGlzIG5vdCBhIHBsYWNlaG9sZGVyLgorICAgIGJvb2wgaXNWYWxpZEFu
aW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuICFtX2lzTm9uZSAmJiAhbV9uYW1lLmlzRW1wdHkoKTsg
fQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoIW1f
ZGlyZWN0aW9uU2V0ICYmICFtX2R1cmF0aW9uU2V0ICYmICFtX25hbWVTZXQgJiYgIW1fcGxheVN0
YXRlU2V0ICYmIAorICAgICAgICAgICAgICAgIW1faXRlcmF0aW9uQ291bnRTZXQgJiYgIW1fZGVs
YXlTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQgJiYgIW1fcHJvcGVydHlTZXQpOworICAgIH0K
KworICAgIGJvb2wgaXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VtcHR5KCkgfHwgKG1fZHVyYXRpb24gPT0gMCAmJiBtX2RlbGF5IDw9IDApOwor
ICAgIH0KKworICAgIHZvaWQgY2xlYXJEZWxheSgpIHsgbV9kZWxheVNldCA9IGZhbHNlOyB9Cisg
ICAgdm9pZCBjbGVhckRpcmVjdGlvbigpIHsgbV9kaXJlY3Rpb25TZXQgPSBmYWxzZTsgfQorICAg
IHZvaWQgY2xlYXJEdXJhdGlvbigpIHsgbV9kdXJhdGlvblNldCA9IGZhbHNlOyB9CisgICAgdm9p
ZCBjbGVhckl0ZXJhdGlvbkNvdW50KCkgeyBtX2l0ZXJhdGlvbkNvdW50U2V0ID0gZmFsc2U7IH0K
KyAgICB2b2lkIGNsZWFyTmFtZSgpIHsgbV9uYW1lU2V0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGNs
ZWFyUGxheVN0YXRlKCkgeyBtX3BsYXlTdGF0ZVNldCA9IEFuaW1QbGF5U3RhdGVQbGF5aW5nOyB9
CisgICAgdm9pZCBjbGVhclByb3BlcnR5KCkgeyBtX3Byb3BlcnR5U2V0ID0gZmFsc2U7IH0KKyAg
ICB2b2lkIGNsZWFyVGltaW5nRnVuY3Rpb24oKSB7IG1fdGltaW5nRnVuY3Rpb25TZXQgPSBmYWxz
ZTsgfQorCisgICAgZG91YmxlIGRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheTsgfQorICAg
IGJvb2wgZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KKyAgICBkb3Vi
bGUgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgaW50IGl0ZXJh
dGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25Db3VudDsgfQorICAgIGNvbnN0
IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIHVuc2lnbmVkIHBs
YXlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlOyB9CisgICAgaW50IHByb3BlcnR5
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQorICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9u
JiB0aW1pbmdGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdGltaW5nRnVuY3Rpb247IH0KKwor
ICAgIHZvaWQgc2V0RGVsYXkoZG91YmxlIGMpIHsgbV9kZWxheSA9IGM7IG1fZGVsYXlTZXQgPSB0
cnVlOyB9CisgICAgdm9pZCBzZXREaXJlY3Rpb24oYm9vbCBkKSB7IG1fZGlyZWN0aW9uID0gZDsg
bV9kaXJlY3Rpb25TZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUgZCkg
eyBBU1NFUlQoZCA+PSAwKTsgbV9kdXJhdGlvbiA9IGQ7IG1fZHVyYXRpb25TZXQgPSB0cnVlOyB9
CisgICAgdm9pZCBzZXRJdGVyYXRpb25Db3VudChpbnQgYykgeyBtX2l0ZXJhdGlvbkNvdW50ID0g
YzsgbV9pdGVyYXRpb25Db3VudFNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNldE5hbWUoY29uc3Qg
U3RyaW5nJiBuKSB7IG1fbmFtZSA9IG47IG1fbmFtZVNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNl
dFBsYXlTdGF0ZSh1bnNpZ25lZCBkKSB7IG1fcGxheVN0YXRlID0gZDsgbV9wbGF5U3RhdGVTZXQg
PSB0cnVlOyB9CisgICAgdm9pZCBzZXRQcm9wZXJ0eShpbnQgdCkgeyBtX3Byb3BlcnR5ID0gdDsg
bV9wcm9wZXJ0eVNldCA9IHRydWU7IH0KKyAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9uKGNvbnN0
IFRpbWluZ0Z1bmN0aW9uJiBmKSB7IG1fdGltaW5nRnVuY3Rpb24gPSBmOyBtX3RpbWluZ0Z1bmN0
aW9uU2V0ID0gdHJ1ZTsgfQorCisgICAgdm9pZCBzZXRJc05vbmVBbmltYXRpb24oYm9vbCBuKSB7
IG1faXNOb25lID0gbjsgfQorCisgICAgQW5pbWF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQW5pbWF0
aW9uJiBvKTsKKworICAgIC8vIHJldHVybiB0cnVlIGlmIGFsbCBtZW1iZXJzIG9mIHRoaXMgY2xh
c3MgbWF0Y2ggKGV4Y2x1ZGluZyBtX25leHQpCisgICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29u
c3QgQW5pbWF0aW9uKiwgYm9vbCBtYXRjaFBsYXlTdGF0ZXMgPSB0cnVlKSBjb25zdDsKKworICAg
IC8vIHJldHVybiB0cnVlIGV2ZXJ5IEFuaW1hdGlvbiBpbiB0aGUgY2hhaW4gKGRlZmluZWQgYnkg
bV9uZXh0KSBtYXRjaCAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQW5pbWF0aW9uJiBvKSBj
b25zdCB7IHJldHVybiBhbmltYXRpb25zTWF0Y2goJm8pOyB9CisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEFuaW1hdGlvbiYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQorCitw
cml2YXRlOgorICAgIEFuaW1hdGlvbigpOworICAgIEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24m
IG8pOworICAgIAorICAgIGRvdWJsZSBtX2RlbGF5OworICAgIGJvb2wgbV9kaXJlY3Rpb247Cisg
ICAgZG91YmxlIG1fZHVyYXRpb247CisgICAgaW50IG1faXRlcmF0aW9uQ291bnQ7CisgICAgU3Ry
aW5nIG1fbmFtZTsKKyAgICBpbnQgbV9wcm9wZXJ0eTsKKyAgICBUaW1pbmdGdW5jdGlvbiBtX3Rp
bWluZ0Z1bmN0aW9uOworCisgICAgdW5zaWduZWQgbV9wbGF5U3RhdGUgICAgIDogMjsKKworICAg
IGJvb2wgbV9kZWxheVNldCAgICAgICAgICA6IDE7CisgICAgYm9vbCBtX2RpcmVjdGlvblNldCAg
ICAgIDogMTsKKyAgICBib29sIG1fZHVyYXRpb25TZXQgICAgICAgOiAxOworICAgIGJvb2wgbV9p
dGVyYXRpb25Db3VudFNldCA6IDE7CisgICAgYm9vbCBtX25hbWVTZXQgICAgICAgICAgIDogMTsK
KyAgICBib29sIG1fcGxheVN0YXRlU2V0ICAgICAgOiAxOworICAgIGJvb2wgbV9wcm9wZXJ0eVNl
dCAgICAgICA6IDE7CisgICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0IDogMTsKKyAgICAKKyAg
ICBib29sIG1faXNOb25lICAgICAgICAgICAgOiAxOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQW5pbWF0aW9uX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5p
bWF0aW9uL0FuaW1hdGlvbkxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
YW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuY3BwCShyZXZpc2lvbiAzOTM3MykJKGZyb20gV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvQW5pbWF0aW9uTGlzdC5jcHA6MzkzNzMpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBbmltYXRpb25MaXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2RlZmluZSBGSUxMX1VOU0VUX1BST1BFUlRZKHRlc3QsIHByb3BHZXQsIHByb3BTZXQpIFwKK2Zv
ciAoaSA9IDA7IGkgPCBzaXplKCkgJiYgYW5pbWF0aW9uKGkpLT50ZXN0KCk7ICsraSkgeyB9IFwK
K2lmIChpIDwgc2l6ZSgpICYmIGkgIT0gMCkgeyBcCisgICAgZm9yIChzaXplX3QgaiA9IDA7IGkg
PCBzaXplKCk7ICsraSwgKytqKSBcCisgICAgICAgIGFuaW1hdGlvbihpKS0+cHJvcFNldChhbmlt
YXRpb24oaiktPnByb3BHZXQoKSk7IFwKK30KKwordm9pZCBBbmltYXRpb25MaXN0OjpmaWxsVW5z
ZXRQcm9wZXJ0aWVzKCkKK3sKKyAgICBzaXplX3QgaTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZ
KGlzRGVsYXlTZXQsIGRlbGF5LCBzZXREZWxheSk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShp
c0RpcmVjdGlvblNldCwgZGlyZWN0aW9uLCBzZXREaXJlY3Rpb24pOworICAgIEZJTExfVU5TRVRf
UFJPUEVSVFkoaXNEdXJhdGlvblNldCwgZHVyYXRpb24sIHNldER1cmF0aW9uKTsKKyAgICBGSUxM
X1VOU0VUX1BST1BFUlRZKGlzSXRlcmF0aW9uQ291bnRTZXQsIGl0ZXJhdGlvbkNvdW50LCBzZXRJ
dGVyYXRpb25Db3VudCk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc1BsYXlTdGF0ZVNldCwg
cGxheVN0YXRlLCBzZXRQbGF5U3RhdGUpOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNOYW1l
U2V0LCBuYW1lLCBzZXROYW1lKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzVGltaW5nRnVu
Y3Rpb25TZXQsIHRpbWluZ0Z1bmN0aW9uLCBzZXRUaW1pbmdGdW5jdGlvbik7CisgICAgRklMTF9V
TlNFVF9QUk9QRVJUWShpc1Byb3BlcnR5U2V0LCBwcm9wZXJ0eSwgc2V0UHJvcGVydHkpOworfQor
Citib29sIEFuaW1hdGlvbkxpc3Q6Om9wZXJhdG9yPT0oY29uc3QgQW5pbWF0aW9uTGlzdCYgbykg
Y29uc3QKK3sKKyAgICBpZiAoc2l6ZSgpICE9IG8uc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKKyAgICAgICAgaWYg
KCphbmltYXRpb24oaSkgIT0gKm8uYW5pbWF0aW9uKGkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oCShyZXZpc2lvbiAz
OTM3MykJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQW5pbWF0aW9uTGlzdC5oOjM5Mzcz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IEFuaW1hdGlvbkxpc3RfaAorI2RlZmluZSBBbmltYXRpb25MaXN0X2gKKworI2luY2x1ZGUgIkFu
aW1hdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5pbWF0aW9uTGlzdCB7CitwdWJs
aWM6CisgICAgdm9pZCBmaWxsVW5zZXRQcm9wZXJ0aWVzKCk7CisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEFuaW1hdGlvbkxpc3QmIG8pIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBBbmltYXRpb25MaXN0JiBvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gbyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25zLnNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgbikg
eyBtX2FuaW1hdGlvbnMucmVzaXplKG4pOyB9CisgICAgdm9pZCByZW1vdmUoc2l6ZV90IGkpIHsg
bV9hbmltYXRpb25zLnJlbW92ZShpKTsgfQorICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8QW5p
bWF0aW9uPiBhbmltKSB7IG1fYW5pbWF0aW9ucy5hcHBlbmQoYW5pbSk7IH0KKyAgICAKKyAgICBB
bmltYXRpb24qIGFuaW1hdGlvbihzaXplX3QgaSkgeyByZXR1cm4gbV9hbmltYXRpb25zW2ldLmdl
dCgpOyB9CisgICAgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24oc2l6ZV90IGkpIGNvbnN0IHsg
cmV0dXJuIG1fYW5pbWF0aW9uc1tpXS5nZXQoKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0
b3I8UmVmUHRyPEFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7Cit9OyAgICAKKworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBbmltYXRpb25MaXN0X2gKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uaAkocmV2aXNpb24gMzkzNzMp
CShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RpbWluZ0Z1bmN0aW9uLmg6MzkzNzMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFRp
bWluZ0Z1bmN0aW9uX2gKKyNkZWZpbmUgVGltaW5nRnVuY3Rpb25faAorCisjaW5jbHVkZSAiUmVu
ZGVyU3R5bGVDb25zdGFudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgVGlt
aW5nRnVuY3Rpb24geworICAgIFRpbWluZ0Z1bmN0aW9uKCkKKyAgICAgICAgOiBtX3R5cGUoQ3Vi
aWNCZXppZXJUaW1pbmdGdW5jdGlvbikKKyAgICAgICAgLCBtX3gxKDAuMjUpCisgICAgICAgICwg
bV95MSgwLjEpCisgICAgICAgICwgbV94MigwLjI1KQorICAgICAgICAsIG1feTIoMS4wKQorICAg
IHsKKyAgICB9CisKKyAgICBUaW1pbmdGdW5jdGlvbihFVGltaW5nRnVuY3Rpb25UeXBlIHRpbWlu
Z0Z1bmN0aW9uLCBkb3VibGUgeDEgPSAwLjAsIGRvdWJsZSB5MSA9IDAuMCwgZG91YmxlIHgyID0g
MS4wLCBkb3VibGUgeTIgPSAxLjApCisgICAgICAgIDogbV90eXBlKHRpbWluZ0Z1bmN0aW9uKQor
ICAgICAgICAsIG1feDEoeDEpCisgICAgICAgICwgbV95MSh5MSkKKyAgICAgICAgLCBtX3gyKHgy
KQorICAgICAgICAsIG1feTIoeTIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUaW1pbmdGdW5jdGlvbiYgbykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3R5cGUgPT0gby5tX3R5cGUgJiYgbV94MSA9PSBvLm1feDEgJiYgbV95MSA9PSBvLm1feTEgJiYg
bV94MiA9PSBvLm1feDIgJiYgbV95MiA9PSBvLm1feTI7CisgICAgfQorCisgICAgZG91YmxlIHgx
KCkgY29uc3QgeyByZXR1cm4gbV94MTsgfQorICAgIGRvdWJsZSB5MSgpIGNvbnN0IHsgcmV0dXJu
IG1feTE7IH0KKyAgICBkb3VibGUgeDIoKSBjb25zdCB7IHJldHVybiBtX3gyOyB9CisgICAgZG91
YmxlIHkyKCkgY29uc3QgeyByZXR1cm4gbV95MjsgfQorCisgICAgRVRpbWluZ0Z1bmN0aW9uVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKK3ByaXZhdGU6CisgICAgRVRpbWlu
Z0Z1bmN0aW9uVHlwZSBtX3R5cGU7CisKKyAgICBkb3VibGUgbV94MTsKKyAgICBkb3VibGUgbV95
MTsKKyAgICBkb3VibGUgbV94MjsKKyAgICBkb3VibGUgbV95MjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRpbWluZ0Z1bmN0aW9uX2gKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDM5Mzcz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0KLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyB2b2lkIGFmZmluZVRyYW5zZm9ybURlY29tcG9zZShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG1hdHJpeCwgZG91YmxlIHNyWzldKQotewotICAgIEFmZmluZVRyYW5zZm9ybSBt
KG1hdHJpeCk7Ci0KLSAgICAvLyBDb21wdXRlIHNjYWxpbmcgZmFjdG9ycwotICAgIGRvdWJsZSBz
eCA9IHNxcnQobS5hKCkgKiBtLmEoKSArIG0uYigpICogbS5iKCkpOwotICAgIGRvdWJsZSBzeSA9
IHNxcnQobS5jKCkgKiBtLmMoKSArIG0uZCgpICogbS5kKCkpOwotCi0gICAgLyogQ29tcHV0ZSBj
cm9zcyBwcm9kdWN0IG9mIHRyYW5zZm9ybWVkIHVuaXQgdmVjdG9ycy4gSWYgbmVnYXRpdmUsCi0g
ICAgICAgIG9uZSBheGlzIHdhcyBmbGlwcGVkLiAqLwotCi0gICAgaWYgKG0uYSgpICogbS5kKCkg
LSBtLmMoKSAqIG0uYigpIDwgMC4wKSB7Ci0gICAgICAgIC8vIEZsaXAgYXhpcyB3aXRoIG1pbmlt
dW0gdW5pdCB2ZWN0b3IgZG90IHByb2R1Y3QKLQotICAgICAgICBpZiAobS5hKCkgPCBtLmQoKSkK
LSAgICAgICAgICAgIHN4ID0gLXN4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzeSA9IC1z
eTsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgc2NhbGUgZnJvbSBtYXRyaXgKLQotICAgIG0uc2Nh
bGUoMS4wIC8gc3gsIDEuMCAvIHN5KTsKLQotICAgIC8vIENvbXB1dGUgcm90YXRpb24KLQotICAg
IGRvdWJsZSBhbmdsZSA9IGF0YW4yKG0uYigpLCBtLmEoKSk7Ci0KLSAgICAvLyBSZW1vdmUgcm90
YXRpb24gZnJvbSBtYXRyaXgKLQotICAgIG0ucm90YXRlKHJhZDJkZWcoLWFuZ2xlKSk7Ci0KLSAg
ICAvLyBSZXR1cm4gcmVzdWx0cwotCi0gICAgc3JbMF0gPSBzeDsgc3JbMV0gPSBzeTsgc3JbMl0g
PSBhbmdsZTsKLSAgICBzclszXSA9IG0uYSgpOyBzcls0XSA9IG0uYigpOwotICAgIHNyWzVdID0g
bS5jKCk7IHNyWzZdID0gbS5kKCk7Ci0gICAgc3JbN10gPSBtLmUoKTsgc3JbOF0gPSBtLmYoKTsK
LX0KLQotc3RhdGljIHZvaWQgYWZmaW5lVHJhbnNmb3JtQ29tcG9zZShBZmZpbmVUcmFuc2Zvcm0m
IG0sIGNvbnN0IGRvdWJsZSBzcls5XSkKLXsKLSAgICBtLnNldEEoc3JbM10pOwotICAgIG0uc2V0
Qihzcls0XSk7Ci0gICAgbS5zZXRDKHNyWzVdKTsKLSAgICBtLnNldEQoc3JbNl0pOwotICAgIG0u
c2V0RShzcls3XSk7Ci0gICAgbS5zZXRGKHNyWzhdKTsKLSAgICBtLnJvdGF0ZShyYWQyZGVnKHNy
WzJdKSk7Ci0gICAgbS5zY2FsZShzclswXSwgc3JbMV0pOwotfQotCi1ib29sIEFmZmluZVRyYW5z
Zm9ybTo6aXNJbnZlcnRpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGV0KCkgIT0gMC4wOwot
fQotCi1BZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5zZm9ybTo6bXVsdGlwbHkoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBvdGhlcikKLXsKLSAgICByZXR1cm4gKCp0aGlzKSAqPSBvdGhlcjsKLX0K
LQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKGRvdWJsZSBzKQotewot
ICAgIHJldHVybiBzY2FsZShzLCBzKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFu
c2Zvcm06OnNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSkKLXsKLSAgICByZXR1
cm4gc2NhbGUoc3gsIHN5KTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06
OnJvdGF0ZUZyb21WZWN0b3IoZG91YmxlIHgsIGRvdWJsZSB5KQotewotICAgIHJldHVybiByb3Rh
dGUocmFkMmRlZyhhdGFuMih5LCB4KSkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRy
YW5zZm9ybTo6ZmxpcFgoKQotewotICAgIHJldHVybiBzY2FsZSgtMS4wZiwgMS4wZik7Ci19Ci0K
LUFmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpmbGlwWSgpCi17Ci0gICAgcmV0dXJu
IHNjYWxlKDEuMGYsIC0xLjBmKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zv
cm06OnNrZXcoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSkKLXsKLSAgICByZXR1cm4gc2hl
YXIodGFuKGRlZzJyYWQoYW5nbGVYKSksIHRhbihkZWcycmFkKGFuZ2xlWSkpKTsKLX0KLQotQWZm
aW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OnNrZXdYKGRvdWJsZSBhbmdsZSkKLXsKLSAg
ICByZXR1cm4gc2hlYXIodGFuKGRlZzJyYWQoYW5nbGUpKSwgMC4wZik7Ci19Ci0KLUFmZmluZVRy
YW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpza2V3WShkb3VibGUgYW5nbGUpCi17Ci0gICAgcmV0
dXJuIHNoZWFyKDAuMGYsIHRhbihkZWcycmFkKGFuZ2xlKSkpOwotfQotCi1BZmZpbmVUcmFuc2Zv
cm0gbWFrZU1hcEJldHdlZW5SZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0KQotewotICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZShkZXN0LngoKSAtIHNvdXJjZS54KCksIGRlc3QueSgpIC0gc291cmNl
LnkoKSk7Ci0gICAgdHJhbnNmb3JtLnNjYWxlKGRlc3Qud2lkdGgoKSAvIHNvdXJjZS53aWR0aCgp
LCBkZXN0LmhlaWdodCgpIC8gc291cmNlLmhlaWdodCgpKTsKLSAgICByZXR1cm4gdHJhbnNmb3Jt
OwotfQotCi1JbnRQb2ludCBBZmZpbmVUcmFuc2Zvcm06Om1hcFBvaW50KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKLXsKLSAgICBkb3VibGUgeDIsIHkyOwotICAgIG1hcChwb2ludC54KCks
IHBvaW50LnkoKSwgJngyLCAmeTIpOwotICAgIAotICAgIC8vIFJvdW5kIHRoZSBwb2ludC4KLSAg
ICByZXR1cm4gSW50UG9pbnQobHJvdW5kKHgyKSwgbHJvdW5kKHkyKSk7Ci19Ci0KLUZsb2F0UG9p
bnQgQWZmaW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29u
c3QKLXsKLSAgICBkb3VibGUgeDIsIHkyOwotICAgIG1hcChwb2ludC54KCksIHBvaW50LnkoKSwg
JngyLCAmeTIpOwotCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgy
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHkyKSk7Ci19Ci0KLUZsb2F0UXVhZCBBZmZpbmVUcmFuc2Zv
cm06Om1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBhdm9pZCA0IHNlcGVyYXRlIGxpYnJhcnkgY2FsbHMuIFBvaW50IG1hcHBpbmcgcmVhbGx5IG5l
ZWRzCi0gICAgLy8gdG8gYmUgcGxhdGZvcm0taW5kZXBlbmRlbnQgY29kZS4KLSAgICByZXR1cm4g
RmxvYXRRdWFkKG1hcFBvaW50KHF1YWQucDEoKSksCi0gICAgICAgICAgICAgICAgICAgICBtYXBQ
b2ludChxdWFkLnAyKCkpLAotICAgICAgICAgICAgICAgICAgICAgbWFwUG9pbnQocXVhZC5wMygp
KSwKLSAgICAgICAgICAgICAgICAgICAgIG1hcFBvaW50KHF1YWQucDQoKSkpOwotfQotCi12b2lk
IEFmZmluZVRyYW5zZm9ybTo6YmxlbmQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MpCi17Ci0gICAgZG91YmxlIHNyQVs5XSwgc3JCWzldOwotCi0gICAgYWZmaW5l
VHJhbnNmb3JtRGVjb21wb3NlKGZyb20sIHNyQSk7Ci0gICAgYWZmaW5lVHJhbnNmb3JtRGVjb21w
b3NlKCp0aGlzLCBzckIpOwotCi0gICAgLy8gSWYgeC1heGlzIG9mIG9uZSBpcyBmbGlwcGVkLCBh
bmQgeS1heGlzIG9mIHRoZSBvdGhlciwgY29udmVydCB0byBhbiB1bmZsaXBwZWQgcm90YXRpb24u
Ci0gICAgaWYgKChzckFbMF0gPCAwLjAgJiYgc3JCWzFdIDwgMC4wKSB8fCAoc3JBWzFdIDwgMC4w
ICYmICBzckJbMF0gPCAwLjApKSB7Ci0gICAgICAgIHNyQVswXSA9IC1zckFbMF07Ci0gICAgICAg
IHNyQVsxXSA9IC1zckFbMV07Ci0gICAgICAgIHNyQVsyXSArPSBzckFbMl0gPCAwID8gcGlEb3Vi
bGUgOiAtcGlEb3VibGU7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3Qgcm90YXRlIHRoZSBsb25nIHdh
eSBhcm91bmQuCi0gICAgc3JBWzJdID0gZm1vZChzckFbMl0sIDIuMCAqIHBpRG91YmxlKTsKLSAg
ICBzckJbMl0gPSBmbW9kKHNyQlsyXSwgMi4wICogcGlEb3VibGUpOwotCi0gICAgaWYgKGZhYnMo
c3JBWzJdIC0gc3JCWzJdKSA+IHBpRG91YmxlKSB7Ci0gICAgICAgIGlmIChzckFbMl0gPiBzckJb
Ml0pCi0gICAgICAgICAgICBzckFbMl0gLT0gcGlEb3VibGUgKiAyLjA7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNyQlsyXSAtPSBwaURvdWJsZSAqIDIuMDsKLSAgICB9Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDk7IGkrKykKLSAgICAgICAgc3JBW2ldID0gc3JBW2ldICsgcHJvZ3Jl
c3MgKiAoc3JCW2ldIC0gc3JBW2ldKTsKLQotICAgIGFmZmluZVRyYW5zZm9ybUNvbXBvc2UoKnRo
aXMsIHNyQSk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWZmaW5l
VHJhbnNmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BZmZp
bmVUcmFuc2Zvcm0uaAkocmV2aXNpb24gMzkzNzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0FmZmluZVRyYW5zZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFmZmluZVRyYW5zZm9ybV9oCi0jZGVm
aW5lIEFmZmluZVRyYW5zZm9ybV9oCi0KLSNpZiBQTEFURk9STShDRykKLSNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ0dBZmZpbmVUcmFuc2Zvcm0uaD4KLXR5cGVkZWYgQ0dBZmZpbmVUcmFuc2Zvcm0g
UGxhdGZvcm1BZmZpbmVUcmFuc2Zvcm07Ci0jZWxpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxR
TWF0cml4PgotdHlwZWRlZiBRTWF0cml4IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtOwotI2VsaWYg
UExBVEZPUk0oQ0FJUk8pCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLXR5cGVkZWYgY2Fpcm9fbWF0cml4
X3QgUGxhdGZvcm1BZmZpbmVUcmFuc2Zvcm07Ci0jZWxpZiBQTEFURk9STShTS0lBKQotI2luY2x1
ZGUgIlNrTWF0cml4LmgiCi10eXBlZGVmIFNrTWF0cml4IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3Jt
OwotI2VsaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQotI2luY2x1ZGUgPHd4L2RlZnMuaD4K
LSNpbmNsdWRlIDx3eC9ncmFwaGljcy5oPgotdHlwZWRlZiB3eEdyYXBoaWNzTWF0cml4IFBsYXRm
b3JtQWZmaW5lVHJhbnNmb3JtOwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIEZsb2F0UXVhZDsKLQotY2xhc3MgQWZmaW5lVHJhbnNmb3JtIHsKLXB1
YmxpYzoKLSAgICBBZmZpbmVUcmFuc2Zvcm0oKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0oZG91Ymxl
IGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7Ci0j
aWYgIVBMQVRGT1JNKFdYKSB8fCBVU0UoV1hHQykKLSAgICBBZmZpbmVUcmFuc2Zvcm0oY29uc3Qg
UGxhdGZvcm1BZmZpbmVUcmFuc2Zvcm0mKTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRNYXRyaXgo
ZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUg
Zik7Ci0gICAgdm9pZCBtYXAoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgKngyLCBkb3VibGUg
KnkyKSBjb25zdDsKLQotICAgIC8vIFJvdW5kcyB0aGUgbWFwcGVkIHBvaW50IHRvIHRoZSBuZWFy
ZXN0IGludGVnZXIgdmFsdWUuCi0gICAgSW50UG9pbnQgbWFwUG9pbnQoY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKLQotICAgIEZsb2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OwotCi0gICAgLy8gUm91bmRzIHRoZSByZXN1bHRpbmcgbWFwcGVkIHJlY3RhbmdsZSBvdXQu
IFRoaXMgaXMgaGVscGZ1bCBmb3IgYm91bmRpbmcKLSAgICAvLyBib3ggY29tcHV0YXRpb25zIGJ1
dCBtYXkgbm90IGJlIHdoYXQgaXMgd2FudGVkIGluIG90aGVyIGNvbnRleHRzLgotICAgIEludFJl
Y3QgbWFwUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0KLSAgICBGbG9hdFJlY3QgbWFwUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLQotICAgIEZsb2F0UXVhZCBtYXBRdWFkKGNvbnN0
IEZsb2F0UXVhZCYpIGNvbnN0OwotCi0gICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Q7Ci0KLSAg
ICBkb3VibGUgYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QShkb3VibGUgYSk7Ci0KLSAgICBkb3Vi
bGUgYigpIGNvbnN0OwotICAgIHZvaWQgc2V0Qihkb3VibGUgYik7Ci0KLSAgICBkb3VibGUgYygp
IGNvbnN0OwotICAgIHZvaWQgc2V0Qyhkb3VibGUgYyk7Ci0KLSAgICBkb3VibGUgZCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0RChkb3VibGUgZCk7Ci0KLSAgICBkb3VibGUgZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0RShkb3VibGUgZSk7Ci0KLSAgICBkb3VibGUgZigpIGNvbnN0OwotICAgIHZvaWQg
c2V0Rihkb3VibGUgZik7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zv
cm0mIG11bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIEFmZmluZVRyYW5zZm9y
bSYgc2NhbGUoZG91YmxlKTsgCi0gICAgQWZmaW5lVHJhbnNmb3JtJiBzY2FsZShkb3VibGUgc3gs
IGRvdWJsZSBzeSk7IAotICAgIEFmZmluZVRyYW5zZm9ybSYgc2NhbGVOb25Vbmlmb3JtKGRvdWJs
ZSBzeCwgZG91YmxlIHN5KTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0mIHJvdGF0ZShkb3VibGUgZCk7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtJiByb3RhdGVGcm9tVmVjdG9yKGRvdWJsZSB4LCBkb3VibGUg
eSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkp
OwotICAgIEFmZmluZVRyYW5zZm9ybSYgc2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpOwotICAg
IEFmZmluZVRyYW5zZm9ybSYgZmxpcFgoKTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0mIGZsaXBZKCk7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3KGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkp
OwotICAgIEFmZmluZVRyYW5zZm9ybSYgc2tld1goZG91YmxlIGFuZ2xlKTsKLSAgICBBZmZpbmVU
cmFuc2Zvcm0mIHNrZXdZKGRvdWJsZSBhbmdsZSk7Ci0gCi0gICAgZG91YmxlIGRldCgpIGNvbnN0
OwotICAgIGJvb2wgaXNJbnZlcnRpYmxlKCkgY29uc3Q7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGlu
dmVyc2UoKSBjb25zdDsKLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBm
cm9tLCBkb3VibGUgcHJvZ3Jlc3MpOwotCi0jaWYgIVBMQVRGT1JNKFdYKSB8fCBVU0UoV1hHQykK
LSAgICBvcGVyYXRvciBQbGF0Zm9ybUFmZmluZVRyYW5zZm9ybSgpIGNvbnN0OwotI2VuZGlmCi0K
LSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7Ci0gICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0gICAgQWZmaW5lVHJhbnNmb3JtJiBvcGVyYXRvcio9
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIEFmZmluZVRyYW5zZm9ybSBvcGVyYXRvcioo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgCi1wcml2YXRlOgotI2lmICFQTEFURk9STShX
WCkgfHwgVVNFKFdYR0MpCi0gICAgUGxhdGZvcm1BZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07
Ci0jZW5kaWYKLX07Ci0KLUFmZmluZVRyYW5zZm9ybSBtYWtlTWFwQmV0d2VlblJlY3RzKGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QpOwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBZmZpbmVUcmFuc2Zvcm1faApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5z
Zm9ybS5jcHAJKHJldmlzaW9uIDM5MzM4KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FmZmluZVRyYW5zZm9ybS5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBh
ZmZpbmVUcmFuc2Zvcm1EZWNvbXBvc2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgsIGRv
dWJsZSBzcls5XSkKK3sKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbShtYXRyaXgpOworCisgICAgLy8g
Q29tcHV0ZSBzY2FsaW5nIGZhY3RvcnMKKyAgICBkb3VibGUgc3ggPSBzcXJ0KG0uYSgpICogbS5h
KCkgKyBtLmIoKSAqIG0uYigpKTsKKyAgICBkb3VibGUgc3kgPSBzcXJ0KG0uYygpICogbS5jKCkg
KyBtLmQoKSAqIG0uZCgpKTsKKworICAgIC8qIENvbXB1dGUgY3Jvc3MgcHJvZHVjdCBvZiB0cmFu
c2Zvcm1lZCB1bml0IHZlY3RvcnMuIElmIG5lZ2F0aXZlLAorICAgICAgICBvbmUgYXhpcyB3YXMg
ZmxpcHBlZC4gKi8KKworICAgIGlmIChtLmEoKSAqIG0uZCgpIC0gbS5jKCkgKiBtLmIoKSA8IDAu
MCkgeworICAgICAgICAvLyBGbGlwIGF4aXMgd2l0aCBtaW5pbXVtIHVuaXQgdmVjdG9yIGRvdCBw
cm9kdWN0CisKKyAgICAgICAgaWYgKG0uYSgpIDwgbS5kKCkpCisgICAgICAgICAgICBzeCA9IC1z
eDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3kgPSAtc3k7CisgICAgfQorCisgICAgLy8g
UmVtb3ZlIHNjYWxlIGZyb20gbWF0cml4CisKKyAgICBtLnNjYWxlKDEuMCAvIHN4LCAxLjAgLyBz
eSk7CisKKyAgICAvLyBDb21wdXRlIHJvdGF0aW9uCisKKyAgICBkb3VibGUgYW5nbGUgPSBhdGFu
MihtLmIoKSwgbS5hKCkpOworCisgICAgLy8gUmVtb3ZlIHJvdGF0aW9uIGZyb20gbWF0cml4CisK
KyAgICBtLnJvdGF0ZShyYWQyZGVnKC1hbmdsZSkpOworCisgICAgLy8gUmV0dXJuIHJlc3VsdHMK
KworICAgIHNyWzBdID0gc3g7IHNyWzFdID0gc3k7IHNyWzJdID0gYW5nbGU7CisgICAgc3JbM10g
PSBtLmEoKTsgc3JbNF0gPSBtLmIoKTsKKyAgICBzcls1XSA9IG0uYygpOyBzcls2XSA9IG0uZCgp
OworICAgIHNyWzddID0gbS5lKCk7IHNyWzhdID0gbS5mKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFm
ZmluZVRyYW5zZm9ybUNvbXBvc2UoQWZmaW5lVHJhbnNmb3JtJiBtLCBjb25zdCBkb3VibGUgc3Jb
OV0pCit7CisgICAgbS5zZXRBKHNyWzNdKTsKKyAgICBtLnNldEIoc3JbNF0pOworICAgIG0uc2V0
Qyhzcls1XSk7CisgICAgbS5zZXREKHNyWzZdKTsKKyAgICBtLnNldEUoc3JbN10pOworICAgIG0u
c2V0Rihzcls4XSk7CisgICAgbS5yb3RhdGUocmFkMmRlZyhzclsyXSkpOworICAgIG0uc2NhbGUo
c3JbMF0sIHNyWzFdKTsKK30KKworYm9vbCBBZmZpbmVUcmFuc2Zvcm06OmlzSW52ZXJ0aWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGRldCgpICE9IDAuMDsKK30KKworQWZmaW5lVHJhbnNmb3Jt
JiBBZmZpbmVUcmFuc2Zvcm06Om11bHRpcGx5KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIp
Cit7CisgICAgcmV0dXJuICgqdGhpcykgKj0gb3RoZXI7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYg
QWZmaW5lVHJhbnNmb3JtOjpzY2FsZShkb3VibGUgcykKK3sKKyAgICByZXR1cm4gc2NhbGUocywg
cyk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpzY2FsZU5vblVuaWZv
cm0oZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgcmV0dXJuIHNjYWxlKHN4LCBzeSk7Cit9
CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpyb3RhdGVGcm9tVmVjdG9yKGRv
dWJsZSB4LCBkb3VibGUgeSkKK3sKKyAgICByZXR1cm4gcm90YXRlKHJhZDJkZWcoYXRhbjIoeSwg
eCkpKTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06OmZsaXBYKCkKK3sK
KyAgICByZXR1cm4gc2NhbGUoLTEuMGYsIDEuMGYpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFm
ZmluZVRyYW5zZm9ybTo6ZmxpcFkoKQoreworICAgIHJldHVybiBzY2FsZSgxLjBmLCAtMS4wZik7
Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNmb3JtOjpza2V3KGRvdWJsZSBhbmds
ZVgsIGRvdWJsZSBhbmdsZVkpCit7CisgICAgcmV0dXJuIHNoZWFyKHRhbihkZWcycmFkKGFuZ2xl
WCkpLCB0YW4oZGVnMnJhZChhbmdsZVkpKSk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5l
VHJhbnNmb3JtOjpza2V3WChkb3VibGUgYW5nbGUpCit7CisgICAgcmV0dXJuIHNoZWFyKHRhbihk
ZWcycmFkKGFuZ2xlKSksIDAuMGYpOworfQorCitBZmZpbmVUcmFuc2Zvcm0mIEFmZmluZVRyYW5z
Zm9ybTo6c2tld1koZG91YmxlIGFuZ2xlKQoreworICAgIHJldHVybiBzaGVhcigwLjBmLCB0YW4o
ZGVnMnJhZChhbmdsZSkpKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIG1ha2VNYXBCZXR3ZWVuUmVj
dHMoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdCkKK3sKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoZGVz
dC54KCkgLSBzb3VyY2UueCgpLCBkZXN0LnkoKSAtIHNvdXJjZS55KCkpOworICAgIHRyYW5zZm9y
bS5zY2FsZShkZXN0LndpZHRoKCkgLyBzb3VyY2Uud2lkdGgoKSwgZGVzdC5oZWlnaHQoKSAvIHNv
dXJjZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKworSW50UG9pbnQgQWZm
aW5lVHJhbnNmb3JtOjptYXBQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7Cisg
ICAgZG91YmxlIHgyLCB5MjsKKyAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnky
KTsKKyAgICAKKyAgICAvLyBSb3VuZCB0aGUgcG9pbnQuCisgICAgcmV0dXJuIEludFBvaW50KGxy
b3VuZCh4MiksIGxyb3VuZCh5MikpOworfQorCitGbG9hdFBvaW50IEFmZmluZVRyYW5zZm9ybTo6
bWFwUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgZG91YmxlIHgy
LCB5MjsKKyAgICBtYXAocG9pbnQueCgpLCBwb2ludC55KCksICZ4MiwgJnkyKTsKKworICAgIHJl
dHVybiBGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pih4MiksIHN0YXRpY19jYXN0PGZsb2F0
Pih5MikpOworfQorCitGbG9hdFF1YWQgQWZmaW5lVHJhbnNmb3JtOjptYXBRdWFkKGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogYXZvaWQgNCBzZXBlcmF0ZSBs
aWJyYXJ5IGNhbGxzLiBQb2ludCBtYXBwaW5nIHJlYWxseSBuZWVkcworICAgIC8vIHRvIGJlIHBs
YXRmb3JtLWluZGVwZW5kZW50IGNvZGUuCisgICAgcmV0dXJuIEZsb2F0UXVhZChtYXBQb2ludChx
dWFkLnAxKCkpLAorICAgICAgICAgICAgICAgICAgICAgbWFwUG9pbnQocXVhZC5wMigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgIG1hcFBvaW50KHF1YWQucDMoKSksCisgICAgICAgICAgICAgICAg
ICAgICBtYXBQb2ludChxdWFkLnA0KCkpKTsKK30KKwordm9pZCBBZmZpbmVUcmFuc2Zvcm06OmJs
ZW5kKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKQoreworICAg
IGRvdWJsZSBzckFbOV0sIHNyQls5XTsKKworICAgIGFmZmluZVRyYW5zZm9ybURlY29tcG9zZShm
cm9tLCBzckEpOworICAgIGFmZmluZVRyYW5zZm9ybURlY29tcG9zZSgqdGhpcywgc3JCKTsKKwor
ICAgIC8vIElmIHgtYXhpcyBvZiBvbmUgaXMgZmxpcHBlZCwgYW5kIHktYXhpcyBvZiB0aGUgb3Ro
ZXIsIGNvbnZlcnQgdG8gYW4gdW5mbGlwcGVkIHJvdGF0aW9uLgorICAgIGlmICgoc3JBWzBdIDwg
MC4wICYmIHNyQlsxXSA8IDAuMCkgfHwgKHNyQVsxXSA8IDAuMCAmJiAgc3JCWzBdIDwgMC4wKSkg
eworICAgICAgICBzckFbMF0gPSAtc3JBWzBdOworICAgICAgICBzckFbMV0gPSAtc3JBWzFdOwor
ICAgICAgICBzckFbMl0gKz0gc3JBWzJdIDwgMCA/IHBpRG91YmxlIDogLXBpRG91YmxlOworICAg
IH0KKworICAgIC8vIERvbid0IHJvdGF0ZSB0aGUgbG9uZyB3YXkgYXJvdW5kLgorICAgIHNyQVsy
XSA9IGZtb2Qoc3JBWzJdLCAyLjAgKiBwaURvdWJsZSk7CisgICAgc3JCWzJdID0gZm1vZChzckJb
Ml0sIDIuMCAqIHBpRG91YmxlKTsKKworICAgIGlmIChmYWJzKHNyQVsyXSAtIHNyQlsyXSkgPiBw
aURvdWJsZSkgeworICAgICAgICBpZiAoc3JBWzJdID4gc3JCWzJdKQorICAgICAgICAgICAgc3JB
WzJdIC09IHBpRG91YmxlICogMi4wOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzckJbMl0g
LT0gcGlEb3VibGUgKiAyLjA7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBp
KyspCisgICAgICAgIHNyQVtpXSA9IHNyQVtpXSArIHByb2dyZXNzICogKHNyQltpXSAtIHNyQVtp
XSk7CisKKyAgICBhZmZpbmVUcmFuc2Zvcm1Db21wb3NlKCp0aGlzLCBzckEpOworfQorCit9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fm
ZmluZVRyYW5zZm9ybS5oCShyZXZpc2lvbiAzOTMzOCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9BZmZpbmVUcmFuc2Zvcm0uaDozOTMzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBZmZpbmVUcmFu
c2Zvcm1faAorI2RlZmluZSBBZmZpbmVUcmFuc2Zvcm1faAorCisjaWYgUExBVEZPUk0oQ0cpCisj
aW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQWZmaW5lVHJhbnNmb3JtLmg+Cit0eXBlZGVmIENHQWZm
aW5lVHJhbnNmb3JtIFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtOworI2VsaWYgUExBVEZPUk0oUVQp
CisjaW5jbHVkZSA8UU1hdHJpeD4KK3R5cGVkZWYgUU1hdHJpeCBQbGF0Zm9ybUFmZmluZVRyYW5z
Zm9ybTsKKyNlbGlmIFBMQVRGT1JNKENBSVJPKQorI2luY2x1ZGUgPGNhaXJvLmg+Cit0eXBlZGVm
IGNhaXJvX21hdHJpeF90IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtOworI2VsaWYgUExBVEZPUk0o
U0tJQSkKKyNpbmNsdWRlICJTa01hdHJpeC5oIgordHlwZWRlZiBTa01hdHJpeCBQbGF0Zm9ybUFm
ZmluZVRyYW5zZm9ybTsKKyNlbGlmIFBMQVRGT1JNKFdYKSAmJiBVU0UoV1hHQykKKyNpbmNsdWRl
IDx3eC9kZWZzLmg+CisjaW5jbHVkZSA8d3gvZ3JhcGhpY3MuaD4KK3R5cGVkZWYgd3hHcmFwaGlj
c01hdHJpeCBQbGF0Zm9ybUFmZmluZVRyYW5zZm9ybTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEludFBvaW50OworY2xhc3MgSW50UmVjdDsKK2NsYXNzIEZsb2F0UG9p
bnQ7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGbG9hdFF1YWQ7CisKK2NsYXNzIEFmZmluZVRy
YW5zZm9ybSB7CitwdWJsaWM6CisgICAgQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgQWZmaW5lVHJh
bnNmb3JtKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwg
ZG91YmxlIGYpOworI2lmICFQTEFURk9STShXWCkgfHwgVVNFKFdYR0MpCisgICAgQWZmaW5lVHJh
bnNmb3JtKGNvbnN0IFBsYXRmb3JtQWZmaW5lVHJhbnNmb3JtJik7CisjZW5kaWYKKworICAgIHZv
aWQgc2V0TWF0cml4KGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3Vi
bGUgZSwgZG91YmxlIGYpOworICAgIHZvaWQgbWFwKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91Ymxl
ICp4MiwgZG91YmxlICp5MikgY29uc3Q7CisKKyAgICAvLyBSb3VuZHMgdGhlIG1hcHBlZCBwb2lu
dCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLgorICAgIEludFBvaW50IG1hcFBvaW50KGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICBGbG9hdFBvaW50IG1hcFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKKworICAgIC8vIFJvdW5kcyB0aGUgcmVzdWx0aW5nIG1hcHBlZCBy
ZWN0YW5nbGUgb3V0LiBUaGlzIGlzIGhlbHBmdWwgZm9yIGJvdW5kaW5nCisgICAgLy8gYm94IGNv
bXB1dGF0aW9ucyBidXQgbWF5IG5vdCBiZSB3aGF0IGlzIHdhbnRlZCBpbiBvdGhlciBjb250ZXh0
cy4KKyAgICBJbnRSZWN0IG1hcFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OworCisgICAgRmxv
YXRSZWN0IG1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisKKyAgICBGbG9hdFF1YWQg
bWFwUXVhZChjb25zdCBGbG9hdFF1YWQmKSBjb25zdDsKKworICAgIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0OworCisgICAgZG91YmxlIGEoKSBjb25zdDsKKyAgICB2b2lkIHNldEEoZG91YmxlIGEp
OworCisgICAgZG91YmxlIGIoKSBjb25zdDsKKyAgICB2b2lkIHNldEIoZG91YmxlIGIpOworCisg
ICAgZG91YmxlIGMoKSBjb25zdDsKKyAgICB2b2lkIHNldEMoZG91YmxlIGMpOworCisgICAgZG91
YmxlIGQoKSBjb25zdDsKKyAgICB2b2lkIHNldEQoZG91YmxlIGQpOworCisgICAgZG91YmxlIGUo
KSBjb25zdDsKKyAgICB2b2lkIHNldEUoZG91YmxlIGUpOworCisgICAgZG91YmxlIGYoKSBjb25z
dDsKKyAgICB2b2lkIHNldEYoZG91YmxlIGYpOworCisgICAgdm9pZCByZXNldCgpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtJiBtdWx0aXBseShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0mIHNjYWxlKGRvdWJsZSk7IAorICAgIEFmZmluZVRyYW5zZm9ybSYgc2Nh
bGUoZG91YmxlIHN4LCBkb3VibGUgc3kpOyAKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNjYWxlTm9u
VW5pZm9ybShkb3VibGUgc3gsIGRvdWJsZSBzeSk7CisgICAgQWZmaW5lVHJhbnNmb3JtJiByb3Rh
dGUoZG91YmxlIGQpOworICAgIEFmZmluZVRyYW5zZm9ybSYgcm90YXRlRnJvbVZlY3Rvcihkb3Vi
bGUgeCwgZG91YmxlIHkpOworICAgIEFmZmluZVRyYW5zZm9ybSYgdHJhbnNsYXRlKGRvdWJsZSB0
eCwgZG91YmxlIHR5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNoZWFyKGRvdWJsZSBzeCwgZG91
YmxlIHN5KTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIGZsaXBYKCk7CisgICAgQWZmaW5lVHJhbnNm
b3JtJiBmbGlwWSgpOworICAgIEFmZmluZVRyYW5zZm9ybSYgc2tldyhkb3VibGUgYW5nbGVYLCBk
b3VibGUgYW5nbGVZKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0mIHNrZXdYKGRvdWJsZSBhbmdsZSk7
CisgICAgQWZmaW5lVHJhbnNmb3JtJiBza2V3WShkb3VibGUgYW5nbGUpOworIAorICAgIGRvdWJs
ZSBkZXQoKSBjb25zdDsKKyAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0OworICAgIEFmZmlu
ZVRyYW5zZm9ybSBpbnZlcnNlKCkgY29uc3Q7CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKworI2lmICFQTEFURk9STShXWCkg
fHwgVVNFKFdYR0MpCisgICAgb3BlcmF0b3IgUGxhdGZvcm1BZmZpbmVUcmFuc2Zvcm0oKSBjb25z
dDsKKyNlbmRpZgorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG90aGVy
KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorICAgIEFmZmluZVRyYW5zZm9y
bSYgb3BlcmF0b3IqPShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gb3BlcmF0b3IqKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIAorcHJpdmF0ZToKKyNp
ZiAhUExBVEZPUk0oV1gpIHx8IFVTRShXWEdDKQorICAgIFBsYXRmb3JtQWZmaW5lVHJhbnNmb3Jt
IG1fdHJhbnNmb3JtOworI2VuZGlmCit9OworCitBZmZpbmVUcmFuc2Zvcm0gbWFrZU1hcEJldHdl
ZW5SZWN0cyhjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0KTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQWZmaW5lVHJhbnNmb3JtX2gK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5z
Zm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oCShyZXZpc2lvbiAzOTMzOCkJ
KGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24u
aDozOTMzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFt
LmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
X2gKKyNkZWZpbmUgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb25faAorCisjaW5jbHVkZSAiVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSWRlbnRp
dHlUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbj4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWRlbnRpdHlUcmFuc2Zv
cm1PcGVyYXRpb24oKSk7CisgICAgfQorICAgICAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVu
dGl0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIElERU5USVRZOyB9CisgICAgdmlydHVh
bCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJl
dHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBJREVOVElUWTsgfQorCisgICAgdmlydHVhbCBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzU2FtZVR5cGUobyk7CisgICAgfQorCisgICAgdmlydHVhbCBib29s
IGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJC
b3hTaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCitwcml2YXRl
OgorICAgIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uKCkKKyAgICB7CisgICAgfQorCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2aXNp
b24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL01hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKworI2luY2x1ZGUgPGFsZ29y
aXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJh
dGlvbj4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7Cisg
ICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4g
dGhpczsKKworICAgIC8vIGNvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJhdGlvbnMgaW50byBtYXRy
aWNlcworICAgIEludFNpemUgc2l6ZTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZnJvbVQ7CisgICAg
QWZmaW5lVHJhbnNmb3JtIHRvVChtX2EsIG1fYiwgbV9jLCBtX2QsIG1fZSwgbV9mKTsKKyAgICBp
ZiAoZnJvbSkgeworICAgICAgICBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIG0gPSBz
dGF0aWNfY2FzdDxjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKKyAgICAg
ICAgZnJvbVQuc2V0TWF0cml4KG0tPm1fYSwgbS0+bV9iLCBtLT5tX2MsIG0tPm1fZCwgbS0+bV9l
LCBtLT5tX2YpOworICAgIH0KKyAgICAKKyAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQorICAgICAg
ICBzdGQ6OnN3YXAoZnJvbVQsIHRvVCk7CisKKyAgICB0b1QuYmxlbmQoZnJvbVQsIHByb2dyZXNz
KTsKKyAgICByZXR1cm4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG9ULmEoKSwg
dG9ULmIoKSwgdG9ULmMoKSwgdG9ULmQoKSwgdG9ULmUoKSwgdG9ULmYoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJl
dmlzaW9uIDM5MzM4KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24uaDozOTMzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5u
aXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb25faAorI2RlZmluZSBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb25faAorCisjaW5jbHVk
ZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPiBj
cmVhdGUoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBk
b3VibGUgZikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uKGEsIGIsIGMsIGQsIGUsIGYpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYSA9PSAxICYmIG1fYiA9PSAwICYmIG1f
YyA9PSAwICYmIG1fZCA9PSAxICYmIG1fZSA9PSAwICYmIG1fZiA9PSAwOyB9CisgICAgdmlydHVh
bCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBNQVRSSVg7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24m
IG8pIGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9uVHlwZSgpID09IE1BVFJJWDsgfQorCisg
ICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9
IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKKyAgICAg
ICAgcmV0dXJuIG1fYSA9PSBtLT5tX2EgJiYgbV9iID09IG0tPm1fYiAmJiBtX2MgPT0gbS0+bV9j
ICYmIG1fZCA9PSBtLT5tX2QgJiYgbV9lID09IG0tPm1fZSAmJiBtX2YgPT0gbS0+bV9mOworICAg
IH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXRyaXgobV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7CisgICAgICAg
IHRyYW5zZm9ybSA9IG1hdHJpeCAqIHRyYW5zZm9ybTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKKyAgICAKK3ByaXZhdGU6CisgICAgTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3Vi
bGUgZSwgZG91YmxlIGYpCisgICAgICAgIDogbV9hKGEpCisgICAgICAgICwgbV9iKGIpCisgICAg
ICAgICwgbV9jKGMpCisgICAgICAgICwgbV9kKGQpCisgICAgICAgICwgbV9lKGUpCisgICAgICAg
ICwgbV9mKGYpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV9hOworICAgIGRvdWJs
ZSBtX2I7CisgICAgZG91YmxlIG1fYzsKKyAgICBkb3VibGUgbV9kOworICAgIGRvdWJsZSBtX2U7
CisgICAgZG91YmxlIG1fZjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7CisgICAg
aWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAKKyAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQorICAgICAgICByZXR1cm4gUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV9hbmdsZSAtIG1fYW5nbGUgKiBwcm9ncmVzcywg
bV90eXBlKTsKKyAgICAKKyAgICBjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21P
cCA9IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwor
ICAgIGRvdWJsZSBmcm9tQW5nbGUgPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGUgOiAwOworICAg
IHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShmcm9tQW5nbGUgKyAobV9h
bmdsZSAtIGZyb21BbmdsZSkgKiBwcm9ncmVzcywgbV90eXBlKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Jv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24g
MzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5oOjM5MzM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Jv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3Jh
aGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bl9oCisjZGVmaW5lIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbl9oCisKKyNpbmNsdWRlICJUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShk
b3VibGUgYW5nbGUsIE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGFuZ2xlLCB0eXBlKSk7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xl
ID09IDA7IH0KKyAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBl
KCkgPT0gbV90eXBlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWlzU2FtZVR5cGUo
bykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbiogciA9IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbio+KCZvKTsKKyAgICAgICAgcmV0dXJuIG1fYW5nbGUgPT0gci0+bV9hbmdsZTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0CisgICAgeworICAgICAgICB0cmFuc2Zv
cm0ucm90YXRlKG1fYW5nbGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5
ID0gZmFsc2UpOworCisgICAgZG91YmxlIGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsg
fQorCitwcml2YXRlOgorICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgYW5nbGUs
IE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQorICAgICAgICAs
IG1fdHlwZSh0eXBlKQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUgbV9hbmdsZTsKKyAgICBP
cGVyYXRpb25UeXBlIG1fdHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDM5MzM4KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+
IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7CisgICAgaWYg
KGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gdGhpczsK
KyAgICAKKyAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQorICAgICAgICByZXR1cm4gU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3ggKyAoMS4gLSBtX3gpICogcHJvZ3Jlc3MsIG1feSAr
ICgxLiAtIG1feSkgKiBwcm9ncmVzcywgbV90eXBlKTsKKyAgICAKKyAgICBjb25zdCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihmcm9tKTsKKyAgICBkb3VibGUgZnJvbVggPSBmcm9tT3AgPyBmcm9tT3At
Pm1feCA6IDEuOworICAgIGRvdWJsZSBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogMS47
CisgICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbVggKyAobV94
IC0gZnJvbVgpICogcHJvZ3Jlc3MsIGZyb21ZICsgKG1feSAtIGZyb21ZKSAqIHByb2dyZXNzLCBt
X3R5cGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24uaAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmg6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbl9oCisjZGVmaW5lIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
X2gKKworI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24+IGNyZWF0ZShkb3VibGUgc3gsIGRvdWJsZSBzeSwgT3BlcmF0aW9uVHlwZSB0eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbihzeCwgc3ksIHR5cGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0
eSgpIGNvbnN0IHsgcmV0dXJuIG1feCA9PSAxICYmICBtX3kgPT0gMTsgfQorICAgIHZpcnR1YWwg
T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBv
KSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHMgPSBzdGF0
aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKKyAgICAgICAgcmV0
dXJuIG1feCA9PSBzLT5tX3ggJiYgbV95ID09IHMtPm1feTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJv
cmRlckJveFNpemUpIGNvbnN0CisgICAgeworICAgICAgICB0cmFuc2Zvcm0uc2NhbGUobV94LCBt
X3kpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBm
cm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOworCitw
cml2YXRlOgorICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBzeCwgZG91YmxlIHN5
LCBPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgICAgIDogbV94KHN4KQorICAgICAgICAsIG1feShz
eSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgICAgICAKKyAgICBk
b3VibGUgbV94OworICAgIGRvdWJsZSBtX3k7CisgICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCShyZXZpc2lvbiAz
OTMzOCkJKGZyb20gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2tld1RyYW5zZm9ybU9wZXJhdGlv
bi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bh
c3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVu
ZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBi
bGVuZFRvSWRlbnRpdHkpCit7CisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRo
aXMpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICAKKyAgICBpZiAoYmxlbmRUb0lkZW50aXR5
KQorICAgICAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1fYW5nbGVY
IC0gbV9hbmdsZVggKiBwcm9ncmVzcywgbV9hbmdsZVkgLSBtX2FuZ2xlWSAqIHByb2dyZXNzLCBt
X3R5cGUpOworICAgIAorICAgIGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9
IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKKyAgICBk
b3VibGUgZnJvbUFuZ2xlWCA9IGZyb21PcCA/IGZyb21PcC0+bV9hbmdsZVggOiAwOworICAgIGRv
dWJsZSBmcm9tQW5nbGVZID0gZnJvbU9wID8gZnJvbU9wLT5tX2FuZ2xlWSA6IDA7CisgICAgcmV0
dXJuIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShmcm9tQW5nbGVYICsgKG1fYW5nbGVY
IC0gZnJvbUFuZ2xlWCkgKiBwcm9ncmVzcywgZnJvbUFuZ2xlWSArIChtX2FuZ2xlWSAtIGZyb21B
bmdsZVkpICogcHJvZ3Jlc3MsIG1fdHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaDozOTMzOCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAw
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAw
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNv
bSkKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgU2tld1RyYW5zZm9ybU9wZXJhdGlvbl9oCisjZGVmaW5lIFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb25faAorCisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiA6IHB1Ymxp
YyBUcmFuc2Zvcm1PcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZ
LCBPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oYW5nbGVYLCBhbmdsZVksIHR5cGUpKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGVYID09
IDAgJiYgbV9hbmdsZVkgPT0gMDsgfQorICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVy
YXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBib29sIGlz
U2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdl
dE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29u
c3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24qPigmbyk7CisgICAgICAgIHJldHVybiBtX2FuZ2xlWCA9PSBzLT5tX2Fu
Z2xlWCAmJiBtX2FuZ2xlWSA9PSBzLT5tX2FuZ2xlWTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRl
ckJveFNpemUpIGNvbnN0CisgICAgeworICAgICAgICB0cmFuc2Zvcm0uc2tldyhtX2FuZ2xlWCwg
bV9hbmdsZVkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2Up
OworICAgIAorcHJpdmF0ZToKKyAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhbmds
ZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICAgICAgOiBtX2FuZ2xl
WChhbmdsZVgpCisgICAgICAgICwgbV9hbmdsZVkoYW5nbGVZKQorICAgICAgICAsIG1fdHlwZSh0
eXBlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIG1fYW5nbGVYOworICAgIGRvdWJs
ZSBtX2FuZ2xlWTsKKyAgICBPcGVyYXRpb25UeXBlIG1fdHlwZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb25faApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFu
c2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1RyYW5zZm9ybU9wZXJhdGlvbi5oOjM5MzM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR3Jh
aGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFRyYW5zZm9y
bU9wZXJhdGlvbl9oCisjZGVmaW5lIFRyYW5zZm9ybU9wZXJhdGlvbl9oCisKKyNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIENTUyBUcmFuc2Zvcm1zIChtYXkgYmVjb21lIHBhcnQgb2YgQ1NTMykKKwor
Y2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJhbnNmb3JtT3Bl
cmF0aW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBPcGVyYXRpb25UeXBlIHsKKyAgICAgICAgU0NB
TEVfWCwgU0NBTEVfWSwgU0NBTEUsIAorICAgICAgICBUUkFOU0xBVEVfWCwgVFJBTlNMQVRFX1ks
IFRSQU5TTEFURSwgCisgICAgICAgIFJPVEFURSwgCisgICAgICAgIFNLRVdfWCwgU0tFV19ZLCBT
S0VXLCAKKyAgICAgICAgTUFUUklYLCBJREVOVElUWSwgTk9ORQorICAgIH07CisKKyAgICB2aXJ0
dWFsIH5UcmFuc2Zvcm1PcGVyYXRpb24oKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0ID0gMDsKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IG8pOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBJbnRTaXplJiBi
b3JkZXJCb3hTaXplKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNm
b3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkgPSAwOworCisgICAgdmly
dHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVHJhbnNmb3JtT3BlcmF0aW9uX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDM5MzM4KQkoZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVy
YXRpb25zLmNwcDozOTMzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1PcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYW5zZm9ybU9wZXJhdGlv
bnM6OlRyYW5zZm9ybU9wZXJhdGlvbnMoYm9vbCBtYWtlSWRlbnRpdHkpCit7CisgICAgaWYgKG1h
a2VJZGVudGl0eSkKKyAgICAgICAgbV9vcGVyYXRpb25zLmFwcGVuZChJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKCkpOworfQorCitib29sIFRyYW5zZm9ybU9wZXJhdGlvbnM6Om9w
ZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgbykgY29uc3QKK3sKKyAgICBpZiAo
bV9vcGVyYXRpb25zLnNpemUoKSAhPSBvLm1fb3BlcmF0aW9ucy5zaXplKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgdW5zaWduZWQgcyA9IG1fb3BlcmF0aW9ucy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgeworICAgICAgICBpZiAo
Km1fb3BlcmF0aW9uc1tpXSAhPSAqby5tX29wZXJhdGlvbnNbaV0pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNmb3JtT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb25zLmgJKHJldmlzaW9uIDM5MzM4KQko
ZnJvbSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmg6MzkzMzgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAw
MCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAw
MCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5j
b20pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFRyYW5zZm9ybU9wZXJhdGlvbnNfaAorI2RlZmluZSBUcmFuc2Zvcm1P
cGVyYXRpb25zX2gKKworI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9ucyB7CitwdWJsaWM6CisgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyhib29sIG1ha2VJZGVudGl0eSA9IGZhbHNlKTsKKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgbykgY29uc3Q7CisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBs
eShjb25zdCBJbnRTaXplJiBzeiwgQWZmaW5lVHJhbnNmb3JtJiB0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3BlcmF0aW9ucy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1fb3BlcmF0aW9uc1tpXS0+YXBwbHkodCwgc3opOworICAgIH0KKyAgICAK
KyAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPiYgb3BlcmF0aW9ucygpIHsg
cmV0dXJuIG1fb3BlcmF0aW9uczsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJhbnNmb3Jt
T3BlcmF0aW9uPiA+JiBvcGVyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zOyB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID4gbV9v
cGVyYXRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJh
bnNmb3JtT3BlcmF0aW9uc19oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5z
Zm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcAkocmV2aXNpb24gMzkzMzgpCShmcm9tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Ry
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA6MzkzMzgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJh
dGlvbj4gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCit7
CisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQorICAgICAgICByZXR1
cm4gdGhpczsKKyAgICAKKyAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQorICAgICAgICByZXR1cm4g
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKG1feC50eXBlKCkpLmJs
ZW5kKG1feCwgcHJvZ3Jlc3MpLCBMZW5ndGgobV95LnR5cGUoKSkuYmxlbmQobV95LCBwcm9ncmVz
cyksIG1fdHlwZSk7CisKKyAgICBjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZy
b20pOworICAgIExlbmd0aCBmcm9tWCA9IGZyb21PcCA/IGZyb21PcC0+bV94IDogTGVuZ3RoKG1f
eC50eXBlKCkpOworICAgIExlbmd0aCBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogTGVu
Z3RoKG1feS50eXBlKCkpOworICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShtX3guYmxlbmQoZnJvbVgsIHByb2dyZXNzKSwgbV95LmJsZW5kKGZyb21ZLCBwcm9n
cmVzcyksIG1fdHlwZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5MzM4KQkoZnJvbSBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaDozOTMzOCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAg
KEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNA
Z21haWwuY29tKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25faAorI2Rl
ZmluZSBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25faAorCisjaW5jbHVkZSAiTGVuZ3RoLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9w
ZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgTGVuZ3RoJiB0eCwgY29uc3QgTGVuZ3RoJiB0eSwg
T3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24odHgsIHR5LCB0eXBlKSk7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiBtX3guY2FsY0Zsb2F0VmFs
dWUoMSkgPT0gMCAmJiBtX3kuY2FsY0Zsb2F0VmFsdWUoMSkgPT0gMDsgfQorICAgIHZpcnR1YWwg
T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBv
KSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOworICAg
ICAgICByZXR1cm4gbV94ID09IHQtPm1feCAmJiBtX3kgPT0gdC0+bV95OworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50
U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRyYW5zZm9ybS50cmFu
c2xhdGUobV94LmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveFNpemUud2lkdGgoKSksIG1feS5jYWxj
RmxvYXRWYWx1ZShib3JkZXJCb3hTaXplLmhlaWdodCgpKSk7CisgICAgICAgIHJldHVybiBtX3gu
dHlwZSgpID09IFBlcmNlbnQgfHwgbV95LnR5cGUoKSA9PSBQZXJjZW50OworICAgIH0KKworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSA9IGZhbHNlKTsKKworcHJpdmF0ZToKKyAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24o
Y29uc3QgTGVuZ3RoJiB0eCwgY29uc3QgTGVuZ3RoJiB0eSwgT3BlcmF0aW9uVHlwZSB0eXBlKQor
ICAgICAgICA6IG1feCh0eCkKKyAgICAgICAgLCBtX3kodHkpCisgICAgICAgICwgbV90eXBlKHR5
cGUpCisgICAgeworICAgIH0KKworICAgIExlbmd0aCBtX3g7CisgICAgTGVuZ3RoIG1feTsKKyAg
ICBPcGVyYXRpb25UeXBlIG1fdHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9BbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL0FuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDM5MzczKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUFuaW1hdGlvbjo6QW5pbWF0aW9uKCkKLSAgICA6IG1fZGVsYXkoUmVu
ZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EZWxheSgpKQotICAgICwgbV9kaXJlY3Rpb24oUmVu
ZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSkKLSAgICAsIG1fZHVyYXRpb24o
UmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpKQotICAgICwgbV9pdGVyYXRp
b25Db3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpCi0g
ICAgLCBtX25hbWUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25OYW1lKCkpCi0gICAgLCBt
X3Byb3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uUHJvcGVydHkoKSkKLSAgICAs
IG1fdGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5j
dGlvbigpKQotICAgICwgbV9wbGF5U3RhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25Q
bGF5U3RhdGUoKSkKLSAgICAsIG1fZGVsYXlTZXQoZmFsc2UpCi0gICAgLCBtX2RpcmVjdGlvblNl
dChmYWxzZSkKLSAgICAsIG1fZHVyYXRpb25TZXQoZmFsc2UpCi0gICAgLCBtX2l0ZXJhdGlvbkNv
dW50U2V0KGZhbHNlKQotICAgICwgbV9uYW1lU2V0KGZhbHNlKQotICAgICwgbV9wbGF5U3RhdGVT
ZXQoZmFsc2UpCi0gICAgLCBtX3Byb3BlcnR5U2V0KGZhbHNlKQotICAgICwgbV90aW1pbmdGdW5j
dGlvblNldChmYWxzZSkKLSAgICAsIG1faXNOb25lKGZhbHNlKQotewotfQotCi1BbmltYXRpb246
OkFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIG8pCi0gICAgOiBSZWZDb3VudGVkPEFuaW1hdGlv
bj4oKQotICAgICwgbV9kZWxheShvLm1fZGVsYXkpCi0gICAgLCBtX2RpcmVjdGlvbihvLm1fZGly
ZWN0aW9uKQotICAgICwgbV9kdXJhdGlvbihvLm1fZHVyYXRpb24pCi0gICAgLCBtX2l0ZXJhdGlv
bkNvdW50KG8ubV9pdGVyYXRpb25Db3VudCkKLSAgICAsIG1fbmFtZShvLm1fbmFtZSkKLSAgICAs
IG1fcHJvcGVydHkoby5tX3Byb3BlcnR5KQotICAgICwgbV90aW1pbmdGdW5jdGlvbihvLm1fdGlt
aW5nRnVuY3Rpb24pCi0gICAgLCBtX3BsYXlTdGF0ZShvLm1fcGxheVN0YXRlKQotICAgICwgbV9k
ZWxheVNldChvLm1fZGVsYXlTZXQpCi0gICAgLCBtX2RpcmVjdGlvblNldChvLm1fZGlyZWN0aW9u
U2V0KQotICAgICwgbV9kdXJhdGlvblNldChvLm1fZHVyYXRpb25TZXQpCi0gICAgLCBtX2l0ZXJh
dGlvbkNvdW50U2V0KG8ubV9pdGVyYXRpb25Db3VudFNldCkKLSAgICAsIG1fbmFtZVNldChvLm1f
bmFtZVNldCkKLSAgICAsIG1fcGxheVN0YXRlU2V0KG8ubV9wbGF5U3RhdGVTZXQpCi0gICAgLCBt
X3Byb3BlcnR5U2V0KG8ubV9wcm9wZXJ0eVNldCkKLSAgICAsIG1fdGltaW5nRnVuY3Rpb25TZXQo
by5tX3RpbWluZ0Z1bmN0aW9uU2V0KQotICAgICwgbV9pc05vbmUoby5tX2lzTm9uZSkKLXsKLX0K
LQotQW5pbWF0aW9uJiBBbmltYXRpb246Om9wZXJhdG9yPShjb25zdCBBbmltYXRpb24mIG8pCi17
Ci0gICAgbV9kZWxheSA9IG8ubV9kZWxheTsKLSAgICBtX2RpcmVjdGlvbiA9IG8ubV9kaXJlY3Rp
b247Ci0gICAgbV9kdXJhdGlvbiA9IG8ubV9kdXJhdGlvbjsKLSAgICBtX2l0ZXJhdGlvbkNvdW50
ID0gby5tX2l0ZXJhdGlvbkNvdW50OwotICAgIG1fbmFtZSA9IG8ubV9uYW1lOwotICAgIG1fcGxh
eVN0YXRlID0gby5tX3BsYXlTdGF0ZTsKLSAgICBtX3Byb3BlcnR5ID0gby5tX3Byb3BlcnR5Owot
ICAgIG1fdGltaW5nRnVuY3Rpb24gPSBvLm1fdGltaW5nRnVuY3Rpb247Ci0KLSAgICBtX2RlbGF5
U2V0ID0gby5tX2RlbGF5U2V0OwotICAgIG1fZGlyZWN0aW9uU2V0ID0gby5tX2RpcmVjdGlvblNl
dDsKLSAgICBtX2R1cmF0aW9uU2V0ID0gby5tX2R1cmF0aW9uU2V0OwotICAgIG1faXRlcmF0aW9u
Q291bnRTZXQgPSBvLm1faXRlcmF0aW9uQ291bnRTZXQ7Ci0gICAgbV9uYW1lU2V0ID0gby5tX25h
bWVTZXQ7Ci0gICAgbV9wbGF5U3RhdGVTZXQgPSBvLm1fcGxheVN0YXRlU2V0OwotICAgIG1fcHJv
cGVydHlTZXQgPSBvLm1fcHJvcGVydHlTZXQ7Ci0gICAgbV90aW1pbmdGdW5jdGlvblNldCA9IG8u
bV90aW1pbmdGdW5jdGlvblNldDsKLQotICAgIG1faXNOb25lID0gby5tX2lzTm9uZTsKLQotICAg
IHJldHVybiAqdGhpczsKLX0KLQotQW5pbWF0aW9uOjp+QW5pbWF0aW9uKCkKLXsKLX0KLQotYm9v
bCBBbmltYXRpb246OmFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24qIG8sIGJvb2wgbWF0
Y2hQbGF5U3RhdGVzKSBjb25zdAotewotICAgIGlmICghbykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAotICAgIGJvb2wgcmVzdWx0ID0gbV9kZWxheSA9PSBvLT5tX2RlbGF5ICYmCi0gICAg
ICAgICAgICAgICAgICBtX2RpcmVjdGlvbiA9PSBvLT5tX2RpcmVjdGlvbiAmJgotICAgICAgICAg
ICAgICAgICAgbV9kdXJhdGlvbiA9PSBvLT5tX2R1cmF0aW9uICYmCi0gICAgICAgICAgICAgICAg
ICBtX2l0ZXJhdGlvbkNvdW50ID09IG8tPm1faXRlcmF0aW9uQ291bnQgJiYKLSAgICAgICAgICAg
ICAgICAgIG1fbmFtZSA9PSBvLT5tX25hbWUgJiYKLSAgICAgICAgICAgICAgICAgIG1fcHJvcGVy
dHkgPT0gby0+bV9wcm9wZXJ0eSAmJiAKLSAgICAgICAgICAgICAgICAgIG1fdGltaW5nRnVuY3Rp
b24gPT0gby0+bV90aW1pbmdGdW5jdGlvbiAmJgotICAgICAgICAgICAgICAgICAgbV9kZWxheVNl
dCA9PSBvLT5tX2RlbGF5U2V0ICYmCi0gICAgICAgICAgICAgICAgICBtX2RpcmVjdGlvblNldCA9
PSBvLT5tX2RpcmVjdGlvblNldCAmJgotICAgICAgICAgICAgICAgICAgbV9kdXJhdGlvblNldCA9
PSBvLT5tX2R1cmF0aW9uU2V0ICYmCi0gICAgICAgICAgICAgICAgICBtX2l0ZXJhdGlvbkNvdW50
U2V0ID09IG8tPm1faXRlcmF0aW9uQ291bnRTZXQgJiYKLSAgICAgICAgICAgICAgICAgIG1fbmFt
ZVNldCA9PSBvLT5tX25hbWVTZXQgJiYKLSAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHlTZXQg
PT0gby0+bV9wcm9wZXJ0eVNldCAmJgotICAgICAgICAgICAgICAgICAgbV90aW1pbmdGdW5jdGlv
blNldCA9PSBvLT5tX3RpbWluZ0Z1bmN0aW9uU2V0ICYmCi0gICAgICAgICAgICAgICAgICBtX2lz
Tm9uZSA9PSBvLT5tX2lzTm9uZTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gIW1hdGNoUGxheVN0YXRlcyB8fCAobV9wbGF5U3RhdGUgPT0g
by0+bV9wbGF5U3RhdGUgJiYgbV9wbGF5U3RhdGVTZXQgPT0gby0+bV9wbGF5U3RhdGVTZXQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9BbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Bbmlt
YXRpb24uaAkocmV2aXNpb24gMzkzNzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Bbmlt
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAy
MDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWls
LmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpZm5kZWYgQW5pbWF0aW9uX2gKLSNkZWZpbmUgQW5pbWF0aW9uX2gKLQotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiVGltaW5nRnVuY3Rpb24uaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8QW5pbWF0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgfkFuaW1hdGlvbigpOwotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8QW5pbWF0aW9uPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQW5p
bWF0aW9uKTsgfTsKLSAgICAKLSAgICBib29sIGlzRGVsYXlTZXQoKSBjb25zdCB7IHJldHVybiBt
X2RlbGF5U2V0OyB9Ci0gICAgYm9vbCBpc0RpcmVjdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlyZWN0aW9uU2V0OyB9Ci0gICAgYm9vbCBpc0R1cmF0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvblNldDsgfQotICAgIGJvb2wgaXNJdGVyYXRpb25Db3VudFNldCgpIGNvbnN0IHsg
cmV0dXJuIG1faXRlcmF0aW9uQ291bnRTZXQ7IH0KLSAgICBib29sIGlzTmFtZVNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZVNldDsgfQotICAgIGJvb2wgaXNQbGF5U3RhdGVTZXQoKSBjb25zdCB7
IHJldHVybiBtX3BsYXlTdGF0ZVNldDsgfQotICAgIGJvb2wgaXNQcm9wZXJ0eVNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHlTZXQ7IH0KLSAgICBib29sIGlzVGltaW5nRnVuY3Rpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uU2V0OyB9Ci0KLSAgICAvLyBGbGFncyB0
aGlzIHRvIGJlIHRoZSBzcGVjaWFsICJub25lIiBhbmltYXRpb24gKGFuaW1hdGlvbi1uYW1lOiBu
b25lKQotICAgIGJvb2wgaXNOb25lQW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc05vbmU7
IH0KLSAgICAvLyBXZSBjYW4gbWFrZSBwbGFjZWhvbGRlciBBbmltYXRpb24gb2JqZWN0cyB0byBr
ZWVwIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMKLSAgICAvLyBvZiBwcm9wZXJ0aWVzIGluIHN5
bmMuIGlzVmFsaWRBbmltYXRpb24gbWVhbnMgdGhpcyBpcyBub3QgYSBwbGFjZWhvbGRlci4KLSAg
ICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiAhbV9pc05vbmUgJiYgIW1f
bmFtZS5pc0VtcHR5KCk7IH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gKCFtX2RpcmVjdGlvblNldCAmJiAhbV9kdXJhdGlvblNldCAmJiAhbV9uYW1l
U2V0ICYmICFtX3BsYXlTdGF0ZVNldCAmJiAKLSAgICAgICAgICAgICAgICFtX2l0ZXJhdGlvbkNv
dW50U2V0ICYmICFtX2RlbGF5U2V0ICYmICFtX3RpbWluZ0Z1bmN0aW9uU2V0ICYmICFtX3Byb3Bl
cnR5U2V0KTsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHlPclplcm9EdXJhdGlvbigpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gaXNFbXB0eSgpIHx8IChtX2R1cmF0aW9uID09IDAgJiYg
bV9kZWxheSA8PSAwKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyRGVsYXkoKSB7IG1fZGVsYXlT
ZXQgPSBmYWxzZTsgfQotICAgIHZvaWQgY2xlYXJEaXJlY3Rpb24oKSB7IG1fZGlyZWN0aW9uU2V0
ID0gZmFsc2U7IH0KLSAgICB2b2lkIGNsZWFyRHVyYXRpb24oKSB7IG1fZHVyYXRpb25TZXQgPSBm
YWxzZTsgfQotICAgIHZvaWQgY2xlYXJJdGVyYXRpb25Db3VudCgpIHsgbV9pdGVyYXRpb25Db3Vu
dFNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhck5hbWUoKSB7IG1fbmFtZVNldCA9IGZhbHNl
OyB9Ci0gICAgdm9pZCBjbGVhclBsYXlTdGF0ZSgpIHsgbV9wbGF5U3RhdGVTZXQgPSBBbmltUGxh
eVN0YXRlUGxheWluZzsgfQotICAgIHZvaWQgY2xlYXJQcm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNl
dCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclRpbWluZ0Z1bmN0aW9uKCkgeyBtX3RpbWluZ0Z1
bmN0aW9uU2V0ID0gZmFsc2U7IH0KLQotICAgIGRvdWJsZSBkZWxheSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVsYXk7IH0KLSAgICBib29sIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0
aW9uOyB9Ci0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsg
fQotICAgIGludCBpdGVyYXRpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0aW9uQ291
bnQ7IH0KLSAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
LSAgICB1bnNpZ25lZCBwbGF5U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3BsYXlTdGF0ZTsgfQot
ICAgIGludCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KLSAgICBjb25z
dCBUaW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWlu
Z0Z1bmN0aW9uOyB9Ci0KLSAgICB2b2lkIHNldERlbGF5KGRvdWJsZSBjKSB7IG1fZGVsYXkgPSBj
OyBtX2RlbGF5U2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0RGlyZWN0aW9uKGJvb2wgZCkgeyBt
X2RpcmVjdGlvbiA9IGQ7IG1fZGlyZWN0aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0RHVy
YXRpb24oZG91YmxlIGQpIHsgQVNTRVJUKGQgPj0gMCk7IG1fZHVyYXRpb24gPSBkOyBtX2R1cmF0
aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0SXRlcmF0aW9uQ291bnQoaW50IGMpIHsgbV9p
dGVyYXRpb25Db3VudCA9IGM7IG1faXRlcmF0aW9uQ291bnRTZXQgPSB0cnVlOyB9Ci0gICAgdm9p
ZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbikgeyBtX25hbWUgPSBuOyBtX25hbWVTZXQgPSB0cnVl
OyB9Ci0gICAgdm9pZCBzZXRQbGF5U3RhdGUodW5zaWduZWQgZCkgeyBtX3BsYXlTdGF0ZSA9IGQ7
IG1fcGxheVN0YXRlU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UHJvcGVydHkoaW50IHQpIHsg
bV9wcm9wZXJ0eSA9IHQ7IG1fcHJvcGVydHlTZXQgPSB0cnVlOyB9Ci0gICAgdm9pZCBzZXRUaW1p
bmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiYgZikgeyBtX3RpbWluZ0Z1bmN0aW9uID0g
ZjsgbV90aW1pbmdGdW5jdGlvblNldCA9IHRydWU7IH0KLQotICAgIHZvaWQgc2V0SXNOb25lQW5p
bWF0aW9uKGJvb2wgbikgeyBtX2lzTm9uZSA9IG47IH0KLQotICAgIEFuaW1hdGlvbiYgb3BlcmF0
b3I9KGNvbnN0IEFuaW1hdGlvbiYgbyk7Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBhbGwgbWVt
YmVycyBvZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQotICAgIGJvb2wgYW5p
bWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiosIGJvb2wgbWF0Y2hQbGF5U3RhdGVzID0gdHJ1
ZSkgY29uc3Q7Ci0KLSAgICAvLyByZXR1cm4gdHJ1ZSBldmVyeSBBbmltYXRpb24gaW4gdGhlIGNo
YWluIChkZWZpbmVkIGJ5IG1fbmV4dCkgbWF0Y2ggCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEFuaW1hdGlvbiYgbykgY29uc3QgeyByZXR1cm4gYW5pbWF0aW9uc01hdGNoKCZvKTsgfQotICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBBbmltYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuICEoKnRo
aXMgPT0gbyk7IH0KLQotcHJpdmF0ZToKLSAgICBBbmltYXRpb24oKTsKLSAgICBBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uJiBvKTsKLSAgICAKLSAgICBkb3VibGUgbV9kZWxheTsKLSAgICBib29s
IG1fZGlyZWN0aW9uOwotICAgIGRvdWJsZSBtX2R1cmF0aW9uOwotICAgIGludCBtX2l0ZXJhdGlv
bkNvdW50OwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgaW50IG1fcHJvcGVydHk7Ci0gICAgVGlt
aW5nRnVuY3Rpb24gbV90aW1pbmdGdW5jdGlvbjsKLQotICAgIHVuc2lnbmVkIG1fcGxheVN0YXRl
ICAgICA6IDI7Ci0KLSAgICBib29sIG1fZGVsYXlTZXQgICAgICAgICAgOiAxOwotICAgIGJvb2wg
bV9kaXJlY3Rpb25TZXQgICAgICA6IDE7Ci0gICAgYm9vbCBtX2R1cmF0aW9uU2V0ICAgICAgIDog
MTsKLSAgICBib29sIG1faXRlcmF0aW9uQ291bnRTZXQgOiAxOwotICAgIGJvb2wgbV9uYW1lU2V0
ICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX3BsYXlTdGF0ZVNldCAgICAgIDogMTsKLSAgICBi
b29sIG1fcHJvcGVydHlTZXQgICAgICAgOiAxOwotICAgIGJvb2wgbV90aW1pbmdGdW5jdGlvblNl
dCA6IDE7Ci0gICAgCi0gICAgYm9vbCBtX2lzTm9uZSAgICAgICAgICAgIDogMTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEFuaW1hdGlvbl9oCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb25MaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb25MaXN0LmNwcAkocmV2aXNpb24gMzkzNzMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb25MaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJBbmltYXRpb25MaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotI2RlZmluZSBGSUxMX1VOU0VUX1BST1BFUlRZKHRlc3QsIHByb3BHZXQsIHByb3BT
ZXQpIFwKLWZvciAoaSA9IDA7IGkgPCBzaXplKCkgJiYgYW5pbWF0aW9uKGkpLT50ZXN0KCk7ICsr
aSkgeyB9IFwKLWlmIChpIDwgc2l6ZSgpICYmIGkgIT0gMCkgeyBcCi0gICAgZm9yIChzaXplX3Qg
aiA9IDA7IGkgPCBzaXplKCk7ICsraSwgKytqKSBcCi0gICAgICAgIGFuaW1hdGlvbihpKS0+cHJv
cFNldChhbmltYXRpb24oaiktPnByb3BHZXQoKSk7IFwKLX0KLQotdm9pZCBBbmltYXRpb25MaXN0
OjpmaWxsVW5zZXRQcm9wZXJ0aWVzKCkKLXsKLSAgICBzaXplX3QgaTsKLSAgICBGSUxMX1VOU0VU
X1BST1BFUlRZKGlzRGVsYXlTZXQsIGRlbGF5LCBzZXREZWxheSk7Ci0gICAgRklMTF9VTlNFVF9Q
Uk9QRVJUWShpc0RpcmVjdGlvblNldCwgZGlyZWN0aW9uLCBzZXREaXJlY3Rpb24pOwotICAgIEZJ
TExfVU5TRVRfUFJPUEVSVFkoaXNEdXJhdGlvblNldCwgZHVyYXRpb24sIHNldER1cmF0aW9uKTsK
LSAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzSXRlcmF0aW9uQ291bnRTZXQsIGl0ZXJhdGlvbkNv
dW50LCBzZXRJdGVyYXRpb25Db3VudCk7Ci0gICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc1BsYXlT
dGF0ZVNldCwgcGxheVN0YXRlLCBzZXRQbGF5U3RhdGUpOwotICAgIEZJTExfVU5TRVRfUFJPUEVS
VFkoaXNOYW1lU2V0LCBuYW1lLCBzZXROYW1lKTsKLSAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlz
VGltaW5nRnVuY3Rpb25TZXQsIHRpbWluZ0Z1bmN0aW9uLCBzZXRUaW1pbmdGdW5jdGlvbik7Ci0g
ICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc1Byb3BlcnR5U2V0LCBwcm9wZXJ0eSwgc2V0UHJvcGVy
dHkpOwotfQotCi1ib29sIEFuaW1hdGlvbkxpc3Q6Om9wZXJhdG9yPT0oY29uc3QgQW5pbWF0aW9u
TGlzdCYgbykgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSgpICE9IG8uc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKLSAg
ICAgICAgaWYgKCphbmltYXRpb24oaSkgIT0gKm8uYW5pbWF0aW9uKGkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb25MaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQW5pbWF0aW9uTGlzdC5oCShyZXZpc2lv
biAzOTM3MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0FuaW1hdGlvbkxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBBbmltYXRpb25MaXN0X2gKLSNkZWZpbmUgQW5pbWF0aW9uTGlzdF9oCi0KLSNpbmNsdWRl
ICJBbmltYXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFuaW1hdGlvbkxpc3Qgewot
cHVibGljOgotICAgIHZvaWQgZmlsbFVuc2V0UHJvcGVydGllcygpOwotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBBbmltYXRpb25MaXN0JiBvKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgQW5pbWF0aW9uTGlzdCYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0
aGlzID09IG8pOwotICAgIH0KLSAgICAKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9ucy5zaXplKCk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0gICAgCi0gICAgdm9pZCByZXNpemUoc2l6ZV90
IG4pIHsgbV9hbmltYXRpb25zLnJlc2l6ZShuKTsgfQotICAgIHZvaWQgcmVtb3ZlKHNpemVfdCBp
KSB7IG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7IH0KLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRy
PEFuaW1hdGlvbj4gYW5pbSkgeyBtX2FuaW1hdGlvbnMuYXBwZW5kKGFuaW0pOyB9Ci0gICAgCi0g
ICAgQW5pbWF0aW9uKiBhbmltYXRpb24oc2l6ZV90IGkpIHsgcmV0dXJuIG1fYW5pbWF0aW9uc1tp
XS5nZXQoKTsgfQotICAgIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uKHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBtX2FuaW1hdGlvbnNbaV0uZ2V0KCk7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAg
VmVjdG9yPFJlZlB0cjxBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOwotfTsgICAgCi0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQW5pbWF0aW9uTGlzdF9oCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmgJKHJldmlzaW9uIDM5MzczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvSWRlbnRp
dHlUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAg
ICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhh
bS5kZW5uaXNAZ21haWwuY29tKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
bl9oCi0jZGVmaW5lIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uX2gKLQotI2luY2x1ZGUgIlRy
YW5zZm9ybU9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24+IGNy
ZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uKCkpOwotICAgIH0KLSAgICAgICAgCi0gICAgdmlydHVhbCBib29sIGlzSWRl
bnRpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBPcGVyYXRpb25UeXBl
IGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBJREVOVElUWTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyBy
ZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gSURFTlRJVFk7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBpc1NhbWVUeXBlKG8pOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9v
bCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVy
Qm94U2l6ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRp
dHkgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbigpCi0gICAgewotICAgIH0KLQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSWRlbnRpdHlUcmFuc2Zvcm1P
cGVyYXRpb25faApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCShyZXZpc2lvbiAzOTM3MykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL01hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxUcmFu
c2Zvcm1PcGVyYXRpb24+IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50
aXR5KQotewotICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKLSAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0KLSAgICAvLyBjb252ZXJ0IHRoZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IGludG8gbWF0cmljZXMKLSAgICBJbnRTaXplIHNpemU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGZy
b21UOwotICAgIEFmZmluZVRyYW5zZm9ybSB0b1QobV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1f
Zik7Ci0gICAgaWYgKGZyb20pIHsKLSAgICAgICAgY29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uKiBtID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJv
bSk7Ci0gICAgICAgIGZyb21ULnNldE1hdHJpeChtLT5tX2EsIG0tPm1fYiwgbS0+bV9jLCBtLT5t
X2QsIG0tPm1fZSwgbS0+bV9mKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGJsZW5kVG9JZGVudGl0
eSkKLSAgICAgICAgc3RkOjpzd2FwKGZyb21ULCB0b1QpOwotCi0gICAgdG9ULmJsZW5kKGZyb21U
LCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJuIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KHRvVC5hKCksIHRvVC5iKCksIHRvVC5jKCksIHRvVC5kKCksIHRvVC5lKCksIHRvVC5mKCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24gMzkzNzMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb25faAotI2RlZmluZSBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb25faAotCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRy
YW5zZm9ybU9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywg
ZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGEsIGIsIGMsIGQsIGUsIGYpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYSA9
PSAxICYmIG1fYiA9PSAwICYmIG1fYyA9PSAwICYmIG1fZCA9PSAxICYmIG1fZSA9PSAwICYmIG1f
ZiA9PSAwOyB9Ci0gICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBj
b25zdCB7IHJldHVybiBNQVRSSVg7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9uVHlw
ZSgpID09IE1BVFJJWDsgfQotCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFpc1NhbWVUeXBl
KG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbnN0IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbio+KCZvKTsKLSAgICAgICAgcmV0dXJuIG1fYSA9PSBtLT5tX2EgJiYgbV9iID09IG0t
Pm1fYiAmJiBtX2MgPT0gbS0+bV9jICYmIG1fZCA9PSBtLT5tX2QgJiYgbV9lID09IG0tPm1fZSAm
JiBtX2YgPT0gbS0+bV9mOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9hLCBtX2IsIG1fYywgbV9k
LCBtX2UsIG1fZik7Ci0gICAgICAgIHRyYW5zZm9ybSA9IG1hdHJpeCAqIHRyYW5zZm9ybTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFu
c2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91
YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKLSAgICAKLXByaXZh
dGU6Ci0gICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91
YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpCi0gICAgICAgIDogbV9hKGEpCi0g
ICAgICAgICwgbV9iKGIpCi0gICAgICAgICwgbV9jKGMpCi0gICAgICAgICwgbV9kKGQpCi0gICAg
ICAgICwgbV9lKGUpCi0gICAgICAgICwgbV9mKGYpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBk
b3VibGUgbV9hOwotICAgIGRvdWJsZSBtX2I7Ci0gICAgZG91YmxlIG1fYzsKLSAgICBkb3VibGUg
bV9kOwotICAgIGRvdWJsZSBtX2U7Ci0gICAgZG91YmxlIG1fZjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbl9oCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAJKHJldmlzaW9uIDM5MzczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywg
Ym9vbCBibGVuZFRvSWRlbnRpdHkpCi17Ci0gICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5
cGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKLSAgICBpZiAoYmxlbmRUb0lk
ZW50aXR5KQotICAgICAgICByZXR1cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
bV9hbmdsZSAtIG1fYW5nbGUgKiBwcm9ncmVzcywgbV90eXBlKTsKLSAgICAKLSAgICBjb25zdCBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwotICAgIGRvdWJsZSBmcm9tQW5nbGUgPSBmcm9t
T3AgPyBmcm9tT3AtPm1fYW5nbGUgOiAwOwotICAgIHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShmcm9tQW5nbGUgKyAobV9hbmdsZSAtIGZyb21BbmdsZSkgKiBwcm9ncmVz
cywgbV90eXBlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlz
aW9uIDM5MzczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAy
MDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWls
LmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpZm5kZWYgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKLSNkZWZpbmUgUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uX2gKLQotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
biA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbmdsZSwgT3Bl
cmF0aW9uVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24oYW5nbGUsIHR5cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGUgPT0gMDsgfQotICAgIHZp
cnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0K
LQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYg
bykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBy
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOwotICAg
ICAgICByZXR1cm4gbV9hbmdsZSA9PSByLT5tX2FuZ2xlOwotICAgIH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9y
ZGVyQm94U2l6ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHRyYW5zZm9ybS5yb3RhdGUobV9hbmds
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7Ci0KLSAg
ICBkb3VibGUgYW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhbmdsZSwgT3BlcmF0aW9uVHlwZSB0
eXBlKQotICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCi0gICAgICAgICwgbV90eXBlKHR5cGUpCi0g
ICAgewotICAgIH0KLQotICAgIGRvdWJsZSBtX2FuZ2xlOwotICAgIE9wZXJhdGlvblR5cGUgbV90
eXBlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDM5MzczKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20s
IGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCi17Ci0gICAgaWYgKGZyb20g
JiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAK
LSAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShtX3ggKyAoMS4gLSBtX3gpICogcHJvZ3Jlc3MsIG1feSArICgxLiAt
IG1feSkgKiBwcm9ncmVzcywgbV90eXBlKTsKLSAgICAKLSAgICBjb25zdCBTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qPihmcm9tKTsKLSAgICBkb3VibGUgZnJvbVggPSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6
IDEuOwotICAgIGRvdWJsZSBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogMS47Ci0gICAg
cmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbVggKyAobV94IC0gZnJv
bVgpICogcHJvZ3Jlc3MsIGZyb21ZICsgKG1feSAtIGZyb21ZKSAqIHByb2dyZXNzLCBtX3R5cGUp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5MzczKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lm
bmRlZiBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbl9oCi0jZGVmaW5lIFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uX2gKLQotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5z
Zm9ybU9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgc3gsIGRvdWJsZSBzeSwgT3BlcmF0aW9uVHlw
ZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbihzeCwgc3ksIHR5cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJ
ZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1feCA9PSAxICYmICBtX3kgPT0gMTsgfQotICAgIHZp
cnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0K
LQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYg
bykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHMg
PSBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAg
ICAgcmV0dXJuIG1feCA9PSBzLT5tX3ggJiYgbV95ID09IHMtPm1feTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNp
emUmIGJvcmRlckJveFNpemUpIGNvbnN0Ci0gICAgewotICAgICAgICB0cmFuc2Zvcm0uc2NhbGUo
bV94LCBtX3kpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2Up
OwotCi1wcml2YXRlOgotICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBzeCwgZG91
YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUpCi0gICAgICAgIDogbV94KHN4KQotICAgICAgICAs
IG1feShzeSkKLSAgICAgICAgLCBtX3R5cGUodHlwZSkKLSAgICB7Ci0gICAgfQotICAgICAgICAK
LSAgICBkb3VibGUgbV94OwotICAgIGRvdWJsZSBtX3k7Ci0gICAgT3BlcmF0aW9uVHlwZSBtX3R5
cGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbl9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNm
b3JtT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
a2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2aXNpb24gMzkzNzMpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKLXsKLSAgICBpZiAoZnJvbSAmJiAhZnJv
bS0+aXNTYW1lVHlwZSgqdGhpcykpCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgIAotICAgIGlm
IChibGVuZFRvSWRlbnRpdHkpCi0gICAgICAgIHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUobV9hbmdsZVggLSBtX2FuZ2xlWCAqIHByb2dyZXNzLCBtX2FuZ2xlWSAtIG1fYW5n
bGVZICogcHJvZ3Jlc3MsIG1fdHlwZSk7Ci0gICAgCi0gICAgY29uc3QgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlv
bio+KGZyb20pOwotICAgIGRvdWJsZSBmcm9tQW5nbGVYID0gZnJvbU9wID8gZnJvbU9wLT5tX2Fu
Z2xlWCA6IDA7Ci0gICAgZG91YmxlIGZyb21BbmdsZVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5n
bGVZIDogMDsKLSAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGZyb21B
bmdsZVggKyAobV9hbmdsZVggLSBmcm9tQW5nbGVYKSAqIHByb2dyZXNzLCBmcm9tQW5nbGVZICsg
KG1fYW5nbGVZIC0gZnJvbUFuZ2xlWSkgKiBwcm9ncmVzcywgbV90eXBlKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Nr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24gMzkzNzMpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0g
RGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgU2tld1RyYW5zZm9y
bU9wZXJhdGlvbl9oCi0jZGVmaW5lIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb25faAotCi0jaW5jbHVk
ZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
U2tld1RyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0
ZShkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZLCBPcGVyYXRpb25UeXBlIHR5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oYW5n
bGVYLCBhbmdsZVksIHR5cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGVYID09IDAgJiYgbV9hbmdsZVkgPT0gMDsgfQotICAg
IHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
biYgbykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiog
cyA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7Ci0gICAg
ICAgIHJldHVybiBtX2FuZ2xlWCA9PSBzLT5tX2FuZ2xlWCAmJiBtX2FuZ2xlWSA9PSBzLT5tX2Fu
Z2xlWTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0Ci0gICAgewotICAg
ICAgICB0cmFuc2Zvcm0uc2tldyhtX2FuZ2xlWCwgbV9hbmdsZVkpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlv
bj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Ms
IGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwotICAgIAotcHJpdmF0ZToKLSAgICBTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlv
blR5cGUgdHlwZSkKLSAgICAgICAgOiBtX2FuZ2xlWChhbmdsZVgpCi0gICAgICAgICwgbV9hbmds
ZVkoYW5nbGVZKQotICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgZG91YmxlIG1fYW5nbGVYOwotICAgIGRvdWJsZSBtX2FuZ2xlWTsKLSAgICBPcGVyYXRpb25U
eXBlIG1fdHlwZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb25faApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVGlt
aW5nRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UaW1p
bmdGdW5jdGlvbi5oCShyZXZpc2lvbiAzOTM3MykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1RpbWluZ0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVu
bmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgVGltaW5nRnVuY3Rpb25faAotI2RlZmluZSBUaW1p
bmdGdW5jdGlvbl9oCi0KLSNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBUaW1pbmdGdW5jdGlvbiB7Ci0gICAgVGltaW5nRnVu
Y3Rpb24oKQotICAgICAgICA6IG1fdHlwZShDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKQotICAg
ICAgICAsIG1feDEoMC4yNSkKLSAgICAgICAgLCBtX3kxKDAuMSkKLSAgICAgICAgLCBtX3gyKDAu
MjUpCi0gICAgICAgICwgbV95MigxLjApCi0gICAgewotICAgIH0KLQotICAgIFRpbWluZ0Z1bmN0
aW9uKEVUaW1pbmdGdW5jdGlvblR5cGUgdGltaW5nRnVuY3Rpb24sIGRvdWJsZSB4MSA9IDAuMCwg
ZG91YmxlIHkxID0gMC4wLCBkb3VibGUgeDIgPSAxLjAsIGRvdWJsZSB5MiA9IDEuMCkKLSAgICAg
ICAgOiBtX3R5cGUodGltaW5nRnVuY3Rpb24pCi0gICAgICAgICwgbV94MSh4MSkKLSAgICAgICAg
LCBtX3kxKHkxKQotICAgICAgICAsIG1feDIoeDIpCi0gICAgICAgICwgbV95Mih5MikKLSAgICB7
Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBvKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBvLm1fdHlwZSAmJiBtX3gxID09
IG8ubV94MSAmJiBtX3kxID09IG8ubV95MSAmJiBtX3gyID09IG8ubV94MiAmJiBtX3kyID09IG8u
bV95MjsKLSAgICB9Ci0KLSAgICBkb3VibGUgeDEoKSBjb25zdCB7IHJldHVybiBtX3gxOyB9Ci0g
ICAgZG91YmxlIHkxKCkgY29uc3QgeyByZXR1cm4gbV95MTsgfQotICAgIGRvdWJsZSB4MigpIGNv
bnN0IHsgcmV0dXJuIG1feDI7IH0KLSAgICBkb3VibGUgeTIoKSBjb25zdCB7IHJldHVybiBtX3ky
OyB9Ci0KLSAgICBFVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLQotcHJpdmF0ZToKLSAgICBFVGltaW5nRnVuY3Rpb25UeXBlIG1fdHlwZTsKLQotICAg
IGRvdWJsZSBtX3gxOwotICAgIGRvdWJsZSBtX3kxOwotICAgIGRvdWJsZSBtX3gyOwotICAgIGRv
dWJsZSBtX3kyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVGlt
aW5nRnVuY3Rpb25faApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3Bl
cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3Jt
T3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5MzczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0u
ZGVubmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgVHJhbnNmb3JtT3BlcmF0aW9uX2gKLSNkZWZp
bmUgVHJhbnNmb3JtT3BlcmF0aW9uX2gKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQ1NTIFRy
YW5zZm9ybXMgKG1heSBiZWNvbWUgcGFydCBvZiBDU1MzKQotCi1jbGFzcyBUcmFuc2Zvcm1PcGVy
YXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2Zvcm1PcGVyYXRpb24+IHsKLXB1YmxpYzoK
LSAgICBlbnVtIE9wZXJhdGlvblR5cGUgewotICAgICAgICBTQ0FMRV9YLCBTQ0FMRV9ZLCBTQ0FM
RSwgCi0gICAgICAgIFRSQU5TTEFURV9YLCBUUkFOU0xBVEVfWSwgVFJBTlNMQVRFLCAKLSAgICAg
ICAgUk9UQVRFLCAKLSAgICAgICAgU0tFV19YLCBTS0VXX1ksIFNLRVcsIAotICAgICAgICBNQVRS
SVgsIElERU5USVRZLCBOT05FCi0gICAgfTsKLQotICAgIHZpcnR1YWwgflRyYW5zZm9ybU9wZXJh
dGlvbigpIHsgfQotCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9uJikgY29uc3QgPSAwOwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGFw
cGx5KEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0
ID0gMDsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSA9IGZhbHNlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlw
ZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBUcmFuc2Zvcm1PcGVyYXRp
b25faApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDM5MzczKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJh
bnNmb3JtT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VHJhbnNmb3JtT3BlcmF0aW9ucy5oIgotCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UcmFuc2Zvcm1PcGVyYXRpb25zOjpU
cmFuc2Zvcm1PcGVyYXRpb25zKGJvb2wgbWFrZUlkZW50aXR5KQotewotICAgIGlmIChtYWtlSWRl
bnRpdHkpCi0gICAgICAgIG1fb3BlcmF0aW9ucy5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZSgpKTsKLX0KLQotYm9vbCBUcmFuc2Zvcm1PcGVyYXRpb25zOjpvcGVyYXRv
cj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3Bl
cmF0aW9ucy5zaXplKCkgIT0gby5tX29wZXJhdGlvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIHMgPSBtX29wZXJhdGlvbnMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzOyBpKyspIHsKLSAgICAgICAgaWYgKCptX29w
ZXJhdGlvbnNbaV0gIT0gKm8ubV9vcGVyYXRpb25zW2ldKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9ybU9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMzkzNzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFu
c2Zvcm1PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVu
bmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgVHJhbnNmb3JtT3BlcmF0aW9uc19oCi0jZGVmaW5l
IFRyYW5zZm9ybU9wZXJhdGlvbnNfaAotCi0jaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9uLmgi
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zIHsKLXB1YmxpYzoK
LSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zKGJvb2wgbWFrZUlkZW50aXR5ID0gZmFsc2UpOwotICAg
IAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvKSBjb25z
dDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgbykgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0aGlzID09IG8pOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGFwcGx5KGNvbnN0IEludFNpemUmIHN6LCBBZmZpbmVUcmFuc2Zvcm0mIHQpIGNvbnN0
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vcGVyYXRpb25zLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV9vcGVyYXRpb25zW2ldLT5hcHBseSh0LCBzeik7Ci0g
ICAgfQotICAgIAotICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+JiBvcGVy
YXRpb25zKCkgeyByZXR1cm4gbV9vcGVyYXRpb25zOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID4mIG9wZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29w
ZXJhdGlvbnM7IH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJh
dGlvbj4gPiBtX29wZXJhdGlvbnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBUcmFuc2Zvcm1PcGVyYXRpb25zX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcAkocmV2aXNp
b24gMzkzNzMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5k
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJs
ZW5kVG9JZGVudGl0eSkKLXsKLSAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhp
cykpCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgIAotICAgIGlmIChibGVuZFRvSWRlbnRpdHkp
Ci0gICAgICAgIHJldHVybiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgobV94LnR5cGUoKSkuYmxlbmQobV94LCBwcm9ncmVzcyksIExlbmd0aChtX3kudHlwZSgpKS5i
bGVuZChtX3ksIHByb2dyZXNzKSwgbV90eXBlKTsKLQotICAgIGNvbnN0IFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uKj4oZnJvbSk7Ci0gICAgTGVuZ3RoIGZyb21YID0gZnJvbU9wID8gZnJvbU9w
LT5tX3ggOiBMZW5ndGgobV94LnR5cGUoKSk7Ci0gICAgTGVuZ3RoIGZyb21ZID0gZnJvbU9wID8g
ZnJvbU9wLT5tX3kgOiBMZW5ndGgobV95LnR5cGUoKSk7Ci0gICAgcmV0dXJuIFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1feC5ibGVuZChmcm9tWCwgcHJvZ3Jlc3MpLCBtX3ku
YmxlbmQoZnJvbVksIHByb2dyZXNzKSwgbV90eXBlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDM5MzczKQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBHcmFo
YW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uX2gKLSNkZWZpbmUgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
X2gKLQotI2luY2x1ZGUgIkxlbmd0aC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbi5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IExlbmd0
aCYgdHgsIGNvbnN0IExlbmd0aCYgdHksIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKHR4LCB0
eSwgdHlwZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3Qg
eyByZXR1cm4gbV94LmNhbGNGbG9hdFZhbHVlKDEpID09IDAgJiYgbV95LmNhbGNGbG9hdFZhbHVl
KDEpID09IDA7IH0KLSAgICB2aXJ0dWFsIE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25U
eXBlKCkgPT0gbV90eXBlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIWlzU2FtZVR5
cGUobykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbnN0IFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdCA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAgICAgcmV0dXJuIG1feCA9PSB0LT5tX3ggJiYgbV95
ID09IHQtPm1feTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0Ci0gICAg
ewotICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1feC5jYWxjRmxvYXRWYWx1ZShib3JkZXJC
b3hTaXplLndpZHRoKCkpLCBtX3kuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94U2l6ZS5oZWlnaHQo
KSkpOwotICAgICAgICByZXR1cm4gbV94LnR5cGUoKSA9PSBQZXJjZW50IHx8IG1feS50eXBlKCkg
PT0gUGVyY2VudDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3Bl
cmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9n
cmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7Ci0KLXByaXZhdGU6Ci0gICAgVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKGNvbnN0IExlbmd0aCYgdHgsIGNvbnN0IExlbmd0aCYg
dHksIE9wZXJhdGlvblR5cGUgdHlwZSkKLSAgICAgICAgOiBtX3godHgpCi0gICAgICAgICwgbV95
KHR5KQotICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBMZW5ndGgg
bV94OwotICAgIExlbmd0aCBtX3k7Ci0gICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb25faAo=
</data>
<flag name="review"
          id="12329"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>