<?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>159659</bug_id>
          
          <creation_ts>2016-07-11 17:48:56 -0700</creation_ts>
          <short_desc>Web Inspector: Use separate files for TreeOutline/TreeElement and DataGrid/DataGridNode</short_desc>
          <delta_ts>2016-07-12 06:06:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>DoNotImportToRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1209895</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-07-11 17:48:56 -0700</bug_when>
    <thetext>Summary:
Use separate files for TreeOutline/TreeElement and DataGrid/DataGridNode

For a very long time these have been in the same file and its been annoying. Break them out into their own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209896</commentid>
    <comment_count>1</comment_count>
      <attachid>283371</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-07-11 17:50:46 -0700</bug_when>
    <thetext>Created attachment 283371
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210006</commentid>
    <comment_count>2</comment_count>
      <attachid>283371</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-12 06:05:58 -0700</bug_when>
    <thetext>Comment on attachment 283371
[PATCH] Proposed Fix

Clearing flags on attachment: 283371

Committed r203114: &lt;http://trac.webkit.org/changeset/203114&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210007</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-12 06:06:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283371</attachid>
            <date>2016-07-11 17:50:46 -0700</date>
            <delta_ts>2016-07-12 06:05:58 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>extract-1.patch</filename>
            <type>text/plain</type>
            <size>86006</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDM5NmNkNWYuLjM2ZWY0M2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA3LTExICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVXNlIHNl
cGFyYXRlIGZpbGVzIGZvciBUcmVlT3V0bGluZS9UcmVlRWxlbWVudCBhbmQgRGF0YUdyaWQvRGF0
YUdyaWROb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTk2NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvRGF0YUdyaWQuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9EYXRhR3JpZE5v
ZGUuanM6IEFkZGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVHJlZUVsZW1lbnQu
anM6IEFkZGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVHJlZU91dGxpbmUuanM6
CisgICAgICAgIEV4dHJhIHRoZSBjb21wb25lbnQgY2xhc3NlcyB0byB0aGVpciBvd24gZmlsZS4K
KwogMjAxNi0wNy0wNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3IsIHJlZ3Jlc3Npb246IEpTL0pTT04gcHJldHR5LXByaW50aW5n
IHNwb3JhZGljYWxseSBicm9rZW4gaW4gU1RQOApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IGFmZjYwNDYuLjU4ZmRjY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTM4NiwxMyArMzg2
LDE0IEBACiAgICAgPHNjcmlwdCBzcmM9IlByb3hpZXMvSGVhcFNuYXBzaG90V29ya2VyUHJveHku
anMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1ZpZXcuanMiPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EaWFsb2cuanMiPjwvc2NyaXB0PgogCiAgICAgPHNj
cmlwdCBzcmM9IlZpZXdzL0NvbnNvbGVDb21tYW5kVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9IlZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9IlZpZXdzL0NvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iVmlld3MvRGF0YUdyaWQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9E
YXRhR3JpZE5vZGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9EZXRhaWxz
U2VjdGlvblJvdy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RpYWxvZy5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0hpZXJhcmNoaWNhbFBhdGhDb21w
b25lbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9OYXZpZ2F0aW9uSXRl
bS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NpZGViYXJQYW5lbC5qcyI+
PC9zY3JpcHQ+CkBAIC00MDMsNiArNDA0LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVGV4
dEVkaXRvci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RpbWVsaW5lT3Zl
cnZpZXdHcmFwaC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RpbWVsaW5l
Vmlldy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVFbGVtZW50Lmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZU91dGxpbmUuanMiPjwvc2Ny
aXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzIj48
L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0RhdGFHcmlkLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvRGF0YUdyaWQuanMKaW5kZXggMWZmMDdjZi4uZTRlZjdiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRGF0YUdyaWQuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRGF0YUdyaWQuanMKQEAg
LTEsMjYgKzEsMjYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMt
MjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CiAgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
ICAgICAgICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogV2ViSW5zcGVjdG9yLkRhdGFHcmlkID0gY2xhc3Mg
RGF0YUdyaWQgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuVmlldwpAQCAtOTYyLDcgKzk2Miw3IEBAIFdl
Ykluc3BlY3Rvci5EYXRhR3JpZCA9IGNsYXNzIERhdGFHcmlkIGV4dGVuZHMgV2ViSW5zcGVjdG9y
LlZpZXcKICAgICAgICAgICAgICAgICByZXNpemVyID0gdGhpcy5yZXNpemVyc1tpXSA9IG5ldyBX
ZWJJbnNwZWN0b3IuUmVzaXplcihXZWJJbnNwZWN0b3IuUmVzaXplci5SdWxlT3JpZW50YXRpb24u
VmVydGljYWwsIHRoaXMpOwogICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGls
ZChyZXNpemVyLmVsZW1lbnQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAg
ICAgICAgIGxlZnQgPSBjb2x1bW5XaWR0aHNbaV07CiAKICAgICAgICAgICAgIGlmICh0aGlzLl9p
c0NvbHVtblZpc2libGUodGhpcy5vcmRlcmVkQ29sdW1uc1tpXSkpIHsKQEAgLTE5MTYsNzI5ICsx
OTE2LDMgQEAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkNlbnRlclJlc2l6ZXJPdmVyQm9yZGVyQWRq
dXN0bWVudCA9IDM7CiBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuU29ydENvbHVtbkFzY2VuZGluZ1N0
eWxlQ2xhc3NOYW1lID0gInNvcnQtYXNjZW5kaW5nIjsKIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5T
b3J0Q29sdW1uRGVzY2VuZGluZ1N0eWxlQ2xhc3NOYW1lID0gInNvcnQtZGVzY2VuZGluZyI7CiBX
ZWJJbnNwZWN0b3IuRGF0YUdyaWQuU29ydGFibGVDb2x1bW5TdHlsZUNsYXNzTmFtZSA9ICJzb3J0
YWJsZSI7Ci0KLVdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUgPSBjbGFzcyBEYXRhR3JpZE5vZGUg
ZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Ci17Ci0gICAgY29uc3RydWN0b3IoZGF0YSwgaGFz
Q2hpbGRyZW4pCi0gICAgewotICAgICAgICBzdXBlcigpOwotCi0gICAgICAgIHRoaXMuX2V4cGFu
ZGVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX2hpZGRlbiA9IGZhbHNlOwotICAgICAgICB0aGlz
Ll9zZWxlY3RlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9jb3B5YWJsZSA9IHRydWU7Ci0gICAg
ICAgIHRoaXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbiA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2Rh
dGEgPSBkYXRhIHx8IHt9OwotICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gaGFzQ2hpbGRyZW4g
fHwgZmFsc2U7Ci0gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKLSAgICAgICAgdGhpcy5kYXRh
R3JpZCA9IG51bGw7Ci0gICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKLSAgICAgICAgdGhpcy5w
cmV2aW91c1NpYmxpbmcgPSBudWxsOwotICAgICAgICB0aGlzLm5leHRTaWJsaW5nID0gbnVsbDsK
LSAgICAgICAgdGhpcy5kaXNjbG9zdXJlVG9nZ2xlV2lkdGggPSAxMDsKLSAgICB9Ci0KLSAgICBn
ZXQgaGlkZGVuKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9oaWRkZW47Ci0gICAgfQot
Ci0gICAgc2V0IGhpZGRlbih4KQotICAgIHsKLSAgICAgICAgeCA9ICEheDsKLQotICAgICAgICBp
ZiAodGhpcy5faGlkZGVuID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMuX2hpZGRlbiA9IHg7Ci0gICAgICAgIGlmICh0aGlzLl9lbGVtZW50KQotICAgICAgICAgICAg
dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCJoaWRkZW4iLCB0aGlzLl9oaWRkZW4pOwot
Ci0gICAgICAgIGlmICh0aGlzLmRhdGFHcmlkKQotICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5f
bm90ZVJvd3NDaGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgZ2V0IHNlbGVjdGFibGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQgJiYgIXRoaXMuX2hpZGRlbjsKLSAgICB9Ci0K
LSAgICBnZXQgY29weWFibGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvcHlhYmxl
OwotICAgIH0KLQotICAgIHNldCBjb3B5YWJsZSh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fY29w
eWFibGUgPSB4OwotICAgIH0KLQotICAgIGdldCBlbGVtZW50KCkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9lbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7Ci0KLSAg
ICAgICAgaWYgKCF0aGlzLmRhdGFHcmlkKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAg
ICAgICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci0gICAg
ICAgIHRoaXMuX2VsZW1lbnQuX2RhdGFHcmlkTm9kZSA9IHRoaXM7Ci0KLSAgICAgICAgaWYgKHRo
aXMuaGFzQ2hpbGRyZW4pCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQo
InBhcmVudCIpOwotICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkKLSAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZXhwYW5kZWQiKTsKLSAgICAgICAgaWYgKHRoaXMuc2Vs
ZWN0ZWQpCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoInNlbGVjdGVk
Iik7Ci0gICAgICAgIGlmICh0aGlzLnJldmVhbGVkKQotICAgICAgICAgICAgdGhpcy5fZWxlbWVu
dC5jbGFzc0xpc3QuYWRkKCJyZXZlYWxlZCIpOwotICAgICAgICBpZiAodGhpcy5faGlkZGVuKQot
ICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsKLQotICAg
ICAgICB0aGlzLmNyZWF0ZUNlbGxzKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50Owot
ICAgIH0KLQotICAgIGNyZWF0ZUNlbGxzKCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFyIGNvbHVt
bklkZW50aWZpZXIgb2YgdGhpcy5kYXRhR3JpZC5vcmRlcmVkQ29sdW1ucykKLSAgICAgICAgICAg
IHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDZWxsKGNvbHVtbklkZW50aWZp
ZXIpKTsKLSAgICB9Ci0KLSAgICByZWZyZXNoSWZOZWVkZWQoKQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLl9uZWVkc1JlZnJlc2gpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhp
cy5fbmVlZHNSZWZyZXNoID0gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5yZWZyZXNoKCk7Ci0gICAg
fQotCi0gICAgbmVlZHNSZWZyZXNoKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX25lZWRzUmVmcmVz
aCA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9yZXZlYWxlZCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAodGhpcy5fc2NoZWR1bGVkUmVmcmVzaElkZW50aWZpZXIpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fc2NoZWR1bGVkUmVmcmVzaElkZW50
aWZpZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWZyZXNoLmJpbmQodGhpcykpOwot
ICAgIH0KLQotICAgIGdldCBkYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kYXRh
OwotICAgIH0KLQotICAgIHNldCBkYXRhKHgpCi0gICAgewotICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0eXBlb2YgeCA9PT0gIm9iamVjdCIsICJEYXRhIHNob3VsZCBiZSBhbiBvYmplY3QuIik7Ci0K
LSAgICAgICAgeCA9IHggfHwge307Ci0KLSAgICAgICAgaWYgKE9iamVjdC5zaGFsbG93RXF1YWwo
dGhpcy5fZGF0YSwgeCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fZGF0
YSA9IHg7Ci0gICAgICAgIHRoaXMubmVlZHNSZWZyZXNoKCk7Ci0gICAgfQotCi0gICAgZ2V0IGZp
bHRlcmFibGVEYXRhKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jYWNoZWRGaWx0ZXJhYmxl
RGF0YSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRGaWx0ZXJhYmxlRGF0YTsKLQot
ICAgICAgICB0aGlzLl9jYWNoZWRGaWx0ZXJhYmxlRGF0YSA9IFtdOwotCi0gICAgICAgIGZvciAo
bGV0IGNvbHVtbiBvZiB0aGlzLmRhdGFHcmlkLmNvbHVtbnMudmFsdWVzKCkpIHsKLSAgICAgICAg
ICAgIGlmIChjb2x1bW4uaGlkZGVuKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZpbHRlcmFibGVEYXRhRm9yQ29sdW1uKGNvbHVtbi5j
b2x1bW5JZGVudGlmaWVyKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkp
KQotICAgICAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXTsKLQotICAgICAgICAgICAgaWYgKCF2
YWx1ZS5sZW5ndGgpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHRo
aXMuX2NhY2hlZEZpbHRlcmFibGVEYXRhID0gdGhpcy5fY2FjaGVkRmlsdGVyYWJsZURhdGEuY29u
Y2F0KHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRGaWx0
ZXJhYmxlRGF0YTsKLSAgICB9Ci0KLSAgICBnZXQgcmV2ZWFsZWQoKQotICAgIHsKLSAgICAgICAg
aWYgKCJfcmV2ZWFsZWQiIGluIHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2ZWFs
ZWQ7Ci0KLSAgICAgICAgdmFyIGN1cnJlbnRBbmNlc3RvciA9IHRoaXMucGFyZW50OwotICAgICAg
ICB3aGlsZSAoY3VycmVudEFuY2VzdG9yICYmICFjdXJyZW50QW5jZXN0b3Iucm9vdCkgewotICAg
ICAgICAgICAgaWYgKCFjdXJyZW50QW5jZXN0b3IuZXhwYW5kZWQpIHsKLSAgICAgICAgICAgICAg
ICB0aGlzLl9yZXZlYWxlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3VycmVudEFuY2VzdG9yID0gY3VycmVudEFu
Y2VzdG9yLnBhcmVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3JldmVhbGVkID0gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc2V0IGhhc0NoaWxkcmVuKHgp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5faGFzQ2hpbGRyZW4gPT09IHgpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGFzQ2hpbGRyZW4gPSB4OwotCi0gICAgICAgIGlm
ICghdGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodGhp
cy5faGFzQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFk
ZCgicGFyZW50Iik7Ci0gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkKLSAgICAgICAgICAg
ICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoImV4cGFuZGVkIik7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJwYXJlbnQi
LCAiZXhwYW5kZWQiKTsKLSAgICB9Ci0KLSAgICBnZXQgaGFzQ2hpbGRyZW4oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuX2hhc0NoaWxkcmVuOwotICAgIH0KLQotICAgIHNldCByZXZlYWxl
ZCh4KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3JldmVhbGVkID09PSB4KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3JldmVhbGVkID0geDsKLQotICAgICAgICBpZiAo
dGhpcy5fZWxlbWVudCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3JldmVhbGVkKQotICAgICAg
ICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgicmV2ZWFsZWQiKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1v
dmUoInJldmVhbGVkIik7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnJlZnJlc2hJZk5lZWRl
ZCgpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmV2ZWFsZWQgPSB4ICYmIHRoaXMu
ZXhwYW5kZWQ7Ci0gICAgfQotCi0gICAgZ2V0IGRlcHRoKCkKLSAgICB7Ci0gICAgICAgIGlmICgi
X2RlcHRoIiBpbiB0aGlzKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlcHRoOwotICAgICAg
ICBpZiAodGhpcy5wYXJlbnQgJiYgIXRoaXMucGFyZW50LnJvb3QpCi0gICAgICAgICAgICB0aGlz
Ll9kZXB0aCA9IHRoaXMucGFyZW50LmRlcHRoICsgMTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdGhpcy5fZGVwdGggPSAwOwotICAgICAgICByZXR1cm4gdGhpcy5fZGVwdGg7Ci0gICAgfQot
Ci0gICAgZ2V0IGxlZnRQYWRkaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YodGhpcy5f
bGVmdFBhZGRpbmcpID09PSAibnVtYmVyIikKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZWZ0
UGFkZGluZzsKLQotICAgICAgICB0aGlzLl9sZWZ0UGFkZGluZyA9IHRoaXMuZGVwdGggKiB0aGlz
LmRhdGFHcmlkLmluZGVudFdpZHRoOwotICAgICAgICByZXR1cm4gdGhpcy5fbGVmdFBhZGRpbmc7
Ci0gICAgfQotCi0gICAgZ2V0IHNob3VsZFJlZnJlc2hDaGlsZHJlbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fc2hvdWxkUmVmcmVzaENoaWxkcmVuOwotICAgIH0KLQotICAgIHNldCBz
aG91bGRSZWZyZXNoQ2hpbGRyZW4oeCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3VsZFJlZnJl
c2hDaGlsZHJlbiA9IHg7Ci0gICAgICAgIGlmICh4ICYmIHRoaXMuZXhwYW5kZWQpCi0gICAgICAg
ICAgICB0aGlzLmV4cGFuZCgpOwotICAgIH0KLQotICAgIGdldCBzZWxlY3RlZCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7Ci0gICAgfQotCi0gICAgc2V0IHNlbGVjdGVk
KHgpCi0gICAgewotICAgICAgICBpZiAoeCkKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0KCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuZGVzZWxlY3QoKTsKLSAgICB9Ci0KLSAgICBn
ZXQgZXhwYW5kZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkOwotICAg
IH0KLQotICAgIHNldCBleHBhbmRlZCh4KQotICAgIHsKLSAgICAgICAgaWYgKHgpCi0gICAgICAg
ICAgICB0aGlzLmV4cGFuZCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLmNvbGxh
cHNlKCk7Ci0gICAgfQotCi0gICAgaGFzQW5jZXN0b3IoYW5jZXN0b3IpCi0gICAgewotICAgICAg
ICBpZiAoIWFuY2VzdG9yKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGxl
dCBjdXJyZW50QW5jZXN0b3IgPSB0aGlzLnBhcmVudDsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnRB
bmNlc3RvcikgewotICAgICAgICAgICAgaWYgKGFuY2VzdG9yID09PSBjdXJyZW50QW5jZXN0b3Ip
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGN1cnJlbnRBbmNl
c3RvciA9IGN1cnJlbnRBbmNlc3Rvci5wYXJlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmVmcmVzaCgpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMuX2VsZW1lbnQgfHwgIXRoaXMuZGF0YUdyaWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgaWYgKHRoaXMuX3NjaGVkdWxlZFJlZnJlc2hJZGVudGlmaWVyKSB7Ci0gICAgICAgICAg
ICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY2hlZHVsZWRSZWZyZXNoSWRlbnRpZmllcik7
Ci0gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZWRSZWZyZXNoSWRlbnRpZmllciA9IHVuZGVmaW5l
ZDsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2NhY2hlZEZpbHRlcmFibGVEYXRhID0gbnVs
bDsKLSAgICAgICAgdGhpcy5fbmVlZHNSZWZyZXNoID0gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5f
ZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLmNyZWF0ZUNlbGxzKCk7Ci0g
ICAgfQotCi0gICAgcmVmcmVzaFJlY3Vyc2l2ZWx5KCkKLSAgICB7Ci0gICAgICAgIHRoaXMucmVm
cmVzaCgpOwotICAgICAgICB0aGlzLmZvckVhY2hDaGlsZEluU3VidHJlZSgobm9kZSkgPT4gbm9k
ZS5yZWZyZXNoKCkpOwotICAgIH0KLQotICAgIHVwZGF0ZUxheW91dCgpCi0gICAgewotICAgICAg
ICAvLyBJbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIGlmIG5lZWRlZC4KLSAgICB9Ci0KLSAgICBj
cmVhdGVDZWxsKGNvbHVtbklkZW50aWZpZXIpCi0gICAgewotICAgICAgICB2YXIgY2VsbEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotICAgICAgICBjZWxsRWxlbWVudC5j
bGFzc05hbWUgPSBjb2x1bW5JZGVudGlmaWVyICsgIi1jb2x1bW4iOwotICAgICAgICBjZWxsRWxl
bWVudC5fX2NvbHVtbklkZW50aWZpZXIgPSBjb2x1bW5JZGVudGlmaWVyOwotCi0gICAgICAgIHZh
ciBjb2x1bW4gPSB0aGlzLmRhdGFHcmlkLmNvbHVtbnMuZ2V0KGNvbHVtbklkZW50aWZpZXIpOwot
Ci0gICAgICAgIGlmIChjb2x1bW5bImFsaWduZWQiXSkKLSAgICAgICAgICAgIGNlbGxFbGVtZW50
LmNsYXNzTGlzdC5hZGQoY29sdW1uWyJhbGlnbmVkIl0pOwotCi0gICAgICAgIGlmIChjb2x1bW5b
Imdyb3VwIl0pCi0gICAgICAgICAgICBjZWxsRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb2x1bW4t
Z3JvdXAtIiArIGNvbHVtblsiZ3JvdXAiXSk7Ci0KLSAgICAgICAgdmFyIGRpdiA9IGNlbGxFbGVt
ZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiY2VsbC1jb250ZW50Iik7Ci0gICAgICAgIHZhciBjb250
ZW50ID0gdGhpcy5jcmVhdGVDZWxsQ29udGVudChjb2x1bW5JZGVudGlmaWVyLCBjZWxsRWxlbWVu
dCk7Ci0gICAgICAgIGRpdi5hcHBlbmQoY29udGVudCk7Ci0KLSAgICAgICAgaWYgKGNvbHVtblsi
aWNvbiJdKSB7Ci0gICAgICAgICAgICBsZXQgaWNvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIGljb25FbGVtZW50LmNsYXNzTGlzdC5hZGQoImlj
b24iKTsKLSAgICAgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoaWNvbkVsZW1lbnQsIGRpdi5maXJz
dENoaWxkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjb2x1bW5JZGVudGlmaWVyID09PSB0
aGlzLmRhdGFHcmlkLmRpc2Nsb3N1cmVDb2x1bW5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBj
ZWxsRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJkaXNjbG9zdXJlIik7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5sZWZ0UGFkZGluZykKLSAgICAgICAgICAgICAgICBjZWxsRWxlbWVudC5zdHlsZS5zZXRQ
cm9wZXJ0eSgicGFkZGluZy1sZWZ0IiwgdGhpcy5sZWZ0UGFkZGluZyArICJweCIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIGNlbGxFbGVtZW50OwotICAgIH0KLQotICAgIGNyZWF0ZUNl
bGxDb250ZW50KGNvbHVtbklkZW50aWZpZXIpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5k
YXRhW2NvbHVtbklkZW50aWZpZXJdIHx8ICJcdTIwMGIiOyAvLyBaZXJvIHdpZHRoIHNwYWNlIHRv
IGtlZXAgdGhlIGNlbGwgZnJvbSBjb2xsYXBzaW5nLgotICAgIH0KLQotICAgIGVsZW1lbnRXaXRo
Q29sdW1uSWRlbnRpZmllcihjb2x1bW5JZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLmRhdGFHcmlkKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgbGV0IGlu
ZGV4ID0gdGhpcy5kYXRhR3JpZC5vcmRlcmVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbklkZW50aWZp
ZXIpOwotICAgICAgICBpZiAoaW5kZXggPT09IC0xKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7
Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jaGlsZHJlbltpbmRleF07Ci0gICAgfQot
Ci0gICAgLy8gU2hhcmUgdGhlc2UgZnVuY3Rpb25zIHdpdGggRGF0YUdyaWQuIFRoZXkgYXJlIHdy
aXR0ZW4gdG8gd29yayB3aXRoIGEgRGF0YUdyaWROb2RlIHRoaXMgb2JqZWN0LgotICAgIGFwcGVu
ZENoaWxkKCkgeyByZXR1cm4gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5hcHBlbmRD
aGlsZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9Ci0gICAgaW5zZXJ0Q2hpbGQoKSB7IHJldHVy
biBXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLmluc2VydENoaWxkLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7IH0KLSAgICByZW1vdmVDaGlsZCgpIHsgcmV0dXJuIFdlYkluc3BlY3Rvci5E
YXRhR3JpZC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQot
ICAgIHJlbW92ZUNoaWxkcmVuKCkgeyByZXR1cm4gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3Rv
dHlwZS5yZW1vdmVDaGlsZHJlbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9Ci0gICAgcmVtb3Zl
Q2hpbGRyZW5SZWN1cnNpdmUoKSB7IHJldHVybiBXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90
eXBlLnJlbW92ZUNoaWxkcmVuUmVjdXJzaXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KLQot
ICAgIF9yZWNhbGN1bGF0ZVNpYmxpbmdzKG15SW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIXRo
aXMucGFyZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBwcmV2aW91c0No
aWxkID0gKG15SW5kZXggPiAwID8gdGhpcy5wYXJlbnQuY2hpbGRyZW5bbXlJbmRleCAtIDFdIDog
bnVsbCk7Ci0KLSAgICAgICAgaWYgKHByZXZpb3VzQ2hpbGQpIHsKLSAgICAgICAgICAgIHByZXZp
b3VzQ2hpbGQubmV4dFNpYmxpbmcgPSB0aGlzOwotICAgICAgICAgICAgdGhpcy5wcmV2aW91c1Np
YmxpbmcgPSBwcmV2aW91c0NoaWxkOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMu
cHJldmlvdXNTaWJsaW5nID0gbnVsbDsKLQotICAgICAgICB2YXIgbmV4dENoaWxkID0gdGhpcy5w
YXJlbnQuY2hpbGRyZW5bbXlJbmRleCArIDFdOwotCi0gICAgICAgIGlmIChuZXh0Q2hpbGQpIHsK
LSAgICAgICAgICAgIG5leHRDaGlsZC5wcmV2aW91c1NpYmxpbmcgPSB0aGlzOwotICAgICAgICAg
ICAgdGhpcy5uZXh0U2libGluZyA9IG5leHRDaGlsZDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICB0aGlzLm5leHRTaWJsaW5nID0gbnVsbDsKLSAgICB9Ci0KLSAgICBjb2xsYXBzZSgpCi0g
ICAgewotICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHRoaXMuX2VsZW1l
bnQuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kZWQiKTsKLQotICAgICAgICB0aGlzLl9leHBhbmRl
ZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5s
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0ucmV2ZWFsZWQgPSBmYWxz
ZTsKLQotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiY29sbGFwc2VkIik7
Ci0KLSAgICAgICAgaWYgKHRoaXMuZGF0YUdyaWQpIHsKLSAgICAgICAgICAgIHRoaXMuZGF0YUdy
aWQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudC5D
b2xsYXBzZWROb2RlLCB7ZGF0YUdyaWROb2RlOiB0aGlzfSk7Ci0gICAgICAgICAgICB0aGlzLmRh
dGFHcmlkLl9ub3RlUm93c0NoYW5nZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbGxh
cHNlUmVjdXJzaXZlbHkoKQotICAgIHsKLSAgICAgICAgdmFyIGl0ZW0gPSB0aGlzOwotICAgICAg
ICB3aGlsZSAoaXRlbSkgewotICAgICAgICAgICAgaWYgKGl0ZW0uZXhwYW5kZWQpCi0gICAgICAg
ICAgICAgICAgaXRlbS5jb2xsYXBzZSgpOwotICAgICAgICAgICAgaXRlbSA9IGl0ZW0udHJhdmVy
c2VOZXh0Tm9kZShmYWxzZSwgdGhpcywgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBl
eHBhbmQoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmhhc0NoaWxkcmVuIHx8IHRoaXMuZXhw
YW5kZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMucmV2ZWFsZWQg
JiYgIXRoaXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbikKLSAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlz
LmNoaWxkcmVuW2ldLnJldmVhbGVkID0gdHJ1ZTsKLQotICAgICAgICBpZiAodGhpcy5fc2hvdWxk
UmVmcmVzaENoaWxkcmVuKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
Y2hpbGRyZW4ubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5f
ZGV0YWNoKCk7Ci0KLSAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJw
b3B1bGF0ZSIpOwotCi0gICAgICAgICAgICBpZiAodGhpcy5fYXR0YWNoZWQpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMucmV2ZWFsZWQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjaGlsZC5yZXZlYWxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkLl9hdHRh
Y2goKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRo
aXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbiA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHRoaXMuX2VsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5h
ZGQoImV4cGFuZGVkIik7Ci0KLSAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSB0cnVlOwotCi0gICAg
ICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJleHBhbmRlZCIpOwotCi0gICAgICAg
IGlmICh0aGlzLmRhdGFHcmlkKSB7Ci0gICAgICAgICAgICB0aGlzLmRhdGFHcmlkLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGF0YUdyaWQuRXZlbnQuRXhwYW5kZWROb2Rl
LCB7ZGF0YUdyaWROb2RlOiB0aGlzfSk7Ci0gICAgICAgICAgICB0aGlzLmRhdGFHcmlkLl9ub3Rl
Um93c0NoYW5nZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGV4cGFuZFJlY3Vyc2l2ZWx5
KCkKLSAgICB7Ci0gICAgICAgIHZhciBpdGVtID0gdGhpczsKLSAgICAgICAgd2hpbGUgKGl0ZW0p
IHsKLSAgICAgICAgICAgIGl0ZW0uZXhwYW5kKCk7Ci0gICAgICAgICAgICBpdGVtID0gaXRlbS50
cmF2ZXJzZU5leHROb2RlKGZhbHNlLCB0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZv
ckVhY2hJbW1lZGlhdGVDaGlsZChjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGZvciAobGV0IG5v
ZGUgb2YgdGhpcy5jaGlsZHJlbikKLSAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUpOwotICAgIH0K
LQotICAgIGZvckVhY2hDaGlsZEluU3VidHJlZShjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIGxl
dCBub2RlID0gdGhpcy50cmF2ZXJzZU5leHROb2RlKGZhbHNlLCB0aGlzLCB0cnVlKTsKLSAgICAg
ICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUpOwotICAgICAgICAg
ICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgdGhpcywgdHJ1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpc0luU3VidHJlZU9mTm9kZShiYXNlTm9kZSkKLSAgICB7Ci0g
ICAgICAgIGxldCBub2RlID0gYmFzZU5vZGU7Ci0gICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAg
ICAgICAgICBpZiAobm9kZSA9PT0gdGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoZmFsc2UsIGJhc2VOb2Rl
LCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV2ZWFsKCkKLSAgICB7Ci0gICAgICAgIHZhciBjdXJyZW50QW5jZXN0b3IgPSB0aGlzLnBhcmVu
dDsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnRBbmNlc3RvciAmJiAhY3VycmVudEFuY2VzdG9yLnJv
b3QpIHsKLSAgICAgICAgICAgIGlmICghY3VycmVudEFuY2VzdG9yLmV4cGFuZGVkKQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRBbmNlc3Rvci5leHBhbmQoKTsKLSAgICAgICAgICAgIGN1cnJlbnRB
bmNlc3RvciA9IGN1cnJlbnRBbmNlc3Rvci5wYXJlbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICB0
aGlzLmVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7Ci0KLSAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInJldmVhbGVkIik7Ci0gICAgfQotCi0gICAgc2Vs
ZWN0KHN1cHByZXNzU2VsZWN0ZWRFdmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5kYXRh
R3JpZCB8fCAhdGhpcy5zZWxlY3RhYmxlIHx8IHRoaXMuc2VsZWN0ZWQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbGV0IG9sZFNlbGVjdGVkTm9kZSA9IHRoaXMuZGF0YUdyaWQuc2Vs
ZWN0ZWROb2RlOwotICAgICAgICBpZiAob2xkU2VsZWN0ZWROb2RlKQotICAgICAgICAgICAgb2xk
U2VsZWN0ZWROb2RlLmRlc2VsZWN0KHRydWUpOwotCi0gICAgICAgIHRoaXMuX3NlbGVjdGVkID0g
dHJ1ZTsKLSAgICAgICAgdGhpcy5kYXRhR3JpZC5zZWxlY3RlZE5vZGUgPSB0aGlzOwotCi0gICAg
ICAgIGlmICh0aGlzLl9lbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJzZWxlY3RlZCIpOwotCi0gICAgICAgIGlmICghc3VwcHJlc3NTZWxlY3RlZEV2ZW50
KQotICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkRhdGFHcmlkLkV2ZW50LlNlbGVjdGVkTm9kZUNoYW5nZWQsIHtvbGRTZWxlY3Rl
ZE5vZGV9KTsKLSAgICB9Ci0KLSAgICByZXZlYWxBbmRTZWxlY3QoKQotICAgIHsKLSAgICAgICAg
dGhpcy5yZXZlYWwoKTsKLSAgICAgICAgdGhpcy5zZWxlY3QoKTsKLSAgICB9Ci0KLSAgICBkZXNl
bGVjdChzdXBwcmVzc0Rlc2VsZWN0ZWRFdmVudCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5k
YXRhR3JpZCB8fCB0aGlzLmRhdGFHcmlkLnNlbGVjdGVkTm9kZSAhPT0gdGhpcyB8fCAhdGhpcy5z
ZWxlY3RlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9zZWxlY3RlZCA9
IGZhbHNlOwotICAgICAgICB0aGlzLmRhdGFHcmlkLnNlbGVjdGVkTm9kZSA9IG51bGw7Ci0KLSAg
ICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNz
TGlzdC5yZW1vdmUoInNlbGVjdGVkIik7Ci0KLSAgICAgICAgaWYgKCFzdXBwcmVzc0Rlc2VsZWN0
ZWRFdmVudCkKLSAgICAgICAgICAgIHRoaXMuZGF0YUdyaWQuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudC5TZWxlY3RlZE5vZGVDaGFuZ2VkLCB7b2xk
U2VsZWN0ZWROb2RlOiB0aGlzfSk7Ci0gICAgfQotCi0gICAgdHJhdmVyc2VOZXh0Tm9kZShza2lw
SGlkZGVuLCBzdGF5V2l0aGluLCBkb250UG9wdWxhdGUsIGluZm8pCi0gICAgewotICAgICAgICBp
ZiAoIWRvbnRQb3B1bGF0ZSAmJiB0aGlzLmhhc0NoaWxkcmVuKQotICAgICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInBvcHVsYXRlIik7Ci0KLSAgICAgICAgaWYgKGluZm8p
Ci0gICAgICAgICAgICBpbmZvLmRlcHRoQ2hhbmdlID0gMDsKLQotICAgICAgICB2YXIgbm9kZSA9
ICghc2tpcEhpZGRlbiB8fCB0aGlzLnJldmVhbGVkKSA/IHRoaXMuY2hpbGRyZW5bMF0gOiBudWxs
OwotICAgICAgICBpZiAobm9kZSAmJiAoIXNraXBIaWRkZW4gfHwgdGhpcy5leHBhbmRlZCkpIHsK
LSAgICAgICAgICAgIGlmIChpbmZvKQotICAgICAgICAgICAgICAgIGluZm8uZGVwdGhDaGFuZ2Ug
PSAxOwotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
dGhpcyA9PT0gc3RheVdpdGhpbikKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAg
IG5vZGUgPSAoIXNraXBIaWRkZW4gfHwgdGhpcy5yZXZlYWxlZCkgPyB0aGlzLm5leHRTaWJsaW5n
IDogbnVsbDsKLSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLQot
ICAgICAgICBub2RlID0gdGhpczsKLSAgICAgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUucm9vdCAm
JiAhKCghc2tpcEhpZGRlbiB8fCBub2RlLnJldmVhbGVkKSA/IG5vZGUubmV4dFNpYmxpbmcgOiBu
dWxsKSAmJiBub2RlLnBhcmVudCAhPT0gc3RheVdpdGhpbikgewotICAgICAgICAgICAgaWYgKGlu
Zm8pCi0gICAgICAgICAgICAgICAgaW5mby5kZXB0aENoYW5nZSAtPSAxOwotICAgICAgICAgICAg
bm9kZSA9IG5vZGUucGFyZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub2RlKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuICghc2tpcEhpZGRlbiB8fCBu
b2RlLnJldmVhbGVkKSA/IG5vZGUubmV4dFNpYmxpbmcgOiBudWxsOwotICAgIH0KLQotICAgIHRy
YXZlcnNlUHJldmlvdXNOb2RlKHNraXBIaWRkZW4sIGRvbnRQb3B1bGF0ZSkKLSAgICB7Ci0gICAg
ICAgIHZhciBub2RlID0gKCFza2lwSGlkZGVuIHx8IHRoaXMucmV2ZWFsZWQpID8gdGhpcy5wcmV2
aW91c1NpYmxpbmcgOiBudWxsOwotICAgICAgICBpZiAoIWRvbnRQb3B1bGF0ZSAmJiBub2RlICYm
IG5vZGUuaGFzQ2hpbGRyZW4pCi0gICAgICAgICAgICBub2RlLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycygicG9wdWxhdGUiKTsKLQotICAgICAgICB3aGlsZSAobm9kZSAmJiAoKCFza2lwSGlkZGVu
IHx8IChub2RlLnJldmVhbGVkICYmIG5vZGUuZXhwYW5kZWQpKSA/IG5vZGUuY2hpbGRyZW4ubGFz
dFZhbHVlIDogbnVsbCkpIHsKLSAgICAgICAgICAgIGlmICghZG9udFBvcHVsYXRlICYmIG5vZGUu
aGFzQ2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbm9kZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoInBvcHVsYXRlIik7Ci0gICAgICAgICAgICBub2RlID0gKCghc2tpcEhpZGRlbiB8fCAobm9k
ZS5yZXZlYWxlZCAmJiBub2RlLmV4cGFuZGVkKSkgPyBub2RlLmNoaWxkcmVuLmxhc3RWYWx1ZSA6
IG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICByZXR1
cm4gbm9kZTsKLQotICAgICAgICBpZiAoIXRoaXMucGFyZW50IHx8IHRoaXMucGFyZW50LnJvb3Qp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7
Ci0gICAgfQotCi0gICAgaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShldmVudCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5oYXNDaGlsZHJlbikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgbGV0IGNlbGwgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhOb2RlTmFtZSgidGQiKTsKLSAgICAgICAgaWYgKCFjZWxsIHx8ICFjZWxsLmNsYXNzTGlz
dC5jb250YWlucygiZGlzY2xvc3VyZSIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGxldCBjb21wdXRlZExlZnRQYWRkaW5nID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUo
Y2VsbCkuZ2V0UHJvcGVydHlDU1NWYWx1ZSgicGFkZGluZy1sZWZ0IikuZ2V0RmxvYXRWYWx1ZShD
U1NQcmltaXRpdmVWYWx1ZS5DU1NfUFgpOwotICAgICAgICBsZXQgbGVmdCA9IGNlbGwudG90YWxP
ZmZzZXRMZWZ0ICsgY29tcHV0ZWRMZWZ0UGFkZGluZzsKLSAgICAgICAgcmV0dXJuIGV2ZW50LnBh
Z2VYID49IGxlZnQgJiYgZXZlbnQucGFnZVggPD0gbGVmdCArIHRoaXMuZGlzY2xvc3VyZVRvZ2ds
ZVdpZHRoOwotICAgIH0KLQotICAgIF9hdHRhY2goKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlz
LmRhdGFHcmlkIHx8IHRoaXMuX2F0dGFjaGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHRoaXMuX2F0dGFjaGVkID0gdHJ1ZTsKLQotICAgICAgICBsZXQgaW5zZXJ0aW9uSW5kZXgg
PSAtMTsKLQotICAgICAgICBpZiAoIXRoaXMuaXNQbGFjZWhvbGRlck5vZGUpIHsKLSAgICAgICAg
ICAgIHZhciBwcmV2aW91c0dyaWROb2RlID0gdGhpcy50cmF2ZXJzZVByZXZpb3VzTm9kZSh0cnVl
LCB0cnVlKTsKLSAgICAgICAgICAgIGluc2VydGlvbkluZGV4ID0gdGhpcy5kYXRhR3JpZC5fcm93
cy5pbmRleE9mKHByZXZpb3VzR3JpZE5vZGUpOwotICAgICAgICAgICAgaWYgKGluc2VydGlvbklu
ZGV4ID09PSAtMSkKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9IDA7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uSW5kZXgrKzsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChpbnNlcnRpb25JbmRleCA9PT0gLTEpCi0gICAgICAgICAgICB0aGlzLmRh
dGFHcmlkLl9yb3dzLnB1c2godGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMu
ZGF0YUdyaWQuX3Jvd3MuaW5zZXJ0QXRJbmRleCh0aGlzLCBpbnNlcnRpb25JbmRleCk7Ci0KLSAg
ICAgICAgdGhpcy5kYXRhR3JpZC5fbm90ZVJvd3NDaGFuZ2VkKCk7Ci0KLSAgICAgICAgaWYgKHRo
aXMuZXhwYW5kZWQpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGls
ZHJlbi5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLl9hdHRh
Y2goKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9kZXRhY2goKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9hdHRhY2hlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlz
Ll9hdHRhY2hlZCA9IGZhbHNlOwotCi0gICAgICAgIHRoaXMuZGF0YUdyaWQuX3Jvd3MucmVtb3Zl
KHRoaXMsIHRydWUpOwotICAgICAgICB0aGlzLmRhdGFHcmlkLl9ub3RlUm93UmVtb3ZlZCh0aGlz
KTsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLl9kZXRhY2goKTsKLSAgICB9Ci0KLSAg
ICBzYXZlUG9zaXRpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NhdmVkUG9zaXRpb24p
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5wYXJl
bnQpOwotICAgICAgICBpZiAoIXRoaXMucGFyZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIHRoaXMuX3NhdmVkUG9zaXRpb24gPSB7Ci0gICAgICAgICAgICBwYXJlbnQ6IHRoaXMu
cGFyZW50LAotICAgICAgICAgICAgaW5kZXg6IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2Yo
dGhpcykKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICByZXN0b3JlUG9zaXRpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLl9zYXZlZFBvc2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGlmICh0aGlzLnBhcmVudCAhPT0gdGhpcy5fc2F2ZWRQb3NpdGlvbi5wYXJlbnQp
Ci0gICAgICAgICAgICB0aGlzLl9zYXZlZFBvc2l0aW9uLnBhcmVudC5pbnNlcnRDaGlsZCh0aGlz
LCB0aGlzLl9zYXZlZFBvc2l0aW9uLmluZGV4KTsKLQotICAgICAgICB0aGlzLl9zYXZlZFBvc2l0
aW9uID0gbnVsbDsKLSAgICB9Ci0KLSAgICBhcHBlbmRDb250ZXh0TWVudUl0ZW1zKGNvbnRleHRN
ZW51KQotICAgIHsKLSAgICAgICAgLy8gU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUKLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy8gUHJvdGVjdGVkCi0KLSAgICBmaWx0ZXJhYmxl
RGF0YUZvckNvbHVtbihjb2x1bW5JZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgbGV0IHZhbHVl
ID0gdGhpcy5kYXRhW2NvbHVtbklkZW50aWZpZXJdOwotICAgICAgICByZXR1cm4gdHlwZW9mIHZh
bHVlID09PSAic3RyaW5nIiA/IHZhbHVlIDogbnVsbDsKLSAgICB9Ci19OwotCi0vLyBVc2VkIHRv
IGNyZWF0ZSBhIG5ldyB0YWJsZSByb3cgd2hlbiBlbnRlcmluZyBuZXcgZGF0YSBieSBlZGl0aW5n
IGNlbGxzLgotV2ViSW5zcGVjdG9yLlBsYWNlaG9sZGVyRGF0YUdyaWROb2RlID0gY2xhc3MgUGxh
Y2Vob2xkZXJEYXRhR3JpZE5vZGUgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlCi17
Ci0gICAgY29uc3RydWN0b3IoZGF0YSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKGRhdGEsIGZhbHNl
KTsKLSAgICAgICAgdGhpcy5pc1BsYWNlaG9sZGVyTm9kZSA9IHRydWU7Ci0gICAgfQotCi0gICAg
bWFrZU5vcm1hbCgpCi0gICAgewotICAgICAgICB0aGlzLmlzUGxhY2Vob2xkZXJOb2RlID0gZmFs
c2U7Ci0gICAgfQotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0RhdGFHcmlkTm9kZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0RhdGFHcmlkTm9kZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNjAyODc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvRGF0YUdyaWROb2RlLmpzCkBAIC0wLDAgKzEsNzUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlID0gY2xh
c3MgRGF0YUdyaWROb2RlIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAoreworICAgIGNvbnN0
cnVjdG9yKGRhdGEsIGhhc0NoaWxkcmVuKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKworICAg
ICAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlOworICAgICAgICB0aGlzLl9oaWRkZW4gPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29weWFi
bGUgPSB0cnVlOworICAgICAgICB0aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSB0cnVlOwor
ICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSB8fCB7fTsKKyAgICAgICAgdGhpcy5oYXNDaGlsZHJl
biA9IGhhc0NoaWxkcmVuIHx8IGZhbHNlOworICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107Cisg
ICAgICAgIHRoaXMuZGF0YUdyaWQgPSBudWxsOworICAgICAgICB0aGlzLnBhcmVudCA9IG51bGw7
CisgICAgICAgIHRoaXMucHJldmlvdXNTaWJsaW5nID0gbnVsbDsKKyAgICAgICAgdGhpcy5uZXh0
U2libGluZyA9IG51bGw7CisgICAgICAgIHRoaXMuZGlzY2xvc3VyZVRvZ2dsZVdpZHRoID0gMTA7
CisgICAgfQorCisgICAgZ2V0IGhpZGRlbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
aGlkZGVuOworICAgIH0KKworICAgIHNldCBoaWRkZW4oeCkKKyAgICB7CisgICAgICAgIHggPSAh
IXg7CisKKyAgICAgICAgaWYgKHRoaXMuX2hpZGRlbiA9PT0geCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLl9oaWRkZW4gPSB4OworICAgICAgICBpZiAodGhpcy5fZWxlbWVu
dCkKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIiwg
dGhpcy5faGlkZGVuKTsKKworICAgICAgICBpZiAodGhpcy5kYXRhR3JpZCkKKyAgICAgICAgICAg
IHRoaXMuZGF0YUdyaWQuX25vdGVSb3dzQ2hhbmdlZCgpOworICAgIH0KKworICAgIGdldCBzZWxl
Y3RhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50ICYmICF0aGlzLl9o
aWRkZW47CisgICAgfQorCisgICAgZ2V0IGNvcHlhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9jb3B5YWJsZTsKKyAgICB9CisKKyAgICBzZXQgY29weWFibGUoeCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2NvcHlhYmxlID0geDsKKyAgICB9CisKKyAgICBnZXQgZWxlbWVudCgpCisg
ICAgeworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9lbGVtZW50OworCisgICAgICAgIGlmICghdGhpcy5kYXRhR3JpZCkKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworCisgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJ0ciIpOworICAgICAgICB0aGlzLl9lbGVtZW50Ll9kYXRhR3JpZE5vZGUgPSB0aGlzOwor
CisgICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuKQorICAgICAgICAgICAgdGhpcy5fZWxlbWVu
dC5jbGFzc0xpc3QuYWRkKCJwYXJlbnQiKTsKKyAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpCisg
ICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoImV4cGFuZGVkIik7CisgICAg
ICAgIGlmICh0aGlzLnNlbGVjdGVkKQorICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJzZWxlY3RlZCIpOworICAgICAgICBpZiAodGhpcy5yZXZlYWxlZCkKKyAgICAgICAg
ICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgicmV2ZWFsZWQiKTsKKyAgICAgICAgaWYg
KHRoaXMuX2hpZGRlbikKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgi
aGlkZGVuIik7CisKKyAgICAgICAgdGhpcy5jcmVhdGVDZWxscygpOworICAgICAgICByZXR1cm4g
dGhpcy5fZWxlbWVudDsKKyAgICB9CisKKyAgICBjcmVhdGVDZWxscygpCisgICAgeworICAgICAg
ICBmb3IgKHZhciBjb2x1bW5JZGVudGlmaWVyIG9mIHRoaXMuZGF0YUdyaWQub3JkZXJlZENvbHVt
bnMpCisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ2Vs
bChjb2x1bW5JZGVudGlmaWVyKSk7CisgICAgfQorCisgICAgcmVmcmVzaElmTmVlZGVkKCkKKyAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fbmVlZHNSZWZyZXNoKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRoaXMuX25lZWRzUmVmcmVzaCA9IGZhbHNlOworCisgICAgICAgIHRoaXMu
cmVmcmVzaCgpOworICAgIH0KKworICAgIG5lZWRzUmVmcmVzaCgpCisgICAgeworICAgICAgICB0
aGlzLl9uZWVkc1JlZnJlc2ggPSB0cnVlOworCisgICAgICAgIGlmICghdGhpcy5fcmV2ZWFsZWQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRoaXMuX3NjaGVkdWxlZFJlZnJl
c2hJZGVudGlmaWVyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3NjaGVk
dWxlZFJlZnJlc2hJZGVudGlmaWVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVmcmVz
aC5iaW5kKHRoaXMpKTsKKyAgICB9CisKKyAgICBnZXQgZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fZGF0YTsKKyAgICB9CisKKyAgICBzZXQgZGF0YSh4KQorICAgIHsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQodHlwZW9mIHggPT09ICJvYmplY3QiLCAiRGF0YSBzaG91bGQgYmUg
YW4gb2JqZWN0LiIpOworCisgICAgICAgIHggPSB4IHx8IHt9OworCisgICAgICAgIGlmIChPYmpl
Y3Quc2hhbGxvd0VxdWFsKHRoaXMuX2RhdGEsIHgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHRoaXMuX2RhdGEgPSB4OworICAgICAgICB0aGlzLm5lZWRzUmVmcmVzaCgpOworICAg
IH0KKworICAgIGdldCBmaWx0ZXJhYmxlRGF0YSgpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
Y2FjaGVkRmlsdGVyYWJsZURhdGEpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkRmls
dGVyYWJsZURhdGE7CisKKyAgICAgICAgdGhpcy5fY2FjaGVkRmlsdGVyYWJsZURhdGEgPSBbXTsK
KworICAgICAgICBmb3IgKGxldCBjb2x1bW4gb2YgdGhpcy5kYXRhR3JpZC5jb2x1bW5zLnZhbHVl
cygpKSB7CisgICAgICAgICAgICBpZiAoY29sdW1uLmhpZGRlbikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5maWx0ZXJhYmxlRGF0YUZv
ckNvbHVtbihjb2x1bW4uY29sdW1uSWRlbnRpZmllcik7CisgICAgICAgICAgICBpZiAoIXZhbHVl
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoISh2YWx1ZSBp
bnN0YW5jZW9mIEFycmF5KSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFt2YWx1ZV07CisKKyAg
ICAgICAgICAgIGlmICghdmFsdWUubGVuZ3RoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICB0aGlzLl9jYWNoZWRGaWx0ZXJhYmxlRGF0YSA9IHRoaXMuX2NhY2hlZEZp
bHRlcmFibGVEYXRhLmNvbmNhdCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dGhpcy5fY2FjaGVkRmlsdGVyYWJsZURhdGE7CisgICAgfQorCisgICAgZ2V0IHJldmVhbGVkKCkK
KyAgICB7CisgICAgICAgIGlmICgiX3JldmVhbGVkIiBpbiB0aGlzKQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3JldmVhbGVkOworCisgICAgICAgIHZhciBjdXJyZW50QW5jZXN0b3IgPSB0aGlz
LnBhcmVudDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRBbmNlc3RvciAmJiAhY3VycmVudEFuY2Vz
dG9yLnJvb3QpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudEFuY2VzdG9yLmV4cGFuZGVkKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fcmV2ZWFsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnJlbnRBbmNl
c3RvciA9IGN1cnJlbnRBbmNlc3Rvci5wYXJlbnQ7CisgICAgICAgIH0KKworICAgICAgICB0aGlz
Ll9yZXZlYWxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHNl
dCBoYXNDaGlsZHJlbih4KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2hhc0NoaWxkcmVuID09
PSB4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2hhc0NoaWxkcmVuID0g
eDsKKworICAgICAgICBpZiAoIXRoaXMuX2VsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKHRoaXMuX2hhc0NoaWxkcmVuKSB7CisgICAgICAgICAgICB0aGlzLl9lbGVt
ZW50LmNsYXNzTGlzdC5hZGQoInBhcmVudCIpOworICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5k
ZWQpCisgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJleHBhbmRl
ZCIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0
LnJlbW92ZSgicGFyZW50IiwgImV4cGFuZGVkIik7CisgICAgfQorCisgICAgZ2V0IGhhc0NoaWxk
cmVuKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9oYXNDaGlsZHJlbjsKKyAgICB9CisK
KyAgICBzZXQgcmV2ZWFsZWQoeCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9yZXZlYWxlZCA9
PT0geCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9yZXZlYWxlZCA9IHg7
CisKKyAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9y
ZXZlYWxlZCkKKyAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoInJl
dmVhbGVkIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVu
dC5jbGFzc0xpc3QucmVtb3ZlKCJyZXZlYWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5yZWZyZXNoSWZOZWVkZWQoKTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
Y2hpbGRyZW4ubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLnJldmVh
bGVkID0geCAmJiB0aGlzLmV4cGFuZGVkOworICAgIH0KKworICAgIGdldCBkZXB0aCgpCisgICAg
eworICAgICAgICBpZiAoIl9kZXB0aCIgaW4gdGhpcykKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9kZXB0aDsKKyAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmICF0aGlzLnBhcmVudC5yb290KQor
ICAgICAgICAgICAgdGhpcy5fZGVwdGggPSB0aGlzLnBhcmVudC5kZXB0aCArIDE7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHRoaXMuX2RlcHRoID0gMDsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2RlcHRoOworICAgIH0KKworICAgIGdldCBsZWZ0UGFkZGluZygpCisgICAgeworICAgICAgICBp
ZiAodHlwZW9mKHRoaXMuX2xlZnRQYWRkaW5nKSA9PT0gIm51bWJlciIpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fbGVmdFBhZGRpbmc7CisKKyAgICAgICAgdGhpcy5fbGVmdFBhZGRpbmcgPSB0
aGlzLmRlcHRoICogdGhpcy5kYXRhR3JpZC5pbmRlbnRXaWR0aDsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2xlZnRQYWRkaW5nOworICAgIH0KKworICAgIGdldCBzaG91bGRSZWZyZXNoQ2hpbGRyZW4o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbjsKKyAg
ICB9CisKKyAgICBzZXQgc2hvdWxkUmVmcmVzaENoaWxkcmVuKHgpCisgICAgeworICAgICAgICB0
aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSB4OworICAgICAgICBpZiAoeCAmJiB0aGlzLmV4
cGFuZGVkKQorICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKKyAgICB9CisKKyAgICBnZXQgc2Vs
ZWN0ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkOworICAgIH0KKwor
ICAgIHNldCBzZWxlY3RlZCh4KQorICAgIHsKKyAgICAgICAgaWYgKHgpCisgICAgICAgICAgICB0
aGlzLnNlbGVjdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLmRlc2VsZWN0KCk7
CisgICAgfQorCisgICAgZ2V0IGV4cGFuZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9leHBhbmRlZDsKKyAgICB9CisKKyAgICBzZXQgZXhwYW5kZWQoeCkKKyAgICB7CisgICAgICAg
IGlmICh4KQorICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdGhpcy5jb2xsYXBzZSgpOworICAgIH0KKworICAgIGhhc0FuY2VzdG9yKGFuY2VzdG9y
KQorICAgIHsKKyAgICAgICAgaWYgKCFhbmNlc3RvcikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBsZXQgY3VycmVudEFuY2VzdG9yID0gdGhpcy5wYXJlbnQ7CisgICAgICAg
IHdoaWxlIChjdXJyZW50QW5jZXN0b3IpIHsKKyAgICAgICAgICAgIGlmIChhbmNlc3RvciA9PT0g
Y3VycmVudEFuY2VzdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
ICAgICBjdXJyZW50QW5jZXN0b3IgPSBjdXJyZW50QW5jZXN0b3IucGFyZW50OworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJlZnJlc2goKQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9lbGVtZW50IHx8ICF0aGlzLmRhdGFHcmlkKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLl9zY2hlZHVsZWRSZWZyZXNoSWRlbnRpZmll
cikgeworICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2NoZWR1bGVkUmVm
cmVzaElkZW50aWZpZXIpOworICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVkUmVmcmVzaElkZW50
aWZpZXIgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9jYWNoZWRGaWx0
ZXJhYmxlRGF0YSA9IG51bGw7CisgICAgICAgIHRoaXMuX25lZWRzUmVmcmVzaCA9IGZhbHNlOwor
CisgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5j
cmVhdGVDZWxscygpOworICAgIH0KKworICAgIHJlZnJlc2hSZWN1cnNpdmVseSgpCisgICAgewor
ICAgICAgICB0aGlzLnJlZnJlc2goKTsKKyAgICAgICAgdGhpcy5mb3JFYWNoQ2hpbGRJblN1YnRy
ZWUoKG5vZGUpID0+IG5vZGUucmVmcmVzaCgpKTsKKyAgICB9CisKKyAgICB1cGRhdGVMYXlvdXQo
KQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyBpZiBuZWVkZWQu
CisgICAgfQorCisgICAgY3JlYXRlQ2VsbChjb2x1bW5JZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgdmFyIGNlbGxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAg
ICAgY2VsbEVsZW1lbnQuY2xhc3NOYW1lID0gY29sdW1uSWRlbnRpZmllciArICItY29sdW1uIjsK
KyAgICAgICAgY2VsbEVsZW1lbnQuX19jb2x1bW5JZGVudGlmaWVyID0gY29sdW1uSWRlbnRpZmll
cjsKKworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5kYXRhR3JpZC5jb2x1bW5zLmdldChjb2x1
bW5JZGVudGlmaWVyKTsKKworICAgICAgICBpZiAoY29sdW1uWyJhbGlnbmVkIl0pCisgICAgICAg
ICAgICBjZWxsRWxlbWVudC5jbGFzc0xpc3QuYWRkKGNvbHVtblsiYWxpZ25lZCJdKTsKKworICAg
ICAgICBpZiAoY29sdW1uWyJncm91cCJdKQorICAgICAgICAgICAgY2VsbEVsZW1lbnQuY2xhc3NM
aXN0LmFkZCgiY29sdW1uLWdyb3VwLSIgKyBjb2x1bW5bImdyb3VwIl0pOworCisgICAgICAgIHZh
ciBkaXYgPSBjZWxsRWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgImNlbGwtY29udGVudCIpOwor
ICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuY3JlYXRlQ2VsbENvbnRlbnQoY29sdW1uSWRlbnRp
ZmllciwgY2VsbEVsZW1lbnQpOworICAgICAgICBkaXYuYXBwZW5kKGNvbnRlbnQpOworCisgICAg
ICAgIGlmIChjb2x1bW5bImljb24iXSkgeworICAgICAgICAgICAgbGV0IGljb25FbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICBpY29uRWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJpY29uIik7CisgICAgICAgICAgICBkaXYuaW5zZXJ0QmVmb3JlKGljb25F
bGVtZW50LCBkaXYuZmlyc3RDaGlsZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29sdW1u
SWRlbnRpZmllciA9PT0gdGhpcy5kYXRhR3JpZC5kaXNjbG9zdXJlQ29sdW1uSWRlbnRpZmllcikg
eworICAgICAgICAgICAgY2VsbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiZGlzY2xvc3VyZSIpOwor
ICAgICAgICAgICAgaWYgKHRoaXMubGVmdFBhZGRpbmcpCisgICAgICAgICAgICAgICAgY2VsbEVs
ZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctbGVmdCIsIHRoaXMubGVmdFBhZGRpbmcg
KyAicHgiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjZWxsRWxlbWVudDsKKyAgICB9
CisKKyAgICBjcmVhdGVDZWxsQ29udGVudChjb2x1bW5JZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuZGF0YVtjb2x1bW5JZGVudGlmaWVyXSB8fCAiXHUyMDBiIjsgLy8gWmVy
byB3aWR0aCBzcGFjZSB0byBrZWVwIHRoZSBjZWxsIGZyb20gY29sbGFwc2luZy4KKyAgICB9CisK
KyAgICBlbGVtZW50V2l0aENvbHVtbklkZW50aWZpZXIoY29sdW1uSWRlbnRpZmllcikKKyAgICB7
CisgICAgICAgIGlmICghdGhpcy5kYXRhR3JpZCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
CisgICAgICAgIGxldCBpbmRleCA9IHRoaXMuZGF0YUdyaWQub3JkZXJlZENvbHVtbnMuaW5kZXhP
Zihjb2x1bW5JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGluZGV4ID09PSAtMSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuY2hpbGRyZW5b
aW5kZXhdOworICAgIH0KKworICAgIC8vIFNoYXJlIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIERhdGFH
cmlkLiBUaGV5IGFyZSB3cml0dGVuIHRvIHdvcmsgd2l0aCBhIERhdGFHcmlkTm9kZSB0aGlzIG9i
amVjdC4KKyAgICBhcHBlbmRDaGlsZCgpIHsgcmV0dXJuIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5w
cm90b3R5cGUuYXBwZW5kQ2hpbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQorICAgIGluc2Vy
dENoaWxkKCkgeyByZXR1cm4gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLnByb3RvdHlwZS5pbnNlcnRD
aGlsZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9CisgICAgcmVtb3ZlQ2hpbGQoKSB7IHJldHVy
biBXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7IH0KKyAgICByZW1vdmVDaGlsZHJlbigpIHsgcmV0dXJuIFdlYkluc3BlY3Rv
ci5EYXRhR3JpZC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW4uYXBwbHkodGhpcywgYXJndW1lbnRz
KTsgfQorICAgIHJlbW92ZUNoaWxkcmVuUmVjdXJzaXZlKCkgeyByZXR1cm4gV2ViSW5zcGVjdG9y
LkRhdGFHcmlkLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZS5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOyB9CisKKyAgICBfcmVjYWxjdWxhdGVTaWJsaW5ncyhteUluZGV4KQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB2YXIgcHJldmlvdXNDaGlsZCA9IChteUluZGV4ID4gMCA/IHRoaXMucGFyZW50LmNoaWxkcmVu
W215SW5kZXggLSAxXSA6IG51bGwpOworCisgICAgICAgIGlmIChwcmV2aW91c0NoaWxkKSB7Cisg
ICAgICAgICAgICBwcmV2aW91c0NoaWxkLm5leHRTaWJsaW5nID0gdGhpczsKKyAgICAgICAgICAg
IHRoaXMucHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNDaGlsZDsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB0aGlzLnByZXZpb3VzU2libGluZyA9IG51bGw7CisKKyAgICAgICAgdmFyIG5l
eHRDaGlsZCA9IHRoaXMucGFyZW50LmNoaWxkcmVuW215SW5kZXggKyAxXTsKKworICAgICAgICBp
ZiAobmV4dENoaWxkKSB7CisgICAgICAgICAgICBuZXh0Q2hpbGQucHJldmlvdXNTaWJsaW5nID0g
dGhpczsKKyAgICAgICAgICAgIHRoaXMubmV4dFNpYmxpbmcgPSBuZXh0Q2hpbGQ7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7CisgICAgfQorCisg
ICAgY29sbGFwc2UoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCisgICAgICAg
ICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZGVkIik7CisKKyAgICAg
ICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ld
LnJldmVhbGVkID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImNvbGxhcHNlZCIpOworCisgICAgICAgIGlmICh0aGlzLmRhdGFHcmlkKSB7CisgICAgICAg
ICAgICB0aGlzLmRhdGFHcmlkLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
RGF0YUdyaWQuRXZlbnQuQ29sbGFwc2VkTm9kZSwge2RhdGFHcmlkTm9kZTogdGhpc30pOworICAg
ICAgICAgICAgdGhpcy5kYXRhR3JpZC5fbm90ZVJvd3NDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjb2xsYXBzZVJlY3Vyc2l2ZWx5KCkKKyAgICB7CisgICAgICAgIHZhciBpdGVt
ID0gdGhpczsKKyAgICAgICAgd2hpbGUgKGl0ZW0pIHsKKyAgICAgICAgICAgIGlmIChpdGVtLmV4
cGFuZGVkKQorICAgICAgICAgICAgICAgIGl0ZW0uY29sbGFwc2UoKTsKKyAgICAgICAgICAgIGl0
ZW0gPSBpdGVtLnRyYXZlcnNlTmV4dE5vZGUoZmFsc2UsIHRoaXMsIHRydWUpOworICAgICAgICB9
CisgICAgfQorCisgICAgZXhwYW5kKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5oYXNDaGls
ZHJlbiB8fCB0aGlzLmV4cGFuZGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICh0aGlzLnJldmVhbGVkICYmICF0aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW4pCisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5yZXZlYWxlZCA9IHRydWU7CisKKyAgICAgICAg
aWYgKHRoaXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbikgeworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHRo
aXMuY2hpbGRyZW5baV0uX2RldGFjaCgpOworCisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygicG9wdWxhdGUiKTsKKworICAgICAgICAgICAgaWYgKHRoaXMuX2F0dGFj
aGVkKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVu
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hp
bGRyZW5baV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJldmVhbGVkKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY2hpbGQucmV2ZWFsZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBjaGlsZC5fYXR0YWNoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB0aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh0aGlzLl9lbGVtZW50KQorICAgICAgICAgICAgdGhpcy5fZWxl
bWVudC5jbGFzc0xpc3QuYWRkKCJleHBhbmRlZCIpOworCisgICAgICAgIHRoaXMuX2V4cGFuZGVk
ID0gdHJ1ZTsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZXhwYW5k
ZWQiKTsKKworICAgICAgICBpZiAodGhpcy5kYXRhR3JpZCkgeworICAgICAgICAgICAgdGhpcy5k
YXRhR3JpZC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRhdGFHcmlkLkV2
ZW50LkV4cGFuZGVkTm9kZSwge2RhdGFHcmlkTm9kZTogdGhpc30pOworICAgICAgICAgICAgdGhp
cy5kYXRhR3JpZC5fbm90ZVJvd3NDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBl
eHBhbmRSZWN1cnNpdmVseSgpCisgICAgeworICAgICAgICB2YXIgaXRlbSA9IHRoaXM7CisgICAg
ICAgIHdoaWxlIChpdGVtKSB7CisgICAgICAgICAgICBpdGVtLmV4cGFuZCgpOworICAgICAgICAg
ICAgaXRlbSA9IGl0ZW0udHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgdGhpcyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3JFYWNoSW1tZWRpYXRlQ2hpbGQoY2FsbGJhY2spCisgICAgeworICAg
ICAgICBmb3IgKGxldCBub2RlIG9mIHRoaXMuY2hpbGRyZW4pCisgICAgICAgICAgICBjYWxsYmFj
ayhub2RlKTsKKyAgICB9CisKKyAgICBmb3JFYWNoQ2hpbGRJblN1YnRyZWUoY2FsbGJhY2spCisg
ICAgeworICAgICAgICBsZXQgbm9kZSA9IHRoaXMudHJhdmVyc2VOZXh0Tm9kZShmYWxzZSwgdGhp
cywgdHJ1ZSk7CisgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICBjYWxsYmFjayhu
b2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoZmFsc2UsIHRo
aXMsIHRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgaXNJblN1YnRyZWVPZk5vZGUoYmFz
ZU5vZGUpCisgICAgeworICAgICAgICBsZXQgbm9kZSA9IGJhc2VOb2RlOworICAgICAgICB3aGls
ZSAobm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2Rl
KGZhbHNlLCBiYXNlTm9kZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldmVhbCgpCisgICAgeworICAgICAgICB2YXIgY3VycmVudEFuY2Vz
dG9yID0gdGhpcy5wYXJlbnQ7CisgICAgICAgIHdoaWxlIChjdXJyZW50QW5jZXN0b3IgJiYgIWN1
cnJlbnRBbmNlc3Rvci5yb290KSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRBbmNlc3Rvci5l
eHBhbmRlZCkKKyAgICAgICAgICAgICAgICBjdXJyZW50QW5jZXN0b3IuZXhwYW5kKCk7CisgICAg
ICAgICAgICBjdXJyZW50QW5jZXN0b3IgPSBjdXJyZW50QW5jZXN0b3IucGFyZW50OworICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5lbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2Up
OworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZXZlYWxlZCIpOwor
ICAgIH0KKworICAgIHNlbGVjdChzdXBwcmVzc1NlbGVjdGVkRXZlbnQpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuZGF0YUdyaWQgfHwgIXRoaXMuc2VsZWN0YWJsZSB8fCB0aGlzLnNlbGVjdGVk
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBvbGRTZWxlY3RlZE5vZGUgPSB0
aGlzLmRhdGFHcmlkLnNlbGVjdGVkTm9kZTsKKyAgICAgICAgaWYgKG9sZFNlbGVjdGVkTm9kZSkK
KyAgICAgICAgICAgIG9sZFNlbGVjdGVkTm9kZS5kZXNlbGVjdCh0cnVlKTsKKworICAgICAgICB0
aGlzLl9zZWxlY3RlZCA9IHRydWU7CisgICAgICAgIHRoaXMuZGF0YUdyaWQuc2VsZWN0ZWROb2Rl
ID0gdGhpczsKKworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKKworICAgICAgICBpZiAoIXN1cHBy
ZXNzU2VsZWN0ZWRFdmVudCkKKyAgICAgICAgICAgIHRoaXMuZGF0YUdyaWQuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5FdmVudC5TZWxlY3RlZE5vZGVDaGFu
Z2VkLCB7b2xkU2VsZWN0ZWROb2RlfSk7CisgICAgfQorCisgICAgcmV2ZWFsQW5kU2VsZWN0KCkK
KyAgICB7CisgICAgICAgIHRoaXMucmV2ZWFsKCk7CisgICAgICAgIHRoaXMuc2VsZWN0KCk7Cisg
ICAgfQorCisgICAgZGVzZWxlY3Qoc3VwcHJlc3NEZXNlbGVjdGVkRXZlbnQpCisgICAgeworICAg
ICAgICBpZiAoIXRoaXMuZGF0YUdyaWQgfHwgdGhpcy5kYXRhR3JpZC5zZWxlY3RlZE5vZGUgIT09
IHRoaXMgfHwgIXRoaXMuc2VsZWN0ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dGhpcy5fc2VsZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5kYXRhR3JpZC5zZWxlY3RlZE5v
ZGUgPSBudWxsOworCisgICAgICAgIGlmICh0aGlzLl9lbGVtZW50KQorICAgICAgICAgICAgdGhp
cy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpOworCisgICAgICAgIGlmICgh
c3VwcHJlc3NEZXNlbGVjdGVkRXZlbnQpCisgICAgICAgICAgICB0aGlzLmRhdGFHcmlkLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGF0YUdyaWQuRXZlbnQuU2VsZWN0ZWRO
b2RlQ2hhbmdlZCwge29sZFNlbGVjdGVkTm9kZTogdGhpc30pOworICAgIH0KKworICAgIHRyYXZl
cnNlTmV4dE5vZGUoc2tpcEhpZGRlbiwgc3RheVdpdGhpbiwgZG9udFBvcHVsYXRlLCBpbmZvKQor
ICAgIHsKKyAgICAgICAgaWYgKCFkb250UG9wdWxhdGUgJiYgdGhpcy5oYXNDaGlsZHJlbikKKyAg
ICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJwb3B1bGF0ZSIpOworCisg
ICAgICAgIGlmIChpbmZvKQorICAgICAgICAgICAgaW5mby5kZXB0aENoYW5nZSA9IDA7CisKKyAg
ICAgICAgdmFyIG5vZGUgPSAoIXNraXBIaWRkZW4gfHwgdGhpcy5yZXZlYWxlZCkgPyB0aGlzLmNo
aWxkcmVuWzBdIDogbnVsbDsKKyAgICAgICAgaWYgKG5vZGUgJiYgKCFza2lwSGlkZGVuIHx8IHRo
aXMuZXhwYW5kZWQpKSB7CisgICAgICAgICAgICBpZiAoaW5mbykKKyAgICAgICAgICAgICAgICBp
bmZvLmRlcHRoQ2hhbmdlID0gMTsKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRoaXMgPT09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKworICAgICAgICBub2RlID0gKCFza2lwSGlkZGVuIHx8IHRoaXMucmV2ZWFsZWQpID8g
dGhpcy5uZXh0U2libGluZyA6IG51bGw7CisgICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisKKyAgICAgICAgbm9kZSA9IHRoaXM7CisgICAgICAgIHdoaWxlIChub2Rl
ICYmICFub2RlLnJvb3QgJiYgISgoIXNraXBIaWRkZW4gfHwgbm9kZS5yZXZlYWxlZCkgPyBub2Rl
Lm5leHRTaWJsaW5nIDogbnVsbCkgJiYgbm9kZS5wYXJlbnQgIT09IHN0YXlXaXRoaW4pIHsKKyAg
ICAgICAgICAgIGlmIChpbmZvKQorICAgICAgICAgICAgICAgIGluZm8uZGVwdGhDaGFuZ2UgLT0g
MTsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVybiAo
IXNraXBIaWRkZW4gfHwgbm9kZS5yZXZlYWxlZCkgPyBub2RlLm5leHRTaWJsaW5nIDogbnVsbDsK
KyAgICB9CisKKyAgICB0cmF2ZXJzZVByZXZpb3VzTm9kZShza2lwSGlkZGVuLCBkb250UG9wdWxh
dGUpCisgICAgeworICAgICAgICB2YXIgbm9kZSA9ICghc2tpcEhpZGRlbiB8fCB0aGlzLnJldmVh
bGVkKSA/IHRoaXMucHJldmlvdXNTaWJsaW5nIDogbnVsbDsKKyAgICAgICAgaWYgKCFkb250UG9w
dWxhdGUgJiYgbm9kZSAmJiBub2RlLmhhc0NoaWxkcmVuKQorICAgICAgICAgICAgbm9kZS5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoInBvcHVsYXRlIik7CisKKyAgICAgICAgd2hpbGUgKG5vZGUg
JiYgKCghc2tpcEhpZGRlbiB8fCAobm9kZS5yZXZlYWxlZCAmJiBub2RlLmV4cGFuZGVkKSkgPyBu
b2RlLmNoaWxkcmVuLmxhc3RWYWx1ZSA6IG51bGwpKSB7CisgICAgICAgICAgICBpZiAoIWRvbnRQ
b3B1bGF0ZSAmJiBub2RlLmhhc0NoaWxkcmVuKQorICAgICAgICAgICAgICAgIG5vZGUuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJwb3B1bGF0ZSIpOworICAgICAgICAgICAgbm9kZSA9ICgoIXNr
aXBIaWRkZW4gfHwgKG5vZGUucmV2ZWFsZWQgJiYgbm9kZS5leHBhbmRlZCkpID8gbm9kZS5jaGls
ZHJlbi5sYXN0VmFsdWUgOiBudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlKQor
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisKKyAgICAgICAgaWYgKCF0aGlzLnBhcmVudCB8fCB0
aGlzLnBhcmVudC5yb290KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgcmV0
dXJuIHRoaXMucGFyZW50OworICAgIH0KKworICAgIGlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJp
YW5nbGUoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuaGFzQ2hpbGRyZW4pCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxldCBjZWxsID0gZXZlbnQudGFyZ2V0LmVu
Y2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoInRkIik7CisgICAgICAgIGlmICghY2VsbCB8
fCAhY2VsbC5jbGFzc0xpc3QuY29udGFpbnMoImRpc2Nsb3N1cmUiKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBsZXQgY29tcHV0ZWRMZWZ0UGFkZGluZyA9IHdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKGNlbGwpLmdldFByb3BlcnR5Q1NTVmFsdWUoInBhZGRpbmctbGVmdCIp
LmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BYKTsKKyAgICAgICAgbGV0IGxl
ZnQgPSBjZWxsLnRvdGFsT2Zmc2V0TGVmdCArIGNvbXB1dGVkTGVmdFBhZGRpbmc7CisgICAgICAg
IHJldHVybiBldmVudC5wYWdlWCA+PSBsZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IGxlZnQgKyB0aGlz
LmRpc2Nsb3N1cmVUb2dnbGVXaWR0aDsKKyAgICB9CisKKyAgICBfYXR0YWNoKCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5kYXRhR3JpZCB8fCB0aGlzLl9hdHRhY2hlZCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB0aGlzLl9hdHRhY2hlZCA9IHRydWU7CisKKyAgICAgICAgbGV0
IGluc2VydGlvbkluZGV4ID0gLTE7CisKKyAgICAgICAgaWYgKCF0aGlzLmlzUGxhY2Vob2xkZXJO
b2RlKSB7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNHcmlkTm9kZSA9IHRoaXMudHJhdmVyc2VQ
cmV2aW91c05vZGUodHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpbnNlcnRpb25JbmRleCA9IHRo
aXMuZGF0YUdyaWQuX3Jvd3MuaW5kZXhPZihwcmV2aW91c0dyaWROb2RlKTsKKyAgICAgICAgICAg
IGlmIChpbnNlcnRpb25JbmRleCA9PT0gLTEpCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uSW5k
ZXggPSAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluc2VydGlvbkluZGV4
Kys7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5zZXJ0aW9uSW5kZXggPT09IC0xKQorICAg
ICAgICAgICAgdGhpcy5kYXRhR3JpZC5fcm93cy5wdXNoKHRoaXMpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0aGlzLmRhdGFHcmlkLl9yb3dzLmluc2VydEF0SW5kZXgodGhpcywgaW5zZXJ0
aW9uSW5kZXgpOworCisgICAgICAgIHRoaXMuZGF0YUdyaWQuX25vdGVSb3dzQ2hhbmdlZCgpOwor
CisgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgdGhpcy5j
aGlsZHJlbltpXS5fYXR0YWNoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfZGV0YWNoKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5fYXR0YWNoZWQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdGhpcy5fYXR0YWNoZWQgPSBmYWxzZTsKKworICAgICAgICB0aGlzLmRhdGFH
cmlkLl9yb3dzLnJlbW92ZSh0aGlzLCB0cnVlKTsKKyAgICAgICAgdGhpcy5kYXRhR3JpZC5fbm90
ZVJvd1JlbW92ZWQodGhpcyk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNo
aWxkcmVuLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5fZGV0YWNo
KCk7CisgICAgfQorCisgICAgc2F2ZVBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll9zYXZlZFBvc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMucGFyZW50KTsKKyAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9zYXZlZFBvc2l0aW9uID0geworICAgICAgICAg
ICAgcGFyZW50OiB0aGlzLnBhcmVudCwKKyAgICAgICAgICAgIGluZGV4OiB0aGlzLnBhcmVudC5j
aGlsZHJlbi5pbmRleE9mKHRoaXMpCisgICAgICAgIH07CisgICAgfQorCisgICAgcmVzdG9yZVBv
c2l0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc2F2ZWRQb3NpdGlvbikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGhpcy5wYXJlbnQgIT09IHRoaXMuX3NhdmVk
UG9zaXRpb24ucGFyZW50KQorICAgICAgICAgICAgdGhpcy5fc2F2ZWRQb3NpdGlvbi5wYXJlbnQu
aW5zZXJ0Q2hpbGQodGhpcywgdGhpcy5fc2F2ZWRQb3NpdGlvbi5pbmRleCk7CisKKyAgICAgICAg
dGhpcy5fc2F2ZWRQb3NpdGlvbiA9IG51bGw7CisgICAgfQorCisgICAgYXBwZW5kQ29udGV4dE1l
bnVJdGVtcyhjb250ZXh0TWVudSkKKyAgICB7CisgICAgICAgIC8vIFN1YmNsYXNzZXMgbWF5IG92
ZXJyaWRlCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8vIFByb3RlY3RlZAor
CisgICAgZmlsdGVyYWJsZURhdGFGb3JDb2x1bW4oY29sdW1uSWRlbnRpZmllcikKKyAgICB7Cisg
ICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZGF0YVtjb2x1bW5JZGVudGlmaWVyXTsKKyAgICAgICAg
cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgPyB2YWx1ZSA6IG51bGw7CisgICAgfQor
fTsKKworLy8gVXNlZCB0byBjcmVhdGUgYSBuZXcgdGFibGUgcm93IHdoZW4gZW50ZXJpbmcgbmV3
IGRhdGEgYnkgZWRpdGluZyBjZWxscy4KK1dlYkluc3BlY3Rvci5QbGFjZWhvbGRlckRhdGFHcmlk
Tm9kZSA9IGNsYXNzIFBsYWNlaG9sZGVyRGF0YUdyaWROb2RlIGV4dGVuZHMgV2ViSW5zcGVjdG9y
LkRhdGFHcmlkTm9kZQoreworICAgIGNvbnN0cnVjdG9yKGRhdGEpCisgICAgeworICAgICAgICBz
dXBlcihkYXRhLCBmYWxzZSk7CisgICAgICAgIHRoaXMuaXNQbGFjZWhvbGRlck5vZGUgPSB0cnVl
OworICAgIH0KKworICAgIG1ha2VOb3JtYWwoKQorICAgIHsKKyAgICAgICAgdGhpcy5pc1BsYWNl
aG9sZGVyTm9kZSA9IGZhbHNlOworICAgIH0KK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UcmVlRWxlbWVudC5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RyZWVFbGVtZW50LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzkzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UcmVlRWxlbWVudC5qcwpAQCAt
MCwwICsxLDYxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlRyZWVFbGVtZW50ID0gY2xhc3MgVHJlZUVs
ZW1lbnQgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZWN0Cit7CisgICAgY29uc3RydWN0b3IodGl0
bGUsIHJlcHJlc2VudGVkT2JqZWN0LCBoYXNDaGlsZHJlbikKKyAgICB7CisgICAgICAgIHN1cGVy
KCk7CisKKyAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTsKKyAgICAgICAgdGhpcy5yZXByZXNl
bnRlZE9iamVjdCA9IChyZXByZXNlbnRlZE9iamVjdCB8fCB7fSk7CisKKyAgICAgICAgaWYgKHRo
aXMucmVwcmVzZW50ZWRPYmplY3QuX190cmVlRWxlbWVudElkZW50aWZpZXIpCisgICAgICAgICAg
ICB0aGlzLmlkZW50aWZpZXIgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Ll9fdHJlZUVsZW1lbnRJ
ZGVudGlmaWVyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9
IFdlYkluc3BlY3Rvci5UcmVlT3V0bGluZS5fa25vd25UcmVlRWxlbWVudE5leHRJZGVudGlmaWVy
Kys7CisgICAgICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Ll9fdHJlZUVsZW1lbnRJZGVu
dGlmaWVyID0gdGhpcy5pZGVudGlmaWVyOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5faGlk
ZGVuID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3NlbGVjdGFibGUgPSB0cnVlOworICAgICAgICB0
aGlzLmV4cGFuZGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9IGhhc0NoaWxkcmVuOworICAgICAgICB0aGlzLmNoaWxk
cmVuID0gW107CisgICAgICAgIHRoaXMudHJlZU91dGxpbmUgPSBudWxsOworICAgICAgICB0aGlz
LnBhcmVudCA9IG51bGw7CisgICAgICAgIHRoaXMucHJldmlvdXNTaWJsaW5nID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9k
ZSA9IG51bGw7CisgICAgfQorCisgICAgLy8gTWV0aG9kcworCisgICAgYXBwZW5kQ2hpbGQoKSB7
IHJldHVybiBXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUucHJvdG90eXBlLmFwcGVuZENoaWxkLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KKyAgICBpbnNlcnRDaGlsZCgpIHsgcmV0dXJuIFdlYklu
c3BlY3Rvci5UcmVlT3V0bGluZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsgfQorICAgIHJlbW92ZUNoaWxkKCkgeyByZXR1cm4gV2ViSW5zcGVjdG9yLlRyZWVP
dXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9Cisg
ICAgcmVtb3ZlQ2hpbGRBdEluZGV4KCkgeyByZXR1cm4gV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5l
LnByb3RvdHlwZS5yZW1vdmVDaGlsZEF0SW5kZXguYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQor
ICAgIHJlbW92ZUNoaWxkcmVuKCkgeyByZXR1cm4gV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lLnBy
b3RvdHlwZS5yZW1vdmVDaGlsZHJlbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9CisgICAgcmVt
b3ZlQ2hpbGRyZW5SZWN1cnNpdmUoKSB7IHJldHVybiBXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUu
cHJvdG90eXBlLnJlbW92ZUNoaWxkcmVuUmVjdXJzaXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
IH0KKworICAgIGdldCBhcnJvd1RvZ2dsZVdpZHRoKCkKKyAgICB7CisgICAgICAgIHJldHVybiAx
MDsKKyAgICB9CisKKyAgICBnZXQgc2VsZWN0YWJsZSgpCisgICAgeworICAgICAgICBpZiAodGhp
cy5faGlkZGVuKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGhp
cy5fc2VsZWN0YWJsZTsKKyAgICB9CisKKyAgICBzZXQgc2VsZWN0YWJsZSh4KQorICAgIHsKKyAg
ICAgICAgdGhpcy5fc2VsZWN0YWJsZSA9IHg7CisgICAgfQorCisgICAgZ2V0IGxpc3RJdGVtRWxl
bWVudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbGlzdEl0ZW1Ob2RlOworICAgIH0K
KworICAgIGdldCB0aXRsZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7Cisg
ICAgfQorCisgICAgc2V0IHRpdGxlKHgpCisgICAgeworICAgICAgICB0aGlzLl90aXRsZSA9IHg7
CisgICAgICAgIHRoaXMuX3NldExpc3RJdGVtTm9kZUNvbnRlbnQoKTsKKyAgICAgICAgdGhpcy5k
aWRDaGFuZ2UoKTsKKyAgICB9CisKKyAgICBnZXQgdGl0bGVIVE1MKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl90aXRsZUhUTUw7CisgICAgfQorCisgICAgc2V0IHRpdGxlSFRNTCh4KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fdGl0bGVIVE1MID0geDsKKyAgICAgICAgdGhpcy5fc2V0TGlz
dEl0ZW1Ob2RlQ29udGVudCgpOworICAgICAgICB0aGlzLmRpZENoYW5nZSgpOworICAgIH0KKwor
ICAgIGdldCB0b29sdGlwKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90b29sdGlwOwor
ICAgIH0KKworICAgIHNldCB0b29sdGlwKHgpCisgICAgeworICAgICAgICB0aGlzLl90b29sdGlw
ID0geDsKKyAgICAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSkKKyAgICAgICAgICAgIHRoaXMu
X2xpc3RJdGVtTm9kZS50aXRsZSA9IHggPyB4IDogIiI7CisgICAgfQorCisgICAgZ2V0IGhhc0No
aWxkcmVuKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9oYXNDaGlsZHJlbjsKKyAgICB9
CisKKyAgICBzZXQgaGFzQ2hpbGRyZW4oeCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9oYXND
aGlsZHJlbiA9PT0geCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9oYXND
aGlsZHJlbiA9IHg7CisKKyAgICAgICAgaWYgKCF0aGlzLl9saXN0SXRlbU5vZGUpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHgpCisgICAgICAgICAgICB0aGlzLl9saXN0SXRl
bU5vZGUuY2xhc3NMaXN0LmFkZCgicGFyZW50Iik7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoInBhcmVudCIpOworICAgICAg
ICAgICAgdGhpcy5jb2xsYXBzZSgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5kaWRDaGFu
Z2UoKTsKKyAgICB9CisKKyAgICBnZXQgaGlkZGVuKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9oaWRkZW47CisgICAgfQorCisgICAgc2V0IGhpZGRlbih4KQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX2hpZGRlbiA9PT0geCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0
aGlzLl9oaWRkZW4gPSB4OworCisgICAgICAgIGlmICh0aGlzLl9saXN0SXRlbU5vZGUpCisgICAg
ICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuaGlkZGVuID0gdGhpcy5faGlkZGVuOworICAgICAg
ICBpZiAodGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSkKKyAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVu
TGlzdE5vZGUuaGlkZGVuID0gdGhpcy5faGlkZGVuOworCisgICAgICAgIGlmICh0aGlzLnRyZWVP
dXRsaW5lKQorICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lLkV2ZW50LkVsZW1lbnRWaXNpYmlsaXR5RGlk
Q2hhbmdlLCB7ZWxlbWVudDogdGhpc30pOworICAgIH0KKworICAgIGdldCBzaG91bGRSZWZyZXNo
Q2hpbGRyZW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3VsZFJlZnJlc2hDaGls
ZHJlbjsKKyAgICB9CisKKyAgICBzZXQgc2hvdWxkUmVmcmVzaENoaWxkcmVuKHgpCisgICAgewor
ICAgICAgICB0aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW4gPSB4OworICAgICAgICBpZiAoeCAm
JiB0aGlzLmV4cGFuZGVkKQorICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKKyAgICB9CisKKyAg
ICBfZmlyZURpZENoYW5nZSgpCisgICAgeworICAgICAgICBpZiAodGhpcy50cmVlT3V0bGluZSkK
KyAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuX3RyZWVFbGVtZW50RGlkQ2hhbmdlKHRoaXMp
OworICAgIH0KKworICAgIGRpZENoYW5nZSgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMudHJl
ZU91dGxpbmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5vbk5leHRGcmFt
ZS5fZmlyZURpZENoYW5nZSgpOworICAgIH0KKworICAgIF9zZXRMaXN0SXRlbU5vZGVDb250ZW50
KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbGlzdEl0ZW1Ob2RlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghdGhpcy5fdGl0bGVIVE1MICYmICF0aGlzLl90aXRsZSkK
KyAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5yZW1vdmVDaGlsZHJlbigpOworICAgICAg
ICBlbHNlIGlmICh0eXBlb2YgdGhpcy5fdGl0bGVIVE1MID09PSAic3RyaW5nIikKKyAgICAgICAg
ICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5pbm5lckhUTUwgPSB0aGlzLl90aXRsZUhUTUw7CisgICAg
ICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLl90aXRsZSA9PT0gInN0cmluZyIpCisgICAgICAgICAg
ICB0aGlzLl9saXN0SXRlbU5vZGUudGV4dENvbnRlbnQgPSB0aGlzLl90aXRsZTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUucmVtb3ZlQ2hpbGRyZW4oKTsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90aXRsZS5wYXJlbnROb2RlKQorICAgICAgICAgICAgICAg
IHRoaXMuX3RpdGxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fdGl0bGUpOworICAgICAg
ICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFwcGVuZENoaWxkKHRoaXMuX3RpdGxlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIF9hdHRhY2goKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9s
aXN0SXRlbU5vZGUgfHwgdGhpcy5wYXJlbnQuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbikgeworICAg
ICAgICAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSAmJiB0aGlzLl9saXN0SXRlbU5vZGUucGFy
ZW50Tm9kZSkKKyAgICAgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZCh0aGlzLl9saXN0SXRlbU5vZGUpOworCisgICAgICAgICAgICB0aGlzLl9saXN0
SXRlbU5vZGUgPSB0aGlzLnRyZWVPdXRsaW5lLl9jaGlsZHJlbkxpc3ROb2RlLm93bmVyRG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgibGkiKTsKKyAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS50
cmVlRWxlbWVudCA9IHRoaXM7CisgICAgICAgICAgICB0aGlzLl9zZXRMaXN0SXRlbU5vZGVDb250
ZW50KCk7CisgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUudGl0bGUgPSB0aGlzLl90b29s
dGlwID8gdGhpcy5fdG9vbHRpcCA6ICIiOworICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2Rl
LmhpZGRlbiA9IHRoaXMuaGlkZGVuOworCisgICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlsZHJl
bikKKyAgICAgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LmFkZCgicGFy
ZW50Iik7CisgICAgICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkKKyAgICAgICAgICAgICAgICB0
aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LmFkZCgiZXhwYW5kZWQiKTsKKyAgICAgICAgICAg
IGlmICh0aGlzLnNlbGVjdGVkKQorICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5j
bGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOworCisgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5v
ZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgV2ViSW5zcGVjdG9yLlRyZWVFbGVtZW50
LnRyZWVFbGVtZW50TW91c2VEb3duKTsKKyAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5h
ZGRFdmVudExpc3RlbmVyKCJjbGljayIsIFdlYkluc3BlY3Rvci5UcmVlRWxlbWVudC50cmVlRWxl
bWVudFRvZ2dsZWQpOworICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZEV2ZW50TGlz
dGVuZXIoImRibGNsaWNrIiwgV2ViSW5zcGVjdG9yLlRyZWVFbGVtZW50LnRyZWVFbGVtZW50RG91
YmxlQ2xpY2tlZCk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLm9uYXR0YWNoKQorICAgICAgICAg
ICAgICAgIHRoaXMub25hdHRhY2godGhpcyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbmV4
dFNpYmxpbmcgPSBudWxsOworICAgICAgICBpZiAodGhpcy5uZXh0U2libGluZyAmJiB0aGlzLm5l
eHRTaWJsaW5nLl9saXN0SXRlbU5vZGUgJiYgdGhpcy5uZXh0U2libGluZy5fbGlzdEl0ZW1Ob2Rl
LnBhcmVudE5vZGUgPT09IHRoaXMucGFyZW50Ll9jaGlsZHJlbkxpc3ROb2RlKQorICAgICAgICAg
ICAgbmV4dFNpYmxpbmcgPSB0aGlzLm5leHRTaWJsaW5nLl9saXN0SXRlbU5vZGU7CisgICAgICAg
IHRoaXMucGFyZW50Ll9jaGlsZHJlbkxpc3ROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9saXN0SXRl
bU5vZGUsIG5leHRTaWJsaW5nKTsKKyAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUp
CisgICAgICAgICAgICB0aGlzLnBhcmVudC5fY2hpbGRyZW5MaXN0Tm9kZS5pbnNlcnRCZWZvcmUo
dGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSwgdGhpcy5fbGlzdEl0ZW1Ob2RlLm5leHRTaWJsaW5nKTsK
KyAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpCisgICAgICAgICAgICB0aGlzLnNlbGVjdCgpOwor
ICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkKKyAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7Cisg
ICAgfQorCisgICAgX2RldGFjaCgpCisgICAgeworICAgICAgICBpZiAodGhpcy5vbmRldGFjaCkK
KyAgICAgICAgICAgIHRoaXMub25kZXRhY2godGhpcyk7CisgICAgICAgIGlmICh0aGlzLl9saXN0
SXRlbU5vZGUgJiYgdGhpcy5fbGlzdEl0ZW1Ob2RlLnBhcmVudE5vZGUpCisgICAgICAgICAgICB0
aGlzLl9saXN0SXRlbU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9saXN0SXRlbU5v
ZGUpOworICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSAmJiB0aGlzLl9jaGlsZHJl
bkxpc3ROb2RlLnBhcmVudE5vZGUpCisgICAgICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2Rl
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSk7CisgICAgfQor
CisgICAgc3RhdGljIHRyZWVFbGVtZW50TW91c2VEb3duKGV2ZW50KQorICAgIHsKKyAgICAgICAg
dmFyIGVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0OworICAgICAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQudHJlZUVsZW1lbnQgfHwgIWVsZW1lbnQudHJlZUVsZW1lbnQuc2VsZWN0YWJs
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZWxlbWVudC50cmVlRWxlbWVu
dC5pc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFuZ2xlKGV2ZW50KSkgeworICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQuc2VsZWN0T25Nb3VzZURvd24oZXZlbnQpOwor
ICAgIH0KKworICAgIHN0YXRpYyB0cmVlRWxlbWVudFRvZ2dsZWQoZXZlbnQpCisgICAgeworICAg
ICAgICB2YXIgZWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7CisgICAgICAgIGlmICghZWxl
bWVudCB8fCAhZWxlbWVudC50cmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2YXIgdG9nZ2xlT25DbGljayA9IGVsZW1lbnQudHJlZUVsZW1lbnQudG9nZ2xlT25DbGlj
ayAmJiAhZWxlbWVudC50cmVlRWxlbWVudC5zZWxlY3RhYmxlOworICAgICAgICB2YXIgaXNJblRy
aWFuZ2xlID0gZWxlbWVudC50cmVlRWxlbWVudC5pc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFu
Z2xlKGV2ZW50KTsKKyAgICAgICAgaWYgKCF0b2dnbGVPbkNsaWNrICYmICFpc0luVHJpYW5nbGUp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGVsZW1lbnQudHJlZUVsZW1lbnQu
ZXhwYW5kZWQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpCisgICAgICAgICAgICAg
ICAgZWxlbWVudC50cmVlRWxlbWVudC5jb2xsYXBzZVJlY3Vyc2l2ZWx5KCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgZWxlbWVudC50cmVlRWxlbWVudC5jb2xsYXBzZSgpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkKKyAgICAgICAg
ICAgICAgICBlbGVtZW50LnRyZWVFbGVtZW50LmV4cGFuZFJlY3Vyc2l2ZWx5KCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZWxlbWVudC50cmVlRWxlbWVudC5leHBhbmQoKTsK
KyAgICAgICAgfQorICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdHJlZUVsZW1lbnREb3VibGVDbGlja2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAg
dmFyIGVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0OworICAgICAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQudHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKGVsZW1lbnQudHJlZUVsZW1lbnQuaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShl
dmVudCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGVsZW1lbnQudHJlZUVs
ZW1lbnQub25kYmxjbGljaykKKyAgICAgICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQub25kYmxj
bGljay5jYWxsKGVsZW1lbnQudHJlZUVsZW1lbnQsIGV2ZW50KTsKKyAgICAgICAgZWxzZSBpZiAo
ZWxlbWVudC50cmVlRWxlbWVudC5oYXNDaGlsZHJlbiAmJiAhZWxlbWVudC50cmVlRWxlbWVudC5l
eHBhbmRlZCkKKyAgICAgICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQuZXhwYW5kKCk7CisgICAg
fQorCisgICAgY29sbGFwc2UoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9k
ZSkKKyAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJleHBh
bmRlZCIpOworICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSkKKyAgICAgICAgICAg
IHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kZWQiKTsKKwor
ICAgICAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlzLnRyZWVPdXRs
aW5lKQorICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5fdHJlZUVsZW1lbnRzRXhwYW5kZWRT
dGF0ZVt0aGlzLmlkZW50aWZpZXJdID0gZmFsc2U7CisKKyAgICAgICAgaWYgKHRoaXMub25jb2xs
YXBzZSkKKyAgICAgICAgICAgIHRoaXMub25jb2xsYXBzZSh0aGlzKTsKKworICAgICAgICBpZiAo
dGhpcy50cmVlT3V0bGluZSkKKyAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5UcmVlT3V0bGluZS5FdmVudC5FbGVtZW50RGlz
Y2xvc3VyZURpZENoYW5nZWQsIHtlbGVtZW50OiB0aGlzfSk7CisgICAgfQorCisgICAgY29sbGFw
c2VSZWN1cnNpdmVseSgpCisgICAgeworICAgICAgICB2YXIgaXRlbSA9IHRoaXM7CisgICAgICAg
IHdoaWxlIChpdGVtKSB7CisgICAgICAgICAgICBpZiAoaXRlbS5leHBhbmRlZCkKKyAgICAgICAg
ICAgICAgICBpdGVtLmNvbGxhcHNlKCk7CisgICAgICAgICAgICBpdGVtID0gaXRlbS50cmF2ZXJz
ZU5leHRUcmVlRWxlbWVudChmYWxzZSwgdGhpcywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBleHBhbmQoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQgJiYgIXRoaXMu
X3Nob3VsZFJlZnJlc2hDaGlsZHJlbiAmJiB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFNldCB0aGlzIGJlZm9yZSBvbnBvcHVsYXRlLiBT
aW5jZSBvbnBvcHVsYXRlIGNhbiBhZGQgZWxlbWVudHMgYW5kIGRpc3BhdGNoIGFuIEVsZW1lbnRB
ZGRlZCBldmVudCwKKyAgICAgICAgLy8gdGhpcyBtYWtlcyBzdXJlIHRoZSBleHBhbmRlZCBmbGFn
IGlzIHRydWUgYmVmb3JlIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLiBUaGlzIHByZXZlbnRzIHRo
ZQorICAgICAgICAvLyBwb3NzaWJpbGl0eSBvZiBhbiBpbmZpbml0ZSBsb29wIGlmIG9ucG9wdWxh
dGUgb3IgYW4gZXZlbnQgaGFuZGxlciB3ZXJlIHRvIGNhbGwgZXhwYW5kLgorCisgICAgICAgIHRo
aXMuZXhwYW5kZWQgPSB0cnVlOworICAgICAgICBpZiAodGhpcy50cmVlT3V0bGluZSkKKyAgICAg
ICAgICAgIHRoaXMudHJlZU91dGxpbmUuX3RyZWVFbGVtZW50c0V4cGFuZGVkU3RhdGVbdGhpcy5p
ZGVudGlmaWVyXSA9IHRydWU7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVu
LCByZXR1cm4uIFdlIHdpbGwgYmUgZXhwYW5kZWQgb25jZSB3ZSBoYXZlIGNoaWxkcmVuLgorICAg
ICAgICBpZiAoIXRoaXMuaGFzQ2hpbGRyZW4pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKHRoaXMudHJlZU91dGxpbmUgJiYgKCF0aGlzLl9jaGlsZHJlbkxpc3ROb2RlIHx8IHRo
aXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbikpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jaGls
ZHJlbkxpc3ROb2RlICYmIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUucGFyZW50Tm9kZSkKKyAgICAg
ICAgICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
dGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSk7CisKKyAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuTGlz
dE5vZGUgPSB0aGlzLnRyZWVPdXRsaW5lLl9jaGlsZHJlbkxpc3ROb2RlLm93bmVyRG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgib2wiKTsKKyAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUu
cGFyZW50VHJlZUVsZW1lbnQgPSB0aGlzOworICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0
Tm9kZS5jbGFzc0xpc3QuYWRkKCJjaGlsZHJlbiIpOworICAgICAgICAgICAgdGhpcy5fY2hpbGRy
ZW5MaXN0Tm9kZS5oaWRkZW4gPSB0aGlzLmhpZGRlbjsKKworICAgICAgICAgICAgdGhpcy5vbnBv
cHVsYXRlKCk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJl
bi5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuW2ldLl9hdHRhY2go
KTsKKworICAgICAgICAgICAgdGhpcy5fc2hvdWxkUmVmcmVzaENoaWxkcmVuID0gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fbGlzdEl0ZW1Ob2RlKSB7CisgICAgICAgICAg
ICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LmFkZCgiZXhwYW5kZWQiKTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLl9jaGlsZHJlbkxpc3ROb2RlICYmIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUu
cGFyZW50Tm9kZSAhPT0gdGhpcy5fbGlzdEl0ZW1Ob2RlLnBhcmVudE5vZGUpCisgICAgICAgICAg
ICAgICAgdGhpcy5wYXJlbnQuX2NoaWxkcmVuTGlzdE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2No
aWxkcmVuTGlzdE5vZGUsIHRoaXMuX2xpc3RJdGVtTm9kZS5uZXh0U2libGluZyk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSkKKyAgICAgICAgICAgIHRo
aXMuX2NoaWxkcmVuTGlzdE5vZGUuY2xhc3NMaXN0LmFkZCgiZXhwYW5kZWQiKTsKKworICAgICAg
ICBpZiAodGhpcy5vbmV4cGFuZCkKKyAgICAgICAgICAgIHRoaXMub25leHBhbmQodGhpcyk7CisK
KyAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUpCisgICAgICAgICAgICB0aGlzLnRyZWVPdXRs
aW5lLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUuRXZl
bnQuRWxlbWVudERpc2Nsb3N1cmVEaWRDaGFuZ2VkLCB7ZWxlbWVudDogdGhpc30pOworICAgIH0K
KworICAgIGV4cGFuZFJlY3Vyc2l2ZWx5KG1heERlcHRoKQorICAgIHsKKyAgICAgICAgdmFyIGl0
ZW0gPSB0aGlzOworICAgICAgICB2YXIgaW5mbyA9IHt9OworICAgICAgICB2YXIgZGVwdGggPSAw
OworCisgICAgICAgIC8vIFRoZSBJbnNwZWN0b3IgdXNlcyBUcmVlT3V0bGluZXMgdG8gcmVwcmVz
ZW50cyBvYmplY3QgcHJvcGVydGllcywgc28gcmVjdXJzaXZlIGV4cGFuc2lvbgorICAgICAgICAv
LyBpbiBzb21lIGNhc2UgY2FuIGJlIGluZmluaXRlLCBzaW5jZSBKYXZhU2NyaXB0IG9iamVjdHMg
Y2FuIGhvbGQgY2lyY3VsYXIgcmVmZXJlbmNlcy4KKyAgICAgICAgLy8gU28gZGVmYXVsdCB0byBh
IHJlY3Vyc2lvbiBjYXAgb2YgMyBsZXZlbHMsIHNpbmNlIHRoYXQgZ2l2ZXMgZmFpcmx5IGdvb2Qg
cmVzdWx0cy4KKyAgICAgICAgaWYgKG1heERlcHRoID09PSB1bmRlZmluZWQpCisgICAgICAgICAg
ICBtYXhEZXB0aCA9IDM7CisKKyAgICAgICAgd2hpbGUgKGl0ZW0pIHsKKyAgICAgICAgICAgIGlm
IChkZXB0aCA8IG1heERlcHRoKQorICAgICAgICAgICAgICAgIGl0ZW0uZXhwYW5kKCk7CisgICAg
ICAgICAgICBpdGVtID0gaXRlbS50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChmYWxzZSwgdGhpcywg
KGRlcHRoID49IG1heERlcHRoKSwgaW5mbyk7CisgICAgICAgICAgICBkZXB0aCArPSBpbmZvLmRl
cHRoQ2hhbmdlOworICAgICAgICB9CisgICAgfQorCisgICAgaGFzQW5jZXN0b3IoYW5jZXN0b3Ip
CisgICAgICAgIHsKKyAgICAgICAgaWYgKCFhbmNlc3RvcikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICB2YXIgY3VycmVudE5vZGUgPSB0aGlzLnBhcmVudDsKKyAgICAgICAg
d2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgICAgICBpZiAoYW5jZXN0b3IgPT09IGN1cnJl
bnROb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgY3VycmVu
dE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV2ZWFsKCkKKyAgICB7CisgICAgICAgIHZhciBjdXJyZW50
QW5jZXN0b3IgPSB0aGlzLnBhcmVudDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRBbmNlc3RvciAm
JiAhY3VycmVudEFuY2VzdG9yLnJvb3QpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudEFuY2Vz
dG9yLmV4cGFuZGVkKQorICAgICAgICAgICAgICAgIGN1cnJlbnRBbmNlc3Rvci5leHBhbmQoKTsK
KyAgICAgICAgICAgIGN1cnJlbnRBbmNlc3RvciA9IGN1cnJlbnRBbmNlc3Rvci5wYXJlbnQ7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5vbnJldmVhbCkKKyAgICAgICAgICAgIHRoaXMu
b25yZXZlYWwodGhpcyk7CisgICAgfQorCisgICAgcmV2ZWFsZWQoaWdub3JlSGlkZGVuKQorICAg
IHsKKyAgICAgICAgaWYgKCFpZ25vcmVIaWRkZW4gJiYgdGhpcy5oaWRkZW4pCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIGN1cnJlbnRBbmNlc3RvciA9IHRoaXMucGFy
ZW50OworICAgICAgICB3aGlsZSAoY3VycmVudEFuY2VzdG9yICYmICFjdXJyZW50QW5jZXN0b3Iu
cm9vdCkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50QW5jZXN0b3IuZXhwYW5kZWQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFpZ25vcmVIaWRkZW4g
JiYgY3VycmVudEFuY2VzdG9yLmhpZGRlbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBjdXJyZW50QW5jZXN0b3IgPSBjdXJyZW50QW5jZXN0b3IucGFyZW50Owor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2VsZWN0T25N
b3VzZURvd24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLnNlbGVjdChmYWxzZSwgdHJ1ZSk7
CisgICAgfQorCisgICAgc2VsZWN0KG9taXRGb2N1cywgc2VsZWN0ZWRCeVVzZXIsIHN1cHByZXNz
T25TZWxlY3QsIHN1cHByZXNzT25EZXNlbGVjdCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy50
cmVlT3V0bGluZSB8fCAhdGhpcy5zZWxlY3RhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmICF0aGlzLnRyZWVPdXRsaW5lLmFsbG93c1JlcGVh
dFNlbGVjdGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW9taXRGb2N1
cykKKyAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuX2NoaWxkcmVuTGlzdE5vZGUuZm9jdXMo
KTsKKworICAgICAgICAvLyBGb2N1c2luZyBvbiBhbm90aGVyIG5vZGUgbWF5IGRldGFjaCAidGhp
cyIgZnJvbSB0cmVlLgorICAgICAgICBsZXQgdHJlZU91dGxpbmUgPSB0aGlzLnRyZWVPdXRsaW5l
OworICAgICAgICBpZiAoIXRyZWVPdXRsaW5lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHRyZWVPdXRsaW5lLnByb2Nlc3NpbmdTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOworCisgICAg
ICAgIC8vIFByZXZlbnQgZGlzcGF0Y2hpbmcgYSBTZWxlY3Rpb25EaWRDaGFuZ2UgZXZlbnQgZm9y
IHRoZSBkZXNlbGVjdGVkIGVsZW1lbnQgaWYKKyAgICAgICAgLy8gaXQgd2lsbCBiZSBkaXNwYXRj
aGVkIGZvciB0aGUgc2VsZWN0ZWQgZWxlbWVudC4gVGhlIGV2ZW50IGRhdGEgaW5jbHVkZXMgYm90
aAorICAgICAgICAvLyB0aGUgc2VsZWN0ZWQgYW5kIGRlc2VsZWN0ZWQgZWxlbWVudHMsIHNvIG9u
ZSBldmVudCBpcy4KKyAgICAgICAgaWYgKCFzdXBwcmVzc09uU2VsZWN0KQorICAgICAgICAgICAg
c3VwcHJlc3NPbkRlc2VsZWN0ID0gdHJ1ZTsKKworICAgICAgICBsZXQgZGVzZWxlY3RlZEVsZW1l
bnQgPSB0cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50OworICAgICAgICBpZiAoIXRoaXMu
c2VsZWN0ZWQpIHsKKyAgICAgICAgICAgIGlmICh0cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVt
ZW50KQorICAgICAgICAgICAgICAgIHRyZWVPdXRsaW5lLnNlbGVjdGVkVHJlZUVsZW1lbnQuZGVz
ZWxlY3Qoc3VwcHJlc3NPbkRlc2VsZWN0KTsKKworICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9
IHRydWU7CisgICAgICAgICAgICB0cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50ID0gdGhp
czsKKworICAgICAgICAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSkKKyAgICAgICAgICAgICAg
ICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghc3VwcHJlc3NPblNlbGVjdCkgeworICAgICAgICAgICAgaWYgKHRo
aXMub25zZWxlY3QpCisgICAgICAgICAgICAgICAgdGhpcy5vbnNlbGVjdCh0aGlzLCBzZWxlY3Rl
ZEJ5VXNlcik7CisKKyAgICAgICAgICAgIHRyZWVPdXRsaW5lLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUuRXZlbnQuU2VsZWN0aW9uRGlkQ2hhbmdlLCB7
c2VsZWN0ZWRFbGVtZW50OiB0aGlzLCBkZXNlbGVjdGVkRWxlbWVudCwgc2VsZWN0ZWRCeVVzZXJ9
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRyZWVPdXRsaW5lLnByb2Nlc3NpbmdTZWxlY3Rpb25D
aGFuZ2UgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXZlYWxBbmRTZWxlY3Qob21pdEZvY3VzLCBz
ZWxlY3RlZEJ5VXNlciwgc3VwcHJlc3NPblNlbGVjdCwgc3VwcHJlc3NPbkRlc2VsZWN0KQorICAg
IHsKKyAgICAgICAgdGhpcy5yZXZlYWwoKTsKKyAgICAgICAgdGhpcy5zZWxlY3Qob21pdEZvY3Vz
LCBzZWxlY3RlZEJ5VXNlciwgc3VwcHJlc3NPblNlbGVjdCwgc3VwcHJlc3NPbkRlc2VsZWN0KTsK
KyAgICB9CisKKyAgICBkZXNlbGVjdChzdXBwcmVzc09uRGVzZWxlY3QpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMudHJlZU91dGxpbmUgfHwgdGhpcy50cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVF
bGVtZW50ICE9PSB0aGlzIHx8ICF0aGlzLnNlbGVjdGVkKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy50cmVl
T3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50ID0gbnVsbDsKKworICAgICAgICBpZiAodGhpcy5f
bGlzdEl0ZW1Ob2RlKQorICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5y
ZW1vdmUoInNlbGVjdGVkIik7CisKKyAgICAgICAgaWYgKCFzdXBwcmVzc09uRGVzZWxlY3QpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLm9uZGVzZWxlY3QpCisgICAgICAgICAgICAgICAgdGhpcy5v
bmRlc2VsZWN0KHRoaXMpOworCisgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLmRpc3BhdGNo
RXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUuRXZlbnQuU2VsZWN0aW9u
RGlkQ2hhbmdlLCB7ZGVzZWxlY3RlZEVsZW1lbnQ6IHRoaXN9KTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG9ucG9wdWxhdGUoKQorICAgIHsKKyAgICAg
ICAgLy8gT3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgfQorCisgICAgdHJhdmVyc2VOZXh0
VHJlZUVsZW1lbnQoc2tpcFVucmV2ZWFsZWQsIHN0YXlXaXRoaW4sIGRvbnRQb3B1bGF0ZSwgaW5m
bykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHNob3VsZFNraXAoZWxlbWVudCkgeworICAgICAg
ICAgICAgcmV0dXJuIHNraXBVbnJldmVhbGVkICYmICFlbGVtZW50LnJldmVhbGVkKHRydWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIGRlcHRoQ2hhbmdlID0gMDsKKyAgICAgICAgdmFyIGVs
ZW1lbnQgPSB0aGlzOworCisgICAgICAgIGlmICghZG9udFBvcHVsYXRlKQorICAgICAgICAgICAg
ZWxlbWVudC5vbnBvcHVsYXRlKCk7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGVs
ZW1lbnQuaGFzQ2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlblswXSAmJiAoIXNraXBVbnJldmVh
bGVkIHx8IGVsZW1lbnQuZXhwYW5kZWQpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVs
ZW1lbnQuY2hpbGRyZW5bMF07CisgICAgICAgICAgICAgICAgZGVwdGhDaGFuZ2UgKz0gMTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnQgJiYgIWVs
ZW1lbnQubmV4dFNpYmxpbmcgJiYgZWxlbWVudC5wYXJlbnQgJiYgIWVsZW1lbnQucGFyZW50LnJv
b3QgJiYgZWxlbWVudC5wYXJlbnQgIT09IHN0YXlXaXRoaW4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50OworICAgICAgICAgICAgICAgICAgICBkZXB0aENo
YW5nZSAtPSAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50KQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoZWxlbWVudCAmJiBzaG91bGRTa2lwKGVs
ZW1lbnQpKTsKKworICAgICAgICBpZiAoaW5mbykKKyAgICAgICAgICAgIGluZm8uZGVwdGhDaGFu
Z2UgPSBkZXB0aENoYW5nZTsKKworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9CisKKyAg
ICB0cmF2ZXJzZVByZXZpb3VzVHJlZUVsZW1lbnQoc2tpcFVucmV2ZWFsZWQsIGRvbnRQb3B1bGF0
ZSkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHNob3VsZFNraXAoZWxlbWVudCkgeworICAgICAg
ICAgICAgcmV0dXJuIHNraXBVbnJldmVhbGVkICYmICFlbGVtZW50LnJldmVhbGVkKHRydWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzOworCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGlmIChlbGVtZW50LnByZXZpb3VzU2libGluZykgeworICAgICAgICAgICAg
ICAgIGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzU2libGluZzsKKworICAgICAgICAgICAgICAg
IHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQuaGFzQ2hpbGRyZW4gJiYgZWxlbWVudC5leHBhbmRl
ZCAmJiAhc2hvdWxkU2tpcChlbGVtZW50KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWRv
bnRQb3B1bGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub25wb3B1bGF0ZSgp
OworICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5jaGlsZHJlbi5sYXN0VmFs
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50ICYmIGVsZW1lbnQucGFyZW50LnJvb3QgPyBudWxs
IDogZWxlbWVudC5wYXJlbnQ7CisgICAgICAgIH0gd2hpbGUgKGVsZW1lbnQgJiYgc2hvdWxkU2tp
cChlbGVtZW50KSk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorCisgICAgaXNF
dmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShldmVudCkKKyAgICB7CisgICAgICAgIGlmICgh
ZG9jdW1lbnQuY29udGFpbnModGhpcy5fbGlzdEl0ZW1Ob2RlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCB1c2UgZ2V0Q29tcHV0
ZWRTdHlsZSgpLiBGb3IgdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdXNpbmcgOjpiZWZvcmUg
Zm9yIGRpc2Nsb3N1cmUgdHJpYW5nbGUuIChodHRwOi8vd2Viay5pdC83NDQ0NikKKyAgICAgICAg
dmFyIGNvbXB1dGVkTGVmdFBhZGRpbmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9s
aXN0SXRlbU5vZGUpLmdldFByb3BlcnR5Q1NTVmFsdWUoInBhZGRpbmctbGVmdCIpLmdldEZsb2F0
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BYKTsKKyAgICAgICAgdmFyIGxlZnQgPSB0aGlz
Ll9saXN0SXRlbU5vZGUudG90YWxPZmZzZXRMZWZ0ICsgY29tcHV0ZWRMZWZ0UGFkZGluZzsKKyAg
ICAgICAgcmV0dXJuIGV2ZW50LnBhZ2VYID49IGxlZnQgJiYgZXZlbnQucGFnZVggPD0gbGVmdCAr
IHRoaXMuYXJyb3dUb2dnbGVXaWR0aCAmJiB0aGlzLmhhc0NoaWxkcmVuOworICAgIH0KK307CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UcmVl
T3V0bGluZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Ry
ZWVPdXRsaW5lLmpzCmluZGV4IGMzMDg5MWUuLjk5ZjNmN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RyZWVPdXRsaW5lLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RyZWVPdXRsaW5lLmpzCkBA
IC02NDMsNTg4ICs2NDMsMyBAQCBXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUuRXZlbnQgPSB7CiB9
OwogCiBXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUuX2tub3duVHJlZUVsZW1lbnROZXh0SWRlbnRp
ZmllciA9IDE7Ci0KLVdlYkluc3BlY3Rvci5UcmVlRWxlbWVudCA9IGNsYXNzIFRyZWVFbGVtZW50
IGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAotewotICAgIGNvbnN0cnVjdG9yKHRpdGxlLCBy
ZXByZXNlbnRlZE9iamVjdCwgaGFzQ2hpbGRyZW4pCi0gICAgewotICAgICAgICBzdXBlcigpOwot
Ci0gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7Ci0gICAgICAgIHRoaXMucmVwcmVzZW50ZWRP
YmplY3QgPSAocmVwcmVzZW50ZWRPYmplY3QgfHwge30pOwotCi0gICAgICAgIGlmICh0aGlzLnJl
cHJlc2VudGVkT2JqZWN0Ll9fdHJlZUVsZW1lbnRJZGVudGlmaWVyKQotICAgICAgICAgICAgdGhp
cy5pZGVudGlmaWVyID0gdGhpcy5yZXByZXNlbnRlZE9iamVjdC5fX3RyZWVFbGVtZW50SWRlbnRp
ZmllcjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBXZWJJ
bnNwZWN0b3IuVHJlZU91dGxpbmUuX2tub3duVHJlZUVsZW1lbnROZXh0SWRlbnRpZmllcisrOwot
ICAgICAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5fX3RyZWVFbGVtZW50SWRlbnRpZmll
ciA9IHRoaXMuaWRlbnRpZmllcjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX2hpZGRlbiA9
IGZhbHNlOwotICAgICAgICB0aGlzLl9zZWxlY3RhYmxlID0gdHJ1ZTsKLSAgICAgICAgdGhpcy5l
eHBhbmRlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7Ci0gICAgICAg
IHRoaXMuaGFzQ2hpbGRyZW4gPSBoYXNDaGlsZHJlbjsKLSAgICAgICAgdGhpcy5jaGlsZHJlbiA9
IFtdOwotICAgICAgICB0aGlzLnRyZWVPdXRsaW5lID0gbnVsbDsKLSAgICAgICAgdGhpcy5wYXJl
bnQgPSBudWxsOwotICAgICAgICB0aGlzLnByZXZpb3VzU2libGluZyA9IG51bGw7Ci0gICAgICAg
IHRoaXMubmV4dFNpYmxpbmcgPSBudWxsOwotICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUgPSBu
dWxsOwotICAgIH0KLQotICAgIC8vIE1ldGhvZHMKLQotICAgIGFwcGVuZENoaWxkKCkgeyByZXR1
cm4gV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lLnByb3RvdHlwZS5hcHBlbmRDaGlsZC5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOyB9Ci0gICAgaW5zZXJ0Q2hpbGQoKSB7IHJldHVybiBXZWJJbnNwZWN0
b3IuVHJlZU91dGxpbmUucHJvdG90eXBlLmluc2VydENoaWxkLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7IH0KLSAgICByZW1vdmVDaGlsZCgpIHsgcmV0dXJuIFdlYkluc3BlY3Rvci5UcmVlT3V0bGlu
ZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQotICAgIHJl
bW92ZUNoaWxkQXRJbmRleCgpIHsgcmV0dXJuIFdlYkluc3BlY3Rvci5UcmVlT3V0bGluZS5wcm90
b3R5cGUucmVtb3ZlQ2hpbGRBdEluZGV4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KLSAgICBy
ZW1vdmVDaGlsZHJlbigpIHsgcmV0dXJuIFdlYkluc3BlY3Rvci5UcmVlT3V0bGluZS5wcm90b3R5
cGUucmVtb3ZlQ2hpbGRyZW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQotICAgIHJlbW92ZUNo
aWxkcmVuUmVjdXJzaXZlKCkgeyByZXR1cm4gV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lLnByb3Rv
dHlwZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9Ci0K
LSAgICBnZXQgYXJyb3dUb2dnbGVXaWR0aCgpCi0gICAgewotICAgICAgICByZXR1cm4gMTA7Ci0g
ICAgfQotCi0gICAgZ2V0IHNlbGVjdGFibGUoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2hp
ZGRlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3Nl
bGVjdGFibGU7Ci0gICAgfQotCi0gICAgc2V0IHNlbGVjdGFibGUoeCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuX3NlbGVjdGFibGUgPSB4OwotICAgIH0KLQotICAgIGdldCBsaXN0SXRlbUVsZW1lbnQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2xpc3RJdGVtTm9kZTsKLSAgICB9Ci0KLSAg
ICBnZXQgdGl0bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlOwotICAgIH0K
LQotICAgIHNldCB0aXRsZSh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fdGl0bGUgPSB4OwotICAg
ICAgICB0aGlzLl9zZXRMaXN0SXRlbU5vZGVDb250ZW50KCk7Ci0gICAgICAgIHRoaXMuZGlkQ2hh
bmdlKCk7Ci0gICAgfQotCi0gICAgZ2V0IHRpdGxlSFRNTCgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fdGl0bGVIVE1MOwotICAgIH0KLQotICAgIHNldCB0aXRsZUhUTUwoeCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX3RpdGxlSFRNTCA9IHg7Ci0gICAgICAgIHRoaXMuX3NldExpc3RJdGVt
Tm9kZUNvbnRlbnQoKTsKLSAgICAgICAgdGhpcy5kaWRDaGFuZ2UoKTsKLSAgICB9Ci0KLSAgICBn
ZXQgdG9vbHRpcCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdG9vbHRpcDsKLSAgICB9
Ci0KLSAgICBzZXQgdG9vbHRpcCh4KQotICAgIHsKLSAgICAgICAgdGhpcy5fdG9vbHRpcCA9IHg7
Ci0gICAgICAgIGlmICh0aGlzLl9saXN0SXRlbU5vZGUpCi0gICAgICAgICAgICB0aGlzLl9saXN0
SXRlbU5vZGUudGl0bGUgPSB4ID8geCA6ICIiOwotICAgIH0KLQotICAgIGdldCBoYXNDaGlsZHJl
bigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5faGFzQ2hpbGRyZW47Ci0gICAgfQotCi0g
ICAgc2V0IGhhc0NoaWxkcmVuKHgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5faGFzQ2hpbGRy
ZW4gPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5faGFzQ2hpbGRy
ZW4gPSB4OwotCi0gICAgICAgIGlmICghdGhpcy5fbGlzdEl0ZW1Ob2RlKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmICh4KQotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2Rl
LmNsYXNzTGlzdC5hZGQoInBhcmVudCIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRo
aXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJwYXJlbnQiKTsKLSAgICAgICAgICAg
IHRoaXMuY29sbGFwc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuZGlkQ2hhbmdlKCk7
Ci0gICAgfQotCi0gICAgZ2V0IGhpZGRlbigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5f
aGlkZGVuOwotICAgIH0KLQotICAgIHNldCBoaWRkZW4oeCkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9oaWRkZW4gPT09IHgpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5f
aGlkZGVuID0geDsKLQotICAgICAgICBpZiAodGhpcy5fbGlzdEl0ZW1Ob2RlKQotICAgICAgICAg
ICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmhpZGRlbiA9IHRoaXMuX2hpZGRlbjsKLSAgICAgICAgaWYg
KHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUpCi0gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3RO
b2RlLmhpZGRlbiA9IHRoaXMuX2hpZGRlbjsKLQotICAgICAgICBpZiAodGhpcy50cmVlT3V0bGlu
ZSkKLSAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5UcmVlT3V0bGluZS5FdmVudC5FbGVtZW50VmlzaWJpbGl0eURpZENoYW5n
ZSwge2VsZW1lbnQ6IHRoaXN9KTsKLSAgICB9Ci0KLSAgICBnZXQgc2hvdWxkUmVmcmVzaENoaWxk
cmVuKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zaG91bGRSZWZyZXNoQ2hpbGRyZW47
Ci0gICAgfQotCi0gICAgc2V0IHNob3VsZFJlZnJlc2hDaGlsZHJlbih4KQotICAgIHsKLSAgICAg
ICAgdGhpcy5fc2hvdWxkUmVmcmVzaENoaWxkcmVuID0geDsKLSAgICAgICAgaWYgKHggJiYgdGhp
cy5leHBhbmRlZCkKLSAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7Ci0gICAgfQotCi0gICAgX2Zp
cmVEaWRDaGFuZ2UoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUpCi0gICAg
ICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLl90cmVlRWxlbWVudERpZENoYW5nZSh0aGlzKTsKLSAg
ICB9Ci0KLSAgICBkaWRDaGFuZ2UoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnRyZWVPdXRs
aW5lKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMub25OZXh0RnJhbWUuX2Zp
cmVEaWRDaGFuZ2UoKTsKLSAgICB9Ci0KLSAgICBfc2V0TGlzdEl0ZW1Ob2RlQ29udGVudCgpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX2xpc3RJdGVtTm9kZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoIXRoaXMuX3RpdGxlSFRNTCAmJiAhdGhpcy5fdGl0bGUpCi0gICAg
ICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgZWxz
ZSBpZiAodHlwZW9mIHRoaXMuX3RpdGxlSFRNTCA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0
aGlzLl9saXN0SXRlbU5vZGUuaW5uZXJIVE1MID0gdGhpcy5fdGl0bGVIVE1MOwotICAgICAgICBl
bHNlIGlmICh0eXBlb2YgdGhpcy5fdGl0bGUgPT09ICJzdHJpbmciKQotICAgICAgICAgICAgdGhp
cy5fbGlzdEl0ZW1Ob2RlLnRleHRDb250ZW50ID0gdGhpcy5fdGl0bGU7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5fdGl0bGUucGFyZW50Tm9kZSkKLSAgICAgICAgICAgICAgICB0aGlz
Ll90aXRsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3RpdGxlKTsKLSAgICAgICAgICAg
IHRoaXMuX2xpc3RJdGVtTm9kZS5hcHBlbmRDaGlsZCh0aGlzLl90aXRsZSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBfYXR0YWNoKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fbGlzdEl0
ZW1Ob2RlIHx8IHRoaXMucGFyZW50Ll9zaG91bGRSZWZyZXNoQ2hpbGRyZW4pIHsKLSAgICAgICAg
ICAgIGlmICh0aGlzLl9saXN0SXRlbU5vZGUgJiYgdGhpcy5fbGlzdEl0ZW1Ob2RlLnBhcmVudE5v
ZGUpCi0gICAgICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLnBhcmVudE5vZGUucmVtb3Zl
Q2hpbGQodGhpcy5fbGlzdEl0ZW1Ob2RlKTsKLQotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1O
b2RlID0gdGhpcy50cmVlT3V0bGluZS5fY2hpbGRyZW5MaXN0Tm9kZS5vd25lckRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImxpIik7Ci0gICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUudHJlZUVs
ZW1lbnQgPSB0aGlzOwotICAgICAgICAgICAgdGhpcy5fc2V0TGlzdEl0ZW1Ob2RlQ29udGVudCgp
OwotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLnRpdGxlID0gdGhpcy5fdG9vbHRpcCA/
IHRoaXMuX3Rvb2x0aXAgOiAiIjsKLSAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5oaWRk
ZW4gPSB0aGlzLmhpZGRlbjsKLQotICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGRyZW4pCi0g
ICAgICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5hZGQoInBhcmVudCIp
OwotICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpCi0gICAgICAgICAgICAgICAgdGhpcy5f
bGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5hZGQoImV4cGFuZGVkIik7Ci0gICAgICAgICAgICBpZiAo
dGhpcy5zZWxlY3RlZCkKLSAgICAgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NM
aXN0LmFkZCgic2VsZWN0ZWQiKTsKLQotICAgICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIFdlYkluc3BlY3Rvci5UcmVlRWxlbWVudC50cmVl
RWxlbWVudE1vdXNlRG93bik7Ci0gICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCBXZWJJbnNwZWN0b3IuVHJlZUVsZW1lbnQudHJlZUVsZW1lbnRU
b2dnbGVkKTsKLSAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5hZGRFdmVudExpc3RlbmVy
KCJkYmxjbGljayIsIFdlYkluc3BlY3Rvci5UcmVlRWxlbWVudC50cmVlRWxlbWVudERvdWJsZUNs
aWNrZWQpOwotCi0gICAgICAgICAgICBpZiAodGhpcy5vbmF0dGFjaCkKLSAgICAgICAgICAgICAg
ICB0aGlzLm9uYXR0YWNoKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG5leHRTaWJs
aW5nID0gbnVsbDsKLSAgICAgICAgaWYgKHRoaXMubmV4dFNpYmxpbmcgJiYgdGhpcy5uZXh0U2li
bGluZy5fbGlzdEl0ZW1Ob2RlICYmIHRoaXMubmV4dFNpYmxpbmcuX2xpc3RJdGVtTm9kZS5wYXJl
bnROb2RlID09PSB0aGlzLnBhcmVudC5fY2hpbGRyZW5MaXN0Tm9kZSkKLSAgICAgICAgICAgIG5l
eHRTaWJsaW5nID0gdGhpcy5uZXh0U2libGluZy5fbGlzdEl0ZW1Ob2RlOwotICAgICAgICB0aGlz
LnBhcmVudC5fY2hpbGRyZW5MaXN0Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fbGlzdEl0ZW1Ob2Rl
LCBuZXh0U2libGluZyk7Ci0gICAgICAgIGlmICh0aGlzLl9jaGlsZHJlbkxpc3ROb2RlKQotICAg
ICAgICAgICAgdGhpcy5wYXJlbnQuX2NoaWxkcmVuTGlzdE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMu
X2NoaWxkcmVuTGlzdE5vZGUsIHRoaXMuX2xpc3RJdGVtTm9kZS5uZXh0U2libGluZyk7Ci0gICAg
ICAgIGlmICh0aGlzLnNlbGVjdGVkKQotICAgICAgICAgICAgdGhpcy5zZWxlY3QoKTsKLSAgICAg
ICAgaWYgKHRoaXMuZXhwYW5kZWQpCi0gICAgICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgIH0K
LQotICAgIF9kZXRhY2goKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMub25kZXRhY2gpCi0gICAg
ICAgICAgICB0aGlzLm9uZGV0YWNoKHRoaXMpOwotICAgICAgICBpZiAodGhpcy5fbGlzdEl0ZW1O
b2RlICYmIHRoaXMuX2xpc3RJdGVtTm9kZS5wYXJlbnROb2RlKQotICAgICAgICAgICAgdGhpcy5f
bGlzdEl0ZW1Ob2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbGlzdEl0ZW1Ob2RlKTsK
LSAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUgJiYgdGhpcy5fY2hpbGRyZW5MaXN0
Tm9kZS5wYXJlbnROb2RlKQotICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUpOwotICAgIH0KLQotICAg
IHN0YXRpYyB0cmVlRWxlbWVudE1vdXNlRG93bihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBl
bGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDsKLSAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFl
bGVtZW50LnRyZWVFbGVtZW50IHx8ICFlbGVtZW50LnRyZWVFbGVtZW50LnNlbGVjdGFibGUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQudHJlZUVsZW1lbnQuaXNF
dmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShldmVudCkpIHsKLSAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBlbGVtZW50LnRyZWVFbGVtZW50LnNlbGVjdE9uTW91c2VEb3duKGV2ZW50KTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdHJlZUVsZW1lbnRUb2dnbGVkKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dmFyIGVsZW1lbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0OwotICAgICAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQudHJlZUVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dmFyIHRvZ2dsZU9uQ2xpY2sgPSBlbGVtZW50LnRyZWVFbGVtZW50LnRvZ2dsZU9uQ2xpY2sgJiYg
IWVsZW1lbnQudHJlZUVsZW1lbnQuc2VsZWN0YWJsZTsKLSAgICAgICAgdmFyIGlzSW5Ucmlhbmds
ZSA9IGVsZW1lbnQudHJlZUVsZW1lbnQuaXNFdmVudFdpdGhpbkRpc2Nsb3N1cmVUcmlhbmdsZShl
dmVudCk7Ci0gICAgICAgIGlmICghdG9nZ2xlT25DbGljayAmJiAhaXNJblRyaWFuZ2xlKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChlbGVtZW50LnRyZWVFbGVtZW50LmV4cGFu
ZGVkKSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KQotICAgICAgICAgICAgICAgIGVs
ZW1lbnQudHJlZUVsZW1lbnQuY29sbGFwc2VSZWN1cnNpdmVseSgpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQuY29sbGFwc2UoKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpCi0gICAgICAgICAgICAg
ICAgZWxlbWVudC50cmVlRWxlbWVudC5leHBhbmRSZWN1cnNpdmVseSgpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVsZW1lbnQudHJlZUVsZW1lbnQuZXhwYW5kKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIHRyZWVFbGVtZW50RG91YmxlQ2xpY2tlZChldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBl
bGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldDsKLSAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFl
bGVtZW50LnRyZWVFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChl
bGVtZW50LnRyZWVFbGVtZW50LmlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUoZXZlbnQp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChlbGVtZW50LnRyZWVFbGVtZW50
Lm9uZGJsY2xpY2spCi0gICAgICAgICAgICBlbGVtZW50LnRyZWVFbGVtZW50Lm9uZGJsY2xpY2su
Y2FsbChlbGVtZW50LnRyZWVFbGVtZW50LCBldmVudCk7Ci0gICAgICAgIGVsc2UgaWYgKGVsZW1l
bnQudHJlZUVsZW1lbnQuaGFzQ2hpbGRyZW4gJiYgIWVsZW1lbnQudHJlZUVsZW1lbnQuZXhwYW5k
ZWQpCi0gICAgICAgICAgICBlbGVtZW50LnRyZWVFbGVtZW50LmV4cGFuZCgpOwotICAgIH0KLQot
ICAgIGNvbGxhcHNlKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9saXN0SXRlbU5vZGUpCi0g
ICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kZWQi
KTsKLSAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUpCi0gICAgICAgICAgICB0aGlz
Ll9jaGlsZHJlbkxpc3ROb2RlLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZGVkIik7Ci0KLSAgICAg
ICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlOwotICAgICAgICBpZiAodGhpcy50cmVlT3V0bGluZSkK
LSAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuX3RyZWVFbGVtZW50c0V4cGFuZGVkU3RhdGVb
dGhpcy5pZGVudGlmaWVyXSA9IGZhbHNlOwotCi0gICAgICAgIGlmICh0aGlzLm9uY29sbGFwc2Up
Ci0gICAgICAgICAgICB0aGlzLm9uY29sbGFwc2UodGhpcyk7Ci0KLSAgICAgICAgaWYgKHRoaXMu
dHJlZU91dGxpbmUpCi0gICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVHJlZU91dGxpbmUuRXZlbnQuRWxlbWVudERpc2Nsb3N1
cmVEaWRDaGFuZ2VkLCB7ZWxlbWVudDogdGhpc30pOwotICAgIH0KLQotICAgIGNvbGxhcHNlUmVj
dXJzaXZlbHkoKQotICAgIHsKLSAgICAgICAgdmFyIGl0ZW0gPSB0aGlzOwotICAgICAgICB3aGls
ZSAoaXRlbSkgewotICAgICAgICAgICAgaWYgKGl0ZW0uZXhwYW5kZWQpCi0gICAgICAgICAgICAg
ICAgaXRlbS5jb2xsYXBzZSgpOwotICAgICAgICAgICAgaXRlbSA9IGl0ZW0udHJhdmVyc2VOZXh0
VHJlZUVsZW1lbnQoZmFsc2UsIHRoaXMsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ZXhwYW5kKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkICYmICF0aGlzLl9zaG91
bGRSZWZyZXNoQ2hpbGRyZW4gJiYgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAvLyBTZXQgdGhpcyBiZWZvcmUgb25wb3B1bGF0ZS4gU2luY2Ug
b25wb3B1bGF0ZSBjYW4gYWRkIGVsZW1lbnRzIGFuZCBkaXNwYXRjaCBhbiBFbGVtZW50QWRkZWQg
ZXZlbnQsCi0gICAgICAgIC8vIHRoaXMgbWFrZXMgc3VyZSB0aGUgZXhwYW5kZWQgZmxhZyBpcyB0
cnVlIGJlZm9yZSBjYWxsaW5nIHRob3NlIGZ1bmN0aW9ucy4gVGhpcyBwcmV2ZW50cyB0aGUKLSAg
ICAgICAgLy8gcG9zc2liaWxpdHkgb2YgYW4gaW5maW5pdGUgbG9vcCBpZiBvbnBvcHVsYXRlIG9y
IGFuIGV2ZW50IGhhbmRsZXIgd2VyZSB0byBjYWxsIGV4cGFuZC4KLQotICAgICAgICB0aGlzLmV4
cGFuZGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUpCi0gICAgICAgICAg
ICB0aGlzLnRyZWVPdXRsaW5lLl90cmVlRWxlbWVudHNFeHBhbmRlZFN0YXRlW3RoaXMuaWRlbnRp
Zmllcl0gPSB0cnVlOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjaGlsZHJlbiwgcmV0
dXJuLiBXZSB3aWxsIGJlIGV4cGFuZGVkIG9uY2Ugd2UgaGF2ZSBjaGlsZHJlbi4KLSAgICAgICAg
aWYgKCF0aGlzLmhhc0NoaWxkcmVuKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
ICh0aGlzLnRyZWVPdXRsaW5lICYmICghdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSB8fCB0aGlzLl9z
aG91bGRSZWZyZXNoQ2hpbGRyZW4pKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW5M
aXN0Tm9kZSAmJiB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlLnBhcmVudE5vZGUpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMu
X2NoaWxkcmVuTGlzdE5vZGUpOwotCi0gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2Rl
ID0gdGhpcy50cmVlT3V0bGluZS5fY2hpbGRyZW5MaXN0Tm9kZS5vd25lckRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoIm9sIik7Ci0gICAgICAgICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlLnBhcmVu
dFRyZWVFbGVtZW50ID0gdGhpczsKLSAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUu
Y2xhc3NMaXN0LmFkZCgiY2hpbGRyZW4iKTsKLSAgICAgICAgICAgIHRoaXMuX2NoaWxkcmVuTGlz
dE5vZGUuaGlkZGVuID0gdGhpcy5oaWRkZW47Ci0KLSAgICAgICAgICAgIHRoaXMub25wb3B1bGF0
ZSgpOwotCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5fYXR0YWNoKCk7Ci0K
LSAgICAgICAgICAgIHRoaXMuX3Nob3VsZFJlZnJlc2hDaGlsZHJlbiA9IGZhbHNlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSkgewotICAgICAgICAgICAgdGhp
cy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5hZGQoImV4cGFuZGVkIik7Ci0gICAgICAgICAgICBp
ZiAodGhpcy5fY2hpbGRyZW5MaXN0Tm9kZSAmJiB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlLnBhcmVu
dE5vZGUgIT09IHRoaXMuX2xpc3RJdGVtTm9kZS5wYXJlbnROb2RlKQotICAgICAgICAgICAgICAg
IHRoaXMucGFyZW50Ll9jaGlsZHJlbkxpc3ROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9jaGlsZHJl
bkxpc3ROb2RlLCB0aGlzLl9saXN0SXRlbU5vZGUubmV4dFNpYmxpbmcpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuTGlzdE5vZGUpCi0gICAgICAgICAgICB0aGlzLl9j
aGlsZHJlbkxpc3ROb2RlLmNsYXNzTGlzdC5hZGQoImV4cGFuZGVkIik7Ci0KLSAgICAgICAgaWYg
KHRoaXMub25leHBhbmQpCi0gICAgICAgICAgICB0aGlzLm9uZXhwYW5kKHRoaXMpOwotCi0gICAg
ICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lKQotICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lLkV2ZW50LkVs
ZW1lbnREaXNjbG9zdXJlRGlkQ2hhbmdlZCwge2VsZW1lbnQ6IHRoaXN9KTsKLSAgICB9Ci0KLSAg
ICBleHBhbmRSZWN1cnNpdmVseShtYXhEZXB0aCkKLSAgICB7Ci0gICAgICAgIHZhciBpdGVtID0g
dGhpczsKLSAgICAgICAgdmFyIGluZm8gPSB7fTsKLSAgICAgICAgdmFyIGRlcHRoID0gMDsKLQot
ICAgICAgICAvLyBUaGUgSW5zcGVjdG9yIHVzZXMgVHJlZU91dGxpbmVzIHRvIHJlcHJlc2VudHMg
b2JqZWN0IHByb3BlcnRpZXMsIHNvIHJlY3Vyc2l2ZSBleHBhbnNpb24KLSAgICAgICAgLy8gaW4g
c29tZSBjYXNlIGNhbiBiZSBpbmZpbml0ZSwgc2luY2UgSmF2YVNjcmlwdCBvYmplY3RzIGNhbiBo
b2xkIGNpcmN1bGFyIHJlZmVyZW5jZXMuCi0gICAgICAgIC8vIFNvIGRlZmF1bHQgdG8gYSByZWN1
cnNpb24gY2FwIG9mIDMgbGV2ZWxzLCBzaW5jZSB0aGF0IGdpdmVzIGZhaXJseSBnb29kIHJlc3Vs
dHMuCi0gICAgICAgIGlmIChtYXhEZXB0aCA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgbWF4
RGVwdGggPSAzOwotCi0gICAgICAgIHdoaWxlIChpdGVtKSB7Ci0gICAgICAgICAgICBpZiAoZGVw
dGggPCBtYXhEZXB0aCkKLSAgICAgICAgICAgICAgICBpdGVtLmV4cGFuZCgpOwotICAgICAgICAg
ICAgaXRlbSA9IGl0ZW0udHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQoZmFsc2UsIHRoaXMsIChkZXB0
aCA+PSBtYXhEZXB0aCksIGluZm8pOwotICAgICAgICAgICAgZGVwdGggKz0gaW5mby5kZXB0aENo
YW5nZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGhhc0FuY2VzdG9yKGFuY2VzdG9yKQotICAg
ICAgICB7Ci0gICAgICAgIGlmICghYW5jZXN0b3IpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gdGhpcy5wYXJlbnQ7Ci0gICAgICAgIHdoaWxl
IChjdXJyZW50Tm9kZSkgewotICAgICAgICAgICAgaWYgKGFuY2VzdG9yID09PSBjdXJyZW50Tm9k
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGN1cnJlbnROb2Rl
ID0gY3VycmVudE5vZGUucGFyZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldmVhbCgpCi0gICAgewotICAgICAgICB2YXIgY3VycmVudEFuY2Vz
dG9yID0gdGhpcy5wYXJlbnQ7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50QW5jZXN0b3IgJiYgIWN1
cnJlbnRBbmNlc3Rvci5yb290KSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRBbmNlc3Rvci5l
eHBhbmRlZCkKLSAgICAgICAgICAgICAgICBjdXJyZW50QW5jZXN0b3IuZXhwYW5kKCk7Ci0gICAg
ICAgICAgICBjdXJyZW50QW5jZXN0b3IgPSBjdXJyZW50QW5jZXN0b3IucGFyZW50OwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHRoaXMub25yZXZlYWwpCi0gICAgICAgICAgICB0aGlzLm9ucmV2
ZWFsKHRoaXMpOwotICAgIH0KLQotICAgIHJldmVhbGVkKGlnbm9yZUhpZGRlbikKLSAgICB7Ci0g
ICAgICAgIGlmICghaWdub3JlSGlkZGVuICYmIHRoaXMuaGlkZGVuKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciBjdXJyZW50QW5jZXN0b3IgPSB0aGlzLnBhcmVudDsK
LSAgICAgICAgd2hpbGUgKGN1cnJlbnRBbmNlc3RvciAmJiAhY3VycmVudEFuY2VzdG9yLnJvb3Qp
IHsKLSAgICAgICAgICAgIGlmICghY3VycmVudEFuY2VzdG9yLmV4cGFuZGVkKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghaWdub3JlSGlkZGVuICYmIGN1
cnJlbnRBbmNlc3Rvci5oaWRkZW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgY3VycmVudEFuY2VzdG9yID0gY3VycmVudEFuY2VzdG9yLnBhcmVudDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHNlbGVjdE9uTW91c2VE
b3duKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5zZWxlY3QoZmFsc2UsIHRydWUpOwotICAg
IH0KLQotICAgIHNlbGVjdChvbWl0Rm9jdXMsIHNlbGVjdGVkQnlVc2VyLCBzdXBwcmVzc09uU2Vs
ZWN0LCBzdXBwcmVzc09uRGVzZWxlY3QpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMudHJlZU91
dGxpbmUgfHwgIXRoaXMuc2VsZWN0YWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAodGhpcy5zZWxlY3RlZCAmJiAhdGhpcy50cmVlT3V0bGluZS5hbGxvd3NSZXBlYXRTZWxl
Y3Rpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFvbWl0Rm9jdXMpCi0g
ICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLl9jaGlsZHJlbkxpc3ROb2RlLmZvY3VzKCk7Ci0K
LSAgICAgICAgLy8gRm9jdXNpbmcgb24gYW5vdGhlciBub2RlIG1heSBkZXRhY2ggInRoaXMiIGZy
b20gdHJlZS4KLSAgICAgICAgbGV0IHRyZWVPdXRsaW5lID0gdGhpcy50cmVlT3V0bGluZTsKLSAg
ICAgICAgaWYgKCF0cmVlT3V0bGluZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
cmVlT3V0bGluZS5wcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTsKLQotICAgICAgICAv
LyBQcmV2ZW50IGRpc3BhdGNoaW5nIGEgU2VsZWN0aW9uRGlkQ2hhbmdlIGV2ZW50IGZvciB0aGUg
ZGVzZWxlY3RlZCBlbGVtZW50IGlmCi0gICAgICAgIC8vIGl0IHdpbGwgYmUgZGlzcGF0Y2hlZCBm
b3IgdGhlIHNlbGVjdGVkIGVsZW1lbnQuIFRoZSBldmVudCBkYXRhIGluY2x1ZGVzIGJvdGgKLSAg
ICAgICAgLy8gdGhlIHNlbGVjdGVkIGFuZCBkZXNlbGVjdGVkIGVsZW1lbnRzLCBzbyBvbmUgZXZl
bnQgaXMuCi0gICAgICAgIGlmICghc3VwcHJlc3NPblNlbGVjdCkKLSAgICAgICAgICAgIHN1cHBy
ZXNzT25EZXNlbGVjdCA9IHRydWU7Ci0KLSAgICAgICAgbGV0IGRlc2VsZWN0ZWRFbGVtZW50ID0g
dHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudDsKLSAgICAgICAgaWYgKCF0aGlzLnNlbGVj
dGVkKSB7Ci0gICAgICAgICAgICBpZiAodHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCkK
LSAgICAgICAgICAgICAgICB0cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50LmRlc2VsZWN0
KHN1cHByZXNzT25EZXNlbGVjdCk7Ci0KLSAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgdHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCA9IHRoaXM7Ci0K
LSAgICAgICAgICAgIGlmICh0aGlzLl9saXN0SXRlbU5vZGUpCi0gICAgICAgICAgICAgICAgdGhp
cy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5hZGQoInNlbGVjdGVkIik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIXN1cHByZXNzT25TZWxlY3QpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLm9u
c2VsZWN0KQotICAgICAgICAgICAgICAgIHRoaXMub25zZWxlY3QodGhpcywgc2VsZWN0ZWRCeVVz
ZXIpOwotCi0gICAgICAgICAgICB0cmVlT3V0bGluZS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lLkV2ZW50LlNlbGVjdGlvbkRpZENoYW5nZSwge3NlbGVj
dGVkRWxlbWVudDogdGhpcywgZGVzZWxlY3RlZEVsZW1lbnQsIHNlbGVjdGVkQnlVc2VyfSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB0cmVlT3V0bGluZS5wcm9jZXNzaW5nU2VsZWN0aW9uQ2hhbmdl
ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV2ZWFsQW5kU2VsZWN0KG9taXRGb2N1cywgc2VsZWN0
ZWRCeVVzZXIsIHN1cHByZXNzT25TZWxlY3QsIHN1cHByZXNzT25EZXNlbGVjdCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMucmV2ZWFsKCk7Ci0gICAgICAgIHRoaXMuc2VsZWN0KG9taXRGb2N1cywgc2Vs
ZWN0ZWRCeVVzZXIsIHN1cHByZXNzT25TZWxlY3QsIHN1cHByZXNzT25EZXNlbGVjdCk7Ci0gICAg
fQotCi0gICAgZGVzZWxlY3Qoc3VwcHJlc3NPbkRlc2VsZWN0KQotICAgIHsKLSAgICAgICAgaWYg
KCF0aGlzLnRyZWVPdXRsaW5lIHx8IHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVu
dCAhPT0gdGhpcyB8fCAhdGhpcy5zZWxlY3RlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7Ci0gICAgICAgIHRoaXMudHJlZU91dGxp
bmUuc2VsZWN0ZWRUcmVlRWxlbWVudCA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2xpc3RJ
dGVtTm9kZSkKLSAgICAgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3QucmVtb3Zl
KCJzZWxlY3RlZCIpOwotCi0gICAgICAgIGlmICghc3VwcHJlc3NPbkRlc2VsZWN0KSB7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5vbmRlc2VsZWN0KQotICAgICAgICAgICAgICAgIHRoaXMub25kZXNl
bGVjdCh0aGlzKTsKLQotICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lLkV2ZW50LlNlbGVjdGlvbkRpZENo
YW5nZSwge2Rlc2VsZWN0ZWRFbGVtZW50OiB0aGlzfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBvbnBvcHVsYXRlKCkKLSAgICB7Ci0gICAgICAgIC8v
IE92ZXJyaWRlbiBieSBzdWJjbGFzc2VzLgotICAgIH0KLQotICAgIHRyYXZlcnNlTmV4dFRyZWVF
bGVtZW50KHNraXBVbnJldmVhbGVkLCBzdGF5V2l0aGluLCBkb250UG9wdWxhdGUsIGluZm8pCi0g
ICAgewotICAgICAgICBmdW5jdGlvbiBzaG91bGRTa2lwKGVsZW1lbnQpIHsKLSAgICAgICAgICAg
IHJldHVybiBza2lwVW5yZXZlYWxlZCAmJiAhZWxlbWVudC5yZXZlYWxlZCh0cnVlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBkZXB0aENoYW5nZSA9IDA7Ci0gICAgICAgIHZhciBlbGVtZW50
ID0gdGhpczsKLQotICAgICAgICBpZiAoIWRvbnRQb3B1bGF0ZSkKLSAgICAgICAgICAgIGVsZW1l
bnQub25wb3B1bGF0ZSgpOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50
Lmhhc0NoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW5bMF0gJiYgKCFza2lwVW5yZXZlYWxlZCB8
fCBlbGVtZW50LmV4cGFuZGVkKSkgewotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50
LmNoaWxkcmVuWzBdOwotICAgICAgICAgICAgICAgIGRlcHRoQ2hhbmdlICs9IDE7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHdoaWxlIChlbGVtZW50ICYmICFlbGVtZW50
Lm5leHRTaWJsaW5nICYmIGVsZW1lbnQucGFyZW50ICYmICFlbGVtZW50LnBhcmVudC5yb290ICYm
IGVsZW1lbnQucGFyZW50ICE9PSBzdGF5V2l0aGluKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnQgPSBlbGVtZW50LnBhcmVudDsKLSAgICAgICAgICAgICAgICAgICAgZGVwdGhDaGFuZ2Ug
LT0gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkK
LSAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKGVsZW1lbnQgJiYgc2hvdWxkU2tpcChlbGVtZW50
KSk7Ci0KLSAgICAgICAgaWYgKGluZm8pCi0gICAgICAgICAgICBpbmZvLmRlcHRoQ2hhbmdlID0g
ZGVwdGhDaGFuZ2U7Ci0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfQotCi0gICAgdHJh
dmVyc2VQcmV2aW91c1RyZWVFbGVtZW50KHNraXBVbnJldmVhbGVkLCBkb250UG9wdWxhdGUpCi0g
ICAgewotICAgICAgICBmdW5jdGlvbiBzaG91bGRTa2lwKGVsZW1lbnQpIHsKLSAgICAgICAgICAg
IHJldHVybiBza2lwVW5yZXZlYWxlZCAmJiAhZWxlbWVudC5yZXZlYWxlZCh0cnVlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciBlbGVtZW50ID0gdGhpczsKLQotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICBpZiAoZWxlbWVudC5wcmV2aW91c1NpYmxpbmcpIHsKLSAgICAgICAgICAgICAgICBl
bGVtZW50ID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmc7Ci0KLSAgICAgICAgICAgICAgICB3aGls
ZSAoZWxlbWVudCAmJiBlbGVtZW50Lmhhc0NoaWxkcmVuICYmIGVsZW1lbnQuZXhwYW5kZWQgJiYg
IXNob3VsZFNraXAoZWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkb250UG9w
dWxhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9ucG9wdWxhdGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGFzdFZhbHVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGVs
ZW1lbnQgPSBlbGVtZW50LnBhcmVudCAmJiBlbGVtZW50LnBhcmVudC5yb290ID8gbnVsbCA6IGVs
ZW1lbnQucGFyZW50OwotICAgICAgICB9IHdoaWxlIChlbGVtZW50ICYmIHNob3VsZFNraXAoZWxl
bWVudCkpOwotCi0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0KLQotICAgIGlzRXZlbnRX
aXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUoZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIWRvY3Vt
ZW50LmNvbnRhaW5zKHRoaXMuX2xpc3RJdGVtTm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgdXNlIGdldENvbXB1dGVkU3R5
bGUoKS4gRm9yIHRoYXQgd2UgbmVlZCB0byBnZXQgcmlkIG9mIHVzaW5nIDo6YmVmb3JlIGZvciBk
aXNjbG9zdXJlIHRyaWFuZ2xlLiAoaHR0cDovL3dlYmsuaXQvNzQ0NDYpCi0gICAgICAgIHZhciBj
b21wdXRlZExlZnRQYWRkaW5nID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fbGlzdEl0
ZW1Ob2RlKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJwYWRkaW5nLWxlZnQiKS5nZXRGbG9hdFZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCk7Ci0gICAgICAgIHZhciBsZWZ0ID0gdGhpcy5fbGlz
dEl0ZW1Ob2RlLnRvdGFsT2Zmc2V0TGVmdCArIGNvbXB1dGVkTGVmdFBhZGRpbmc7Ci0gICAgICAg
IHJldHVybiBldmVudC5wYWdlWCA+PSBsZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IGxlZnQgKyB0aGlz
LmFycm93VG9nZ2xlV2lkdGggJiYgdGhpcy5oYXNDaGlsZHJlbjsKLSAgICB9Ci19Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>