@hpcc-js/comms 2.82.3 → 2.83.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/index.es6.js +1093 -639
  2. package/dist/index.es6.js.map +1 -1
  3. package/dist/index.js +1091 -637
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.min.js +1 -1
  6. package/dist/index.min.js.map +1 -1
  7. package/dist/index.node.js +1092 -638
  8. package/dist/index.node.js.map +1 -1
  9. package/dist/index.node.min.js +1 -1
  10. package/dist/index.node.min.js.map +1 -1
  11. package/lib-es6/__package__.js +2 -2
  12. package/lib-es6/ecl/dfuWorkunit.js +58 -1
  13. package/lib-es6/ecl/dfuWorkunit.js.map +1 -1
  14. package/lib-es6/ecl/query.js +102 -34
  15. package/lib-es6/ecl/query.js.map +1 -1
  16. package/lib-es6/ecl/workunit.js +9 -1
  17. package/lib-es6/ecl/workunit.js.map +1 -1
  18. package/lib-es6/services/fileSpray.js +5 -1
  19. package/lib-es6/services/fileSpray.js.map +1 -1
  20. package/lib-es6/services/wsdl/FileSpray/v1.25/FileSpray.js +116 -0
  21. package/lib-es6/services/wsdl/FileSpray/v1.25/FileSpray.js.map +1 -0
  22. package/package.json +2 -2
  23. package/src/__package__.ts +2 -2
  24. package/src/ecl/dfuWorkunit.ts +56 -3
  25. package/src/ecl/query.ts +65 -42
  26. package/src/ecl/workunit.ts +10 -1
  27. package/src/services/fileSpray.ts +11 -96
  28. package/src/services/wsdl/FileSpray/v1.25/FileSpray.ts +1040 -0
  29. package/types/__package__.d.ts +2 -2
  30. package/types/ecl/dfuWorkunit.d.ts +11 -3
  31. package/types/ecl/dfuWorkunit.d.ts.map +1 -1
  32. package/types/ecl/query.d.ts +5 -2
  33. package/types/ecl/query.d.ts.map +1 -1
  34. package/types/ecl/workunit.d.ts.map +1 -1
  35. package/types/services/fileSpray.d.ts +9 -95
  36. package/types/services/fileSpray.d.ts.map +1 -1
  37. package/types/services/wsdl/FileSpray/v1.25/FileSpray.d.ts +856 -0
  38. package/types/services/wsdl/FileSpray/v1.25/FileSpray.d.ts.map +1 -0
  39. package/types-3.4/__package__.d.ts +2 -2
  40. package/types-3.4/ecl/dfuWorkunit.d.ts +11 -3
  41. package/types-3.4/ecl/query.d.ts +5 -2
  42. package/types-3.4/services/fileSpray.d.ts +9 -95
  43. package/types-3.4/services/wsdl/FileSpray/v1.25/FileSpray.d.ts +856 -0
@@ -46,8 +46,8 @@ var tmp__namespace = /*#__PURE__*/_interopNamespace(tmp);
46
46
  var trustwave = "\nTrustwave Secure Global Extended Validation CA, Level 1\nSecureTrust Corporation\n00F6F61CE4A3635BB0CA8AACEEFCB2D0F0\n-----BEGIN CERTIFICATE-----\nMIIE+DCCA+CgAwIBAgIRAPb2HOSjY1uwyoqs7vyy0PAwDQYJKoZIhvcNAQELBQAw\nSjELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRkwFwYDVQQDExBTZWN1cmUgR2xvYmFsIENBMB4XDTE1MDgxMjIwMTcyOVoXDTI1\nMDgwOTIwMTcyOVowgbgxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQ\nMA4GA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJ\nbmMuMUAwPgYDVQQDEzdUcnVzdHdhdmUgU2VjdXJlIEdsb2JhbCBFeHRlbmRlZCBW\nYWxpZGF0aW9uIENBLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdh\ndmUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx6D45slgLGq8\n2G/NPFnuFscv7UM1eRoQyx3h0DdSTfoRvHkkNv4Gf6OudZDOXqwV86v/SjcNEP87\nnjMOEqQ7dKQPtiYzEkK0MOrjbRySFC5dvCTI9T8tnBgFpYA9YXwbpUqXxEi0Ayoq\nhA7UQhS7Q+YGrVwZaJ6LiWrQw+x8ACPLqEvPmMZhrxagKwrsKbylMsAQ1ljk8X74\nJ76TSxi/AZpxos7tHD0XbO8elXFZexfsgPLDRpMs6jREVeQj1jVCWLtg9twiXzcI\naUCchBsTSc92WGkKwBnH70dlL2N8kT/BNe3tAsXuBpZRILANY59jLrLnHEJNfado\nt6ZpougolQIDAQABo4IBaDCCAWQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4E\nFgQUx33qXRmrVNT6P+ZKc956sjwdbC4wDgYDVR0PAQH/BAQDAgGGMD0GA1UdIAQ2\nMDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUu\nY29tL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNv\nbS9TR0NBLmNybDBsBggrBgEFBQcBAQRgMF4wJQYIKwYBBQUHMAGGGWh0dHA6Ly9v\nY3NwLnRydXN0d2F2ZS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9zc2wudHJ1c3R3\nYXZlLmNvbS9pc3N1ZXJzL1NHQ0EuY3J0MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggr\nBgEFBQcDATAfBgNVHSMEGDAWgBSvRATCQX5Ig9tOOQLs7IR65s7JpDANBgkqhkiG\n9w0BAQsFAAOCAQEAkn/4wKQRLo41fDRkZtfF+3o8JtUmfQXf2zoo9Ll29hhCiz8k\nBOpIek9MrFd/cdNgUw1nckIi+J3udyFrbO5p64JBvtc0K4kAOPFSKpHssFcnRLPx\nFXgGxXq6ohD4Py+xaEApslYFfMy89N6DKs/v/10/+/xD831RFEUMUoQxBimsmmNf\n+cLoMwF5bpoSz9JcWqCmSlK0Nla1dPphaoA/MObLN2iQPpeM3yF5dTUm1tPxe39W\nOlr6nLU1xO+yRDrlGLXrVDP1l1/qGVuwi+xufIAcdFycLLBjSSNX7LOIK3tbva7A\nWctLUs+qhIlUrbPyFERm7YOY4SttWdozeYFNfg==\n-----END CERTIFICATE-----\n\nSecureTrust Domain Validation CA, Level 1\nSecureTrust Corporation\n06F1EC00E80B1BAF9870A7C4B6CBE401A32D68\n-----BEGIN CERTIFICATE-----\nMIIEfzCCA2egAwIBAgITBvHsAOgLG6+YcKfEtsvkAaMtaDANBgkqhkiG9w0BAQsF\nADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRp\nb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE5MDEyOTEyNTk1OVoXDTI5\nMDEyOTEyNTk1OVowfDEyMDAGA1UEAxMpU2VjdXJlVHJ1c3QgRG9tYWluIFZhbGlk\nYXRpb24gQ0EsIExldmVsIDExFDASBgNVBAoTC1NlY3VyZVRydXN0MRAwDgYDVQQH\nEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMwggEiMA0G\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjRHBw8iIivBBrfE6HqexQK0oMt2Y/\nx8jO3fN96KEazZwEoGidwloRBk2Q7VfVvZ0ZDk+qwJZGLZJLS1ntGaZLH4/Iel+r\nPnp36IVF7J5MNDB+K81a/y9svEMfDu0p3FdlBUyhHvizZ/zFNP3tolmQfZ7T0mGL\n7lutlNAzFYoVTUlVeF5cSC8Yca906TEKyizYXuXcY8Diee+t+fQRHmSI5Hk5kyXD\nYFWcf2tXEfdkuFlDjJ7HPdFyfJzrNjD+cbqt8R5rZKnK1GNVP1dXm0cIYS+BMlMa\nCC1yF18oygbnOZLw5fDv9bxs4MOgF8E/Iypw0hLQHVkuD8wAvxVgPsqvAgMBAAGj\nggEsMIIBKDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNV\nHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4EFgQUYt6tehfefLfDfCMXo7Em5UbXOvQw\nHwYDVR0jBBgwFoAUQjK2FvoE/f5dS3rD/fdMQB1aQ68wQQYDVR0gBDowODA2BgRV\nHSAAMC4wLAYIKwYBBQUHAgEWIGh0dHBzOi8vY2VydHMuc2VjdXJldHJ1c3QuY29t\nL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9T\nVENBLmNybDA2BggrBgEFBQcBAQQqMCgwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3Nw\nLnRydXN0d2F2ZS5jb20vMA0GCSqGSIb3DQEBCwUAA4IBAQAHXPYhl+++o//di2Qm\naWGmC1ijxbGbKA4jOSDRvQfxlWOVkqPF11Dpxz+V8Rxw7QFFVoJ5mHpfoXtQOijV\ntsCFknxTKgzQeArNkZrkXBNpYOJAcuc5v0eX0OllBWgVdIvZRl2TM5L/u1WFrlPr\nqwWdEYTkinQwgAHXVV/7WZi6c4StcqNnlw93mlvN6Vspzaf/mWtcYp+aqT9vrqHt\nyNR1k8Ri5eIRPIU0B8woiXTj3bifLg6/O217SY5cWwQKCMFsa6nGWoRVCJ0JJXa0\nZ+m3mPQD2OcW5YMrynhL2VWohyfZAjB8l/NZaeRT7M+vki56fxbx3Bk2lqy8Z1Zz\nWd5m\n-----END CERTIFICATE-----\n\nSecureTrust Extended Validation CA, Level 1\nSecureTrust Corporation\n06F1EC00E31E46D341B2B2633CE480D915F81D\n-----BEGIN CERTIFICATE-----\nMIIEizCCA3OgAwIBAgITBvHsAOMeRtNBsrJjPOSA2RX4HTANBgkqhkiG9w0BAQsF\nADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRp\nb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE5MDEyOTEyNTk1OVoXDTI5\nMDEyOTEyNTk1OVowfjE0MDIGA1UEAxMrU2VjdXJlVHJ1c3QgRXh0ZW5kZWQgVmFs\naWRhdGlvbiBDQSwgTGV2ZWwgMTEUMBIGA1UEChMLU2VjdXJlVHJ1c3QxEDAOBgNV\nBAcTB0NoaWNhZ28xETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJVUzCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS6vRtFpCJBJ7zJODH07Y3k54Qn\nVIBhnQmmWoqFqzCVMX97GAyAfzjcQrhl/TNiJiRCrVQWPI4n0R8eUd91Ab1Qzfsr\nnp+0NRbagVDa6+nF0KcNxbSZ6/iZQ7Ac3HyhCvJS2rH2CVYlzqdsrxDXcZk69jOO\ndPV8+w+7eNIn34BKpB/ZF7iXApDoAKG81kg1VtpGOxJhxTsKLuJmURT4pQjtZqF+\nF6rN64j5T2DOK0gOA4G7BLoTdOQuXkPS38LXKgZ43lKqEenjmiOaMF/XuLYzaHrW\nGYgCM2wJsykgdB9hCsTTEwsHRZzt2q9mLBDvYYWVhql1/kR4K/RN4JdESEECAwEA\nAaOCATYwggEyMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMB0G\nA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAdBgNVHQ4EFgQUA6uAxlUKKpWh\n4Nf+GubAynjMsJYwHwYDVR0jBBgwFoAUQjK2FvoE/f5dS3rD/fdMQB1aQ68wQQYD\nVR0gBDowODA2BgRVHSAAMC4wLAYIKwYBBQUHAgEWIGh0dHBzOi8vY2VydHMuc2Vj\ndXJldHJ1c3QuY29tL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1\nc3R3YXZlLmNvbS9TVENBLmNybDA2BggrBgEFBQcBAQQqMCgwJgYIKwYBBQUHMAGG\nGmh0dHA6Ly9vY3NwLnRydXN0d2F2ZS5jb20vMA0GCSqGSIb3DQEBCwUAA4IBAQB1\nfzAmGGmtbJyIvOfjq2McCpUoYkXAq6JTN51+nb9NDAihhDoTKMde+801bC1/l54h\nxPPm4HImM6GK6LFckDew/FGwbdRbEznUOJ7uVL5ploNBIjte23kTBUZa9fx3+aXK\nhUTAipSyPtNjnOwVVBVXzrMynfMhdsyRRe7gLXNFYCXIxtks3IkIpuYnc86NAuV9\nnBLFlZzgmbAsW+tMc5QsNvQJ9pQ539K8cqZaM+HFCScreDERxmNtHHbMw+hCa2yL\nOj4ntekgWLO8KQbE0lPUNLIM17QK8aktJavj+GezBztKMmJJwhVYQy9nxS388ApX\nxcZsEgIzOCeH0SOWg4FA\n-----END CERTIFICATE-----\n\nSecureTrust Organization Validation CA, Level 1\nSecureTrust Corporation\n06F1EC00E58E9ADD372C871D25843FDAB852D9\n-----BEGIN CERTIFICATE-----\nMIIEkDCCA3igAwIBAgITBvHsAOWOmt03LIcdJYQ/2rhS2TANBgkqhkiG9w0BAQsF\nADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRp\nb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE5MDEyOTEyNTk1OVoXDTI5\nMDEyOTEyNTk1OVowgYIxODA2BgNVBAMTL1NlY3VyZVRydXN0IE9yZ2FuaXphdGlv\nbiBWYWxpZGF0aW9uIENBLCBMZXZlbCAxMRQwEgYDVQQKEwtTZWN1cmVUcnVzdDEQ\nMA4GA1UEBxMHQ2hpY2FnbzERMA8GA1UECBMISWxsaW5vaXMxCzAJBgNVBAYTAlVT\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4QVBCdYToXFIfzd1SQfi\nTEgg1bwHXM2cE2VsyxwWK8NEFH8zMYdKy2hYOAjbfpm0xE6q4TQzS8KL2vAtCNyY\nVrwX7d3IvKR25H5s1LUDeQXSl1JBBZCtgJf2caJcwaYa6n2pZ0EKt3wBB+QteSFn\n57ENB37T13y7Nn8gCt9ZZaPYqRWxHcPaIWO3CVzQZ3tXjCLqzJMCV2KqhK85DZk3\nwo33Zb6cyYDkerDbWyric+10dJ/wdgE49dkfyZxVxEGpHg1SCSJdHjGb4z85Zx/u\neBpxBS6g3dfrkDjjT3MUxyNS4EaRTZp7o/2EqVCYDWJDM1HcOZL64kyWyi0d9jqA\n7wIDAQABo4IBNjCCATIwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMC\nAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB0GA1UdDgQWBBR/QuNI\nbljpLrlhyGp3tPcDuM1qWjAfBgNVHSMEGDAWgBRCMrYW+gT9/l1LesP990xAHVpD\nrzBBBgNVHSAEOjA4MDYGBFUdIAAwLjAsBggrBgEFBQcCARYgaHR0cHM6Ly9jZXJ0\ncy5zZWN1cmV0cnVzdC5jb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2Ny\nbC50cnVzdHdhdmUuY29tL1NUQ0EuY3JsMDYGCCsGAQUFBwEBBCowKDAmBggrBgEF\nBQcwAYYaaHR0cDovL29jc3AudHJ1c3R3YXZlLmNvbS8wDQYJKoZIhvcNAQELBQAD\nggEBAIwGM/ejz4Hbjf7Vc11gS8jzf+BwtZq9N4t1Nibj4rIDsW2G2jDE0S7fCN2m\nMhq76xkfnwfXhBbXDEKz6rj/M0G2u1kHw4Y8ZtKSzYEyRtgpeBFm4qU6voCSREpD\nFJXsL+Go2/YLRSE6xkWVSocklxppx4hi5o/RVdMMQept6ooOSFzBpH5XZYUoblKi\n99Yj0FUe8egIa9qSts42TObTpH1YVRMDnH3k2MNX3rcgPf9v/QO9Cf8W6RQ2+X3R\nCaYMPdL5OIKh4RGYjxXe3LpgiTKBWik/ZWTFL5sZSjetrJFl50NONzTc8E+BJtrx\nVCHAI2OcWyloxrYd4zMipw0YjDw=\n-----END CERTIFICATE-----\n\nTrustwave Domain Validation SHA256 CA, Level 1\nSecureTrust Corporation\n00DDEDF6F64298490E694C36EFA422C88F\n-----BEGIN CERTIFICATE-----\nMIIE7jCCA9agAwIBAgIRAN3t9vZCmEkOaUw276QiyI8wDQYJKoZIhvcNAQELBQAw\nSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTAeFw0xNDEwMDExOTIyMzJaFw0yNDA5\nMjgxOTIyMzJaMIGvMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAO\nBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5j\nLjE3MDUGA1UEAxMuVHJ1c3R3YXZlIERvbWFpbiBWYWxpZGF0aW9uIFNIQTI1NiBD\nQSwgTGV2ZWwgMTEfMB0GCSqGSIb3DQEJARYQY2FAdHJ1c3R3YXZlLmNvbTCCASIw\nDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNr4Z91k7AKM+Pz5XXWTIuVeMts\nPU2W/pI4WdEHG9Zab1EOWPLbthB6fzUJLLLBBk1wy2OM9yG1HywB/CwfGHcoKS8Z\n/efGV+ZKTzEpIestriUWx7wUnzxKzGML48Xv7sNuY1Crru5Hgce1Ax5uOfP7OB6t\norbMunvKQC10WcSrqFg6LapZ0UhgGmQzdjYguOBF6WZJR3QLghQaNrSUZuA6neXR\ncUsBgmzrxiEVHyzt+lmnYFMFvKVwGOyIZ2RU2LAFthS6UDDrSLGsJysxc1MK1Sti\n/VP8e8wj9rJdmiWNfA+lz6hDAPzRbv+WVJNoHEGbIx8rai+rVMiLy2HIbPsCAwEA\nAaOCAWkwggFlMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPQc4jqvtqTk\n2emd/u8cd6VjPe+IMA4GA1UdDwEB/wQEAwIBhjBIBgNVHSAEQTA/MD0GDysGAQQB\nge0YAwMDAwQFAzAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUu\nY29tL0NBMDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNv\nbS9TVENBLmNybDBsBggrBgEFBQcBAQRgMF4wJQYIKwYBBQUHMAGGGWh0dHA6Ly9v\nY3NwLnRydXN0d2F2ZS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9zc2wudHJ1c3R3\nYXZlLmNvbS9pc3N1ZXJzL1NUQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8G\nA1UdIwQYMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMA0GCSqGSIb3DQEBCwUAA4IB\nAQAjoDrTysopn7t+onDZ6rZSQW8rYlWZQpSiNHrq9xAAcMExrhcN0bQC9OQ+VRci\noMDascvwum7hVkyh2w2Ad7lC3Ir9gIuA8HycjqQJ4t1eSF3geYyf8lp259ztZ/TO\nxSAwJ9W0Szc8fslOA0SWlyA3lnRVcYVu54Idc1dPXXBxwlQ1NUCYgcsXZs+6QjLL\nYhYL85DhuitQSddoYemGpfVJnaYH9tBiWmwtzwc4qsVqTsKEJ/1zYAy2GrEAv8sB\nFKSfMNMopBmmDA8/aCIW/tH6KTD2DC15QQwL6yAUbSa5mhzFSA9O8zmF881YwBVG\nn+z3isMPClgpNw/eWSbaSLZ+\n-----END CERTIFICATE-----\n\nTrustwave Domain Validation SHA256 CA, Level 1\nSecureTrust Corporation\n390A3F7EECA8FB4347DCAF701861662B\n-----BEGIN CERTIFICATE-----\nMIIE/zCCA+egAwIBAgIQOQo/fuyo+0NH3K9wGGFmKzANBgkqhkiG9w0BAQsFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE2MDkwMTE0MzUzMloXDTI0MDky\nOTE0MzUzMlowga8xCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4G\nA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMu\nMTcwNQYDVQQDEy5UcnVzdHdhdmUgRG9tYWluIFZhbGlkYXRpb24gU0hBMjU2IENB\nLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29tMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs2vhn3WTsAoz4/PlddZMi5V4y2w9\nTZb+kjhZ0Qcb1lpvUQ5Y8tu2EHp/NQksssEGTXDLY4z3IbUfLAH8LB8YdygpLxn9\n58ZX5kpPMSkh6y2uJRbHvBSfPErMYwvjxe/uw25jUKuu7keBx7UDHm458/s4Hq2i\ntsy6e8pALXRZxKuoWDotqlnRSGAaZDN2NiC44EXpZklHdAuCFBo2tJRm4Dqd5dFx\nSwGCbOvGIRUfLO36WadgUwW8pXAY7IhnZFTYsAW2FLpQMOtIsawnKzFzUwrVK2L9\nU/x7zCP2sl2aJY18D6XPqEMA/NFu/5ZUk2gcQZsjHytqL6tUyIvLYchs+wIDAQAB\no4IBezCCAXcwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU9BziOq+2pOTZ\n6Z3+7xx3pWM974gwDgYDVR0PAQH/BAQDAgGGMDIGA1UdHwQrMCkwJ6AloCOGIWh0\ndHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9TVENBLmNybDA9BgNVHSAENjA0MDIGBFUd\nIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9zc2wudHJ1c3R3YXZlLmNvbS9DQTBs\nBggrBgEFBQcBAQRgMF4wJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnRydXN0d2F2\nZS5jb20wNQYIKwYBBQUHMAKGKWh0dHA6Ly9zc2wudHJ1c3R3YXZlLmNvbS9pc3N1\nZXJzL1NUQ0EuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFEIy\nthb6BP3+XUt6w/33TEAdWkOvMBsGA1UdEQQUMBKBEGNhQHRydXN0d2F2ZS5jb20w\nDQYJKoZIhvcNAQELBQADggEBAFcdG0/3P/CkeGb76tz/mn1viDZiftD05i9Jw70k\nH9ulRwdCHgzhSZVN5zHvG919oHA9WHbxH04J+iAnVl1+FjoDNN+A+2icy2WXqH9w\ngaNUGyUwLdo0JCfgUeGbrCF6WUYCj47pS7zAY02CdGlstZZsqouXK3RnOMKOD3Dq\nf5kiSh56KvhW/F0OZY7PAbdV79LVAiSTiAFdoe/jMjmj8fqXOiCIjllqH/O9/DAm\nRwQStFpauwR+nBbFhq4sYwlZQvJ0NvIxN5JOTECTkMM+X21kf8mrwRdxBfw0YEPa\nUTeZhFr48Fwvnt4jpo7gqpJzt7jjsbWPd1FHtey2Q8zmSHY=\n-----END CERTIFICATE-----\n\nTrustwave Extended Validation SHA256 CA, Level 1\nSecureTrust Corporation\n00C1BD27B383958D0D8BCA5E4F08D009D9\n-----BEGIN CERTIFICATE-----\nMIIFGDCCBACgAwIBAgIRAMG9J7ODlY0Ni8peTwjQCdkwDQYJKoZIhvcNAQELBQAw\nSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTAeFw0xNDEwMTMxODE3MzlaFw0yNDEw\nMTAxODE3MzlaMIGxMQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAO\nBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5j\nLjE5MDcGA1UEAxMwVHJ1c3R3YXZlIEV4dGVuZGVkIFZhbGlkYXRpb24gU0hBMjU2\nIENBLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29tMIIB\nIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAre9mHLqiv689FWIk7PaeQLuW\nos8ldRX4rNLHeD7/X7JrTfaXuIQaLfrUODtyRaZs0LtJsEHgpr7dUonDIH69PjBP\nrHg+hBLu7ob4udEx3J03NQSdnR/fqPY0ZMH2NP7e9TFSKKctZ/SmzA8jGclVmdiT\nGg1bTx6xgWuPWq9OprIQSgkP5NRe1GeTQ7U/E1zxLqaw6PeQWjESHPGeilyw0jr6\nqVyHM5ack9ps60sN3CKNGushyaQe3w2bYxRJ9RRH/sILCAmmTbjc/cXrGQMGdaYt\naiGnXbc45r39cqfbynZ71hPPNEtFbOdqk3C7I8vrhIHiKaAtFkTMRSWmHHk4HwID\nAQABo4IBkTCCAY0wEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU5eQkWRUy\nJ8kgs0ICbLDvMt6bIFowDgYDVR0PAQH/BAQDAgGGMGYGA1UdIARfMF0wDAYKKwYB\nBAGB7RgDADAOBgxghkgBhv1kAQECBAEwPQYPKwYBBAGB7RgDAwMDBAMDMCowKAYI\nKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5jb20vQ0EwMgYDVR0fBCsw\nKTAnoCWgI4YhaHR0cDovL2NybC50cnVzdHdhdmUuY29tL1NUQ0EuY3JsMGwGCCsG\nAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudHJ1c3R3YXZlLmNv\nbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lzc3VlcnMv\nU1RDQS5jcnQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB8GA1UdIwQY\nMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMA0GCSqGSIb3DQEBCwUAA4IBAQCly1p1\nrvcOlRS+ODBLb2kYHd4q+cXDl65X+IQ7hOlXg9dpa7CzSAGNNpzhyYMbE48mB/RE\nBXxbZkMzEhWPFj+4jdGNsmX0zjEWatJWsnNVxpA7hDR0iZssezu86oDQ/sbVoaXj\n0a5jB2cZsnMS5287CNDk5i+ImruhbMAYV9sadliXoDy3y01Sv+FLMx39C5UhYhWU\ngvoT9igbSCoc/DPOukEDqsnKMmDqTf3JzuFI1CbJcR6M8R1hAda4mZrxIdGcbT8R\nXp8JQ8Vuv/+plPMcAiZ2Bzed0hPVr5A1Mz8K8w9OyORGlRwjWS65jsr26bjMCcfj\npvuAANrc0Alu4nJC\n-----END CERTIFICATE-----\n\nTrustwave Extended Validation SHA256 CA, Level 1\nSecureTrust Corporation\n35962F305C5A0BEC400D4E9877528C65\n-----BEGIN CERTIFICATE-----\nMIIFCzCCA/OgAwIBAgIQNZYvMFxaC+xADU6Yd1KMZTANBgkqhkiG9w0BAQsFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE2MDkwMTE0MzUzNFoXDTI0MDky\nOTE0MzUzNFowgbExCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4G\nA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMu\nMTkwNwYDVQQDEzBUcnVzdHdhdmUgRXh0ZW5kZWQgVmFsaWRhdGlvbiBTSEEyNTYg\nQ0EsIExldmVsIDExHzAdBgkqhkiG9w0BCQEWEGNhQHRydXN0d2F2ZS5jb20wggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCt72YcuqK/rz0VYiTs9p5Au5ai\nzyV1Ffis0sd4Pv9fsmtN9pe4hBot+tQ4O3JFpmzQu0mwQeCmvt1SicMgfr0+ME+s\neD6EEu7uhvi50THcnTc1BJ2dH9+o9jRkwfY0/t71MVIopy1n9KbMDyMZyVWZ2JMa\nDVtPHrGBa49ar06mshBKCQ/k1F7UZ5NDtT8TXPEuprDo95BaMRIc8Z6KXLDSOvqp\nXIczlpyT2mzrSw3cIo0a6yHJpB7fDZtjFEn1FEf+wgsICaZNuNz9xesZAwZ1pi1q\nIaddtzjmvf1yp9vKdnvWE880S0Vs52qTcLsjy+uEgeIpoC0WRMxFJaYceTgfAgMB\nAAGjggGFMIIBgTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTl5CRZFTIn\nySCzQgJssO8y3psgWjAOBgNVHQ8BAf8EBAMCAYYwMgYDVR0fBCswKTAnoCWgI4Yh\naHR0cDovL2NybC50cnVzdHdhdmUuY29tL1NUQ0EuY3JsMD0GA1UdIAQ2MDQwMgYE\nVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29tL0NB\nMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AudHJ1c3R3\nYXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lz\nc3VlcnMvU1RDQS5jcnQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB8G\nA1UdIwQYMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMBsGA1UdEQQUMBKBEGNhQHRy\ndXN0d2F2ZS5jb20wDQYJKoZIhvcNAQELBQADggEBAGUMIDkrvlMJ0wHLuP3lkneC\nwGU6mZ3g17jyU2RJwhRinYctraryG7Jh20DQ9/ppTHoxTIADw2JDsC5ByplabteQ\nnLghrl17K1b6PO+rzWA/NFKVwo6u8Gh7Lz0iUuit7ZBD4eKcRedxRZcPQlnD9KTR\nIs94SRpootsuCv/Y5b+1FMPV1KrYtbco9yEVlaNEWLpmiEsqvLjxiWEmt71rzz+0\nS59OtA/ihnbGP9Xrnhe7wf1ybCNOO5gZQMKr/OszfLZ7oVKACGOPLlcSZRRW98gA\nszE+1ZvlHkdjamfTSs4yMvUorYn9NhXnjAWl28NuD9m3FPiE2O50ezEDnHTiaOQ=\n-----END CERTIFICATE-----\n\nTrustwave Organization Validation SHA256 CA, Level 1\nSecureTrust Corporation\n4B2C6646F434775B67DF34A04DD504E6\n-----BEGIN CERTIFICATE-----\nMIIE/TCCA+WgAwIBAgIQSyxmRvQ0d1tn3zSgTdUE5jANBgkqhkiG9w0BAQsFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTE0MTAwMTE5MjIzNloXDTI0MDky\nODE5MjIzNlowgbUxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJbGxpbm9pczEQMA4G\nA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMu\nMT0wOwYDVQQDEzRUcnVzdHdhdmUgT3JnYW5pemF0aW9uIFZhbGlkYXRpb24gU0hB\nMjU2IENBLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29t\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA49OohlJHBJ/juiQTmibO\nS28pHvCCp1bPOc6elQ62DCYE/A14JXUtI8yaUc9nFjh6dNzR7KjFPEq/qDplQl7f\n1Tvh5ifBNNP2wQ6e820TWlPO4HhR/5g4+3iFmJ1N7kFrxDp1/P8e3+9lcJsXckXC\ntfFkQ9slogJqnaCsipgdrH4gQhicFAL5YqHw2AKfctZLSPpxhI3xISMV/lIQwZPW\nI2221v9ALckokh5pW6dTK8x8yNUUye1zt5msWzqunfBjVYVUj5/LXu46hS99Mfxu\n80ARJRyHsXIuHbMzwVXGqKVPZfKAdHBl5e3ElCjNwNy+Hgi09vS7PoAUhjCf/wbO\nnQIDAQABo4IBczCCAW8wEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUys4d\nGAN3HhzzfFiymnCoCIAW9K4wDgYDVR0PAQH/BAQDAgGGMEgGA1UdIARBMD8wPQYP\nKwYBBAGB7RgDAwMDBAQDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0\nd2F2ZS5jb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC50cnVzdHdh\ndmUuY29tL1NUQ0EuY3JsMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0\ncDovL29jc3AudHJ1c3R3YXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50\ncnVzdHdhdmUuY29tL2lzc3VlcnMvU1RDQS5jcnQwHQYDVR0lBBYwFAYIKwYBBQUH\nAwIGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFEIythb6BP3+XUt6w/33TEAdWkOvMA0G\nCSqGSIb3DQEBCwUAA4IBAQBN/Qb6x5VSQHIt/FqvXAkjfCI7jwXGzRoxThavUqv0\npJr1azXKv2L2ye9Sl4OCqiDHZ8ZJZ/Z19Ae1yvGTpG++0O5dWTHZ8qy/JSj17Mg1\nvWiefVpJKtkYflzhC9B9/eB3QuKVTRKDqm1ZC9kbm3MWOwtnEOw4WURWS1X2v4Hv\n2AJaXe11ZRqjx7/c6U50tYp3eVpRDCw7bOIXRffLG0oibhjHiEu8dgq7KkTSrx9m\nQFS6T2x9GLiJKhj2mEfPuGr73TfBPyKsRBymOpG67LThKVnwoUfH3pghA6VkZp5Z\n1Vm6AcDm+eelf5XPvZtNve4evLVPYueA3TmGyxXh1m2d\n-----END CERTIFICATE-----\n\nTrustwave Organization Validation SHA256 CA, Level 1\nSecureTrust Corporation\n0092B8744F71CED0E26C72A3D8D5D925B2\n-----BEGIN CERTIFICATE-----\nMIIFEDCCA/igAwIBAgIRAJK4dE9xztDibHKj2NXZJbIwDQYJKoZIhvcNAQELBQAw\nSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9u\nMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTAeFw0xNjA5MDExNDM1MzVaFw0yNDA5\nMjkxNDM1MzVaMIG1MQswCQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAO\nBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5j\nLjE9MDsGA1UEAxM0VHJ1c3R3YXZlIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIFNI\nQTI1NiBDQSwgTGV2ZWwgMTEfMB0GCSqGSIb3DQEJARYQY2FAdHJ1c3R3YXZlLmNv\nbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPTqIZSRwSf47okE5om\nzktvKR7wgqdWzznOnpUOtgwmBPwNeCV1LSPMmlHPZxY4enTc0eyoxTxKv6g6ZUJe\n39U74eYnwTTT9sEOnvNtE1pTzuB4Uf+YOPt4hZidTe5Ba8Q6dfz/Ht/vZXCbF3JF\nwrXxZEPbJaICap2grIqYHax+IEIYnBQC+WKh8NgCn3LWS0j6cYSN8SEjFf5SEMGT\n1iNtttb/QC3JKJIeaVunUyvMfMjVFMntc7eZrFs6rp3wY1WFVI+fy17uOoUvfTH8\nbvNAESUch7FyLh2zM8FVxqilT2XygHRwZeXtxJQozcDcvh4ItPb0uz6AFIYwn/8G\nzp0CAwEAAaOCAYUwggGBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMrO\nHRgDdx4c83xYsppwqAiAFvSuMA4GA1UdDwEB/wQEAwIBhjAyBgNVHR8EKzApMCeg\nJaAjhiFodHRwOi8vY3JsLnRydXN0d2F2ZS5jb20vU1RDQS5jcmwwPQYDVR0gBDYw\nNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5j\nb20vQ0EwbAYIKwYBBQUHAQEEYDBeMCUGCCsGAQUFBzABhhlodHRwOi8vb2NzcC50\ncnVzdHdhdmUuY29tMDUGCCsGAQUFBzAChilodHRwOi8vc3NsLnRydXN0d2F2ZS5j\nb20vaXNzdWVycy9TVENBLmNydDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH\nAwEwHwYDVR0jBBgwFoAUQjK2FvoE/f5dS3rD/fdMQB1aQ68wGwYDVR0RBBQwEoEQ\nY2FAdHJ1c3R3YXZlLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAC0OvN7/UJBcRDXch\nA4b2qJo7mBD05+XR96N7vucMaanz26CnUxs1o8DcBckpqyEXCxdOanIr+/UJNbBL\nXLJCzNLJEJcgV9TjbVu33eQR23yMuXD+cZsqLMF+L5IIM47W8dlwKJvMy0xs7Jb1\nS3NOIhcoVu+XPzRsgKv8Yi2B6l278RfzegiCx4vYJv0pBjFzizEiFH9bWTYIOlIJ\nJSM57hoICgjCTS8BoEgndwWIyc/nEmlYaUwmCo9QynY+UmW1WPWmVITEJPMdMK6A\nZqvvaWmuHJ6/vURaz+Hoc5D3z0yJDDCkv52bXV04ZoF6cbcWry7JvNA+djvay/4B\nRR4SZQ==\n-----END CERTIFICATE-----\n\nSecureTrust TWG Secure Email CA, Level 2\nTrustwave Holdings, Inc.\n072F30E9C25181828DAC4F5F7DE4AFC87AD132\n-----BEGIN CERTIFICATE-----\nMIIG2zCCBMOgAwIBAgITBy8w6cJRgYKNrE9ffeSvyHrRMjANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMjAxMDA4MDY0OTQwWhcNMzAxMDA4MDY0ODQwWjBWMQswCQYDVQQGEwJVUzEUMBIG\nA1UEChMLU2VjdXJlVHJ1c3QxMTAvBgNVBAMTKFNlY3VyZVRydXN0IFRXRyBTZWN1\ncmUgRW1haWwgQ0EsIExldmVsIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\nAoICAQCcD5Wc7H480gOv3ae6SELBls0oNOvpw1ZFjK55nLw+W6PhgqTGNEHlO/Ga\nWt13yS1iO1/WzRaUc2XsFRGcjv3QIfDZb+6UzhL1LL9ZE8zcs0B6fepn4smQg1yK\ngtAWGoD70Z9kEBtypkG23sO5xIiRACJWgRWVZ/891pQBBz+ElCxUnIyDGghHlWCD\nzn5dLoBIVic69Pfpi384uNoNfHV/WATUQEEnwY+5yMMUALAWrRD6Jeh5R4m9qKxG\nUlrO9ObDebK9mFEJvrCPtkTIWT1He4ZD58Lt0NIkaItQ7KsKF9wgwH7BTsRGwQXb\nP6/0LvfO8UDRKNE/4C39u9dwUw/Zpu2iNXTadVWBtaSDsrPFVb5rBu+pvn4l4Hw5\njtySyHAOWn4mhuxDXMuKBtaoTi/qF94d7N0CbqPdN9WSN79Cy2O0BexTGHSJVndX\nEbKyn96b5STPshKVpG9DmUekfnDtnHR9dmH74a05X/A8k/XeSJWXphM6NvyZap2A\nWiIkrS7MsfwnCdZlX+9WGY2qHxnm4Y6JdNah0qxozBbQHkqHsSN4k8O7zr2lfZhC\nuarm0Q1t6tjsmp7PUh26u6PCe0m+MctIrD6ZckUzZeuPduRb55K2p8MxjQSVNH1S\nJ2aaHp77qOYV+rvHXIL7le4OR5lDWyzYtXLc8u17/kLbUtgnmQIDAQABo4IBbTCC\nAWkwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAww\nCgYIKwYBBQUHAwQwHQYDVR0OBBYEFKpD9MNsQCriSoEcg6nez7XhG7bOMB8GA1Ud\nIwQYMBaAFJngGWcNYtt2s9o9uFvo/ULSMQ6HMEEGA1UdIAQ6MDgwNgYEVR0gADAu\nMCwGCCsGAQUFBwIBFiBodHRwczovL2NlcnRzLnNlY3VyZXRydXN0LmNvbS9DQTA1\nBgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vY3JsLnNlY3VyZXRydXN0LmNvbS9UV0dD\nQS5jcmwwdAYIKwYBBQUHAQEEaDBmMCgGCCsGAQUFBzABhhxodHRwOi8vb2NzcC5z\nZWN1cmV0cnVzdC5jb20vMDoGCCsGAQUFBzAChi5odHRwOi8vY2VydHMuc2VjdXJl\ndHJ1c3QuY29tL2lzc3VlcnMvVFdHQ0EuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBb\ntCXryLFewOafyNENB3NzgAQVVztwaWSyvF5FYSqav95JKcoHZzy3wG7aKlTPtGnq\n1QzJst03qPmZJ3j63obz2AvfEEzLEMlsPmOTy3B9oIrNzd2QhpGW1oF6pIgGB/VP\n5zh7U2ibUC+zRLmihwt+j2+7NBbuLbPozgxDTWh2f9O4rJb5bv98Q8RdbGrypBb9\nhOhDvmNCCfjSe+Q8myqsvawEG5p7s8gsIK/V3xbyqDihXjsGc7xeEWNftlU91jBL\nKPRbrLmXhhWnHJjYs4y5IHu735HA3aAT4TqURS9dGHOMVDRumkFpLqR2W7ptpDki\nOtIFZjO5smU29OD4AlcNUXqQuKEFasyTtkRlORnWhU37c36HB8dc57xWQKOf8pMq\n7lK+ublO9G4mO1Aqr9mioTN4oMONFJG4W5dWwG9baNg682ZACkvPaw45MqSztL3A\nKb4s2cDTWu/D34hV3oafkTwu8B7B2mFZnWRJ9q4akPmZF45uw4RZx2ALaYGGGs67\n+r5qS300As9ONg8hxfVkFQSHOc00IiBkgi3OpoCofEKTgDwZwHVqOJyyPjk6H9Sh\nZANmUOT2mGDLwl86Ar5bTu8ipzlsyDYQMFjho7WaVs8I5OXyVdONXDYLIOtpITGT\n1fRcXFzxYHhrNuFwrdj2zBVyvVD4O6xV97/9nv2Eng==\n-----END CERTIFICATE-----\n\nTrustwave Global Domain Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9AD30465CF22697F246B101EC92953B\n-----BEGIN CERTIFICATE-----\nMIIHCDCCBPCgAwIBAgITBs6C2a0wRlzyJpfyRrEB7JKVOzANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBjjE3MDUGA1UEAxMuVHJ1c3R3\nYXZlIEdsb2JhbCBEb21haW4gVmFsaWRhdGlvbiBDQSwgTGV2ZWwgMTEhMB8GA1UE\nChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAwDgYDVQQHEwdDaGljYWdvMREw\nDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMwggIiMA0GCSqGSIb3DQEBAQUA\nA4ICDwAwggIKAoICAQChh5brvvk/kFUZwhlUhqdsUmsMCBjzYqBBLnTyNrKPr4nd\nS9s2h2JvA+9TY7NnJc/Mq1eN5V6zqvbn/LN3c8W06f76xrVvFEKs5SzCefUS/V3Z\nC18dgwXXFrP+RgfK2kqfTHGIPrWoRSnUiLn3iUNEBtJ06oXjAqAMnAyL5AzD+eHm\nZzRK/yCw/gMPnVp2S7Dstka607fS4fW9Sl33mOMNwJRxEjQWHHR25PAb4muP6wjN\nvmoLMgiDMKseHSFVtC7SpmO89PsrUV6MahKJrZcAfquAyoO1zR2c2eGaCI/m8oSx\n3B7KiMZJ3NZims/siMp/5szemsutf36WJ31nmr7PqLJGJdVpoxbLckWIhZnNYSFm\n/pTutpNONqpyYC2gGSXdw5LuxU61913SbAPpk8DZiHi3WslHBo26ghXG++sgJUGj\nhtKZhiYlp8uD21WTP6/60wngpXyCtt9cpHxW1lXmqcxwe2J4/2S3xjHz1dC6BKxb\nr61HCPVrbTD90CZUpMI8JPdsVbz5eegv+SIyybHxZe4S0D9Kv5pgWfqdXf0BAiJC\nTbGwYmFr4uisKhkfMThyOgWEH+CRBzQqdZREQ5lTIlVyzi3jGPuu9Q6brAS9U9Ue\nQhUwX8TtY8Igfo8HlhjugDpy6WvDYQ9i+tG3AC6v8sJLdOOU83Lr+2C1LEF5ZwID\nAQABo4IBYTCCAV0wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYw\nEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFIaZQQzOP7aMcEnlkwfwhgcd\nLXqVMB8GA1UdIwQYMBaAFJngGWcNYtt2s9o9uFvo/ULSMQ6HMD0GA1UdIAQ2MDQw\nMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29t\nL0NBMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9U\nV0dDQS5jcmwwbgYIKwYBBQUHAQEEYjBgMCYGCCsGAQUFBzABhhpodHRwOi8vb2Nz\ncC50cnVzdHdhdmUuY29tLzA2BggrBgEFBQcwAoYqaHR0cDovL3NzbC50cnVzdHdh\ndmUuY29tL2lzc3VlcnMvVFdHQ0EuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAmn0jp\n+lNp188KxjKQZtpJ3mixLmuqGdH6SVpRs40BYQg/68xOPH3C6AJ17tqE6IwZMW9s\nlgiO4B7khR3ESA6Sct3zmkA8woR/KJVzzegjscHhtQUifQ+Eb9Gi0ORNnetGV+5g\n5vlrFZMptBRGUxXMo2xa+Z/NTyimpMopfXj7qCW/nQWQbzvkQGchK9IokyqV2wra\ntX68/P3zleG+LLwzoJd5AhHYSXWrIRJpClZHN+LQKkbI3MYW7+upo/1e9HEmFKxu\n5SFV3nuQm5wSOsz/ZtIL1AS8IoZYxcSe1Q/yuV9GjnxtL1jkPbzsBx4eBGxUrcIe\nsBat6SI8G58uHTpIPpqUxRYsg8w0FdjK3kNBB5QWDeXiDxzqIRzA0iE1kHeTXRZ3\n7qgGXUcce7ciW5KqeRApjQbD5BSZG2EKkQ7aaOhvxK0LiuxHZnjPW4/fdEcaCuku\nMT5qMDiF2U85V9BvanEy/xkYn4I2UeK4EdSXe7q6j+CIJz9WnoLQDbIS04GqIWe0\nVRQUlx3idUWYSJU/SG8KrEHhlJLmgSjshCwtT6qo4vHwT5WcWDLIbjMqgL1iQ6JS\n4gxXuOGia3d0I4/wec5x23EWwx9V8BtDJ8N7NDeRNmZ8RXOHSYJsVQYIQuFUEXE1\nv3WMSIxuyQMyR5FYSCG9xnKRFzNmiPngDil5IA==\n-----END CERTIFICATE-----\n\nTrustwave Global Extended Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D99FB3B180C281020314A2D1C7640017\n-----BEGIN CERTIFICATE-----\nMIIHFDCCBPygAwIBAgITBs6C2Z+zsYDCgQIDFKLRx2QAFzANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBkDE5MDcGA1UEAxMwVHJ1c3R3\nYXZlIEdsb2JhbCBFeHRlbmRlZCBWYWxpZGF0aW9uIENBLCBMZXZlbCAxMSEwHwYD\nVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xEDAOBgNVBAcTB0NoaWNhZ28x\nETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEB\nBQADggIPADCCAgoCggIBAMRO7orfWjfmz6Y6qoAmDp2lqCJcdvbRQ8w18rl1JE3j\nf/1CScZLrnLg4RDm8JiRcvFuvoMXn/XNUWy5ICG57tjG2nO7jvBuXfvbdkGA+foN\n3yJKMTX/PmmGlN4qpzFtsB0kLrP14/0TRGeJB7qDfAFH0ReFk0ftQobLBGBOpEca\n+bv+LhcTe40/uNUSK2yQ9GpIw200mcsD3B9c29Im4tSZFuA2o1vnEeizYW5M4sPX\nHu7p5ZCxjJrXVNqWUPM38rShhMUNL5uaVYWoi7TG5JXbg0Lmt2nq1k5nnig9Yp/W\nlAFooWXjKQzHf/z+XZ57bqPe7SzLW5pzpZdSmY2VRybAwEmzMjCXgHiP2ru3TpAD\n+giakPDoz3ZmbKjwYKZ5PmnOmXx0Z2GloO37MjamjPor/+fZohfyma7VAQE8znJt\nI9MVoRN3G3gW/tuT3jXfzYdFBlfGoO7OYyLN1LK5YBKH2qXrCHD8rG2DauBt7U+w\nfOvwfkp8FcdTnfQ92Xe65U3Xdu0eCgQJbChxZtWhhLnbY6xhmwAWyJ1my+Im72Kx\nGP/XcA8SH2sz6/k0782BjRckDuFpVVpTNYl9wqe/tuOrZhWPapOsRlfsDTuhgGu5\n2inM9sU3CAzmFE85zoRQFZQSof3kFN2rUZF20bmTak99cBNLli6/ja3+KntpZ08d\nAgMBAAGjggFrMIIBZzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nhjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwHQYDVR0OBBYEFHM4IMZH\nbabGL3tQ4EDe3sedR958MB8GA1UdIwQYMBaAFJngGWcNYtt2s9o9uFvo/ULSMQ6H\nMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50\ncnVzdHdhdmUuY29tL0NBMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwudHJ1\nc3R3YXZlLmNvbS9UV0dDQS5jcmwwbgYIKwYBBQUHAQEEYjBgMCYGCCsGAQUFBzAB\nhhpodHRwOi8vb2NzcC50cnVzdHdhdmUuY29tLzA2BggrBgEFBQcwAoYqaHR0cDov\nL3NzbC50cnVzdHdhdmUuY29tL2lzc3VlcnMvVFdHQ0EuY3J0MA0GCSqGSIb3DQEB\nCwUAA4ICAQBwnSHECaf+hfGrm3Cg+aRr57ytoOSzI1DjlTNcM7k4uSt6kJRPHJ4c\nldIujMaETV52RgE6ykaMGkuIwQOIsLI6SXwjU1f5gXFUbDTS3KTWc/jwQeyLmdOe\nhvc+wBSFv8d10Sx/Qiti8mqsTqr0+N94Cx01+SkiWxWWoSZOAPkz8DMQGlD4yndK\nceTMGtQ03cLnD/36Mv6tz/Ds9l/OExrJGGxHD0tmYwYwBZpPHm7BBY2ZzycVxLcg\n+uuggcX1pg5MhJ1rDyod+7X+ilvTgH7ftHCmxvR7viMLwSUuytZ05zb2teRQgU+8\niWnPEHO/ADm5VD1Zb5Rx0579/YEENBJtGUPPJzo+JEpiZIOIlwZ69ETWWNCLZr0V\nvoi+SDl65cr+dgR9JreJ2I4W9FzS45ruxYEC8LGKEmV46sAk1YLbnIBmhehAKy9t\nP8RVz3QXYJ6rLOAuXF7R2eVV0SqfivW9bVzvBZTUTFsbdSMBAAF1BJjdRqYR63DI\ncQASY7CRoUiak1NTgPkzeV8VcNJmUt8c2eKJIifqBAjquH6+6UXs9Ol0aMPn6v0y\nB+TSuxhX2sSrpna9QcOh/QyoR5Hvcd81rZSbMc7yasKoUMXviotV1SfEqs3RU5Ts\nwnU4NHPn5ITRiuh5VMuvB/VnjnPC953u5uqAGtZ8BkC7X9cu5E0rMQ==\n-----END CERTIFICATE-----\n\nTrustwave Global Organization Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A69703AEFE5D37D18858C74026B004\n-----BEGIN CERTIFICATE-----\nMIIHGDCCBQCgAwIBAgITBs6C2aaXA67+XTfRiFjHQCawBDANBgkqhkiG9w0BAQsF\nADCBiDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCElsbGlub2lzMRAwDgYDVQQHDAdD\naGljYWdvMSEwHwYDVQQKDBhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xMTAvBgNV\nBAMMKFRydXN0d2F2ZSBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcN\nMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBlDE9MDsGA1UEAxM0VHJ1c3R3\nYXZlIEdsb2JhbCBPcmdhbml6YXRpb24gVmFsaWRhdGlvbiBDQSwgTGV2ZWwgMTEh\nMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAwDgYDVQQHEwdDaGlj\nYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMwggIiMA0GCSqGSIb3\nDQEBAQUAA4ICDwAwggIKAoICAQC8BzZtA3eWejFOGHc2DLgex6P471dLWIIHSlrF\nY4a2BCtzAd/VlpQ3gslWnTgthOmK2/hCc+WSaOLPVZzZf3lGnxbb0+Y87Kx+nS1m\nIfJ/4OR6o8XLMLoCTAI1jsWxggiB4NBMqsW2xXQ5VAvBb66KEQYbshNlRpTbtBFq\nEed4YIvCdjbnCUOy1zubgVHUVyCFHzN4XPjEQCtT5vZM576Lt10Je9COnqG0CtPU\nQNP2tjnSmOOYdWcVRZ0UqXUl2fMBfmSDHd8902foigjpP04AYYbq6AetqEgqdvQP\nxz5pVbZqzy8UrE/s/raJLFyTuIAYVt18M0whSgWzGgUWkq2xRqbfn7b1hd56dwRb\nR7pKc51FyTbeocnKlYLC+Dlzp7iKQ3Pb7WHRwLhaJB7u4CzwqhUxHc0xplMYsq92\nMbZ6WN5L5mI7hxY8gLMOR7vNX9CKz9XcYRS01iCDe5Y/9muW8bzGyNXLX1YaHAy4\n+6ncksb3Y3RUKj3f0+T4nbiRISmGazravJKSssBLP3kPa9h5aX+Vd00eL+Q7sXrh\nFO7xz+oWtOL5rfVszyc87JQvjw1sDHA710nViqzUE1bJZNe61EXdCb/RV+Wsu+rO\ncAMSr5x2j/wW875sh+U3EJmTzdEBUBxHnBD2mDTyonT7wL47TRXTEO1IaS4mVbnv\no0jWvQIDAQABo4IBazCCAWcwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E\nBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB0GA1UdDgQWBBS3\n/VNzOCaKcKuTyoupCOrH07fj/TAfBgNVHSMEGDAWgBSZ4BlnDWLbdrPaPbhb6P1C\n0jEOhzA9BgNVHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9z\nc2wudHJ1c3R3YXZlLmNvbS9DQTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js\nLnRydXN0d2F2ZS5jb20vVFdHQ0EuY3JsMG4GCCsGAQUFBwEBBGIwYDAmBggrBgEF\nBQcwAYYaaHR0cDovL29jc3AudHJ1c3R3YXZlLmNvbS8wNgYIKwYBBQUHMAKGKmh0\ndHA6Ly9zc2wudHJ1c3R3YXZlLmNvbS9pc3N1ZXJzL1RXR0NBLmNydDANBgkqhkiG\n9w0BAQsFAAOCAgEAFXwfmELpEGKUguzVTMix79XbUnkfLa7IXcqBOrwOWEF1V8F1\nxGY6jLlUTtoEXRYZwCpqOK/i4m4nmWCYE45O7URR8nqeFffceTi62t4Yvh6LkC9g\nUnj3aChLiO/Zdxilq6vfsXO0mKafrGtZXwjyskS250Pj9DsANs57QqvYN4hqbplJ\nzc95p09OUvEhPiyRyx6FyY28U+3X6+mSNMJWd4Nhr+3HtvmItLIXP2JCLxuYtu/K\n6nKcpFCFFKeF8K3PWpjsAb0hfXL4vc3WfyCYsQnvJeisyAh7yEuge2iDwl1/xXIo\nEOAyyYAxvy5UnzcAa0Z2lwjptve+jZ4gQ+A1ioYUavR3pSfBNzuJW30nZCWFadKc\nNXOPoAPkK8JLxgRBH3JboeBCXG6xgy/pXrTjyhW7/SS+Z+7eKkp9jgdTVQ12yUtc\nCiYWUuM4l240D/z+s03WOEcLTluESwFkJhzs3D9i5crTL72uSkDDmlh8HXoPAyYO\nl3Mn9cGWhd8M8IeQRXmb6O7gvvQZDoSXDVDbjBKcW1lFpi0wBxIBzLaOi4CX4OhI\nJHJ/H3duOMaltuzXLSLkc26jwHzMeq8seQRSXraXJi1t5oBKlmEWFEgq6xlH7mLW\n3TOqS19cuiSWl/CsnlLGaW8MH5YHmk+MJxQE1BcLBs6ciapvHlhLEd9EUpU=\n-----END CERTIFICATE-----\n\nSecureTrust TWG ECDSA P-256 Secure Email CA, Level 2\nTrustwave Holdings, Inc.\n072F30E9C4627001DECFEBF6BF5D3B1066D7E3\n-----BEGIN CERTIFICATE-----\nMIIDbTCCAxKgAwIBAgITBy8w6cRicAHez+v2v107EGbX4zAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMjAxMDA4MDY0OTQxWhcNMzAxMDA4MDY0ODQxWjBiMQswCQYDVQQGEwJV\nUzEUMBIGA1UEChMLU2VjdXJlVHJ1c3QxPTA7BgNVBAMTNFNlY3VyZVRydXN0IFRX\nRyBFQ0RTQSBQLTI1NiBTZWN1cmUgRW1haWwgQ0EsIExldmVsIDIwWTATBgcqhkjO\nPQIBBggqhkjOPQMBBwNCAAT4KazLm94aiykBGkNQVkBrjmK77RlP627D2n3EwK3s\n49ljRkN6wiTWXHx3jPD5BBE/7mWhGWnphzGu1Deb6yzco4IBdTCCAXEwEgYDVR0T\nAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUH\nAwQwHQYDVR0OBBYEFHMQ2nwjQr8tFHfBImxM7ct8lbBYMB8GA1UdIwQYMBaAFKNB\nBqyQbdFK63WlShCZs7Ghi0r3MEEGA1UdIAQ6MDgwNgYEVR0gADAuMCwGCCsGAQUF\nBwIBFiBodHRwczovL2NlcnRzLnNlY3VyZXRydXN0LmNvbS9DQTA5BgNVHR8EMjAw\nMC6gLKAqhihodHRwOi8vY3JsLnNlY3VyZXRydXN0LmNvbS9UV0dQMjU2Q0EuY3Js\nMHgGCCsGAQUFBwEBBGwwajAoBggrBgEFBQcwAYYcaHR0cDovL29jc3Auc2VjdXJl\ndHJ1c3QuY29tLzA+BggrBgEFBQcwAoYyaHR0cDovL2NlcnRzLnNlY3VyZXRydXN0\nLmNvbS9pc3N1ZXJzL1RXR1AyNTZDQS5jcnQwCgYIKoZIzj0EAwIDSQAwRgIhAN8G\nPwKUpMgV3LZjq7fuKS96f15BrwBjmTlKhOwgX83BAiEA9WpWhzRRoKeJGAqqXrMk\nZ8RE9xRtOFBqYdv9H5CeTVk=\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-256 Domain Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9AF531423847B85FB677932AAF80508\n-----BEGIN CERTIFICATE-----\nMIIDmDCCAz+gAwIBAgITBs6C2a9TFCOEe4X7Z3kyqvgFCDAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBmjFDMEEGA1UEAxM6\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTI1NiBEb21haW4gVmFsaWRhdGlvbiBD\nQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAw\nDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMw\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATWpfTIQFPkZIoXXMDN9utRU+AbLGcg\nBmLA06x2qqdcpCMlYFoJhuRWzYCiqz1mKrAvNlQYkgoHfemk92sf8iaro4IBaTCC\nAWUwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAww\nCgYIKwYBBQUHAwEwHQYDVR0OBBYEFA/DUGGZflb1xtmcOeiDWJAHuhq0MB8GA1Ud\nIwQYMBaAFKNBBqyQbdFK63WlShCZs7Ghi0r3MD0GA1UdIAQ2MDQwMgYEVR0gADAq\nMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29tL0NBMDcGA1Ud\nHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9UV0dQMjU2Q0Eu\nY3JsMHIGCCsGAQUFBwEBBGYwZDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudHJ1\nc3R3YXZlLmNvbS8wOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2wudHJ1c3R3YXZlLmNv\nbS9pc3N1ZXJzL1RXR1AyNTZDQS5jcnQwCgYIKoZIzj0EAwIDRwAwRAIgICvA5ttD\n0oeUcd37iYvoQ7iMIpZINp4e1j5NrlI3UnYCIEZhimm9+1dUWAfx9ZkGmIu0HiHR\nzEZifAHbPM3SJbRu\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-256 Extended Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A20A3797CD878EB3DAA41D08680AF7\n-----BEGIN CERTIFICATE-----\nMIIDpjCCA0ugAwIBAgITBs6C2aIKN5fNh46z2qQdCGgK9zAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBnDFFMEMGA1UEAxM8\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTI1NiBFeHRlbmRlZCBWYWxpZGF0aW9u\nIENBLCBMZXZlbCAxMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4x\nEDAOBgNVBAcTB0NoaWNhZ28xETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJV\nUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKXHfFxFDVI6uYWZlWciFFKtYzuJ\n+IBhot3PQGikE3sjU8d9dARkZCkInqmDyP/+XiLzgrYPMy7NS8lZcRsE5p2jggFz\nMIIBbzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUE\nFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwHQYDVR0OBBYEFAwlVqqzYgakv+7gGxtX\nzC8s9g1QMB8GA1UdIwQYMBaAFKNBBqyQbdFK63WlShCZs7Ghi0r3MD0GA1UdIAQ2\nMDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUu\nY29tL0NBMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNv\nbS9UV0dQMjU2Q0EuY3JsMHIGCCsGAQUFBwEBBGYwZDAmBggrBgEFBQcwAYYaaHR0\ncDovL29jc3AudHJ1c3R3YXZlLmNvbS8wOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2wu\ndHJ1c3R3YXZlLmNvbS9pc3N1ZXJzL1RXR1AyNTZDQS5jcnQwCgYIKoZIzj0EAwID\nSQAwRgIhALahroq1NScrFeCvG5uMgMKH/bo190D+Mkh2ZIojrUOfAiEAosFXFE73\n0WLRPjX2uOkLhXuA4cQEb1R1oeGDH4MNVOo=\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-256 Organization Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A8B57C104843994DACD79E28633E5F\n-----BEGIN CERTIFICATE-----\nMIIDqDCCA0+gAwIBAgITBs6C2ai1fBBIQ5lNrNeeKGM+XzAKBggqhkjOPQQDAjCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAyNTYgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBoDFJMEcGA1UEAxNA\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTI1NiBPcmdhbml6YXRpb24gVmFsaWRh\ndGlvbiBDQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJ\nbmMuMRAwDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UE\nBhMCVVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQmHWo0mogvX1J61xysTqsn\n6qV06wxUH68/QJ2aDIka6beTrDoTZv3mIkyPxFTPy+9idjgSAERlBsDirgO2/NiY\no4IBczCCAW8wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwHQYD\nVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMB0GA1UdDgQWBBSv+Ju8XTSl3tA+\nFCldDY4lrbClhTAfBgNVHSMEGDAWgBSjQQaskG3RSut1pUoQmbOxoYtK9zA9BgNV\nHSAENjA0MDIGBFUdIAAwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9zc2wudHJ1c3R3\nYXZlLmNvbS9DQTA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vY3JsLnRydXN0d2F2\nZS5jb20vVFdHUDI1NkNBLmNybDByBggrBgEFBQcBAQRmMGQwJgYIKwYBBQUHMAGG\nGmh0dHA6Ly9vY3NwLnRydXN0d2F2ZS5jb20vMDoGCCsGAQUFBzAChi5odHRwOi8v\nc3NsLnRydXN0d2F2ZS5jb20vaXNzdWVycy9UV0dQMjU2Q0EuY3J0MAoGCCqGSM49\nBAMCA0cAMEQCIGa3JyBYlXxRN5GIIulLaDxnANNRnY4j1Et166CCC5h+AiAVUlzJ\nIJTfUDBU7jnSTKSw/F+bLIPvaC6frMZv0h+RTA==\n-----END CERTIFICATE-----\n\nSecureTrust TWG ECDSA P-384 Secure Email CA, Level 2\nTrustwave Holdings, Inc.\n072F30E9C58D91DEF98A7F9EB2666CFE7BE1EE\n-----BEGIN CERTIFICATE-----\nMIIDqjCCAy+gAwIBAgITBy8w6cWNkd75in+esmZs/nvh7jAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMjAxMDA4MDY0OTQxWhcNMzAxMDA4MDY0ODQxWjBiMQswCQYDVQQGEwJV\nUzEUMBIGA1UEChMLU2VjdXJlVHJ1c3QxPTA7BgNVBAMTNFNlY3VyZVRydXN0IFRX\nRyBFQ0RTQSBQLTM4NCBTZWN1cmUgRW1haWwgQ0EsIExldmVsIDIwdjAQBgcqhkjO\nPQIBBgUrgQQAIgNiAAR4nTJ6MvtPBb7+L3tklhdDw0tr5FNY5Q1hsp6NR5OzZVeG\nx/X3VrCvkOsae1OEZHNqWCnnI1s/ix9qn/2+q0pPpXrT6wkN/HOQzpQaJWzCF7yX\nIfIB0o+x1Pr17UOX2qGjggF1MIIBcTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1Ud\nDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDBDAdBgNVHQ4EFgQUJd3xyUp6\n6EP6L9hCmkRrWAcU2mwwHwYDVR0jBBgwFoAUVamEidLBMr0Yy2ymB07I552+gpAw\nQQYDVR0gBDowODA2BgRVHSAAMC4wLAYIKwYBBQUHAgEWIGh0dHBzOi8vY2VydHMu\nc2VjdXJldHJ1c3QuY29tL0NBMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu\nc2VjdXJldHJ1c3QuY29tL1RXR1AzODRDQS5jcmwweAYIKwYBBQUHAQEEbDBqMCgG\nCCsGAQUFBzABhhxodHRwOi8vb2NzcC5zZWN1cmV0cnVzdC5jb20vMD4GCCsGAQUF\nBzAChjJodHRwOi8vY2VydHMuc2VjdXJldHJ1c3QuY29tL2lzc3VlcnMvVFdHUDM4\nNENBLmNydDAKBggqhkjOPQQDAwNpADBmAjEA8X5zwZHtdHjLIn60rwG3Z3NAa6cU\n6gOFxyF+ksTCXvWCUP0oFUqsRPMKMYE2mtdQAjEA2diuEHTPUgCQ0ynhLjged8BO\nFyzL3UlFieGGp90v58gUpfjoFq0BReAw7MPYo/Qa\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-384 Domain Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9B07A17CC5376157813389A2930A44A\n-----BEGIN CERTIFICATE-----\nMIID1TCCA1ygAwIBAgITBs6C2bB6F8xTdhV4EziaKTCkSjAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBmjFDMEEGA1UEAxM6\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTM4NCBEb21haW4gVmFsaWRhdGlvbiBD\nQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJbmMuMRAw\nDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UEBhMCVVMw\ndjAQBgcqhkjOPQIBBgUrgQQAIgNiAASxlBEflNumTKsypgdOscM2x6ZRpQGSyB4B\nhJScRQI81UhZvzYSwxPWcxNZwFQoV457HfqR51pviJnHltRS8MJhJ9Q9Rf1sSmy4\nW6SPsM9qnBjwfBRxghByIsEIaTW/PKyjggFpMIIBZTASBgNVHRMBAf8ECDAGAQH/\nAgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4E\nFgQUp6etGGS1u/oGGEfIwJ68Zf9pAWAwHwYDVR0jBBgwFoAUVamEidLBMr0Yy2ym\nB07I552+gpAwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBz\nOi8vc3NsLnRydXN0d2F2ZS5jb20vQ0EwNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDov\nL2NybC50cnVzdHdhdmUuY29tL1RXR1AzODRDQS5jcmwwcgYIKwYBBQUHAQEEZjBk\nMCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50cnVzdHdhdmUuY29tLzA6BggrBgEF\nBQcwAoYuaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lzc3VlcnMvVFdHUDM4NENB\nLmNydDAKBggqhkjOPQQDAwNnADBkAjA6fS1jRjt+DvnWSI58v4lX+8DCXbdEhDaB\nbBOS/rXwS/ntsFXqTf0B90GPv3AWlFMCMBbz6nXMwX0jKRkaFZOZx9tvwUapdq7M\n6jYpT/NnAzH68x1t3/7ysZ8lPuKIqAwdKQ==\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-384 Extended Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A331594530006781829387E40DBCB6\n-----BEGIN CERTIFICATE-----\nMIID4zCCA2igAwIBAgITBs6C2aMxWUUwAGeBgpOH5A28tjAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIwWhcNMjgwMjI0MDUwMTIwWjCBnDFFMEMGA1UEAxM8\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTM4NCBFeHRlbmRlZCBWYWxpZGF0aW9u\nIENBLCBMZXZlbCAxMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4x\nEDAOBgNVBAcTB0NoaWNhZ28xETAPBgNVBAgTCElsbGlub2lzMQswCQYDVQQGEwJV\nUzB2MBAGByqGSM49AgEGBSuBBAAiA2IABKcVGieqBjW3BuVza9VhkBlpGLHLZqQg\nI0GXaTpt5CogNWz6BmlZ1yAPjRnDUVfVwl57ATRtV7u+5TPFzKZ+RheFVc0iA8vl\nQ2JINGRz8XLDaivvuygQtFKSzCWn4e66cKOCAXMwggFvMBIGA1UdEwEB/wQIMAYB\nAf8CAQAwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEF\nBQcDATAdBgNVHQ4EFgQUMFfit09gayJACkNfT/oNzXO8JCcwHwYDVR0jBBgwFoAU\nVamEidLBMr0Yy2ymB07I552+gpAwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYB\nBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5jb20vQ0EwNwYDVR0fBDAwLjAs\noCqgKIYmaHR0cDovL2NybC50cnVzdHdhdmUuY29tL1RXR1AzODRDQS5jcmwwcgYI\nKwYBBQUHAQEEZjBkMCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC50cnVzdHdhdmUu\nY29tLzA6BggrBgEFBQcwAoYuaHR0cDovL3NzbC50cnVzdHdhdmUuY29tL2lzc3Vl\ncnMvVFdHUDM4NENBLmNydDAKBggqhkjOPQQDAwNpADBmAjEA6pScrGT+SruK7iON\n7iDJZfhQsjfQIhaq9sHiEXd89B8ibWOb57no/K265dPxeuALAjEA27NTMZM344eT\nX3df9B22dY5ZshsUMIiRcMo1K4B/GBO8SIA0jParkHS5g4WO5K7O\n-----END CERTIFICATE-----\n\nTrustwave Global ECDSA P-384 Organization Validation CA, Level 1\nTrustwave Holdings, Inc.\n06CE82D9A9D8E29837EF90BEAF59DC6551BED6\n-----BEGIN CERTIFICATE-----\nMIID5jCCA2ygAwIBAgITBs6C2anY4pg375C+r1ncZVG+1jAKBggqhkjOPQQDAzCB\nkTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCElsbGlub2lzMRAwDgYDVQQHEwdDaGlj\nYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9sZGluZ3MsIEluYy4xOjA4BgNVBAMT\nMVRydXN0d2F2ZSBHbG9iYWwgRUNDIFAzODQgQ2VydGlmaWNhdGlvbiBBdXRob3Jp\ndHkwHhcNMTgwMjA2MTIyMTIxWhcNMjgwMjI0MDUwMTIxWjCBoDFJMEcGA1UEAxNA\nVHJ1c3R3YXZlIEdsb2JhbCBFQ0RTQSBQLTM4NCBPcmdhbml6YXRpb24gVmFsaWRh\ndGlvbiBDQSwgTGV2ZWwgMTEhMB8GA1UEChMYVHJ1c3R3YXZlIEhvbGRpbmdzLCBJ\nbmMuMRAwDgYDVQQHEwdDaGljYWdvMREwDwYDVQQIEwhJbGxpbm9pczELMAkGA1UE\nBhMCVVMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATvG09PrsO8UQZhH5Zw54rwgcUw\nKjC9D2V3myjD5WOa8uxdTL8PzdwPk4TCcSf6UUG1Tt74j/I+vBOi2tgMcDt68Zld\nvTj+jZT1BBYTQtYh6/dOUjmiapQU5XqoFMRNubGjggFzMIIBbzASBgNVHRMBAf8E\nCDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjAdBgNVHSUEFjAUBggrBgEFBQcDAgYI\nKwYBBQUHAwEwHQYDVR0OBBYEFDoXwH5iO1eguEDKzDRHzZZ+/AmIMB8GA1UdIwQY\nMBaAFFWphInSwTK9GMtspgdOyOedvoKQMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgG\nCCsGAQUFBwIBFhxodHRwczovL3NzbC50cnVzdHdhdmUuY29tL0NBMDcGA1UdHwQw\nMC4wLKAqoCiGJmh0dHA6Ly9jcmwudHJ1c3R3YXZlLmNvbS9UV0dQMzg0Q0EuY3Js\nMHIGCCsGAQUFBwEBBGYwZDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudHJ1c3R3\nYXZlLmNvbS8wOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2wudHJ1c3R3YXZlLmNvbS9p\nc3N1ZXJzL1RXR1AzODRDQS5jcnQwCgYIKoZIzj0EAwMDaAAwZQIwMyHlVCVMacxP\nO0fC+uc4M7Eq1F9woaWBmLSSNC6EWe3nShMqsR9HrNWrOHBHucNWAjEArwrzEM8g\nJkR4iZxbyYNIn2sNEkNZt2pxqJn4G2cDDDFfOarykKVzP1aJ9OMdYUvs\n-----END CERTIFICATE-----\n\nTrustwave S/MIME SHA256 CA, Level 1\nXRamp Security Services Inc\n3A83B71EE02C3CCA1CE1A2643E9B66EA\n-----BEGIN CERTIFICATE-----\nMIIFHTCCBAWgAwIBAgIQOoO3HuAsPMoc4aJkPptm6jANBgkqhkiG9w0BAQsFADCB\ngjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk\nMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY\nUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQxMDAxMTky\nMjM4WhcNMjQwOTI4MTkyMjM4WjCBpDELMAkGA1UEBhMCVVMxETAPBgNVBAgTCEls\nbGlub2lzMRAwDgYDVQQHEwdDaGljYWdvMSEwHwYDVQQKExhUcnVzdHdhdmUgSG9s\nZGluZ3MsIEluYy4xLDAqBgNVBAMTI1RydXN0d2F2ZSBTL01JTUUgU0hBMjU2IENB\nLCBMZXZlbCAxMR8wHQYJKoZIhvcNAQkBFhBjYUB0cnVzdHdhdmUuY29tMIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4c5I5giD0wEh+RuoLIJkD7a6mBlm\n+YzTtXSefGejVVYtpjclkUl4C4hEfQMCUcrBnU3ORHVprXi/Q82dKNFPac8FI9bj\n8mtq0cjdSDfXJKfdf52wPXnTjASwKyhJt+CoJik+Fz72KAkjxi+OUSpWdQBeAQra\ndbtu4UGFTgPcuU/cwpF8J0g4CGk/saVKkkJNpq5wqpfQRYl025FyKbzmRjqhB/Ta\npoHlbHMQ7aeoZ+qtDC+eWnE3AqTUHx14Z5fegjLQRmPWqqdeZafthouglbEuHt4A\neyzefTDNwyXjUiRD/n0kaNNW+lcsLpw7ouw1OU8mwQ0C7LoPJljpXRjvOwIDAQAB\no4IBaTCCAWUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUDDOjV6rjq9ZL\ncBs2nqPtYVDmr3QwDgYDVR0PAQH/BAQDAgGGMEgGA1UdIARBMD8wPQYPKwYBBAGB\n7RgDAwMFBAMDMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRydXN0d2F2ZS5j\nb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC50cnVzdHdhdmUuY29t\nL1hHQ0EuY3JsMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZaHR0cDovL29j\nc3AudHJ1c3R3YXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3NzbC50cnVzdHdh\ndmUuY29tL2lzc3VlcnMvWEdDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwQwHwYD\nVR0jBBgwFoAUxk+iPQZjhAmczmLkBKyNXLXpthswDQYJKoZIhvcNAQELBQADggEB\nAIdGLHufUegzFKVBQVWs3YAIFqCcJvdak14TMRImxJsnQWLz+jIW0olC0JATY6Ng\nxAbjIJA4wtW/tA+rgE6WcA5y3bLN3bRMQVDSu6X26hkVjvwo4/VYykOp3e9Cqlfe\ngJAsrqBQKXkUpEbYEmmorXxj6/74e//xwXTz0XS0BS9cXhONlTQffyJnMeLaunzQ\nS1x/MvALfPCHCZCTOfLDmwylKtHHu+V2Ks0HV+ZrzCBRR5W3MhGTU7PpNEMQwyGF\n+MG5eZTd0jyxOSOjaXQm7iDh0tG/iKZZegn5AhNdaHE74QEHTjK+teLQlo60QGBk\necyzakgVYZ/Ezalz8nQwhCA=\n-----END CERTIFICATE-----\n\nTrustwave XRamp Global Extended Validation CA, Level 1\nXRamp Security Services Inc\n00D3D519C2B2EB5C7040F64CBC957BBD2C\n-----BEGIN CERTIFICATE-----\nMIIFMDCCBBigAwIBAgIRANPVGcKy61xwQPZMvJV7vSwwDQYJKoZIhvcNAQELBQAw\ngYIxCzAJBgNVBAYTAlVTMR4wHAYDVQQLExV3d3cueHJhbXBzZWN1cml0eS5jb20x\nJDAiBgNVBAoTG1hSYW1wIFNlY3VyaXR5IFNlcnZpY2VzIEluYzEtMCsGA1UEAxMk\nWFJhbXAgR2xvYmFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE1MDgxMjIw\nMTczMVoXDTI1MDgwOTIwMTczMVowgbcxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhJ\nbGxpbm9pczEQMA4GA1UEBxMHQ2hpY2FnbzEhMB8GA1UEChMYVHJ1c3R3YXZlIEhv\nbGRpbmdzLCBJbmMuMT8wPQYDVQQDEzZUcnVzdHdhdmUgWFJhbXAgR2xvYmFsIEV4\ndGVuZGVkIFZhbGlkYXRpb24gQ0EsIExldmVsIDExHzAdBgkqhkiG9w0BCQEWEGNh\nQHRydXN0d2F2ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9\nAAbj9SknrNJT9pDatGvlR386KRi0SkqIOGr+C5W91+8E8PqydEHwjrnrWt/MTLGO\n+2kfEO3TEJlWxQQqbHy8SdhjCANefLzOT1cfTfjroWBIS9yiHpBIQytAaz/td95Y\n+JKrRBVCnIR/wB5qMMQ982RWwqggD763XLma0c1AIndsZL+dXp1zET4KBreoxn3q\nRYzMIsZIL2mAJoiCOTYuOGrOMVuaQn0HSu3K7bU+CpkdLQ/j+ikcQiI10IL9oOcO\nU9Gnt/hRyUX66Gk91RIpYXhla2tIYrg7ezrAnFoZIZCb891JjFtbSEOvAAK9F5d6\nfkkjPx0432o/v1c5GRFPAgMBAAGjggFoMIIBZDASBgNVHRMBAf8ECDAGAQH/AgEA\nMB0GA1UdDgQWBBTFzrk7QkXAzQnlaOhIOoNdbI6rGDAOBgNVHQ8BAf8EBAMCAYYw\nPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vc3NsLnRy\ndXN0d2F2ZS5jb20vQ0EwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC50cnVz\ndHdhdmUuY29tL1hHQ0EuY3JsMGwGCCsGAQUFBwEBBGAwXjAlBggrBgEFBQcwAYYZ\naHR0cDovL29jc3AudHJ1c3R3YXZlLmNvbTA1BggrBgEFBQcwAoYpaHR0cDovL3Nz\nbC50cnVzdHdhdmUuY29tL2lzc3VlcnMvWEdDQS5jcnQwHQYDVR0lBBYwFAYIKwYB\nBQUHAwIGCCsGAQUFBwMBMB8GA1UdIwQYMBaAFMZPoj0GY4QJnM5i5ASsjVy16bYb\nMA0GCSqGSIb3DQEBCwUAA4IBAQCA2N/WVTGYRGNTuvF2qKWPrQUx0/6pKmGqELl6\nNXs1bwRXCci98SkeNjiaa2dHEwcGR43/M1Y0nekXP8QCEFVqGOwaY0pnTb8wL+CI\n/HTp1zfmoCYNvtzt1fIq/+9ynLYEjX8rsrf51HIEjJJK8K3k/Ub3cFT+yJKNN2YN\nJS0IvJYlbpqS6VbcInwLcW7WvJmXUuL7t0Vtt0d2q1h5UdnJQP+skiOmN/B0zPut\nbRC4v5pNGJJmwbk58UlOSeviH2qzDGutamOJ6dFNWqQFoZorAT7fUsr3WDA4HKtx\neraYdCIRJX7weW9xpdMNsVO7Wy/Ma7Fz9fzKnOH5mnInBOof\n-----END CERTIFICATE-----\n\nSecure Global CA\nSecureTrust Corporation\n075622A4E8D48A894DF413C8F0F8EAA5\n-----BEGIN CERTIFICATE-----\nMIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx\nMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg\nQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG\nSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ\niQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa\n/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ\njnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI\nHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7\nsFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w\ngZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF\nMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw\nKaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG\nAQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L\nURYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO\nH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm\nI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY\niNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc\nf8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW\n-----END CERTIFICATE-----\n\nSecureTrust CA\nSecureTrust Corporation\n0CF08E5C0816A5AD427FF0EB271859D0\n-----BEGIN CERTIFICATE-----\nMIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI\nMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x\nFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz\nMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv\ncnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN\nAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz\nZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO\n0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao\nwW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj\n7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS\n8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT\nBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB\n/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg\nJYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC\nNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3\n6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/\n3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm\nD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS\nCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR\n3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=\n-----END CERTIFICATE-----\n\nTrustwave Global Certification Authority\nTrustwave Holdings, Inc.\n05F70E86DA49F346352EBAB2\n-----BEGIN CERTIFICATE-----\nMIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw\nCQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x\nITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1\nc3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx\nOTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI\nSWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI\nb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp\nY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\nALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn\nswuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu\n7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8\n1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW\n80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP\nJqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l\nRtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw\nhI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10\ncoos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc\nBW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n\ntwiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud\nEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud\nDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W\n0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe\nuyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q\nlG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB\naCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE\nsLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT\nMaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe\nqu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh\nVicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8\nh6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9\nEEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK\nyeC2nOnOcXHebD8WpHk=\n-----END CERTIFICATE-----\n\nTrustwave Global ECC P256 Certification Authority\nTrustwave Holdings, Inc.\n0D6A5F083F285C3E5195DF5D\n-----BEGIN CERTIFICATE-----\nMIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD\nVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf\nBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3\nYXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x\nNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G\nA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0\nd2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF\nQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG\nSM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN\nFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w\nDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw\nCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh\nDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7\n-----END CERTIFICATE-----\n\nTrustwave Global ECC P384 Certification Authority\nTrustwave Holdings, Inc.\n08BD85976C9927A48068473B\n-----BEGIN CERTIFICATE-----\nMIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD\nVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf\nBgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3\nYXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x\nNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G\nA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0\nd2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF\nQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB\nBAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ\nj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF\n1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G\nA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3\nAZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC\nMGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu\nSw==\n-----END CERTIFICATE-----\n";
47
47
 
48
48
  var PKG_NAME = "@hpcc-js/comms";
49
- var PKG_VERSION = "2.82.3";
50
- var BUILD_VERSION = "2.104.21";
49
+ var PKG_VERSION = "2.83.1";
50
+ var BUILD_VERSION = "2.104.23";
51
51
 
52
52
  /******************************************************************************
53
53
  Copyright (c) Microsoft Corporation.
@@ -139,7 +139,7 @@ function __spreadArray(to, from, pack) {
139
139
  return to.concat(ar || Array.prototype.slice.call(from));
140
140
  }
141
141
 
142
- var logger$4 = util.scopedLogger("comms/connection.ts");
142
+ var logger$5 = util.scopedLogger("comms/connection.ts");
143
143
  function instanceOfIOptions(object) {
144
144
  return "baseUrl" in object;
145
145
  }
@@ -241,12 +241,12 @@ function jsonp(opts, action, request, responseType, header) {
241
241
  respondedTimeout -= respondedTick;
242
242
  if (respondedTimeout <= 0) {
243
243
  clearInterval(progress);
244
- logger$4.error("Request timeout: " + script.src);
244
+ logger$5.error("Request timeout: " + script.src);
245
245
  doCallback();
246
246
  reject(Error("Request timeout: " + script.src));
247
247
  }
248
248
  else {
249
- logger$4.debug("Request pending (" + respondedTimeout / 1000 + " sec): " + script.src);
249
+ logger$5.debug("Request pending (" + respondedTimeout / 1000 + " sec): " + script.src);
250
250
  }
251
251
  }
252
252
  }, respondedTick);
@@ -524,109 +524,114 @@ var Service = /** @class */ (function () {
524
524
  return Service;
525
525
  }());
526
526
 
527
- var DFUWUActions;
528
- (function (DFUWUActions) {
529
- DFUWUActions["Delete"] = "Delete";
530
- DFUWUActions["Protect"] = "Protect";
531
- DFUWUActions["Unprotect"] = "Unprotect";
532
- DFUWUActions["Restore"] = "Restore";
533
- DFUWUActions["SetToFailed"] = "SetToFailed";
534
- DFUWUActions["Archive"] = "Archive";
535
- })(DFUWUActions || (DFUWUActions = {}));
527
+ exports.FileSpray = void 0;
528
+ (function (FileSpray) {
529
+ (function (DFUWUActions) {
530
+ DFUWUActions["Delete"] = "Delete";
531
+ DFUWUActions["Protect"] = "Protect";
532
+ DFUWUActions["Unprotect"] = "Unprotect";
533
+ DFUWUActions["Restore"] = "Restore";
534
+ DFUWUActions["SetToFailed"] = "SetToFailed";
535
+ DFUWUActions["Archive"] = "Archive";
536
+ })(FileSpray.DFUWUActions || (FileSpray.DFUWUActions = {}));
537
+ })(exports.FileSpray || (exports.FileSpray = {}));
536
538
  var FileSprayServiceBase = /** @class */ (function (_super) {
537
539
  __extends(FileSprayServiceBase, _super);
538
540
  function FileSprayServiceBase(optsConnection) {
539
- return _super.call(this, optsConnection, "FileSpray", "1.23") || this;
541
+ return _super.call(this, optsConnection, "FileSpray", "1.25") || this;
540
542
  }
541
543
  FileSprayServiceBase.prototype.AbortDFUWorkunit = function (request) {
542
- return this._connection.send("AbortDFUWorkunit", request);
544
+ return this._connection.send("AbortDFUWorkunit", request, "json", false, undefined, "AbortDFUWorkunitResponse");
543
545
  };
544
546
  FileSprayServiceBase.prototype.Copy = function (request) {
545
- return this._connection.send("Copy", request);
547
+ return this._connection.send("Copy", request, "json", false, undefined, "CopyResponse");
548
+ };
549
+ FileSprayServiceBase.prototype.CreateDFUPublisherWorkunit = function (request) {
550
+ return this._connection.send("CreateDFUPublisherWorkunit", request, "json", false, undefined, "CreateDFUPublisherWorkunitResponse");
546
551
  };
547
552
  FileSprayServiceBase.prototype.CreateDFUWorkunit = function (request) {
548
- return this._connection.send("CreateDFUWorkunit", request);
553
+ return this._connection.send("CreateDFUWorkunit", request, "json", false, undefined, "CreateDFUWorkunitResponse");
549
554
  };
550
555
  FileSprayServiceBase.prototype.DFUWUFile = function (request) {
551
- return this._connection.send("DFUWUFile", request);
556
+ return this._connection.send("DFUWUFile", request, "json", false, undefined, "DFUWUFileResponse");
552
557
  };
553
558
  FileSprayServiceBase.prototype.DFUWUSearch = function (request) {
554
- return this._connection.send("DFUWUSearch", request);
559
+ return this._connection.send("DFUWUSearch", request, "json", false, undefined, "DFUWUSearchResponse");
555
560
  };
556
561
  FileSprayServiceBase.prototype.DFUWorkunitsAction = function (request) {
557
- return this._connection.send("DFUWorkunitsAction", request);
562
+ return this._connection.send("DFUWorkunitsAction", request, "json", false, undefined, "DFUWorkunitsActionResponse");
558
563
  };
559
564
  FileSprayServiceBase.prototype.DeleteDFUWorkunit = function (request) {
560
- return this._connection.send("DeleteDFUWorkunit", request);
565
+ return this._connection.send("DeleteDFUWorkunit", request, "json", false, undefined, "DeleteDFUWorkunitResponse");
561
566
  };
562
567
  FileSprayServiceBase.prototype.DeleteDFUWorkunits = function (request) {
563
- return this._connection.send("DeleteDFUWorkunits", request);
568
+ return this._connection.send("DeleteDFUWorkunits", request, "json", false, undefined, "DeleteDFUWorkunitsResponse");
564
569
  };
565
570
  FileSprayServiceBase.prototype.DeleteDropZoneFiles = function (request) {
566
- return this._connection.send("DeleteDropZoneFiles", request);
571
+ return this._connection.send("DeleteDropZoneFiles", request, "json", false, undefined, "DFUWorkunitsActionResponse");
567
572
  };
568
573
  FileSprayServiceBase.prototype.Despray = function (request) {
569
- return this._connection.send("Despray", request);
574
+ return this._connection.send("Despray", request, "json", false, undefined, "DesprayResponse");
570
575
  };
571
576
  FileSprayServiceBase.prototype.DfuMonitor = function (request) {
572
- return this._connection.send("DfuMonitor", request);
577
+ return this._connection.send("DfuMonitor", request, "json", false, undefined, "DfuMonitorResponse");
573
578
  };
574
579
  FileSprayServiceBase.prototype.DropZoneFileSearch = function (request) {
575
- return this._connection.send("DropZoneFileSearch", request);
580
+ return this._connection.send("DropZoneFileSearch", request, "json", false, undefined, "DropZoneFileSearchResponse");
576
581
  };
577
582
  FileSprayServiceBase.prototype.DropZoneFiles = function (request) {
578
- return this._connection.send("DropZoneFiles", request);
583
+ return this._connection.send("DropZoneFiles", request, "json", false, undefined, "DropZoneFilesResponse");
579
584
  };
580
585
  FileSprayServiceBase.prototype.EchoDateTime = function (request) {
581
- return this._connection.send("EchoDateTime", request);
586
+ return this._connection.send("EchoDateTime", request, "json", false, undefined, "EchoDateTimeResponse");
582
587
  };
583
588
  FileSprayServiceBase.prototype.FileList = function (request) {
584
- return this._connection.send("FileList", request);
589
+ return this._connection.send("FileList", request, "json", false, undefined, "FileListResponse");
585
590
  };
586
591
  FileSprayServiceBase.prototype.GetDFUExceptions = function (request) {
587
- return this._connection.send("GetDFUExceptions", request);
592
+ return this._connection.send("GetDFUExceptions", request, "json", false, undefined, "GetDFUExceptionsResponse");
588
593
  };
589
594
  FileSprayServiceBase.prototype.GetDFUProgress = function (request) {
590
- return this._connection.send("GetDFUProgress", request);
595
+ return this._connection.send("GetDFUProgress", request, "json", false, undefined, "ProgressResponse");
591
596
  };
592
597
  FileSprayServiceBase.prototype.GetDFUServerQueues = function (request) {
593
- return this._connection.send("GetDFUServerQueues", request);
598
+ return this._connection.send("GetDFUServerQueues", request, "json", false, undefined, "GetDFUServerQueuesResponse");
594
599
  };
595
600
  FileSprayServiceBase.prototype.GetDFUWorkunit = function (request) {
596
- return this._connection.send("GetDFUWorkunit", request);
601
+ return this._connection.send("GetDFUWorkunit", request, "json", false, undefined, "GetDFUWorkunitResponse");
597
602
  };
598
603
  FileSprayServiceBase.prototype.GetDFUWorkunits = function (request) {
599
- return this._connection.send("GetDFUWorkunits", request);
604
+ return this._connection.send("GetDFUWorkunits", request, "json", false, undefined, "GetDFUWorkunitsResponse");
600
605
  };
601
606
  FileSprayServiceBase.prototype.GetSprayTargets = function (request) {
602
- return this._connection.send("GetSprayTargets", request);
607
+ return this._connection.send("GetSprayTargets", request, "json", false, undefined, "GetSprayTargetsResponse");
603
608
  };
604
609
  FileSprayServiceBase.prototype.OpenSave = function (request) {
605
- return this._connection.send("OpenSave", request);
610
+ return this._connection.send("OpenSave", request, "json", false, undefined, "OpenSaveResponse");
606
611
  };
607
612
  FileSprayServiceBase.prototype.Ping = function (request) {
608
- return this._connection.send("Ping", request);
613
+ return this._connection.send("Ping", request, "json", false, undefined, "FileSprayPingResponse");
609
614
  };
610
615
  FileSprayServiceBase.prototype.Rename = function (request) {
611
- return this._connection.send("Rename", request);
616
+ return this._connection.send("Rename", request, "json", false, undefined, "RenameResponse");
612
617
  };
613
618
  FileSprayServiceBase.prototype.Replicate = function (request) {
614
- return this._connection.send("Replicate", request);
619
+ return this._connection.send("Replicate", request, "json", false, undefined, "ReplicateResponse");
615
620
  };
616
621
  FileSprayServiceBase.prototype.ShowResult = function (request) {
617
- return this._connection.send("ShowResult", request);
622
+ return this._connection.send("ShowResult", request, "json", false, undefined, "ShowResultResponse");
618
623
  };
619
624
  FileSprayServiceBase.prototype.SprayFixed = function (request) {
620
- return this._connection.send("SprayFixed", request);
625
+ return this._connection.send("SprayFixed", request, "json", false, undefined, "SprayFixedResponse");
621
626
  };
622
627
  FileSprayServiceBase.prototype.SprayVariable = function (request) {
623
- return this._connection.send("SprayVariable", request);
628
+ return this._connection.send("SprayVariable", request, "json", false, undefined, "SprayResponse");
624
629
  };
625
630
  FileSprayServiceBase.prototype.SubmitDFUWorkunit = function (request) {
626
- return this._connection.send("SubmitDFUWorkunit", request);
631
+ return this._connection.send("SubmitDFUWorkunit", request, "json", false, undefined, "SubmitDFUWorkunitResponse");
627
632
  };
628
633
  FileSprayServiceBase.prototype.UpdateDFUWorkunit = function (request) {
629
- return this._connection.send("UpdateDFUWorkunit", request);
634
+ return this._connection.send("UpdateDFUWorkunit", request, "json", false, undefined, "UpdateDFUWorkunitResponse");
630
635
  };
631
636
  return FileSprayServiceBase;
632
637
  }(Service));
@@ -645,6 +650,9 @@ var FileSprayService = /** @class */ (function (_super) {
645
650
  FileSprayService.prototype.DesprayEx = function (request) {
646
651
  return this._connection.send("Despray", request);
647
652
  };
653
+ FileSprayService.prototype.UpdateDFUWorkunitEx = function (request) {
654
+ return this._connection.send("UpdateDFUWorkunit", request, "json", false, undefined, "UpdateDFUWorkunitResponse");
655
+ };
648
656
  return FileSprayService;
649
657
  }(FileSprayServiceBase));
650
658
 
@@ -1418,7 +1426,7 @@ var LogaccessServiceBase = /** @class */ (function (_super) {
1418
1426
  return LogaccessServiceBase;
1419
1427
  }(Service));
1420
1428
 
1421
- var logger$3 = util.scopedLogger("@hpcc-js/comms/services/wsLogaccess.ts");
1429
+ var logger$4 = util.scopedLogger("@hpcc-js/comms/services/wsLogaccess.ts");
1422
1430
  var ElasticKnownColumns;
1423
1431
  (function (ElasticKnownColumns) {
1424
1432
  ElasticKnownColumns["audience"] = "hpcc.log.audience";
@@ -1620,7 +1628,7 @@ var LogaccessService = /** @class */ (function (_super) {
1620
1628
  lines = (_d = (_c = logLines.lines) === null || _c === void 0 ? void 0 : _c.map(elasticToLogLine)) !== null && _d !== void 0 ? _d : [];
1621
1629
  break;
1622
1630
  default:
1623
- logger$3.warning("Unknown RemoteLogManagerType: ".concat(logInfo.RemoteLogManagerType));
1631
+ logger$4.warning("Unknown RemoteLogManagerType: ".concat(logInfo.RemoteLogManagerType));
1624
1632
  lines = [];
1625
1633
  }
1626
1634
  return {
@@ -1629,7 +1637,7 @@ var LogaccessService = /** @class */ (function (_super) {
1629
1637
  };
1630
1638
  }
1631
1639
  catch (e) {
1632
- logger$3.error(e);
1640
+ logger$4.error(e);
1633
1641
  }
1634
1642
  return {
1635
1643
  lines: [],
@@ -2599,6 +2607,321 @@ var WorkunitsServiceEx = /** @class */ (function (_super) {
2599
2607
  return WorkunitsServiceEx;
2600
2608
  }(WorkunitsServiceBase));
2601
2609
 
2610
+ function formatDecimal(x) {
2611
+ return Math.abs(x = Math.round(x)) >= 1e21
2612
+ ? x.toLocaleString("en").replace(/,/g, "")
2613
+ : x.toString(10);
2614
+ }
2615
+
2616
+ // Computes the decimal coefficient and exponent of the specified number x with
2617
+ // significant digits p, where x is positive and p is in [1, 21] or undefined.
2618
+ // For example, formatDecimalParts(1.23) returns ["123", 0].
2619
+ function formatDecimalParts(x, p) {
2620
+ if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
2621
+ var i, coefficient = x.slice(0, i);
2622
+
2623
+ // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
2624
+ // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
2625
+ return [
2626
+ coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
2627
+ +x.slice(i + 1)
2628
+ ];
2629
+ }
2630
+
2631
+ function exponent(x) {
2632
+ return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;
2633
+ }
2634
+
2635
+ function formatGroup(grouping, thousands) {
2636
+ return function(value, width) {
2637
+ var i = value.length,
2638
+ t = [],
2639
+ j = 0,
2640
+ g = grouping[0],
2641
+ length = 0;
2642
+
2643
+ while (i > 0 && g > 0) {
2644
+ if (length + g + 1 > width) g = Math.max(1, width - length);
2645
+ t.push(value.substring(i -= g, i + g));
2646
+ if ((length += g + 1) > width) break;
2647
+ g = grouping[j = (j + 1) % grouping.length];
2648
+ }
2649
+
2650
+ return t.reverse().join(thousands);
2651
+ };
2652
+ }
2653
+
2654
+ function formatNumerals(numerals) {
2655
+ return function(value) {
2656
+ return value.replace(/[0-9]/g, function(i) {
2657
+ return numerals[+i];
2658
+ });
2659
+ };
2660
+ }
2661
+
2662
+ // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
2663
+ var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
2664
+
2665
+ function formatSpecifier(specifier) {
2666
+ if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
2667
+ var match;
2668
+ return new FormatSpecifier({
2669
+ fill: match[1],
2670
+ align: match[2],
2671
+ sign: match[3],
2672
+ symbol: match[4],
2673
+ zero: match[5],
2674
+ width: match[6],
2675
+ comma: match[7],
2676
+ precision: match[8] && match[8].slice(1),
2677
+ trim: match[9],
2678
+ type: match[10]
2679
+ });
2680
+ }
2681
+
2682
+ formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
2683
+
2684
+ function FormatSpecifier(specifier) {
2685
+ this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
2686
+ this.align = specifier.align === undefined ? ">" : specifier.align + "";
2687
+ this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
2688
+ this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
2689
+ this.zero = !!specifier.zero;
2690
+ this.width = specifier.width === undefined ? undefined : +specifier.width;
2691
+ this.comma = !!specifier.comma;
2692
+ this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
2693
+ this.trim = !!specifier.trim;
2694
+ this.type = specifier.type === undefined ? "" : specifier.type + "";
2695
+ }
2696
+
2697
+ FormatSpecifier.prototype.toString = function() {
2698
+ return this.fill
2699
+ + this.align
2700
+ + this.sign
2701
+ + this.symbol
2702
+ + (this.zero ? "0" : "")
2703
+ + (this.width === undefined ? "" : Math.max(1, this.width | 0))
2704
+ + (this.comma ? "," : "")
2705
+ + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
2706
+ + (this.trim ? "~" : "")
2707
+ + this.type;
2708
+ };
2709
+
2710
+ // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
2711
+ function formatTrim(s) {
2712
+ out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
2713
+ switch (s[i]) {
2714
+ case ".": i0 = i1 = i; break;
2715
+ case "0": if (i0 === 0) i0 = i; i1 = i; break;
2716
+ default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;
2717
+ }
2718
+ }
2719
+ return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
2720
+ }
2721
+
2722
+ var prefixExponent;
2723
+
2724
+ function formatPrefixAuto(x, p) {
2725
+ var d = formatDecimalParts(x, p);
2726
+ if (!d) return x + "";
2727
+ var coefficient = d[0],
2728
+ exponent = d[1],
2729
+ i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
2730
+ n = coefficient.length;
2731
+ return i === n ? coefficient
2732
+ : i > n ? coefficient + new Array(i - n + 1).join("0")
2733
+ : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
2734
+ : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!
2735
+ }
2736
+
2737
+ function formatRounded(x, p) {
2738
+ var d = formatDecimalParts(x, p);
2739
+ if (!d) return x + "";
2740
+ var coefficient = d[0],
2741
+ exponent = d[1];
2742
+ return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
2743
+ : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
2744
+ : coefficient + new Array(exponent - coefficient.length + 2).join("0");
2745
+ }
2746
+
2747
+ var formatTypes = {
2748
+ "%": function(x, p) { return (x * 100).toFixed(p); },
2749
+ "b": function(x) { return Math.round(x).toString(2); },
2750
+ "c": function(x) { return x + ""; },
2751
+ "d": formatDecimal,
2752
+ "e": function(x, p) { return x.toExponential(p); },
2753
+ "f": function(x, p) { return x.toFixed(p); },
2754
+ "g": function(x, p) { return x.toPrecision(p); },
2755
+ "o": function(x) { return Math.round(x).toString(8); },
2756
+ "p": function(x, p) { return formatRounded(x * 100, p); },
2757
+ "r": formatRounded,
2758
+ "s": formatPrefixAuto,
2759
+ "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
2760
+ "x": function(x) { return Math.round(x).toString(16); }
2761
+ };
2762
+
2763
+ function identity(x) {
2764
+ return x;
2765
+ }
2766
+
2767
+ var map = Array.prototype.map,
2768
+ prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
2769
+
2770
+ function formatLocale$1(locale) {
2771
+ var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
2772
+ currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
2773
+ currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
2774
+ decimal = locale.decimal === undefined ? "." : locale.decimal + "",
2775
+ numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),
2776
+ percent = locale.percent === undefined ? "%" : locale.percent + "",
2777
+ minus = locale.minus === undefined ? "-" : locale.minus + "",
2778
+ nan = locale.nan === undefined ? "NaN" : locale.nan + "";
2779
+
2780
+ function newFormat(specifier) {
2781
+ specifier = formatSpecifier(specifier);
2782
+
2783
+ var fill = specifier.fill,
2784
+ align = specifier.align,
2785
+ sign = specifier.sign,
2786
+ symbol = specifier.symbol,
2787
+ zero = specifier.zero,
2788
+ width = specifier.width,
2789
+ comma = specifier.comma,
2790
+ precision = specifier.precision,
2791
+ trim = specifier.trim,
2792
+ type = specifier.type;
2793
+
2794
+ // The "n" type is an alias for ",g".
2795
+ if (type === "n") comma = true, type = "g";
2796
+
2797
+ // The "" type, and any invalid type, is an alias for ".12~g".
2798
+ else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g";
2799
+
2800
+ // If zero fill is specified, padding goes after sign and before digits.
2801
+ if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
2802
+
2803
+ // Compute the prefix and suffix.
2804
+ // For SI-prefix, the suffix is lazily computed.
2805
+ var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
2806
+ suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
2807
+
2808
+ // What format function should we use?
2809
+ // Is this an integer type?
2810
+ // Can this type generate exponential notation?
2811
+ var formatType = formatTypes[type],
2812
+ maybeSuffix = /[defgprs%]/.test(type);
2813
+
2814
+ // Set the default precision if not specified,
2815
+ // or clamp the specified precision to the supported range.
2816
+ // For significant precision, it must be in [1, 21].
2817
+ // For fixed precision, it must be in [0, 20].
2818
+ precision = precision === undefined ? 6
2819
+ : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
2820
+ : Math.max(0, Math.min(20, precision));
2821
+
2822
+ function format(value) {
2823
+ var valuePrefix = prefix,
2824
+ valueSuffix = suffix,
2825
+ i, n, c;
2826
+
2827
+ if (type === "c") {
2828
+ valueSuffix = formatType(value) + valueSuffix;
2829
+ value = "";
2830
+ } else {
2831
+ value = +value;
2832
+
2833
+ // Determine the sign. -0 is not less than 0, but 1 / -0 is!
2834
+ var valueNegative = value < 0 || 1 / value < 0;
2835
+
2836
+ // Perform the initial formatting.
2837
+ value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
2838
+
2839
+ // Trim insignificant zeros.
2840
+ if (trim) value = formatTrim(value);
2841
+
2842
+ // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
2843
+ if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
2844
+
2845
+ // Compute the prefix and suffix.
2846
+ valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
2847
+ valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
2848
+
2849
+ // Break the formatted value into the integer “value” part that can be
2850
+ // grouped, and fractional or exponential “suffix” part that is not.
2851
+ if (maybeSuffix) {
2852
+ i = -1, n = value.length;
2853
+ while (++i < n) {
2854
+ if (c = value.charCodeAt(i), 48 > c || c > 57) {
2855
+ valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
2856
+ value = value.slice(0, i);
2857
+ break;
2858
+ }
2859
+ }
2860
+ }
2861
+ }
2862
+
2863
+ // If the fill character is not "0", grouping is applied before padding.
2864
+ if (comma && !zero) value = group(value, Infinity);
2865
+
2866
+ // Compute the padding.
2867
+ var length = valuePrefix.length + value.length + valueSuffix.length,
2868
+ padding = length < width ? new Array(width - length + 1).join(fill) : "";
2869
+
2870
+ // If the fill character is "0", grouping is applied after padding.
2871
+ if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
2872
+
2873
+ // Reconstruct the final output based on the desired alignment.
2874
+ switch (align) {
2875
+ case "<": value = valuePrefix + value + valueSuffix + padding; break;
2876
+ case "=": value = valuePrefix + padding + value + valueSuffix; break;
2877
+ case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
2878
+ default: value = padding + valuePrefix + value + valueSuffix; break;
2879
+ }
2880
+
2881
+ return numerals(value);
2882
+ }
2883
+
2884
+ format.toString = function() {
2885
+ return specifier + "";
2886
+ };
2887
+
2888
+ return format;
2889
+ }
2890
+
2891
+ function formatPrefix(specifier, value) {
2892
+ var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
2893
+ e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
2894
+ k = Math.pow(10, -e),
2895
+ prefix = prefixes[8 + e / 3];
2896
+ return function(value) {
2897
+ return f(k * value) + prefix;
2898
+ };
2899
+ }
2900
+
2901
+ return {
2902
+ format: newFormat,
2903
+ formatPrefix: formatPrefix
2904
+ };
2905
+ }
2906
+
2907
+ var locale$1;
2908
+ var format;
2909
+
2910
+ defaultLocale$1({
2911
+ decimal: ".",
2912
+ thousands: ",",
2913
+ grouping: [3],
2914
+ currency: ["$", ""],
2915
+ minus: "-"
2916
+ });
2917
+
2918
+ function defaultLocale$1(definition) {
2919
+ locale$1 = formatLocale$1(definition);
2920
+ format = locale$1.format;
2921
+ locale$1.formatPrefix;
2922
+ return locale$1;
2923
+ }
2924
+
2602
2925
  var t0 = new Date,
2603
2926
  t1 = new Date;
2604
2927
 
@@ -4695,7 +5018,14 @@ var Timer = /** @class */ (function (_super) {
4695
5018
 
4696
5019
  var formatter = utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");
4697
5020
  var parser = utcParse("%Y-%m-%dT%H:%M:%S.%LZ");
4698
- var logger$2 = util.scopedLogger("workunit.ts");
5021
+ var d3FormatNum = format(",");
5022
+ function formatNum(num) {
5023
+ if (num && !isNaN(+num)) {
5024
+ return d3FormatNum(+num);
5025
+ }
5026
+ return num;
5027
+ }
5028
+ var logger$3 = util.scopedLogger("workunit.ts");
4699
5029
  var WUStateID = exports.WUStateID;
4700
5030
  var WorkunitCache = /** @class */ (function (_super) {
4701
5031
  __extends(WorkunitCache, _super);
@@ -5570,7 +5900,7 @@ var Workunit = /** @class */ (function (_super) {
5570
5900
  default:
5571
5901
  props[scopeProperty.Name] = scopeProperty.RawValue;
5572
5902
  }
5573
- formattedProps[scopeProperty.Name] = (_a = scopeProperty.Formatted) !== null && _a !== void 0 ? _a : props[scopeProperty.Name];
5903
+ formattedProps[scopeProperty.Name] = formatNum((_a = scopeProperty.Formatted) !== null && _a !== void 0 ? _a : props[scopeProperty.Name]);
5574
5904
  }
5575
5905
  }
5576
5906
  data.push(__assign({ id: scope.Id, name: scope.ScopeName, type: scope.ScopeType, __formattedProps: formattedProps }, props));
@@ -5811,7 +6141,7 @@ var Workunit = /** @class */ (function (_super) {
5811
6141
  return false;
5812
6142
  });
5813
6143
  if (!wuMissing) {
5814
- logger$2.warning("Unexpected exception: ");
6144
+ logger$3.warning("Unexpected exception: ");
5815
6145
  throw e;
5816
6146
  }
5817
6147
  return {};
@@ -5848,7 +6178,7 @@ var Workunit = /** @class */ (function (_super) {
5848
6178
  return false;
5849
6179
  });
5850
6180
  if (!wuMissing) {
5851
- logger$2.warning("Unexpected exception: ");
6181
+ logger$3.warning("Unexpected exception: ");
5852
6182
  throw e;
5853
6183
  }
5854
6184
  return {};
@@ -5937,7 +6267,7 @@ var Workunit = /** @class */ (function (_super) {
5937
6267
  }
5938
6268
  return new util.XMLNode(command);
5939
6269
  }).catch(function (_) {
5940
- logger$2.error(_);
6270
+ logger$3.error(_);
5941
6271
  return Promise.resolve(new util.XMLNode(command));
5942
6272
  });
5943
6273
  };
@@ -6756,776 +7086,843 @@ var Machine = /** @class */ (function (_super) {
6756
7086
  return Machine;
6757
7087
  }(util.StateObject));
6758
7088
 
6759
- var QueryCache = /** @class */ (function (_super) {
6760
- __extends(QueryCache, _super);
6761
- function QueryCache() {
7089
+ var TargetClusterCache = /** @class */ (function (_super) {
7090
+ __extends(TargetClusterCache, _super);
7091
+ function TargetClusterCache() {
6762
7092
  return _super.call(this, function (obj) {
6763
- return util.Cache.hash([obj.QueryId, obj.QuerySet]);
7093
+ return "".concat(obj.BaseUrl, "-").concat(obj.Name);
6764
7094
  }) || this;
6765
7095
  }
6766
- return QueryCache;
7096
+ return TargetClusterCache;
6767
7097
  }(util.Cache));
6768
- var _queries = new QueryCache();
6769
- var Query = /** @class */ (function (_super) {
6770
- __extends(Query, _super);
6771
- function Query(optsConnection, querySet, queryID, queryDetails) {
7098
+ var _targetCluster = new TargetClusterCache();
7099
+ var TargetCluster = /** @class */ (function (_super) {
7100
+ __extends(TargetCluster, _super);
7101
+ function TargetCluster(optsConnection, name) {
6772
7102
  var _this = _super.call(this) || this;
6773
- if (optsConnection instanceof EclService) {
7103
+ if (optsConnection instanceof TopologyService) {
6774
7104
  _this.connection = optsConnection;
6775
- // this._topology = new Topology(this.connection.opts());
7105
+ _this.machineConnection = new MachineService(optsConnection.connectionOptions());
6776
7106
  }
6777
7107
  else {
6778
- _this.connection = new EclService(optsConnection);
6779
- // this._topology = new Topology(optsConnection);
7108
+ _this.connection = new TopologyService(optsConnection);
7109
+ _this.machineConnection = new MachineService(optsConnection);
6780
7110
  }
6781
- _this._wsWorkunits = new WorkunitsService(optsConnection);
6782
- _this.set(__assign({ QuerySet: querySet, QueryId: queryID }, queryDetails));
7111
+ _this.clear({
7112
+ Name: name
7113
+ });
6783
7114
  return _this;
6784
7115
  }
6785
- Object.defineProperty(Query.prototype, "BaseUrl", {
7116
+ Object.defineProperty(TargetCluster.prototype, "BaseUrl", {
6786
7117
  get: function () { return this.connection.baseUrl; },
6787
7118
  enumerable: false,
6788
7119
  configurable: true
6789
7120
  });
6790
- Object.defineProperty(Query.prototype, "properties", {
6791
- get: function () { return this.get(); },
6792
- enumerable: false,
6793
- configurable: true
6794
- });
6795
- Object.defineProperty(Query.prototype, "Exceptions", {
6796
- get: function () { return this.get("Exceptions"); },
6797
- enumerable: false,
6798
- configurable: true
6799
- });
6800
- Object.defineProperty(Query.prototype, "QueryId", {
6801
- get: function () { return this.get("QueryId"); },
6802
- enumerable: false,
6803
- configurable: true
6804
- });
6805
- Object.defineProperty(Query.prototype, "QuerySet", {
6806
- get: function () { return this.get("QuerySet"); },
6807
- enumerable: false,
6808
- configurable: true
6809
- });
6810
- Object.defineProperty(Query.prototype, "QueryName", {
6811
- get: function () { return this.get("QueryName"); },
6812
- enumerable: false,
6813
- configurable: true
6814
- });
6815
- Object.defineProperty(Query.prototype, "Wuid", {
6816
- get: function () { return this.get("Wuid"); },
6817
- enumerable: false,
6818
- configurable: true
6819
- });
6820
- Object.defineProperty(Query.prototype, "Dll", {
6821
- get: function () { return this.get("Dll"); },
6822
- enumerable: false,
6823
- configurable: true
6824
- });
6825
- Object.defineProperty(Query.prototype, "Suspended", {
6826
- get: function () { return this.get("Suspended"); },
6827
- enumerable: false,
6828
- configurable: true
6829
- });
6830
- Object.defineProperty(Query.prototype, "Activated", {
6831
- get: function () { return this.get("Activated"); },
6832
- enumerable: false,
6833
- configurable: true
6834
- });
6835
- Object.defineProperty(Query.prototype, "SuspendedBy", {
6836
- get: function () { return this.get("SuspendedBy"); },
6837
- enumerable: false,
6838
- configurable: true
6839
- });
6840
- Object.defineProperty(Query.prototype, "Clusters", {
6841
- get: function () { return this.get("Clusters"); },
6842
- enumerable: false,
6843
- configurable: true
6844
- });
6845
- Object.defineProperty(Query.prototype, "PublishedBy", {
6846
- get: function () { return this.get("PublishedBy"); },
6847
- enumerable: false,
6848
- configurable: true
6849
- });
6850
- Object.defineProperty(Query.prototype, "Comment", {
6851
- get: function () { return this.get("Comment"); },
6852
- enumerable: false,
6853
- configurable: true
6854
- });
6855
- Object.defineProperty(Query.prototype, "LogicalFiles", {
6856
- get: function () { return this.get("LogicalFiles"); },
6857
- enumerable: false,
6858
- configurable: true
6859
- });
6860
- Object.defineProperty(Query.prototype, "SuperFiles", {
6861
- get: function () { return this.get("SuperFiles"); },
7121
+ Object.defineProperty(TargetCluster.prototype, "Name", {
7122
+ get: function () { return this.get("Name"); },
6862
7123
  enumerable: false,
6863
7124
  configurable: true
6864
7125
  });
6865
- Object.defineProperty(Query.prototype, "IsLibrary", {
6866
- get: function () { return this.get("IsLibrary"); },
7126
+ Object.defineProperty(TargetCluster.prototype, "Prefix", {
7127
+ get: function () { return this.get("Prefix"); },
6867
7128
  enumerable: false,
6868
7129
  configurable: true
6869
7130
  });
6870
- Object.defineProperty(Query.prototype, "Priority", {
6871
- get: function () { return this.get("Priority"); },
7131
+ Object.defineProperty(TargetCluster.prototype, "Type", {
7132
+ get: function () { return this.get("Type"); },
6872
7133
  enumerable: false,
6873
7134
  configurable: true
6874
7135
  });
6875
- Object.defineProperty(Query.prototype, "WUSnapShot", {
6876
- get: function () { return this.get("WUSnapShot"); },
7136
+ Object.defineProperty(TargetCluster.prototype, "IsDefault", {
7137
+ get: function () { return this.get("IsDefault"); },
6877
7138
  enumerable: false,
6878
7139
  configurable: true
6879
7140
  });
6880
- Object.defineProperty(Query.prototype, "CompileTime", {
6881
- get: function () { return this.get("CompileTime"); },
7141
+ Object.defineProperty(TargetCluster.prototype, "TpClusters", {
7142
+ get: function () { return this.get("TpClusters"); },
6882
7143
  enumerable: false,
6883
7144
  configurable: true
6884
7145
  });
6885
- Object.defineProperty(Query.prototype, "LibrariesUsed", {
6886
- get: function () { return this.get("LibrariesUsed"); },
7146
+ Object.defineProperty(TargetCluster.prototype, "TpEclCCServers", {
7147
+ get: function () { return this.get("TpEclCCServers"); },
6887
7148
  enumerable: false,
6888
7149
  configurable: true
6889
7150
  });
6890
- Object.defineProperty(Query.prototype, "CountGraphs", {
6891
- get: function () { return this.get("CountGraphs"); },
7151
+ Object.defineProperty(TargetCluster.prototype, "TpEclServers", {
7152
+ get: function () { return this.get("TpEclServers"); },
6892
7153
  enumerable: false,
6893
7154
  configurable: true
6894
7155
  });
6895
- Object.defineProperty(Query.prototype, "ResourceURLCount", {
6896
- get: function () { return this.get("ResourceURLCount"); },
7156
+ Object.defineProperty(TargetCluster.prototype, "TpEclAgents", {
7157
+ get: function () { return this.get("TpEclAgents"); },
6897
7158
  enumerable: false,
6898
7159
  configurable: true
6899
7160
  });
6900
- Object.defineProperty(Query.prototype, "WsEclAddresses", {
6901
- get: function () { return this.get("WsEclAddresses"); },
7161
+ Object.defineProperty(TargetCluster.prototype, "TpEclSchedulers", {
7162
+ get: function () { return this.get("TpEclSchedulers"); },
6902
7163
  enumerable: false,
6903
7164
  configurable: true
6904
7165
  });
6905
- Object.defineProperty(Query.prototype, "WUGraphs", {
6906
- get: function () { return this.get("WUGraphs"); },
7166
+ Object.defineProperty(TargetCluster.prototype, "MachineInfoEx", {
7167
+ get: function () { return this.get("MachineInfoEx", []); },
6907
7168
  enumerable: false,
6908
7169
  configurable: true
6909
7170
  });
6910
- Object.defineProperty(Query.prototype, "WUTimers", {
6911
- get: function () { return this.get("WUTimers"); },
7171
+ Object.defineProperty(TargetCluster.prototype, "CMachineInfoEx", {
7172
+ get: function () {
7173
+ var _this = this;
7174
+ return this.MachineInfoEx.map(function (machineInfoEx) { return Machine.attach(_this.machineConnection, machineInfoEx.Address, machineInfoEx); });
7175
+ },
6912
7176
  enumerable: false,
6913
7177
  configurable: true
6914
7178
  });
6915
- Query.attach = function (optsConnection, querySet, queryId) {
6916
- var retVal = _queries.get({ BaseUrl: optsConnection.baseUrl, QuerySet: querySet, QueryId: queryId }, function () {
6917
- return new Query(optsConnection, querySet, queryId);
7179
+ TargetCluster.attach = function (optsConnection, name, state) {
7180
+ var retVal = _targetCluster.get({ BaseUrl: optsConnection.baseUrl, Name: name }, function () {
7181
+ return new TargetCluster(optsConnection, name);
6918
7182
  });
7183
+ if (state) {
7184
+ retVal.set(__assign({}, state));
7185
+ }
6919
7186
  return retVal;
6920
7187
  };
6921
- Query.prototype.fetchDetails = function () {
6922
- return __awaiter(this, void 0, void 0, function () {
6923
- var queryDetails;
6924
- return __generator(this, function (_a) {
6925
- switch (_a.label) {
6926
- case 0: return [4 /*yield*/, this._wsWorkunits.WUQueryDetails({
6927
- QuerySet: this.QuerySet,
6928
- QueryId: this.QueryId,
6929
- IncludeStateOnClusters: false,
6930
- IncludeSuperFiles: false,
6931
- IncludeWsEclAddresses: false,
6932
- CheckAllNodes: false
6933
- })];
6934
- case 1:
6935
- queryDetails = _a.sent();
6936
- this.set(__assign({}, queryDetails));
6937
- return [2 /*return*/];
6938
- }
6939
- });
6940
- });
6941
- };
6942
- Query.prototype.fetchRequestSchema = function () {
6943
- return __awaiter(this, void 0, void 0, function () {
6944
- var _a;
6945
- return __generator(this, function (_b) {
6946
- switch (_b.label) {
6947
- case 0:
6948
- _a = this;
6949
- return [4 /*yield*/, this.connection.requestJson(this.QuerySet, this.QueryId)];
6950
- case 1:
6951
- _a._requestSchema = _b.sent();
6952
- return [2 /*return*/];
7188
+ TargetCluster.prototype.fetchMachines = function (request) {
7189
+ var _this = this;
7190
+ if (request === void 0) { request = {}; }
7191
+ return this.machineConnection.GetTargetClusterInfo(__assign({ TargetClusters: {
7192
+ Item: ["".concat(this.Type, ":").concat(this.Name)]
7193
+ } }, request)).then(function (response) {
7194
+ var retVal = [];
7195
+ for (var _i = 0, _a = response.TargetClusterInfoList.TargetClusterInfo; _i < _a.length; _i++) {
7196
+ var machineInfo = _a[_i];
7197
+ for (var _b = 0, _c = machineInfo.Processes.MachineInfoEx; _b < _c.length; _b++) {
7198
+ var machineInfoEx = _c[_b];
7199
+ retVal.push(machineInfoEx);
6953
7200
  }
6954
- });
7201
+ }
7202
+ _this.set("MachineInfoEx", retVal);
7203
+ return _this.CMachineInfoEx;
6955
7204
  });
6956
7205
  };
6957
- Query.prototype.fetchResponseSchema = function () {
6958
- return __awaiter(this, void 0, void 0, function () {
6959
- var _a;
6960
- return __generator(this, function (_b) {
6961
- switch (_b.label) {
6962
- case 0:
6963
- _a = this;
6964
- return [4 /*yield*/, this.connection.responseJson(this.QuerySet, this.QueryId)];
6965
- case 1:
6966
- _a._responseSchema = _b.sent();
6967
- return [2 /*return*/];
6968
- }
6969
- });
6970
- });
6971
- };
6972
- Query.prototype.fetchSchema = function () {
6973
- return __awaiter(this, void 0, void 0, function () {
6974
- return __generator(this, function (_a) {
6975
- switch (_a.label) {
6976
- case 0: return [4 /*yield*/, Promise.all([this.fetchRequestSchema(), this.fetchResponseSchema()])];
6977
- case 1:
6978
- _a.sent();
6979
- return [2 /*return*/];
7206
+ TargetCluster.prototype.machineStats = function () {
7207
+ var maxDisk = 0;
7208
+ var totalFree = 0;
7209
+ var total = 0;
7210
+ for (var _i = 0, _a = this.CMachineInfoEx; _i < _a.length; _i++) {
7211
+ var machine = _a[_i];
7212
+ for (var _b = 0, _c = machine.Storage.StorageInfo; _b < _c.length; _b++) {
7213
+ var storageInfo = _c[_b];
7214
+ totalFree += storageInfo.Available;
7215
+ total += storageInfo.Total;
7216
+ var usage = 1 - storageInfo.Available / storageInfo.Total;
7217
+ if (usage > maxDisk) {
7218
+ maxDisk = usage;
6980
7219
  }
6981
- });
6982
- });
6983
- };
6984
- Query.prototype.fetchSummaryStats = function () {
6985
- return this._wsWorkunits.WUQueryGetSummaryStats({ Target: this.QuerySet, QueryId: this.QueryId });
6986
- };
6987
- Query.prototype.submit = function (request) {
6988
- return this.connection.submit(this.QuerySet, this.QueryId, request).then(function (results) {
6989
- for (var key in results) {
6990
- results[key] = results[key].Row;
6991
7220
  }
6992
- return results;
6993
- });
6994
- };
6995
- Query.prototype.refresh = function () {
6996
- return __awaiter(this, void 0, void 0, function () {
6997
- return __generator(this, function (_a) {
6998
- switch (_a.label) {
6999
- case 0: return [4 /*yield*/, Promise.all([
7000
- this.fetchDetails(),
7001
- this.fetchSchema()
7002
- ])];
7003
- case 1:
7004
- _a.sent();
7005
- return [2 /*return*/, this];
7006
- }
7007
- });
7008
- });
7009
- };
7010
- Query.prototype.requestFields = function () {
7011
- if (!this._requestSchema)
7012
- return [];
7013
- return this._requestSchema;
7014
- };
7015
- Query.prototype.responseFields = function () {
7016
- if (!this._responseSchema)
7017
- return {};
7018
- return this._responseSchema;
7019
- };
7020
- Query.prototype.resultNames = function () {
7021
- var retVal = [];
7022
- for (var key in this.responseFields()) {
7023
- retVal.push(key);
7024
7221
  }
7025
- return retVal;
7222
+ return {
7223
+ maxDisk: maxDisk,
7224
+ meanDisk: 1 - (total ? totalFree / total : 1)
7225
+ };
7026
7226
  };
7027
- Query.prototype.resultFields = function (resultName) {
7028
- if (!this._responseSchema[resultName])
7029
- return [];
7030
- return this._responseSchema[resultName];
7227
+ TargetCluster.prototype.fetchUsage = function () {
7228
+ return this.machineConnection.GetTargetClusterUsageEx([this.Name]);
7031
7229
  };
7032
- return Query;
7230
+ return TargetCluster;
7033
7231
  }(util.StateObject));
7232
+ function targetClusters(optsConnection) {
7233
+ var connection;
7234
+ if (optsConnection instanceof TopologyService) {
7235
+ connection = optsConnection;
7236
+ }
7237
+ else {
7238
+ connection = new TopologyService(optsConnection);
7239
+ }
7240
+ return connection.TpListTargetClusters({}).then(function (response) {
7241
+ return response.TargetClusters.TpClusterNameType.map(function (item) { return TargetCluster.attach(optsConnection, item.Name, item); });
7242
+ });
7243
+ }
7244
+ var _defaultTargetCluster = {};
7245
+ function defaultTargetCluster(optsConnection) {
7246
+ if (!_defaultTargetCluster[optsConnection.baseUrl]) {
7247
+ var connection = void 0;
7248
+ if (optsConnection instanceof TopologyService) {
7249
+ connection = optsConnection;
7250
+ }
7251
+ else {
7252
+ connection = new TopologyService(optsConnection);
7253
+ }
7254
+ _defaultTargetCluster[optsConnection.baseUrl] = connection.TpListTargetClusters({}).then(function (response) {
7255
+ var firstItem;
7256
+ var defaultItem;
7257
+ var hthorItem;
7258
+ response.TargetClusters.TpClusterNameType.forEach(function (item) {
7259
+ if (!firstItem) {
7260
+ firstItem = item;
7261
+ }
7262
+ if (!defaultItem && item.IsDefault === true) {
7263
+ defaultItem = item;
7264
+ }
7265
+ if (!hthorItem && item.Type === "hthor") {
7266
+ hthorItem = item;
7267
+ }
7268
+ });
7269
+ var defItem = defaultItem || hthorItem || firstItem;
7270
+ return TargetCluster.attach(optsConnection, defItem.Name, defItem);
7271
+ });
7272
+ }
7273
+ return _defaultTargetCluster[optsConnection.baseUrl];
7274
+ }
7034
7275
 
7035
- var StoreCache = /** @class */ (function (_super) {
7036
- __extends(StoreCache, _super);
7037
- function StoreCache() {
7276
+ var TopologyCache = /** @class */ (function (_super) {
7277
+ __extends(TopologyCache, _super);
7278
+ function TopologyCache() {
7038
7279
  return _super.call(this, function (obj) {
7039
- return "".concat(obj.BaseUrl, "-").concat(obj.Name, ":").concat(obj.UserSpecific, "-").concat(obj.Namespace);
7280
+ return obj.BaseUrl;
7040
7281
  }) || this;
7041
7282
  }
7042
- return StoreCache;
7283
+ return TopologyCache;
7043
7284
  }(util.Cache));
7044
- var _store = new StoreCache();
7045
- var ValueChangedMessage = /** @class */ (function (_super) {
7046
- __extends(ValueChangedMessage, _super);
7047
- function ValueChangedMessage(key, value, oldValue) {
7285
+ var _topology = new TopologyCache();
7286
+ var Topology = /** @class */ (function (_super) {
7287
+ __extends(Topology, _super);
7288
+ function Topology(optsConnection) {
7048
7289
  var _this = _super.call(this) || this;
7049
- _this.key = key;
7050
- _this.value = value;
7051
- _this.oldValue = oldValue;
7052
- return _this;
7053
- }
7054
- Object.defineProperty(ValueChangedMessage.prototype, "canConflate", {
7055
- get: function () { return true; },
7056
- enumerable: false,
7057
- configurable: true
7058
- });
7059
- ValueChangedMessage.prototype.conflate = function (other) {
7060
- if (this.key === other.key) {
7061
- this.value = other.value;
7062
- return true;
7063
- }
7064
- return false;
7065
- };
7066
- ValueChangedMessage.prototype.void = function () {
7067
- return this.value === this.oldValue;
7068
- };
7069
- return ValueChangedMessage;
7070
- }(util.Message));
7071
- var Store = /** @class */ (function () {
7072
- function Store(optsConnection, Name, Namespace, UserSpecific) {
7073
- this._dispatch = new util.Dispatch();
7074
- this._knownValues = {};
7075
- if (optsConnection instanceof StoreService) {
7076
- this.connection = optsConnection;
7290
+ if (optsConnection instanceof TopologyService) {
7291
+ _this.connection = optsConnection;
7077
7292
  }
7078
7293
  else {
7079
- this.connection = new StoreService(optsConnection);
7294
+ _this.connection = new TopologyService(optsConnection);
7080
7295
  }
7081
- this.Name = Name;
7082
- this.UserSpecific = UserSpecific;
7083
- this.Namespace = Namespace;
7296
+ return _this;
7084
7297
  }
7085
- Object.defineProperty(Store.prototype, "BaseUrl", {
7298
+ Object.defineProperty(Topology.prototype, "BaseUrl", {
7086
7299
  get: function () { return this.connection.baseUrl; },
7087
7300
  enumerable: false,
7088
7301
  configurable: true
7089
7302
  });
7090
- Store.attach = function (optsConnection, Name, Namespace, UserSpecific) {
7091
- if (Name === void 0) { Name = "HPCCApps"; }
7092
- if (UserSpecific === void 0) { UserSpecific = true; }
7093
- var retVal = _store.get({ BaseUrl: optsConnection.baseUrl, Name: Name, UserSpecific: UserSpecific, Namespace: Namespace }, function () {
7094
- return new Store(optsConnection, Name, Namespace, UserSpecific);
7303
+ Object.defineProperty(Topology.prototype, "properties", {
7304
+ // Accessors ---
7305
+ get: function () { return this.get(); },
7306
+ enumerable: false,
7307
+ configurable: true
7308
+ });
7309
+ Object.defineProperty(Topology.prototype, "TargetClusters", {
7310
+ get: function () { return this.get("TargetClusters"); },
7311
+ enumerable: false,
7312
+ configurable: true
7313
+ });
7314
+ Object.defineProperty(Topology.prototype, "CTargetClusters", {
7315
+ get: function () {
7316
+ var _this = this;
7317
+ return this.TargetClusters.map(function (tc) { return TargetCluster.attach(_this.connection, tc.Name, tc); });
7318
+ },
7319
+ enumerable: false,
7320
+ configurable: true
7321
+ });
7322
+ Object.defineProperty(Topology.prototype, "LogicalClusters", {
7323
+ get: function () { return this.get("LogicalClusters"); },
7324
+ enumerable: false,
7325
+ configurable: true
7326
+ });
7327
+ Object.defineProperty(Topology.prototype, "Services", {
7328
+ get: function () { return this.get("Services"); },
7329
+ enumerable: false,
7330
+ configurable: true
7331
+ });
7332
+ Topology.attach = function (optsConnection) {
7333
+ var retVal = _topology.get({ BaseUrl: optsConnection.baseUrl }, function () {
7334
+ return new Topology(optsConnection);
7095
7335
  });
7096
7336
  return retVal;
7097
7337
  };
7098
- Store.prototype.create = function () {
7099
- this.connection.CreateStore({ Name: this.Name, UserSpecific: this.UserSpecific, Type: "", Description: "" });
7100
- };
7101
- Store.prototype.set = function (key, value, broadcast) {
7338
+ Topology.prototype.GetESPServiceBaseURL = function (type) {
7102
7339
  var _this = this;
7103
- if (broadcast === void 0) { broadcast = true; }
7104
- return this.connection.Set({
7105
- StoreName: this.Name,
7106
- UserSpecific: this.UserSpecific,
7107
- Namespace: this.Namespace,
7108
- Key: key,
7109
- Value: value
7110
- }).then(function (response) {
7111
- var oldValue = _this._knownValues[key];
7112
- _this._knownValues[key] = value;
7113
- if (broadcast) {
7114
- _this._dispatch.post(new ValueChangedMessage(key, value, oldValue));
7340
+ if (type === void 0) { type = ""; }
7341
+ return this.connection.TpServiceQuery({}).then(function (response) {
7342
+ var rootProtocol = _this.connection.protocol();
7343
+ var ip = _this.connection.ip();
7344
+ var port = rootProtocol === "https:" ? "18002" : "8002";
7345
+ if (util.exists("ServiceList.TpEspServers.TpEspServer", response)) {
7346
+ for (var _i = 0, _a = response.ServiceList.TpEspServers.TpEspServer; _i < _a.length; _i++) {
7347
+ var item = _a[_i];
7348
+ if (util.exists("TpBindings.TpBinding", item)) {
7349
+ for (var _b = 0, _c = item.TpBindings.TpBinding; _b < _c.length; _b++) {
7350
+ var binding = _c[_b];
7351
+ if (binding.Service === type && binding.Protocol + ":" === rootProtocol) {
7352
+ port = binding.Port;
7353
+ }
7354
+ }
7355
+ }
7356
+ }
7115
7357
  }
7116
- }).catch(function (e) {
7117
- console.error("Store.set(\"".concat(key, "\", \"").concat(value, "\") failed:"), e);
7358
+ return "".concat(rootProtocol, "//").concat(ip, ":").concat(port, "/");
7118
7359
  });
7119
7360
  };
7120
- Store.prototype.get = function (key, broadcast) {
7361
+ Topology.prototype.fetchTargetClusters = function () {
7121
7362
  var _this = this;
7122
- if (broadcast === void 0) { broadcast = true; }
7123
- return this.connection.Fetch({
7124
- StoreName: this.Name,
7125
- UserSpecific: this.UserSpecific,
7126
- Namespace: this.Namespace,
7127
- Key: key
7128
- }).then(function (response) {
7129
- var oldValue = _this._knownValues[key];
7130
- _this._knownValues[key] = response.Value;
7131
- if (broadcast) {
7132
- _this._dispatch.post(new ValueChangedMessage(key, response.Value, oldValue));
7133
- }
7134
- return response.Value;
7135
- }).catch(function (e) {
7136
- console.error("Store.get(".concat(key, ") failed:"), e);
7137
- return undefined;
7363
+ return this.connection.TpTargetClusterQuery({ Type: "ROOT" }).then(function (response) {
7364
+ var _a, _b;
7365
+ _this.set({
7366
+ TargetClusters: (_b = (_a = response.TpTargetClusters) === null || _a === void 0 ? void 0 : _a.TpTargetCluster) !== null && _b !== void 0 ? _b : []
7367
+ });
7368
+ return _this.CTargetClusters;
7138
7369
  });
7139
7370
  };
7140
- Store.prototype.getAll = function (broadcast) {
7371
+ Topology.prototype.fetchLogicalClusters = function (request) {
7141
7372
  var _this = this;
7142
- if (broadcast === void 0) { broadcast = true; }
7143
- return this.connection.FetchAll({
7144
- StoreName: this.Name,
7145
- UserSpecific: this.UserSpecific,
7146
- Namespace: this.Namespace
7147
- }).then(function (response) {
7148
- var retVal = {};
7149
- var deletedValues = _this._knownValues;
7150
- _this._knownValues = {};
7151
- response.Pairs.Pair.forEach(function (pair) {
7152
- var oldValue = _this._knownValues[pair.Key];
7153
- _this._knownValues[pair.Key] = pair.Value;
7154
- delete deletedValues[pair.Key];
7155
- retVal[pair.Key] = pair.Value;
7156
- if (broadcast) {
7157
- _this._dispatch.post(new ValueChangedMessage(pair.Key, pair.Value, oldValue));
7158
- }
7373
+ if (request === void 0) { request = {}; }
7374
+ return this.connection.TpLogicalClusterQuery(request).then(function (response) {
7375
+ _this.set({
7376
+ LogicalClusters: response.TpLogicalClusters.TpLogicalCluster
7159
7377
  });
7160
- if (broadcast) {
7161
- for (var key in deletedValues) {
7162
- _this._dispatch.post(new ValueChangedMessage(key, undefined, deletedValues[key]));
7163
- }
7164
- }
7165
- return retVal;
7166
- }).catch(function (e) {
7167
- console.error("Store.getAll failed:", e);
7168
- return {};
7378
+ return _this.LogicalClusters;
7169
7379
  });
7170
7380
  };
7171
- Store.prototype.delete = function (key, broadcast) {
7381
+ Topology.prototype.fetchServices = function (request) {
7172
7382
  var _this = this;
7173
- if (broadcast === void 0) { broadcast = true; }
7174
- return this.connection.Delete({
7175
- StoreName: this.Name,
7176
- UserSpecific: this.UserSpecific,
7177
- Namespace: this.Namespace,
7178
- Key: key
7179
- }).then(function (response) {
7180
- var oldValue = _this._knownValues[key];
7181
- delete _this._knownValues[key];
7182
- if (broadcast) {
7183
- _this._dispatch.post(new ValueChangedMessage(key, undefined, oldValue));
7184
- }
7185
- }).catch(function (e) {
7186
- console.error("Store.delete(".concat(key, ") failed:"), e);
7383
+ if (request === void 0) { request = {}; }
7384
+ return this.connection.TpServiceQuery(request).then(function (response) {
7385
+ _this.set({
7386
+ Services: response.ServiceList
7387
+ });
7388
+ return _this.Services;
7187
7389
  });
7188
7390
  };
7189
- Store.prototype.monitor = function (callback) {
7190
- return this._dispatch.attach(callback);
7391
+ Topology.prototype.refresh = function (force) {
7392
+ var _this = this;
7393
+ if (force === void 0) { force = false; }
7394
+ if (!this._prevRefresh || force) {
7395
+ this._prevRefresh = Promise.all([this.fetchTargetClusters(), this.fetchLogicalClusters(), this.fetchServices()]).then(function () {
7396
+ return _this;
7397
+ });
7398
+ }
7399
+ return this._prevRefresh;
7191
7400
  };
7192
- return Store;
7193
- }());
7401
+ // Monitoring ---
7402
+ // Events ---
7403
+ Topology.prototype.on = function (eventID, propIDorCallback, callback) {
7404
+ if (this.isCallback(propIDorCallback)) {
7405
+ switch (eventID) {
7406
+ case "changed":
7407
+ _super.prototype.on.call(this, eventID, propIDorCallback);
7408
+ break;
7409
+ }
7410
+ }
7411
+ else {
7412
+ switch (eventID) {
7413
+ case "changed":
7414
+ _super.prototype.on.call(this, eventID, propIDorCallback, callback);
7415
+ break;
7416
+ }
7417
+ }
7418
+ this._monitor();
7419
+ return this;
7420
+ };
7421
+ return Topology;
7422
+ }(util.StateObject));
7194
7423
 
7195
- var TargetClusterCache = /** @class */ (function (_super) {
7196
- __extends(TargetClusterCache, _super);
7197
- function TargetClusterCache() {
7424
+ var logger$2 = util.scopedLogger("@hpcc-js/comms/ecl/query.ts");
7425
+ var QueryCache = /** @class */ (function (_super) {
7426
+ __extends(QueryCache, _super);
7427
+ function QueryCache() {
7198
7428
  return _super.call(this, function (obj) {
7199
- return "".concat(obj.BaseUrl, "-").concat(obj.Name);
7429
+ return util.Cache.hash([obj.QueryId, obj.QuerySet]);
7200
7430
  }) || this;
7201
7431
  }
7202
- return TargetClusterCache;
7432
+ return QueryCache;
7203
7433
  }(util.Cache));
7204
- var _targetCluster = new TargetClusterCache();
7205
- var TargetCluster = /** @class */ (function (_super) {
7206
- __extends(TargetCluster, _super);
7207
- function TargetCluster(optsConnection, name) {
7434
+ var _queries = new QueryCache();
7435
+ var Query = /** @class */ (function (_super) {
7436
+ __extends(Query, _super);
7437
+ function Query(optsConnection, querySet, queryID, queryDetails) {
7208
7438
  var _this = _super.call(this) || this;
7209
- if (optsConnection instanceof TopologyService) {
7210
- _this.connection = optsConnection;
7211
- _this.machineConnection = new MachineService(optsConnection.connectionOptions());
7439
+ if (optsConnection instanceof WorkunitsService) {
7440
+ _this.wsWorkunitsService = optsConnection;
7212
7441
  }
7213
7442
  else {
7214
- _this.connection = new TopologyService(optsConnection);
7215
- _this.machineConnection = new MachineService(optsConnection);
7443
+ _this.wsWorkunitsService = new WorkunitsService(optsConnection);
7216
7444
  }
7217
- _this.clear({
7218
- Name: name
7219
- });
7445
+ _this.topology = Topology.attach(_this.wsWorkunitsService.opts());
7446
+ _this.set(__assign({ QuerySet: querySet, QueryId: queryID }, queryDetails));
7220
7447
  return _this;
7221
7448
  }
7222
- Object.defineProperty(TargetCluster.prototype, "BaseUrl", {
7223
- get: function () { return this.connection.baseUrl; },
7449
+ Object.defineProperty(Query.prototype, "BaseUrl", {
7450
+ get: function () { return this.wsWorkunitsService.baseUrl; },
7451
+ enumerable: false,
7452
+ configurable: true
7453
+ });
7454
+ Object.defineProperty(Query.prototype, "properties", {
7455
+ get: function () { return this.get(); },
7456
+ enumerable: false,
7457
+ configurable: true
7458
+ });
7459
+ Object.defineProperty(Query.prototype, "Exceptions", {
7460
+ get: function () { return this.get("Exceptions"); },
7461
+ enumerable: false,
7462
+ configurable: true
7463
+ });
7464
+ Object.defineProperty(Query.prototype, "QueryId", {
7465
+ get: function () { return this.get("QueryId"); },
7466
+ enumerable: false,
7467
+ configurable: true
7468
+ });
7469
+ Object.defineProperty(Query.prototype, "QuerySet", {
7470
+ get: function () { return this.get("QuerySet"); },
7471
+ enumerable: false,
7472
+ configurable: true
7473
+ });
7474
+ Object.defineProperty(Query.prototype, "QueryName", {
7475
+ get: function () { return this.get("QueryName"); },
7476
+ enumerable: false,
7477
+ configurable: true
7478
+ });
7479
+ Object.defineProperty(Query.prototype, "Wuid", {
7480
+ get: function () { return this.get("Wuid"); },
7481
+ enumerable: false,
7482
+ configurable: true
7483
+ });
7484
+ Object.defineProperty(Query.prototype, "Dll", {
7485
+ get: function () { return this.get("Dll"); },
7486
+ enumerable: false,
7487
+ configurable: true
7488
+ });
7489
+ Object.defineProperty(Query.prototype, "Suspended", {
7490
+ get: function () { return this.get("Suspended"); },
7491
+ enumerable: false,
7492
+ configurable: true
7493
+ });
7494
+ Object.defineProperty(Query.prototype, "Activated", {
7495
+ get: function () { return this.get("Activated"); },
7496
+ enumerable: false,
7497
+ configurable: true
7498
+ });
7499
+ Object.defineProperty(Query.prototype, "SuspendedBy", {
7500
+ get: function () { return this.get("SuspendedBy"); },
7501
+ enumerable: false,
7502
+ configurable: true
7503
+ });
7504
+ Object.defineProperty(Query.prototype, "Clusters", {
7505
+ get: function () { return this.get("Clusters"); },
7506
+ enumerable: false,
7507
+ configurable: true
7508
+ });
7509
+ Object.defineProperty(Query.prototype, "PublishedBy", {
7510
+ get: function () { return this.get("PublishedBy"); },
7511
+ enumerable: false,
7512
+ configurable: true
7513
+ });
7514
+ Object.defineProperty(Query.prototype, "Comment", {
7515
+ get: function () { return this.get("Comment"); },
7224
7516
  enumerable: false,
7225
7517
  configurable: true
7226
7518
  });
7227
- Object.defineProperty(TargetCluster.prototype, "Name", {
7228
- get: function () { return this.get("Name"); },
7519
+ Object.defineProperty(Query.prototype, "LogicalFiles", {
7520
+ get: function () { return this.get("LogicalFiles"); },
7229
7521
  enumerable: false,
7230
7522
  configurable: true
7231
7523
  });
7232
- Object.defineProperty(TargetCluster.prototype, "Prefix", {
7233
- get: function () { return this.get("Prefix"); },
7524
+ Object.defineProperty(Query.prototype, "SuperFiles", {
7525
+ get: function () { return this.get("SuperFiles"); },
7234
7526
  enumerable: false,
7235
7527
  configurable: true
7236
7528
  });
7237
- Object.defineProperty(TargetCluster.prototype, "Type", {
7238
- get: function () { return this.get("Type"); },
7529
+ Object.defineProperty(Query.prototype, "IsLibrary", {
7530
+ get: function () { return this.get("IsLibrary"); },
7239
7531
  enumerable: false,
7240
7532
  configurable: true
7241
7533
  });
7242
- Object.defineProperty(TargetCluster.prototype, "IsDefault", {
7243
- get: function () { return this.get("IsDefault"); },
7534
+ Object.defineProperty(Query.prototype, "Priority", {
7535
+ get: function () { return this.get("Priority"); },
7244
7536
  enumerable: false,
7245
7537
  configurable: true
7246
7538
  });
7247
- Object.defineProperty(TargetCluster.prototype, "TpClusters", {
7248
- get: function () { return this.get("TpClusters"); },
7539
+ Object.defineProperty(Query.prototype, "WUSnapShot", {
7540
+ get: function () { return this.get("WUSnapShot"); },
7249
7541
  enumerable: false,
7250
7542
  configurable: true
7251
7543
  });
7252
- Object.defineProperty(TargetCluster.prototype, "TpEclCCServers", {
7253
- get: function () { return this.get("TpEclCCServers"); },
7544
+ Object.defineProperty(Query.prototype, "CompileTime", {
7545
+ get: function () { return this.get("CompileTime"); },
7254
7546
  enumerable: false,
7255
7547
  configurable: true
7256
7548
  });
7257
- Object.defineProperty(TargetCluster.prototype, "TpEclServers", {
7258
- get: function () { return this.get("TpEclServers"); },
7549
+ Object.defineProperty(Query.prototype, "LibrariesUsed", {
7550
+ get: function () { return this.get("LibrariesUsed"); },
7259
7551
  enumerable: false,
7260
7552
  configurable: true
7261
7553
  });
7262
- Object.defineProperty(TargetCluster.prototype, "TpEclAgents", {
7263
- get: function () { return this.get("TpEclAgents"); },
7554
+ Object.defineProperty(Query.prototype, "CountGraphs", {
7555
+ get: function () { return this.get("CountGraphs"); },
7264
7556
  enumerable: false,
7265
7557
  configurable: true
7266
7558
  });
7267
- Object.defineProperty(TargetCluster.prototype, "TpEclSchedulers", {
7268
- get: function () { return this.get("TpEclSchedulers"); },
7559
+ Object.defineProperty(Query.prototype, "ResourceURLCount", {
7560
+ get: function () { return this.get("ResourceURLCount"); },
7269
7561
  enumerable: false,
7270
7562
  configurable: true
7271
7563
  });
7272
- Object.defineProperty(TargetCluster.prototype, "MachineInfoEx", {
7273
- get: function () { return this.get("MachineInfoEx", []); },
7564
+ Object.defineProperty(Query.prototype, "WsEclAddresses", {
7565
+ get: function () { return this.get("WsEclAddresses"); },
7274
7566
  enumerable: false,
7275
7567
  configurable: true
7276
7568
  });
7277
- Object.defineProperty(TargetCluster.prototype, "CMachineInfoEx", {
7278
- get: function () {
7279
- var _this = this;
7280
- return this.MachineInfoEx.map(function (machineInfoEx) { return Machine.attach(_this.machineConnection, machineInfoEx.Address, machineInfoEx); });
7281
- },
7569
+ Object.defineProperty(Query.prototype, "WUGraphs", {
7570
+ get: function () { return this.get("WUGraphs"); },
7282
7571
  enumerable: false,
7283
7572
  configurable: true
7284
7573
  });
7285
- TargetCluster.attach = function (optsConnection, name, state) {
7286
- var retVal = _targetCluster.get({ BaseUrl: optsConnection.baseUrl, Name: name }, function () {
7287
- return new TargetCluster(optsConnection, name);
7574
+ Object.defineProperty(Query.prototype, "WUTimers", {
7575
+ get: function () { return this.get("WUTimers"); },
7576
+ enumerable: false,
7577
+ configurable: true
7578
+ });
7579
+ Query.attach = function (optsConnection, querySet, queryId) {
7580
+ var retVal = _queries.get({ BaseUrl: optsConnection.baseUrl, QuerySet: querySet, QueryId: queryId }, function () {
7581
+ return new Query(optsConnection, querySet, queryId);
7288
7582
  });
7289
- if (state) {
7290
- retVal.set(__assign({}, state));
7291
- }
7292
7583
  return retVal;
7293
7584
  };
7294
- TargetCluster.prototype.fetchMachines = function (request) {
7295
- var _this = this;
7296
- if (request === void 0) { request = {}; }
7297
- return this.machineConnection.GetTargetClusterInfo(__assign({ TargetClusters: {
7298
- Item: ["".concat(this.Type, ":").concat(this.Name)]
7299
- } }, request)).then(function (response) {
7300
- var retVal = [];
7301
- for (var _i = 0, _a = response.TargetClusterInfoList.TargetClusterInfo; _i < _a.length; _i++) {
7302
- var machineInfo = _a[_i];
7303
- for (var _b = 0, _c = machineInfo.Processes.MachineInfoEx; _b < _c.length; _b++) {
7304
- var machineInfoEx = _c[_b];
7305
- retVal.push(machineInfoEx);
7585
+ Query.prototype.wsEclService = function () {
7586
+ return __awaiter(this, void 0, void 0, function () {
7587
+ return __generator(this, function (_a) {
7588
+ if (!this._eclService) {
7589
+ this._eclService = this.topology.fetchServices({}).then(function (services) {
7590
+ var _a, _b, _c, _d;
7591
+ for (var _i = 0, _e = (_b = (_a = services === null || services === void 0 ? void 0 : services.TpEspServers) === null || _a === void 0 ? void 0 : _a.TpEspServer) !== null && _b !== void 0 ? _b : []; _i < _e.length; _i++) {
7592
+ var espServer = _e[_i];
7593
+ for (var _f = 0, _g = (_d = (_c = espServer === null || espServer === void 0 ? void 0 : espServer.TpBindings) === null || _c === void 0 ? void 0 : _c.TpBinding) !== null && _d !== void 0 ? _d : []; _f < _g.length; _f++) {
7594
+ var binding = _g[_f];
7595
+ if ((binding === null || binding === void 0 ? void 0 : binding.Service) === "ws_ecl") {
7596
+ var baseUrl = "".concat(binding.Protocol, "://").concat(globalThis.location.hostname, ":").concat(binding.Port);
7597
+ return new EclService({ baseUrl: baseUrl });
7598
+ }
7599
+ }
7600
+ }
7601
+ return undefined;
7602
+ });
7306
7603
  }
7307
- }
7308
- _this.set("MachineInfoEx", retVal);
7309
- return _this.CMachineInfoEx;
7604
+ return [2 /*return*/, this._eclService];
7605
+ });
7310
7606
  });
7311
7607
  };
7312
- TargetCluster.prototype.machineStats = function () {
7313
- var maxDisk = 0;
7314
- var totalFree = 0;
7315
- var total = 0;
7316
- for (var _i = 0, _a = this.CMachineInfoEx; _i < _a.length; _i++) {
7317
- var machine = _a[_i];
7318
- for (var _b = 0, _c = machine.Storage.StorageInfo; _b < _c.length; _b++) {
7319
- var storageInfo = _c[_b];
7320
- totalFree += storageInfo.Available;
7321
- total += storageInfo.Total;
7322
- var usage = 1 - storageInfo.Available / storageInfo.Total;
7323
- if (usage > maxDisk) {
7324
- maxDisk = usage;
7608
+ Query.prototype.fetchDetails = function () {
7609
+ return __awaiter(this, void 0, void 0, function () {
7610
+ var queryDetails;
7611
+ return __generator(this, function (_a) {
7612
+ switch (_a.label) {
7613
+ case 0: return [4 /*yield*/, this.wsWorkunitsService.WUQueryDetails({
7614
+ QuerySet: this.QuerySet,
7615
+ QueryId: this.QueryId,
7616
+ IncludeStateOnClusters: true,
7617
+ IncludeSuperFiles: true,
7618
+ IncludeWsEclAddresses: true,
7619
+ CheckAllNodes: false
7620
+ })];
7621
+ case 1:
7622
+ queryDetails = _a.sent();
7623
+ this.set(__assign({}, queryDetails));
7624
+ return [2 /*return*/];
7325
7625
  }
7326
- }
7327
- }
7328
- return {
7329
- maxDisk: maxDisk,
7330
- meanDisk: 1 - (total ? totalFree / total : 1)
7331
- };
7626
+ });
7627
+ });
7332
7628
  };
7333
- TargetCluster.prototype.fetchUsage = function () {
7334
- return this.machineConnection.GetTargetClusterUsageEx([this.Name]);
7629
+ Query.prototype.fetchRequestSchema = function () {
7630
+ var _a;
7631
+ return __awaiter(this, void 0, void 0, function () {
7632
+ var wsEclService, _b, e_1;
7633
+ return __generator(this, function (_c) {
7634
+ switch (_c.label) {
7635
+ case 0: return [4 /*yield*/, this.wsEclService()];
7636
+ case 1:
7637
+ wsEclService = _c.sent();
7638
+ _c.label = 2;
7639
+ case 2:
7640
+ _c.trys.push([2, 4, , 5]);
7641
+ _b = this;
7642
+ return [4 /*yield*/, (wsEclService === null || wsEclService === void 0 ? void 0 : wsEclService.requestJson(this.QuerySet, this.QueryId))];
7643
+ case 3:
7644
+ _b._requestSchema = (_a = _c.sent()) !== null && _a !== void 0 ? _a : [];
7645
+ return [3 /*break*/, 5];
7646
+ case 4:
7647
+ e_1 = _c.sent();
7648
+ // See: https://track.hpccsystems.com/browse/HPCC-29827
7649
+ logger$2.debug(e_1);
7650
+ this._requestSchema = [];
7651
+ return [3 /*break*/, 5];
7652
+ case 5: return [2 /*return*/];
7653
+ }
7654
+ });
7655
+ });
7335
7656
  };
7336
- return TargetCluster;
7337
- }(util.StateObject));
7338
- function targetClusters(optsConnection) {
7339
- var connection;
7340
- if (optsConnection instanceof TopologyService) {
7341
- connection = optsConnection;
7342
- }
7343
- else {
7344
- connection = new TopologyService(optsConnection);
7345
- }
7346
- return connection.TpListTargetClusters({}).then(function (response) {
7347
- return response.TargetClusters.TpClusterNameType.map(function (item) { return TargetCluster.attach(optsConnection, item.Name, item); });
7348
- });
7349
- }
7350
- var _defaultTargetCluster = {};
7351
- function defaultTargetCluster(optsConnection) {
7352
- if (!_defaultTargetCluster[optsConnection.baseUrl]) {
7353
- var connection = void 0;
7354
- if (optsConnection instanceof TopologyService) {
7355
- connection = optsConnection;
7356
- }
7357
- else {
7358
- connection = new TopologyService(optsConnection);
7359
- }
7360
- _defaultTargetCluster[optsConnection.baseUrl] = connection.TpListTargetClusters({}).then(function (response) {
7361
- var firstItem;
7362
- var defaultItem;
7363
- var hthorItem;
7364
- response.TargetClusters.TpClusterNameType.forEach(function (item) {
7365
- if (!firstItem) {
7366
- firstItem = item;
7657
+ Query.prototype.fetchResponseSchema = function () {
7658
+ var _a;
7659
+ return __awaiter(this, void 0, void 0, function () {
7660
+ var wsEclService, _b, e_2;
7661
+ return __generator(this, function (_c) {
7662
+ switch (_c.label) {
7663
+ case 0: return [4 /*yield*/, this.wsEclService()];
7664
+ case 1:
7665
+ wsEclService = _c.sent();
7666
+ _c.label = 2;
7667
+ case 2:
7668
+ _c.trys.push([2, 4, , 5]);
7669
+ _b = this;
7670
+ return [4 /*yield*/, (wsEclService === null || wsEclService === void 0 ? void 0 : wsEclService.responseJson(this.QuerySet, this.QueryId))];
7671
+ case 3:
7672
+ _b._responseSchema = (_a = _c.sent()) !== null && _a !== void 0 ? _a : {};
7673
+ return [3 /*break*/, 5];
7674
+ case 4:
7675
+ e_2 = _c.sent();
7676
+ // See: https://track.hpccsystems.com/browse/HPCC-29827
7677
+ logger$2.debug(e_2);
7678
+ this._responseSchema = {};
7679
+ return [3 /*break*/, 5];
7680
+ case 5: return [2 /*return*/];
7367
7681
  }
7368
- if (!defaultItem && item.IsDefault === true) {
7369
- defaultItem = item;
7682
+ });
7683
+ });
7684
+ };
7685
+ Query.prototype.fetchSchema = function () {
7686
+ return __awaiter(this, void 0, void 0, function () {
7687
+ return __generator(this, function (_a) {
7688
+ switch (_a.label) {
7689
+ case 0: return [4 /*yield*/, Promise.all([this.fetchRequestSchema(), this.fetchResponseSchema()])];
7690
+ case 1:
7691
+ _a.sent();
7692
+ return [2 /*return*/];
7370
7693
  }
7371
- if (!hthorItem && item.Type === "hthor") {
7372
- hthorItem = item;
7694
+ });
7695
+ });
7696
+ };
7697
+ Query.prototype.fetchSummaryStats = function () {
7698
+ return this.wsWorkunitsService.WUQueryGetSummaryStats({ Target: this.QuerySet, QueryId: this.QueryId });
7699
+ };
7700
+ Query.prototype.submit = function (request) {
7701
+ var _a;
7702
+ return __awaiter(this, void 0, void 0, function () {
7703
+ var wsEclService;
7704
+ return __generator(this, function (_b) {
7705
+ switch (_b.label) {
7706
+ case 0: return [4 /*yield*/, this.wsEclService()];
7707
+ case 1:
7708
+ wsEclService = _b.sent();
7709
+ try {
7710
+ return [2 /*return*/, (_a = wsEclService === null || wsEclService === void 0 ? void 0 : wsEclService.submit(this.QuerySet, this.QueryId, request).then(function (results) {
7711
+ for (var key in results) {
7712
+ results[key] = results[key].Row;
7713
+ }
7714
+ return results;
7715
+ })) !== null && _a !== void 0 ? _a : []];
7716
+ }
7717
+ catch (e) {
7718
+ // See: https://track.hpccsystems.com/browse/HPCC-29827
7719
+ logger$2.debug(e);
7720
+ return [2 /*return*/, []];
7721
+ }
7722
+ return [2 /*return*/];
7373
7723
  }
7374
7724
  });
7375
- var defItem = defaultItem || hthorItem || firstItem;
7376
- return TargetCluster.attach(optsConnection, defItem.Name, defItem);
7377
7725
  });
7378
- }
7379
- return _defaultTargetCluster[optsConnection.baseUrl];
7380
- }
7726
+ };
7727
+ Query.prototype.refresh = function () {
7728
+ return __awaiter(this, void 0, void 0, function () {
7729
+ return __generator(this, function (_a) {
7730
+ switch (_a.label) {
7731
+ case 0: return [4 /*yield*/, Promise.all([
7732
+ this.fetchDetails(),
7733
+ this.fetchSchema()
7734
+ ])];
7735
+ case 1:
7736
+ _a.sent();
7737
+ return [2 /*return*/, this];
7738
+ }
7739
+ });
7740
+ });
7741
+ };
7742
+ Query.prototype.requestFields = function () {
7743
+ if (!this._requestSchema)
7744
+ return [];
7745
+ return this._requestSchema;
7746
+ };
7747
+ Query.prototype.responseFields = function () {
7748
+ if (!this._responseSchema)
7749
+ return {};
7750
+ return this._responseSchema;
7751
+ };
7752
+ Query.prototype.resultNames = function () {
7753
+ var retVal = [];
7754
+ for (var key in this.responseFields()) {
7755
+ retVal.push(key);
7756
+ }
7757
+ return retVal;
7758
+ };
7759
+ Query.prototype.resultFields = function (resultName) {
7760
+ if (!this._responseSchema[resultName])
7761
+ return [];
7762
+ return this._responseSchema[resultName];
7763
+ };
7764
+ return Query;
7765
+ }(util.StateObject));
7381
7766
 
7382
- var TopologyCache = /** @class */ (function (_super) {
7383
- __extends(TopologyCache, _super);
7384
- function TopologyCache() {
7767
+ var StoreCache = /** @class */ (function (_super) {
7768
+ __extends(StoreCache, _super);
7769
+ function StoreCache() {
7385
7770
  return _super.call(this, function (obj) {
7386
- return obj.BaseUrl;
7771
+ return "".concat(obj.BaseUrl, "-").concat(obj.Name, ":").concat(obj.UserSpecific, "-").concat(obj.Namespace);
7387
7772
  }) || this;
7388
7773
  }
7389
- return TopologyCache;
7774
+ return StoreCache;
7390
7775
  }(util.Cache));
7391
- var _topology = new TopologyCache();
7392
- var Topology = /** @class */ (function (_super) {
7393
- __extends(Topology, _super);
7394
- function Topology(optsConnection) {
7776
+ var _store = new StoreCache();
7777
+ var ValueChangedMessage = /** @class */ (function (_super) {
7778
+ __extends(ValueChangedMessage, _super);
7779
+ function ValueChangedMessage(key, value, oldValue) {
7395
7780
  var _this = _super.call(this) || this;
7396
- if (optsConnection instanceof TopologyService) {
7397
- _this.connection = optsConnection;
7398
- }
7399
- else {
7400
- _this.connection = new TopologyService(optsConnection);
7401
- }
7781
+ _this.key = key;
7782
+ _this.value = value;
7783
+ _this.oldValue = oldValue;
7402
7784
  return _this;
7403
7785
  }
7404
- Object.defineProperty(Topology.prototype, "BaseUrl", {
7405
- get: function () { return this.connection.baseUrl; },
7406
- enumerable: false,
7407
- configurable: true
7408
- });
7409
- Object.defineProperty(Topology.prototype, "properties", {
7410
- // Accessors ---
7411
- get: function () { return this.get(); },
7412
- enumerable: false,
7413
- configurable: true
7414
- });
7415
- Object.defineProperty(Topology.prototype, "TargetClusters", {
7416
- get: function () { return this.get("TargetClusters"); },
7417
- enumerable: false,
7418
- configurable: true
7419
- });
7420
- Object.defineProperty(Topology.prototype, "CTargetClusters", {
7421
- get: function () {
7422
- var _this = this;
7423
- return this.TargetClusters.map(function (tc) { return TargetCluster.attach(_this.connection, tc.Name, tc); });
7424
- },
7425
- enumerable: false,
7426
- configurable: true
7427
- });
7428
- Object.defineProperty(Topology.prototype, "LogicalClusters", {
7429
- get: function () { return this.get("LogicalClusters"); },
7786
+ Object.defineProperty(ValueChangedMessage.prototype, "canConflate", {
7787
+ get: function () { return true; },
7430
7788
  enumerable: false,
7431
7789
  configurable: true
7432
7790
  });
7433
- Object.defineProperty(Topology.prototype, "Services", {
7434
- get: function () { return this.get("Services"); },
7791
+ ValueChangedMessage.prototype.conflate = function (other) {
7792
+ if (this.key === other.key) {
7793
+ this.value = other.value;
7794
+ return true;
7795
+ }
7796
+ return false;
7797
+ };
7798
+ ValueChangedMessage.prototype.void = function () {
7799
+ return this.value === this.oldValue;
7800
+ };
7801
+ return ValueChangedMessage;
7802
+ }(util.Message));
7803
+ var Store = /** @class */ (function () {
7804
+ function Store(optsConnection, Name, Namespace, UserSpecific) {
7805
+ this._dispatch = new util.Dispatch();
7806
+ this._knownValues = {};
7807
+ if (optsConnection instanceof StoreService) {
7808
+ this.connection = optsConnection;
7809
+ }
7810
+ else {
7811
+ this.connection = new StoreService(optsConnection);
7812
+ }
7813
+ this.Name = Name;
7814
+ this.UserSpecific = UserSpecific;
7815
+ this.Namespace = Namespace;
7816
+ }
7817
+ Object.defineProperty(Store.prototype, "BaseUrl", {
7818
+ get: function () { return this.connection.baseUrl; },
7435
7819
  enumerable: false,
7436
7820
  configurable: true
7437
7821
  });
7438
- Topology.attach = function (optsConnection) {
7439
- var retVal = _topology.get({ BaseUrl: optsConnection.baseUrl }, function () {
7440
- return new Topology(optsConnection);
7822
+ Store.attach = function (optsConnection, Name, Namespace, UserSpecific) {
7823
+ if (Name === void 0) { Name = "HPCCApps"; }
7824
+ if (UserSpecific === void 0) { UserSpecific = true; }
7825
+ var retVal = _store.get({ BaseUrl: optsConnection.baseUrl, Name: Name, UserSpecific: UserSpecific, Namespace: Namespace }, function () {
7826
+ return new Store(optsConnection, Name, Namespace, UserSpecific);
7441
7827
  });
7442
7828
  return retVal;
7443
7829
  };
7444
- Topology.prototype.GetESPServiceBaseURL = function (type) {
7830
+ Store.prototype.create = function () {
7831
+ this.connection.CreateStore({ Name: this.Name, UserSpecific: this.UserSpecific, Type: "", Description: "" });
7832
+ };
7833
+ Store.prototype.set = function (key, value, broadcast) {
7445
7834
  var _this = this;
7446
- if (type === void 0) { type = ""; }
7447
- return this.connection.TpServiceQuery({}).then(function (response) {
7448
- var rootProtocol = _this.connection.protocol();
7449
- var ip = _this.connection.ip();
7450
- var port = rootProtocol === "https:" ? "18002" : "8002";
7451
- if (util.exists("ServiceList.TpEspServers.TpEspServer", response)) {
7452
- for (var _i = 0, _a = response.ServiceList.TpEspServers.TpEspServer; _i < _a.length; _i++) {
7453
- var item = _a[_i];
7454
- if (util.exists("TpBindings.TpBinding", item)) {
7455
- for (var _b = 0, _c = item.TpBindings.TpBinding; _b < _c.length; _b++) {
7456
- var binding = _c[_b];
7457
- if (binding.Service === type && binding.Protocol + ":" === rootProtocol) {
7458
- port = binding.Port;
7459
- }
7460
- }
7461
- }
7462
- }
7835
+ if (broadcast === void 0) { broadcast = true; }
7836
+ return this.connection.Set({
7837
+ StoreName: this.Name,
7838
+ UserSpecific: this.UserSpecific,
7839
+ Namespace: this.Namespace,
7840
+ Key: key,
7841
+ Value: value
7842
+ }).then(function (response) {
7843
+ var oldValue = _this._knownValues[key];
7844
+ _this._knownValues[key] = value;
7845
+ if (broadcast) {
7846
+ _this._dispatch.post(new ValueChangedMessage(key, value, oldValue));
7463
7847
  }
7464
- return "".concat(rootProtocol, "//").concat(ip, ":").concat(port, "/");
7848
+ }).catch(function (e) {
7849
+ console.error("Store.set(\"".concat(key, "\", \"").concat(value, "\") failed:"), e);
7465
7850
  });
7466
7851
  };
7467
- Topology.prototype.fetchTargetClusters = function () {
7852
+ Store.prototype.get = function (key, broadcast) {
7468
7853
  var _this = this;
7469
- return this.connection.TpTargetClusterQuery({ Type: "ROOT" }).then(function (response) {
7470
- var _a, _b;
7471
- _this.set({
7472
- TargetClusters: (_b = (_a = response.TpTargetClusters) === null || _a === void 0 ? void 0 : _a.TpTargetCluster) !== null && _b !== void 0 ? _b : []
7473
- });
7474
- return _this.CTargetClusters;
7854
+ if (broadcast === void 0) { broadcast = true; }
7855
+ return this.connection.Fetch({
7856
+ StoreName: this.Name,
7857
+ UserSpecific: this.UserSpecific,
7858
+ Namespace: this.Namespace,
7859
+ Key: key
7860
+ }).then(function (response) {
7861
+ var oldValue = _this._knownValues[key];
7862
+ _this._knownValues[key] = response.Value;
7863
+ if (broadcast) {
7864
+ _this._dispatch.post(new ValueChangedMessage(key, response.Value, oldValue));
7865
+ }
7866
+ return response.Value;
7867
+ }).catch(function (e) {
7868
+ console.error("Store.get(".concat(key, ") failed:"), e);
7869
+ return undefined;
7475
7870
  });
7476
7871
  };
7477
- Topology.prototype.fetchLogicalClusters = function (request) {
7872
+ Store.prototype.getAll = function (broadcast) {
7478
7873
  var _this = this;
7479
- if (request === void 0) { request = {}; }
7480
- return this.connection.TpLogicalClusterQuery(request).then(function (response) {
7481
- _this.set({
7482
- LogicalClusters: response.TpLogicalClusters.TpLogicalCluster
7874
+ if (broadcast === void 0) { broadcast = true; }
7875
+ return this.connection.FetchAll({
7876
+ StoreName: this.Name,
7877
+ UserSpecific: this.UserSpecific,
7878
+ Namespace: this.Namespace
7879
+ }).then(function (response) {
7880
+ var retVal = {};
7881
+ var deletedValues = _this._knownValues;
7882
+ _this._knownValues = {};
7883
+ response.Pairs.Pair.forEach(function (pair) {
7884
+ var oldValue = _this._knownValues[pair.Key];
7885
+ _this._knownValues[pair.Key] = pair.Value;
7886
+ delete deletedValues[pair.Key];
7887
+ retVal[pair.Key] = pair.Value;
7888
+ if (broadcast) {
7889
+ _this._dispatch.post(new ValueChangedMessage(pair.Key, pair.Value, oldValue));
7890
+ }
7483
7891
  });
7484
- return _this.LogicalClusters;
7892
+ if (broadcast) {
7893
+ for (var key in deletedValues) {
7894
+ _this._dispatch.post(new ValueChangedMessage(key, undefined, deletedValues[key]));
7895
+ }
7896
+ }
7897
+ return retVal;
7898
+ }).catch(function (e) {
7899
+ console.error("Store.getAll failed:", e);
7900
+ return {};
7485
7901
  });
7486
7902
  };
7487
- Topology.prototype.fetchServices = function (request) {
7903
+ Store.prototype.delete = function (key, broadcast) {
7488
7904
  var _this = this;
7489
- if (request === void 0) { request = {}; }
7490
- return this.connection.TpServiceQuery(request).then(function (response) {
7491
- _this.set({
7492
- Services: response.ServiceList
7493
- });
7494
- return _this.Services;
7905
+ if (broadcast === void 0) { broadcast = true; }
7906
+ return this.connection.Delete({
7907
+ StoreName: this.Name,
7908
+ UserSpecific: this.UserSpecific,
7909
+ Namespace: this.Namespace,
7910
+ Key: key
7911
+ }).then(function (response) {
7912
+ var oldValue = _this._knownValues[key];
7913
+ delete _this._knownValues[key];
7914
+ if (broadcast) {
7915
+ _this._dispatch.post(new ValueChangedMessage(key, undefined, oldValue));
7916
+ }
7917
+ }).catch(function (e) {
7918
+ console.error("Store.delete(".concat(key, ") failed:"), e);
7495
7919
  });
7496
7920
  };
7497
- Topology.prototype.refresh = function (force) {
7498
- var _this = this;
7499
- if (force === void 0) { force = false; }
7500
- if (!this._prevRefresh || force) {
7501
- this._prevRefresh = Promise.all([this.fetchTargetClusters(), this.fetchLogicalClusters(), this.fetchServices()]).then(function () {
7502
- return _this;
7503
- });
7504
- }
7505
- return this._prevRefresh;
7506
- };
7507
- // Monitoring ---
7508
- // Events ---
7509
- Topology.prototype.on = function (eventID, propIDorCallback, callback) {
7510
- if (this.isCallback(propIDorCallback)) {
7511
- switch (eventID) {
7512
- case "changed":
7513
- _super.prototype.on.call(this, eventID, propIDorCallback);
7514
- break;
7515
- }
7516
- }
7517
- else {
7518
- switch (eventID) {
7519
- case "changed":
7520
- _super.prototype.on.call(this, eventID, propIDorCallback, callback);
7521
- break;
7522
- }
7523
- }
7524
- this._monitor();
7525
- return this;
7921
+ Store.prototype.monitor = function (callback) {
7922
+ return this._dispatch.attach(callback);
7526
7923
  };
7527
- return Topology;
7528
- }(util.StateObject));
7924
+ return Store;
7925
+ }());
7529
7926
 
7530
7927
  var logger$1 = util.scopedLogger("@hpcc-js/comms/dfuWorkunit.ts");
7531
7928
  var States;
@@ -7852,6 +8249,16 @@ var DFUWorkunit = /** @class */ (function (_super) {
7852
8249
  enumerable: false,
7853
8250
  configurable: true
7854
8251
  });
8252
+ Object.defineProperty(DFUWorkunit.prototype, "KbPerSecAve", {
8253
+ get: function () { return this.get("KbPerSecAve"); },
8254
+ enumerable: false,
8255
+ configurable: true
8256
+ });
8257
+ Object.defineProperty(DFUWorkunit.prototype, "KbPerSec", {
8258
+ get: function () { return this.get("KbPerSec"); },
8259
+ enumerable: false,
8260
+ configurable: true
8261
+ });
7855
8262
  // Factories ---
7856
8263
  DFUWorkunit.create = function (optsConnection, dfuServerQueue) {
7857
8264
  var retVal = new DFUWorkunit(optsConnection);
@@ -7897,6 +8304,21 @@ var DFUWorkunit = /** @class */ (function (_super) {
7897
8304
  });
7898
8305
  });
7899
8306
  };
8307
+ DFUWorkunit.prototype.update = function (request) {
8308
+ var _a, _b, _c, _d;
8309
+ return this.connection.UpdateDFUWorkunitEx({
8310
+ wu: {
8311
+ JobName: (_b = (_a = request === null || request === void 0 ? void 0 : request.wu) === null || _a === void 0 ? void 0 : _a.JobName) !== null && _b !== void 0 ? _b : this.JobName,
8312
+ isProtected: (_d = (_c = request === null || request === void 0 ? void 0 : request.wu) === null || _c === void 0 ? void 0 : _c.isProtected) !== null && _d !== void 0 ? _d : this.isProtected,
8313
+ ID: this.ID,
8314
+ State: this.State
8315
+ },
8316
+ ClusterOrig: this.ClusterName,
8317
+ JobNameOrig: this.JobName,
8318
+ isProtectedOrig: this.isProtected,
8319
+ StateOrig: this.State
8320
+ });
8321
+ };
7900
8322
  DFUWorkunit.prototype.isComplete = function () {
7901
8323
  switch (this.State) {
7902
8324
  case States.Finished:
@@ -7923,6 +8345,12 @@ var DFUWorkunit = /** @class */ (function (_super) {
7923
8345
  DFUWorkunit.prototype.isRunning = function () {
7924
8346
  return !this.isComplete();
7925
8347
  };
8348
+ DFUWorkunit.prototype.abort = function () {
8349
+ return this.connection.AbortDFUWorkunit({ wuid: this.ID });
8350
+ };
8351
+ DFUWorkunit.prototype.delete = function () {
8352
+ return this.DFUWUAction(exports.FileSpray.DFUWUActions.Delete);
8353
+ };
7926
8354
  DFUWorkunit.prototype.refresh = function (full) {
7927
8355
  return __awaiter(this, void 0, void 0, function () {
7928
8356
  return __generator(this, function (_a) {
@@ -7935,6 +8363,9 @@ var DFUWorkunit = /** @class */ (function (_super) {
7935
8363
  });
7936
8364
  });
7937
8365
  };
8366
+ DFUWorkunit.prototype.fetchXML = function (callback) {
8367
+ return this.DFUWUFile();
8368
+ };
7938
8369
  // Monitoring ---
7939
8370
  DFUWorkunit.prototype._monitor = function () {
7940
8371
  if (this.isComplete()) {
@@ -7956,6 +8387,29 @@ var DFUWorkunit = /** @class */ (function (_super) {
7956
8387
  }
7957
8388
  return retVal;
7958
8389
  };
8390
+ DFUWorkunit.prototype.DFUWUFile = function (_request) {
8391
+ if (_request === void 0) { _request = {}; }
8392
+ return this.connection.DFUWUFile(__assign(__assign({}, _request), { Wuid: this.ID })).then(function (response) {
8393
+ //TODO: additional processing?
8394
+ return response;
8395
+ }).catch(function (e) {
8396
+ return {};
8397
+ });
8398
+ };
8399
+ DFUWorkunit.prototype.DFUWUAction = function (actionType) {
8400
+ var _this = this;
8401
+ return this.connection.DFUWorkunitsAction({
8402
+ wuids: { Item: [this.ID] },
8403
+ Type: actionType
8404
+ }).then(function (response) {
8405
+ if (actionType === exports.FileSpray.DFUWUActions.Delete)
8406
+ return response;
8407
+ return _this.refresh().then(function () {
8408
+ _this._monitor();
8409
+ return response;
8410
+ });
8411
+ });
8412
+ };
7959
8413
  // Events ---
7960
8414
  DFUWorkunit.prototype.on = function (eventID, propIDorCallback, callback) {
7961
8415
  var _this = this;