@blacksandscyber/mcp-server-bursar 0.5.0
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.
- package/README.md +230 -0
- package/build/config.d.ts +45 -0
- package/build/config.js +177 -0
- package/build/http-transport.d.ts +16 -0
- package/build/http-transport.js +191 -0
- package/build/index.d.ts +16 -0
- package/build/index.js +31 -0
- package/build/server.d.ts +41 -0
- package/build/server.js +902 -0
- package/build/shared/errors.d.ts +50 -0
- package/build/shared/errors.js +69 -0
- package/build/shared/linkBuilder.d.ts +93 -0
- package/build/shared/linkBuilder.js +148 -0
- package/build/shared/logger.d.ts +10 -0
- package/build/shared/logger.js +28 -0
- package/build/shield/bootRole.d.ts +60 -0
- package/build/shield/bootRole.js +145 -0
- package/build/shield/client.d.ts +265 -0
- package/build/shield/client.js +656 -0
- package/build/shield/deploy/index.d.ts +69 -0
- package/build/shield/deploy/index.js +569 -0
- package/build/shield/discovery/dataStoreDetector.d.ts +3 -0
- package/build/shield/discovery/dataStoreDetector.js +125 -0
- package/build/shield/discovery/dockerScanner.d.ts +34 -0
- package/build/shield/discovery/dockerScanner.js +543 -0
- package/build/shield/discovery/endpointScanner.d.ts +3 -0
- package/build/shield/discovery/endpointScanner.js +306 -0
- package/build/shield/discovery/environmentScanner.d.ts +86 -0
- package/build/shield/discovery/environmentScanner.js +545 -0
- package/build/shield/discovery/externalServiceDetector.d.ts +3 -0
- package/build/shield/discovery/externalServiceDetector.js +98 -0
- package/build/shield/discovery/frameworkDetector.d.ts +3 -0
- package/build/shield/discovery/frameworkDetector.js +114 -0
- package/build/shield/discovery/manifestGenerator.d.ts +12 -0
- package/build/shield/discovery/manifestGenerator.js +124 -0
- package/build/shield/discovery/piiDetector.d.ts +5 -0
- package/build/shield/discovery/piiDetector.js +203 -0
- package/build/shield/discovery/severity.d.ts +47 -0
- package/build/shield/discovery/severity.js +138 -0
- package/build/shield/discovery/topologyNormalizer.d.ts +109 -0
- package/build/shield/discovery/topologyNormalizer.js +416 -0
- package/build/shield/identity.d.ts +53 -0
- package/build/shield/identity.js +70 -0
- package/build/shield/install/configMerge.d.ts +91 -0
- package/build/shield/install/configMerge.js +324 -0
- package/build/shield/install/keystore.d.ts +25 -0
- package/build/shield/install/keystore.js +156 -0
- package/build/shield/install/orchestrator.d.ts +33 -0
- package/build/shield/install/orchestrator.js +404 -0
- package/build/shield/install/transports/awsSsm.d.ts +43 -0
- package/build/shield/install/transports/awsSsm.js +378 -0
- package/build/shield/install/transports/bootstrapToken.d.ts +39 -0
- package/build/shield/install/transports/bootstrapToken.js +117 -0
- package/build/shield/install/transports/ssh.d.ts +50 -0
- package/build/shield/install/transports/ssh.js +569 -0
- package/build/shield/install/types.d.ts +139 -0
- package/build/shield/install/types.js +10 -0
- package/build/shield/protocol-walkthrough.d.ts +65 -0
- package/build/shield/protocol-walkthrough.js +392 -0
- package/build/shield/provision/appProvisioner.d.ts +15 -0
- package/build/shield/provision/appProvisioner.js +25 -0
- package/build/shield/types.d.ts +261 -0
- package/build/shield/types.js +4 -0
- package/build/shield/verify/postureReporter.d.ts +4 -0
- package/build/shield/verify/postureReporter.js +31 -0
- package/dxt/blacksands-ca.crt +67 -0
- package/dxt/scripts/setup.js +520 -0
- package/package.json +76 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/** Type definitions for Shield API resources and discovery results. */
|
|
2
|
+
export interface Organization {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
plan: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
updatedAt: string;
|
|
8
|
+
}
|
|
9
|
+
export interface App {
|
|
10
|
+
id: string;
|
|
11
|
+
orgId: string;
|
|
12
|
+
name: string;
|
|
13
|
+
status: "active" | "provisioning" | "locked" | "suspended";
|
|
14
|
+
createdAt: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
}
|
|
17
|
+
export interface Certificate {
|
|
18
|
+
id: string;
|
|
19
|
+
appId: string;
|
|
20
|
+
type: "mtls" | "server" | "client";
|
|
21
|
+
fingerprint: string;
|
|
22
|
+
expiresAt: string;
|
|
23
|
+
issuedAt: string;
|
|
24
|
+
status: "active" | "revoked" | "expired";
|
|
25
|
+
}
|
|
26
|
+
export interface Endpoint {
|
|
27
|
+
id: string;
|
|
28
|
+
appId: string;
|
|
29
|
+
host: string;
|
|
30
|
+
port: number;
|
|
31
|
+
protocol: "tcp" | "udp" | "http" | "https";
|
|
32
|
+
status: "active" | "inactive";
|
|
33
|
+
}
|
|
34
|
+
export interface Policy {
|
|
35
|
+
id: string;
|
|
36
|
+
appId: string;
|
|
37
|
+
name: string;
|
|
38
|
+
type: "network" | "dns" | "access" | "compliance";
|
|
39
|
+
rules: PolicyRule[];
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface PolicyRule {
|
|
43
|
+
action: "allow" | "deny" | "log";
|
|
44
|
+
target: string;
|
|
45
|
+
conditions?: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
export interface Manifest {
|
|
48
|
+
id: string;
|
|
49
|
+
orgId: string;
|
|
50
|
+
appName: string;
|
|
51
|
+
services: ManifestService[];
|
|
52
|
+
status: "pending" | "validated" | "provisioned" | "failed";
|
|
53
|
+
createdAt: string;
|
|
54
|
+
}
|
|
55
|
+
export interface ManifestService {
|
|
56
|
+
name: string;
|
|
57
|
+
port: number;
|
|
58
|
+
protocol: string;
|
|
59
|
+
allowedDomains?: string[];
|
|
60
|
+
}
|
|
61
|
+
export interface VerifyResult {
|
|
62
|
+
id: string;
|
|
63
|
+
appId: string;
|
|
64
|
+
score: number;
|
|
65
|
+
grade: "A" | "B" | "C" | "D" | "F";
|
|
66
|
+
checks: VerifyCheck[];
|
|
67
|
+
scannedAt: string;
|
|
68
|
+
dimensions?: Record<string, number>;
|
|
69
|
+
}
|
|
70
|
+
export interface VerifyCheck {
|
|
71
|
+
name: string;
|
|
72
|
+
passed: boolean;
|
|
73
|
+
severity: "critical" | "high" | "medium" | "low" | "info";
|
|
74
|
+
details?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface ComplianceReport {
|
|
77
|
+
id: string;
|
|
78
|
+
appId: string;
|
|
79
|
+
framework: ComplianceFramework;
|
|
80
|
+
score: number;
|
|
81
|
+
controls: ComplianceControl[];
|
|
82
|
+
generatedAt: string;
|
|
83
|
+
}
|
|
84
|
+
export interface ComplianceControl {
|
|
85
|
+
id: string;
|
|
86
|
+
name: string;
|
|
87
|
+
status: "pass" | "fail" | "partial" | "not_applicable";
|
|
88
|
+
evidence?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface DnsRule {
|
|
91
|
+
id: string;
|
|
92
|
+
appId: string;
|
|
93
|
+
domain: string;
|
|
94
|
+
action: "allow" | "block";
|
|
95
|
+
reason?: string;
|
|
96
|
+
createdAt: string;
|
|
97
|
+
}
|
|
98
|
+
export interface Operation {
|
|
99
|
+
id: string;
|
|
100
|
+
type: string;
|
|
101
|
+
status: "pending" | "running" | "completed" | "failed";
|
|
102
|
+
result?: Record<string, unknown>;
|
|
103
|
+
error?: string;
|
|
104
|
+
createdAt: string;
|
|
105
|
+
completedAt?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface Session {
|
|
108
|
+
id: string;
|
|
109
|
+
appId: string;
|
|
110
|
+
userId: string;
|
|
111
|
+
status: "active" | "expired" | "revoked";
|
|
112
|
+
createdAt: string;
|
|
113
|
+
expiresAt: string;
|
|
114
|
+
}
|
|
115
|
+
export interface ListResponse<T> {
|
|
116
|
+
data: T[];
|
|
117
|
+
total: number;
|
|
118
|
+
page: number;
|
|
119
|
+
pageSize: number;
|
|
120
|
+
}
|
|
121
|
+
export type ComplianceFramework = "SOC2" | "HIPAA" | "PCI-DSS" | "ISO27001";
|
|
122
|
+
export interface FrameworkInfo {
|
|
123
|
+
framework: string;
|
|
124
|
+
runtime: string;
|
|
125
|
+
version: string | null;
|
|
126
|
+
packageManager: string | null;
|
|
127
|
+
runtimeVersion?: string;
|
|
128
|
+
dockerImage?: string;
|
|
129
|
+
}
|
|
130
|
+
/** Finding severity enum (Workstream-1 #13g). Applied uniformly across all scan findings. */
|
|
131
|
+
export type Severity = "CRITICAL" | "HIGH" | "MEDIUM" | "LOW" | "INFO";
|
|
132
|
+
export interface EndpointInfo {
|
|
133
|
+
type: "api" | "web";
|
|
134
|
+
method: string;
|
|
135
|
+
path: string;
|
|
136
|
+
protocol: string;
|
|
137
|
+
file: string;
|
|
138
|
+
auth_method: string;
|
|
139
|
+
/** 1-based line number where the route was declared (Workstream-1 context). */
|
|
140
|
+
line?: number;
|
|
141
|
+
/** How the method was determined: "decorator" | "named-export" | "router-call" | "url-conf" | "page-file" | "fallback". */
|
|
142
|
+
detected_via?: string;
|
|
143
|
+
/** Confidence the route was identified correctly. */
|
|
144
|
+
confidence?: "high" | "medium" | "low";
|
|
145
|
+
/** Confidence the auth_method classification is correct. "low" generally means file-level inference, not per-route. */
|
|
146
|
+
auth_confidence?: "high" | "medium" | "low";
|
|
147
|
+
/** Risk severity for this route (Workstream-1 #13g). */
|
|
148
|
+
severity?: Severity;
|
|
149
|
+
/** Plain-English reason the severity was assigned. */
|
|
150
|
+
severity_rationale?: string;
|
|
151
|
+
}
|
|
152
|
+
export interface PiiField {
|
|
153
|
+
type: string;
|
|
154
|
+
sensitivity: "critical" | "high" | "medium" | "low";
|
|
155
|
+
field: string;
|
|
156
|
+
file: string;
|
|
157
|
+
/** 1-based line number where the match was found (Workstream-1 explanation context). */
|
|
158
|
+
line?: number;
|
|
159
|
+
/** Trimmed source line the match occurred on, for human review. */
|
|
160
|
+
snippet?: string;
|
|
161
|
+
/** Detection confidence — "high" = structural evidence (schema/object key/quoted field),
|
|
162
|
+
* "medium" = bare identifier in code, "low" = comment/prose (filtered out by default). */
|
|
163
|
+
confidence?: "high" | "medium" | "low";
|
|
164
|
+
/** Plain-English remediation guidance for this PII type. */
|
|
165
|
+
remediation?: string;
|
|
166
|
+
/** Risk severity for this finding (Workstream-1 #13g). */
|
|
167
|
+
severity?: Severity;
|
|
168
|
+
/** Plain-English reason the severity was assigned. */
|
|
169
|
+
severity_rationale?: string;
|
|
170
|
+
}
|
|
171
|
+
export interface ExternalService {
|
|
172
|
+
name: string;
|
|
173
|
+
domain: string;
|
|
174
|
+
port: number;
|
|
175
|
+
protocol: string;
|
|
176
|
+
purpose: string;
|
|
177
|
+
detectedFrom: string;
|
|
178
|
+
}
|
|
179
|
+
export interface DataStore {
|
|
180
|
+
type: string;
|
|
181
|
+
host: string;
|
|
182
|
+
port: number | null;
|
|
183
|
+
encrypted: boolean | null;
|
|
184
|
+
contains_pii: boolean | null;
|
|
185
|
+
detectedFrom: string;
|
|
186
|
+
}
|
|
187
|
+
export interface SecurityManifest {
|
|
188
|
+
application: {
|
|
189
|
+
name: string;
|
|
190
|
+
version: string;
|
|
191
|
+
framework: string;
|
|
192
|
+
runtime: string;
|
|
193
|
+
runtimeVersion?: string;
|
|
194
|
+
};
|
|
195
|
+
endpoints: Array<{
|
|
196
|
+
type: string;
|
|
197
|
+
protocol: string;
|
|
198
|
+
port: number;
|
|
199
|
+
path: string;
|
|
200
|
+
auth_method: string;
|
|
201
|
+
}>;
|
|
202
|
+
external_services: Array<{
|
|
203
|
+
name: string;
|
|
204
|
+
domain: string;
|
|
205
|
+
port: number;
|
|
206
|
+
protocol: string;
|
|
207
|
+
purpose: string;
|
|
208
|
+
}>;
|
|
209
|
+
data_stores: Array<{
|
|
210
|
+
type: string;
|
|
211
|
+
host: string;
|
|
212
|
+
port: number | null;
|
|
213
|
+
encrypted: boolean | null;
|
|
214
|
+
contains_pii: boolean;
|
|
215
|
+
}>;
|
|
216
|
+
data_flows: Array<{
|
|
217
|
+
source: string;
|
|
218
|
+
destination: string;
|
|
219
|
+
data_types: string[];
|
|
220
|
+
sensitivity: string;
|
|
221
|
+
}>;
|
|
222
|
+
compliance: {
|
|
223
|
+
frameworks: string[];
|
|
224
|
+
data_residency: string;
|
|
225
|
+
audit_required: boolean;
|
|
226
|
+
};
|
|
227
|
+
security_preferences: {
|
|
228
|
+
session_ttl: number;
|
|
229
|
+
mfa_required: boolean;
|
|
230
|
+
ip_binding: boolean;
|
|
231
|
+
auto_rotate_certs: boolean;
|
|
232
|
+
};
|
|
233
|
+
_metadata: {
|
|
234
|
+
generated_by: string;
|
|
235
|
+
generated_at: string;
|
|
236
|
+
confidence: number;
|
|
237
|
+
pii_summary: {
|
|
238
|
+
total_fields: number;
|
|
239
|
+
sensitivity_level: string;
|
|
240
|
+
types: string[];
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
export interface DiscoveryResult {
|
|
245
|
+
framework: FrameworkInfo;
|
|
246
|
+
endpoints: EndpointInfo[];
|
|
247
|
+
piiFields: PiiField[];
|
|
248
|
+
externalServices: ExternalService[];
|
|
249
|
+
dataStores: DataStore[];
|
|
250
|
+
manifest: SecurityManifest;
|
|
251
|
+
}
|
|
252
|
+
export interface PostureReport {
|
|
253
|
+
score: number;
|
|
254
|
+
grade: string;
|
|
255
|
+
status: "SECURE" | "NEEDS_ATTENTION" | "AT_RISK";
|
|
256
|
+
summary: string;
|
|
257
|
+
dimensions: Record<string, number>;
|
|
258
|
+
recommendations: string[];
|
|
259
|
+
timestamp: string;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Format verification results into posture reports with grades and recommendations. */
|
|
2
|
+
import type { PostureReport } from "../types";
|
|
3
|
+
export declare function formatPosture(result: Record<string, unknown> | null): PostureReport;
|
|
4
|
+
//# sourceMappingURL=postureReporter.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatPosture = formatPosture;
|
|
4
|
+
function formatPosture(result) {
|
|
5
|
+
if (!result) {
|
|
6
|
+
return { score: 0, grade: "F", status: "AT_RISK", summary: "No verification data available", dimensions: {}, recommendations: ["Run a posture scan to establish baseline"], timestamp: new Date().toISOString() };
|
|
7
|
+
}
|
|
8
|
+
const score = result.score || 0;
|
|
9
|
+
const grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 60 ? "D" : "F";
|
|
10
|
+
const status = score >= 80 ? "SECURE" : score >= 50 ? "NEEDS_ATTENTION" : "AT_RISK";
|
|
11
|
+
const dims = result.dimensions || {};
|
|
12
|
+
const recommendations = [];
|
|
13
|
+
if ((dims.certFreshness ?? 100) < 80)
|
|
14
|
+
recommendations.push("Rotate certificates that are approaching expiry");
|
|
15
|
+
if ((dims.policyCompliance ?? 100) < 80)
|
|
16
|
+
recommendations.push("Review and sync pending policy changes");
|
|
17
|
+
if ((dims.sessionHygiene ?? 100) < 80)
|
|
18
|
+
recommendations.push("Terminate stale sessions and review session TTL settings");
|
|
19
|
+
if ((dims.threatBlockRatio ?? 100) < 80)
|
|
20
|
+
recommendations.push("Review threat activity and update DNS block lists");
|
|
21
|
+
if (recommendations.length === 0)
|
|
22
|
+
recommendations.push("All security dimensions are healthy");
|
|
23
|
+
return {
|
|
24
|
+
score, grade, status,
|
|
25
|
+
summary: `Security Posture: ${grade} (${score}/100) - ${status}`,
|
|
26
|
+
dimensions: dims,
|
|
27
|
+
recommendations,
|
|
28
|
+
timestamp: result.timestamp || new Date().toISOString(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=postureReporter.js.map
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIF/DCCA+SgAwIBAgIJAPADND1aMtKrMA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD
|
|
3
|
+
VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5j
|
|
4
|
+
aXNjbzEcMBoGA1UECgwTQmxhY2tzYW5kcyBTZWN1cml0eTEeMBwGA1UECwwVQ2Vy
|
|
5
|
+
dGlmaWNhdGUgQXV0aG9yaXR5MRswGQYDVQQDDBJCbGFja3NhbmRzIFJvb3QgQ0Ew
|
|
6
|
+
HhcNMjYwNDAxMTM0MzI0WhcNMzYwMzI5MTM0MzI0WjCBnTELMAkGA1UEBhMCVVMx
|
|
7
|
+
EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xHDAa
|
|
8
|
+
BgNVBAoME0JsYWNrc2FuZHMgU2VjdXJpdHkxHjAcBgNVBAsMFUNlcnRpZmljYXRl
|
|
9
|
+
IEF1dGhvcml0eTEjMCEGA1UEAwwaQmxhY2tzYW5kcyBJbnRlcm1lZGlhdGUgQ0Ew
|
|
10
|
+
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDrOJB5g8HyB30BvuQ1rokW
|
|
11
|
+
o9vduPvYnvXESYIN5+OvJDYpgCb4cxoc7oUySMtcwKMAX8/UdvQ3JxmglBSsQXGf
|
|
12
|
+
i0C2V8qftVtuqWdLwPhp8xQa07M+lZ3ZtM0AXI5y7FLxg7t5zx4cVcQDLSGNnmYY
|
|
13
|
+
fctuWIm+Ga4wtHGMPrG6PRwDG5K3RJOII2XjGqxtiex02mVcdIC4lZ+zA9svewbg
|
|
14
|
+
11yLZEl+bxQdCDeY8Eo/uyxe+69AoM1ExZ0YoURq8lINkI4OtS6QGHug8eOWSwGU
|
|
15
|
+
NvhujNm9fnjDz5+9U91JbCeWBB6mvdlNqR28sSvECpqmQ4UCiCABHluP9TWlBjmy
|
|
16
|
+
CRYv4EBBpUeNSTzsYs3TQNSChgt+PsopUaIgiCEgSz6ioDf9BkFsOKDTsjsXcxiJ
|
|
17
|
+
8UCYi8P5vMhwKeNDYVl/OO8Wp8s+/Z+1upCWVFGpreYfr4Q7iIh1RfA5HnO3R5N0
|
|
18
|
+
hJpuGeG45zQ2cCEV4N2lU1eUcxJHA/q61Uchlqb3kw81HlHCdy9pVQmSmhWRd7fL
|
|
19
|
+
hJqgiEp/4QRtlWi/rXncU5XYH2Hc3QXNDRvnEccwHexZAfcBEXdQN7m0NdGVn/e1
|
|
20
|
+
l+0BA3635P6IPhETkgDjGgDbKyY2MxHPtsfun4+Acrvaqxb0rdG/GS7NdMIbUArD
|
|
21
|
+
7GK0h5AE9mHr1RHApPwGTwIDAQABo0UwQzAdBgNVHQ4EFgQU1rlRozoYooNirPVT
|
|
22
|
+
N18NqY0u3kQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwDQYJ
|
|
23
|
+
KoZIhvcNAQELBQADggIBAE3LitbXdghElOnnNOfK9fxX5l81STzxtj6LfpoyB1iF
|
|
24
|
+
AIdetbC3RBVaeLU1KmNxUGZG99SMywbJcRLdfkDb27UE8K/2vBiiehgnf8oMrNQh
|
|
25
|
+
vTQTPqZmFVUzAM4tOzVtigFFUzFvAiy4Dg/2/92Pqjmr/upMWiA83DndTAM1Zqiy
|
|
26
|
+
6QKT8WwLnYuaPy/CJW2fiT0Ibkr6MR+70pqrqvNZNU5rP6wm2jNspyHop/IIEoXp
|
|
27
|
+
AMKsu4s2yn2WLgVIerumLqN3sZ0jJCTctLvehaE6xF6AE2OkQj3RPI6VjGrfthPg
|
|
28
|
+
pkMEiJ/R/wP4Z3+XBqzK8WHKg0p5xosViUgcNici7NSKXH1PeSn0QKkCkXMT1nEw
|
|
29
|
+
QcM4oudsP6PmSMsSW2Lez98TQH2yDepI9gMuCoWJZqXE/my9Qm7qApmSOfYpZKSe
|
|
30
|
+
+waA6O/SVf/pvUkkIL6xurbQ2YfQpyFPvxI++jTf1Fc3tr4Y1xbbhbp6YKwKjeub
|
|
31
|
+
mhiQ2TzDDnLKEWjSVFrcv1d1t2rs5UcF4gvFklKKVClUu+fc2fA1Y8tcY+V8yahb
|
|
32
|
+
6yGH6+zdCKZKBmjuty7NE32SZo7JVMKSHXqQQY40OK7ME/gRbUGCgloeFSy93XgB
|
|
33
|
+
C2i4DhPrCsVvwq82ML2uN9ZRwtSj+0/AlMzPzOuCRA82ivOZvHApXY6MkPs3FJdY
|
|
34
|
+
-----END CERTIFICATE-----
|
|
35
|
+
-----BEGIN CERTIFICATE-----
|
|
36
|
+
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
|
|
66
|
+
X5sIz6zv2K6bxt5+
|
|
67
|
+
-----END CERTIFICATE-----
|