PageSourceSearch

https://wilkeyops.replit.app/src/components/target-acquisition.tsx

js wilkeyops.replit.app collected 2026-10-03 03:58:48 UTC 37,709 bytes, 255 lines download raw bytes

1import __vite__cjsImport0_react_jsxRuntime from "/@fs/home/runner/workspace/node_modules/.vite/deps/react_jsx-runtime.js?v=3bc92834"; const jsx = __vite__cjsImport0_react_jsxRuntime["jsx"]; const jsxs = __vite__cjsImport0_react_jsxRuntime["jsxs"];
2import __vite__cjsImport1_react from "/@fs/home/runner/workspace/node_modules/.vite/deps/react.js?v=3bc92834"; const useState = __vite__cjsImport1_react["useState"];
3import { useMutation, useQueryClient, useQuery } from "/@fs/home/runner/workspace/node_modules/.vite/deps/@tanstack_react-query.js?v=9abba70f";
4import { Button } from "/src/components/ui/button.tsx";
5import { Input } from "/src/components/ui/input.tsx";
6import { Label } from "/src/components/ui/label.tsx";
7import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "/src/components/ui/select.tsx";
8import { Crosshair, Search, Zap, Brain, StopCircle, AlertTriangle } from "/@fs/home/runner/workspace/node_modules/.vite/deps/lucide-react.js?v=c62bd0b8";
9import { useToast } from "/src/hooks/use-toast.ts";
10import { apiRequest } from "/src/lib/queryClient.ts";
11export default function TargetAcquisition() {
12  const [target, setTarget] = useState("");
13  const [scanType, setScanType] = useState("OWASP Top 10 Assessment");
14  const { toast } = useToast();
15  const queryClient = useQueryClient();
16  const { data: user, isLoading: userLoading, error: userError } = useQuery({
17    queryKey: ["/api/user"],
18    retry: false,
19    refetchOnWindowFocus: false
20  });
21  const createScanMutation = useMutation({
22    mutationFn: async (data) => {
23      const scanData = {
24        target: data.target,
25        scanType: data.scanType,
26        status: "running",
27        progress: 0,
28        currentPhase: "initializing",
29        results: null,
30        riskScore: null,
31        vulnerabilities: null,
32        aiAnalysis: null,
33        detailedLogs: [],
34        portsScanned: [],
35        servicesDetected: [],
36        scanDuration: 0,
37        completedAt: null
38      };
39      const response = await apiRequest("POST", "/api/scans", scanData);
40      return response.json();
41    },
42    onSuccess: (data) => {
43      console.log("Scan created successfully:", data);
44      toast({
45        title: "Scan Initiated",
46        description: "Target acquisition successful. Scanning in progress..."
47      });
48      setTarget("");
49      queryClient.invalidateQueries({ queryKey: ["/api/scans"] });
50      queryClient.invalidateQueries({ queryKey: ["/api/stats"] });
51      queryClient.invalidateQueries({ queryKey: ["/api/console"] });
52    },
53    onError: (error) => {
54      console.error("Scan creation failed:", error);
55      let errorMessage = "An error occurred during scan initiation";
56      if (error?.message?.includes("401") || error?.message?.includes("authentication")) {
57        errorMessage = "Authentication required. Please log in to initiate scans.";
58      } else if (error?.message?.includes("400") || error?.message?.includes("validation")) {
59        errorMessage = "Invalid scan parameters. Please check your target and scan type.";
60      } else if (error?.message) {
61        errorMessage = error.message;
62      }
63      toast({
64        title: "Scan Failed",
65        description: errorMessage,
66        variant: "destructive"
67      });
68    }
69  });
70  const handleDeepScan = () => {
71    if (!user) {
72      toast({
73        title: "Authentication Required",
74        description: "Please log in to initiate vulnerability scans",
75        variant: "destructive"
76      });
77      return;
78    }
79    if (!target.trim()) {
80      toast({
81        title: "Target Required",
82        description: "Please enter a target URL or IP address",
83        variant: "destructive"
84      });
85      return;
86    }
87    createScanMutation.mutate({
88      target: target.trim(),
89      scanType
90    });
91  };
92  const handleQuickAssess = () => {
93    if (!user) {
94      toast({
95        title: "Authentication Required",
96        description: "Please log in to initiate vulnerability scans",
97        variant: "destructive"
98      });
99      return;
100    }
101    if (!target.trim()) {
102      toast({
103        title: "Target Required",
104        description: "Please enter a target URL or IP address",
105        variant: "destructive"
106      });
107      return;
108    }
109    createScanMutation.mutate({
110      target: target.trim(),
111      scanType: "Quick Assessment"
112    });
113  };
114  return /* @__PURE__ */ jsxs("div", { className: "holographic-mobile rounded-lg mobile-glow", children: [
115    /* @__PURE__ */ jsx("div", { className: "bg-gradient-to-r from-orange-500/20 to-blue-600/20 px-3 sm:px-6 py-3 border-b border-orange-500/30", children: /* @__PURE__ */ jsxs("h2", { className: "font-mono text-base sm:text-xl font-bold text-orange-500 tracking-wider flex items-center", children: [
116      /* @__PURE__ */ jsx(Crosshair, { className: "mr-3 w-6 h-6" }),
117      "TARGET ACQUISITION & RECONNAISSANCE",
118      /* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center space-x-2", children: [
119        /* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-green-500 rounded-full animate-pulse" }),
120        /* @__PURE__ */ jsx("span", { className: "text-green-400 text-sm", children: "ACTIVE" })
121      ] })
122    ] }) }),
123    /* @__PURE__ */ jsxs("div", { className: "p-3 sm:p-6", children: [
124      /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 sm:gap-6 mb-6 sm:mb-8", children: [
125        /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
126          /* @__PURE__ */ jsx(Label, { className: "text-blue-300 font-mono text-sm font-bold tracking-wide", children: "TARGET COORDINATES" }),
127          /* @__PURE__ */ jsx(
128            Input,
129            {
130              type: "text",
131              value: target,
132              onChange: (e) => setTarget(e.target.value),
133              className: "bg-slate-800/80 border-2 border-blue-500/50 text-white font-mono focus:border-orange-500 focus:ring-2 focus:ring-orange-500/20 transition-all duration-300 min-h-[48px]",
134              placeholder: "https://target.example.com"
135            }
136          ),
137          /* @__PURE__ */ jsx("div", { className: "text-xs text-blue-400 font-mono", children: "Enter target URL or IP address for reconnaissance" })
138        ] }),
139        /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
140          /* @__PURE__ */ jsx(Label, { className: "text-blue-300 font-mono text-sm font-bold tracking-wide", children: "MISSION PROFILE" }),
141          /* @__PURE__ */ jsxs(Select, { value: scanType, onValueChange: setScanType, children: [
142            /* @__PURE__ */ jsx(SelectTrigger, { className: "bg-slate-800/80 border-2 border-blue-500/50 text-white font-mono focus:border-orange-500", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
143            /* @__PURE__ */ jsxs(SelectContent, { className: "bg-slate-900/95 border-2 border-blue-500/50 backdrop-blur-md", children: [
144              /* @__PURE__ */ jsx(SelectItem, { value: "OWASP Top 10 Assessment", children: "🛡️ OWASP Top 10 Assessment" }),
145              /* @__PURE__ */ jsx(SelectItem, { value: "Full Vulnerability Scan", children: "🔍 Full Vulnerability Scan" }),
146              /* @__PURE__ */ jsx(SelectItem, { value: "Port & Service Analysis", children: "📡 Port & Service Analysis" }),
147              /* @__PURE__ */ jsx(SelectItem, { value: "Web Application Audit", children: "🌐 Web Application Audit" })
148            ] })
149          ] }),
150          /* @__PURE__ */ jsx("div", { className: "text-xs text-blue-400 font-mono", children: "Select operational reconnaissance profile" })
151        ] })
152      ] }),
153      !user && !userLoading && /* @__PURE__ */ jsxs("div", { className: "mb-4 p-3 bg-red-900/30 border border-red-500/50 rounded-lg flex items-center space-x-3", children: [
154        /* @__PURE__ */ jsx(AlertTriangle, { className: "w-5 h-5 text-red-400" }),
155        /* @__PURE__ */ jsx("div", { className: "text-sm text-red-300 font-mono", children: "Authentication required - Please log in to initiate vulnerability scans" })
156      ] }),
157      /* @__PURE__ */ jsxs("div", { className: "mobile-grid sm:grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4 mb-6 sm:mb-8", children: [
158        /* @__PURE__ */ jsxs(
159          Button,
160          {
161            onClick: handleDeepScan,
162            disabled: createScanMutation.isPending || !user,
163            className: "mobile-tactical-button",
164            "data-testid": "deep-scan-button",
165            children: [
166              /* @__PURE__ */ jsx(Search, { className: "mr-2 w-4 h-4 sm:w-5 sm:h-5" }),
167              /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: createScanMutation.isPending ? "EXECUTING..." : "DEEP SCAN" }),
168              /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: createScanMutation.isPending ? "EXEC..." : "DEEP" })
169            ]
170          }
171        ),
172        /* @__PURE__ */ jsxs(
173          Button,
174          {
175            onClick: handleQuickAssess,
176            disabled: createScanMutation.isPending || !user,
177            className: "mobile-tactical-button",
178            "data-testid": "quick-recon-button",
179            children: [
180              /* @__PURE__ */ jsx(Zap, { className: "mr-2 w-4 h-4 sm:w-5 sm:h-5" }),
181              /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "QUICK RECON" }),
182              /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: "QUICK" })
183            ]
184          }
185        ),
186        /* @__PURE__ */ jsxs(
187          Button,
188          {
189            onClick: handleDeepScan,
190            disabled: createScanMutation.isPending || !user,
191            className: "mobile-tactical-button",
192            "data-testid": "ai-analysis-button",
193            children: [
194              /* @__PURE__ */ jsx(Brain, { className: "mr-2 w-4 h-4 sm:w-5 sm:h-5" }),
195              /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "AI ANALYSIS" }),
196              /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: "AI" })
197            ]
198          }
199        ),
200        /* @__PURE__ */ jsxs(
201          Button,
202          {
203            disabled: !createScanMutation.isPending,
204            className: "mobile-tactical-button disabled:opacity-50 disabled:cursor-not-allowed",
205            children: [
206              /* @__PURE__ */ jsx(StopCircle, { className: "mr-2 w-5 h-5" }),
207              "ABORT"
208            ]
209          }
210        )
211      ] }),
212      /* @__PURE__ */ jsxs("div", { className: "bg-slate-800/60 rounded-lg border border-blue-500/30 p-6 backdrop-blur-sm", children: [
213        /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-4", children: [
214          /* @__PURE__ */ jsx("h3", { className: "font-mono font-bold text-orange-500 text-lg", children: "MISSION STATUS" }),
215          /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
216            /* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-green-500 rounded-full animate-pulse" }),
217            /* @__PURE__ */ jsx("span", { className: "text-green-400 font-mono text-sm", children: "STANDBY" })
218          ] })
219        ] }),
220        /* @__PURE__ */ jsx("div", { className: "space-y-4", children: createScanMutation.isPending ? /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
221          /* @__P
221URE__ */ jsxs("div", { className: "flex items-center justify-between p-3 bg-blue-900/30 rounded border-l-4 border-orange-500", children: [
222            /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-3", children: [
223              /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-orange-500 rounded-full animate-pulse" }),
224              /* @__PURE__ */ jsxs("span", { className: "font-mono text-sm text-white", children: [
225                "Mission initialization: ",
226                target
227              ] })
228            ] }),
229            /* @__PURE__ */ jsx("span", { className: "text-orange-500 font-mono text-sm font-bold", children: "EXECUTING" })
230          ] }),
231          /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-3 bg-green-900/30 rounded border-l-4 border-green-500", children: [
232            /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-3", children: [
233              /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-green-500 rounded-full animate-pulse" }),
234              /* @__PURE__ */ jsx("span", { className: "font-mono text-sm text-white", children: "Reconnaissance protocol active" })
235            ] }),
236            /* @__PURE__ */ jsx("span", { className: "text-green-500 font-mono text-sm font-bold", children: "NOMINAL" })
237          ] }),
238          /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-3 bg-blue-900/30 rounded border-l-4 border-blue-500", children: [
239            /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-3", children: [
240              /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-blue-500 rounded-full animate-pulse" }),
241              /* @__PURE__ */ jsx("span", { className: "font-mono text-sm text-white", children: "Data acquisition in progress" })
242            ] }),
243            /* @__PURE__ */ jsx("span", { className: "text-blue-500 font-mono text-sm font-bold", children: "ACQUIRING" })
244          ] })
245        ] }) : /* @__PURE__ */ jsxs("div", { className: "text-center py-8", children: [
246          /* @__P
246URE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx("div", { className: "w-12 h-12 mx-auto bg-gradient-to-br from-blue-600 to-blue-800 rounded-full flex items-center justify-center border-2 border-blue-400", children: /* @__PURE__ */ jsx(Crosshair, { className: "w-6 h-6 text-blue-300" }) }) }),
247          /* @__PURE__ */ jsx("span", { className: "font-mono text-blue-300 block", children: "Mission Control ready for target acquisition" }),
248          /* @__PURE__ */ jsx("span", { className: "font-mono text-blue-400 text-sm", children: "All systems nominal - awaiting target coordinates" })
249        ] }) })
250      ] })
251    ] })
252  ] });
253}
254
255//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRhcmdldC1hY3F1aXNpdGlvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeUNsaWVudCwgdXNlUXVlcnkgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2J1dHRvblwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2lucHV0XCI7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvbGFiZWxcIjtcbmltcG9ydCB7IFNlbGVjdCwgU2VsZWN0Q29udGVudCwgU2VsZWN0SXRlbSwgU2VsZWN0VHJpZ2dlciwgU2VsZWN0VmFsdWUgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3NlbGVjdFwiO1xuaW1wb3J0IHsgQ3Jvc3NoYWlyLCBTZWFyY2gsIFphcCwgQnJhaW4sIFN0b3BDaXJjbGUsIEFsZXJ0VHJpYW5nbGUgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCI7XG5pbXBvcnQgeyB1c2VUb2FzdCB9IGZyb20gXCJAL2hvb2tzL3VzZS10b2FzdFwiO1xuaW1wb3J0IHsgYXBpUmVxdWVzdCB9IGZyb20gXCJAL2xpYi9xdWVyeUNsaWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUYXJnZXRBY3F1aXNpdGlvbigpIHtcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbc2NhblR5cGUsIHNldFNjYW5UeXBlXSA9IHVzZVN0YXRlKFwiT1dBU1AgVG9wIDEwIEFzc2Vzc21lbnRcIik7XG4gIGNvbnN0IHsgdG9hc3QgfSA9IHVzZVRvYXN0KCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICAvLyBDaGVjayBpZiB1c2VyIGlzIGF1dGhlbnRpY2F0ZWRcbiAgY29uc3QgeyBkYXRhOiB1c2VyLCBpc0xvYWRpbmc6IHVzZXJMb2FkaW5nLCBlcnJvcjogdXNlckVycm9yIH0gPSB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcIi9hcGkvdXNlclwiXSxcbiAgICByZXRyeTogZmFsc2UsXG4gICAgcmVmZXRjaE9uV2luZG93Rm9jdXM6IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCBjcmVhdGVTY2FuTXV0YXRpb24gPSB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGRhdGE6IHsgdGFyZ2V0OiBzdHJpbmc7IHNjYW5UeXBlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIHByb3BlciBzY2FuIGRhdGEgc3RydWN0dXJlIG1hdGNoaW5nIGluc2VydFNjYW5TY2hlbWFcbiAgICAgIGNvbnN0IHNjYW5EYXRhID0ge1xuICAgICAgICB0YXJnZXQ6IGRhdGEudGFyZ2V0LFxuICAgICAgICBzY2FuVHlwZTogZGF0YS5zY2FuVHlwZSxcbiAgICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgIGN1cnJlbnRQaGFzZTogXCJpbml0aWFsaXppbmdcIixcbiAgICAgICAgcmVzdWx0czogbnVsbCxcbiAgICAgICAgcmlza1Njb3JlOiBudWxsLFxuICAgICAgICB2dWxuZXJhYmlsaXRpZXM6IG51bGwsXG4gICAgICAgIGFpQW5hbHlzaXM6IG51bGwsXG4gICAgICAgIGRldGFpbGVkTG9nczogW10sXG4gICAgICAgIHBvcnRzU2Nhbm5lZDogW10sXG4gICAgICAgIHNlcnZpY2VzRGV0ZWN0ZWQ6IFtdLFxuICAgICAgICBzY2FuRHVyYXRpb246IDAsXG4gICAgICAgIGNvbXBsZXRlZEF0OiBudWxsXG4gICAgICB9O1xuICAgICAgXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3QoXCJQT1NUXCIsIFwiL2FwaS9zY2Fuc1wiLCBzY2FuRGF0YSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzOiAoZGF0YSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJTY2FuIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5OlwiLCBkYXRhKTtcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdGl0bGU6IFwiU2NhbiBJbml0aWF0ZWRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGFyZ2V0IGFjcXVpc2l0aW9uIHN1Y2Nlc3NmdWwuIFNjYW5uaW5nIGluIHByb2dyZXNzLi4uXCIsXG4gICAgICB9KTtcbiAgICAgIHNldFRhcmdldChcIlwiKTsgLy8gQ2xlYXIgdGhlIGlucHV0IGZpZWxkIGFmdGVyIHN1Y2Nlc3NmdWwgc2NhblxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoeyBxdWVyeUtleTogW1wiL2FwaS9zY2Fuc1wiXSB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcIi9hcGkvc3RhdHNcIl0gfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCIvYXBpL2NvbnNvbGVcIl0gfSk7XG4gICAgfSxcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihcIlNjYW4gY3JlYXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2NhbiBpbml0aWF0aW9uXCI7XG4gICAgICBcbiAgICAgIGlmIChlcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoXCI0MDFcIikgfHwgZXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKFwiYXV0aGVudGljYXRpb25cIikpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJBdXRoZW50aWNhdGlvbiByZXF1aXJlZC4gUGxlYXNlIGxvZyBpbiB0byBpbml0aWF0ZSBzY2Fucy5cIjtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKFwiNDAwXCIpIHx8IGVycm9yPy5tZXNzYWdlPy5pbmNsdWRlcyhcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIHNjYW4gcGFyYW1ldGVycy4gUGxlYXNlIGNoZWNrIHlvdXIgdGFyZ2V0IGFuZCBzY2FuIHR5cGUuXCI7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdGl0bGU6IFwiU2NhbiBGYWlsZWRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yTWVzc2FnZSxcbiAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlRGVlcFNjYW4gPSAoKSA9PiB7XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0b2FzdCh7XG4gICAgICAgI
255HRpdGxlOiBcIkF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlBsZWFzZSBsb2cgaW4gdG8gaW5pdGlhdGUgdnVsbmVyYWJpbGl0eSBzY2Fuc1wiLFxuICAgICAgICB2YXJpYW50OiBcImRlc3RydWN0aXZlXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldC50cmltKCkpIHtcbiAgICAgIHRvYXN0KHtcbiAgICAgICAgdGl0bGU6IFwiVGFyZ2V0IFJlcXVpcmVkXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlBsZWFzZSBlbnRlciBhIHRhcmdldCBVUkwgb3IgSVAgYWRkcmVzc1wiLFxuICAgICAgICB2YXJpYW50OiBcImRlc3RydWN0aXZlXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjcmVhdGVTY2FuTXV0YXRpb24ubXV0YXRlKHtcbiAgICAgIHRhcmdldDogdGFyZ2V0LnRyaW0oKSxcbiAgICAgIHNjYW5UeXBlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1aWNrQXNzZXNzID0gKCkgPT4ge1xuICAgIGlmICghdXNlcikge1xuICAgICAgdG9hc3Qoe1xuICAgICAgICB0aXRsZTogXCJBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJQbGVhc2UgbG9nIGluIHRvIGluaXRpYXRlIHZ1bG5lcmFiaWxpdHkgc2NhbnNcIixcbiAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQudHJpbSgpKSB7XG4gICAgICB0b2FzdCh7XG4gICAgICAgIHRpdGxlOiBcIlRhcmdldCBSZXF1aXJlZFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJQbGVhc2UgZW50ZXIgYSB0YXJnZXQgVVJMIG9yIElQIGFkZHJlc3NcIixcbiAgICAgICAgdmFyaWFudDogXCJkZXN0cnVjdGl2ZVwiLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3JlYXRlU2Nhbk11dGF0aW9uLm11dGF0ZSh7XG4gICAgICB0YXJnZXQ6IHRhcmdldC50cmltKCksXG4gICAgICBzY2FuVHlwZTogXCJRdWljayBBc3Nlc3NtZW50XCIsXG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImhvbG9ncmFwaGljLW1vYmlsZSByb3VuZGVkLWxnIG1vYmlsZS1nbG93XCI+XG4gICAgICB7LyogV0lMS0VZIG1pc3Npb24gcGFuZWwgaGVhZGVyICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1ncmFkaWVudC10by1yIGZyb20tb3JhbmdlLTUwMC8yMCB0by1ibHVlLTYwMC8yMCBweC0zIHNtOnB4LTYgcHktMyBib3JkZXItYiBib3JkZXItb3JhbmdlLTUwMC8zMFwiPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtYmFzZSBzbTp0ZXh0LXhsIGZvbnQtYm9sZCB0ZXh0LW9yYW5nZS01MDAgdHJhY2tpbmctd2lkZXIgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8Q3Jvc3NoYWlyIGNsYXNzTmFtZT1cIm1yLTMgdy02IGgtNlwiIC8+XG4gICAgICAgICAgVEFSR0VUIEFDUVVJU0lUSU9OICYgUkVDT05OQUlTU0FOQ0VcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1sLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMiBoLTIgYmctZ3JlZW4tNTAwIHJvdW5kZWQtZnVsbCBhbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTQwMCB0ZXh0LXNtXCI+QUNUSVZFPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0zIHNtOnAtNlwiPlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTQgc206Z2FwLTYgbWItNiBzbTptYi04XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQtYmx1ZS0zMDAgZm9udC1tb25vIHRleHQtc20gZm9udC1ib2xkIHRyYWNraW5nLXdpZGVcIj5UQVJHRVQgQ09PUkRJTkFURVM8L0xhYmVsPlxuICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgdmFsdWU9e3RhcmdldH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0VGFyZ2V0KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMC84MCBib3JkZXItMiBib3JkZXItYmx1ZS01MDAvNTAgdGV4dC13aGl0ZSBmb250LW1vbm8gZm9jdXM6Ym9yZGVyLW9yYW5nZS01MDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb3JhbmdlLTUwMC8yMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgbWluLWgtWzQ4cHhdXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly90YXJnZXQuZXhhbXBsZS5jb21cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtYmx1ZS00MDAgZm9udC1tb25vXCI+RW50ZXIgdGFyZ2V0IFVSTCBvciBJUCBhZGRyZXNzIGZvciByZWNvbm5haXNzYW5jZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC1ibHVlLTMwMCBmb250LW1vbm8gdGV4dC1zbSBmb250LWJvbGQgdHJhY2tpbmctd2lkZVwiPk1JU1NJT04gUFJPRklMRTwvTGFiZWw+XG4gICAgICAgICAgPFNlbGVjdCB2YWx1ZT17c2NhblR5cGV9IG9uVmFsdWVDaGFuZ2U9e3NldFNjYW5UeXBlfT5cbiAgICAgICAgICAgIDxTZWxlY3RUcmlnZ2VyIGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMC84MCBib3JkZXItMiBib3JkZXItYmx1ZS01MDAvNTAgdGV4dC13aGl0ZSBmb250LW1vbm8gZm9jdXM6Ym9yZGVyLW9yYW5nZS01MDBcIj5cbiAgICAgICAgICAgICAgPFNlbGVjdFZhbHVlIC8+XG4gICAgICAgICAgICA8L1NlbGVjdFRyaWdnZXI+XG4gICAgICAgICAgICA8U2VsZWN0Q29udGVudCBjbGFzc05hbWU9XCJiZy1zbGF0ZS05MDAvOTUgYm9yZGVyLTIgYm9yZGVyLWJsdWUtNTAwLzUwIGJhY2tkcm9wLWJsdXItbWRcIj5cbiAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJPV0FTUCBUb3AgMTAgQXNzZXNzbWVudFwiPvCfm6HvuI8gT1dBU1AgVG9wIDEwIEFzc2Vzc21lbnQ8L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiRnVsbCBWdWxuZXJhYmlsaXR5IFNjYW5cIj7wn5SNIEZ1bGwgVnVsbmVyYWJpbGl0eSBTY2FuPC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIlBvcnQgJiBTZXJ2aWNlIEFuYWx5c2lzXCI+8J+ToSBQb3J0ICYgU2VydmljZSBBbmFseXNpczwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJXZWIgQXBwbGljYXRpb24gQXVkaXRcIj7wn4yQIFdlYiBBcHBsaWNhdGlvbiBBdWRpdDwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgIDwvU2VsZWN0Q29udGVudD5cbiAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ibHVlLTQwMCBmb250LW1vbm9cIj5TZWxlY3Qgb3BlcmF0aW9uYWwgcmVjb25uYWlzc2FuY2UgcHJvZmlsZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICB7LyogQXV0aGVudGljYXRpb24gU3RhdHVzICovfVxuICAgICAgeyF1c2VyICYmICF1c2VyTG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNCBwLTMgYmctcmVkLTkwMC8zMCBib3JkZXIgYm9yZGVyLXJlZC01MDAvNTAgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICA8QWxlcnRUcmlhbmdsZSBjbGFzc05hbWU9XCJ3LTUgaC01IHRleHQtcmVkLTQwMFwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcmVkLTMwMCBmb250LW1vbm9cIj5cbiAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIC0gUGxlYXNlIGxvZyBpbiB0byBpbml0aWF0ZSB2dWxuZXJhYmlsaXR5IHNjYW5zXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIE1pc3Npb24gQ29udHJvbCBCdXR0b25zICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2JpbGUtZ3JpZCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtNCBnYXAtMyBzbTpnYXAtNCBtYi02IHNtOm1iLThcIj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlZXBTY2FufVxuICAgICAgICAgIGRpc2FibGVkPXtjcmVhdGVTY2FuTXV0YXRpb24uaXNQZW5kaW5nIHx8ICF1c2VyfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm1vYmlsZS10YWN0aWNhbC1idXR0b25cIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGVlcC1zY2FuLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8U2VhcmNoIGNsYXNzTmFtZT1cIm1yLTIgdy00IGgtNCBzbTp3LTUgc206aC01XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gc206aW5saW5lXCI+e2NyZWF0ZVNjYW5NdXRhdGlvbi5pc1BlbmRpbmcgPyBcIkVYRUNVVElORy4uLlwiIDogXCJ
255ERUVQIFNDQU5cIn08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic206aGlkZGVuXCI+e2NyZWF0ZVNjYW5NdXRhdGlvbi5pc1BlbmRpbmcgPyBcIkVYRUMuLi5cIiA6IFwiREVFUFwifTwvc3Bhbj5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVRdWlja0Fzc2Vzc31cbiAgICAgICAgICBkaXNhYmxlZD17Y3JlYXRlU2Nhbk11dGF0aW9uLmlzUGVuZGluZyB8fCAhdXNlcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtb2JpbGUtdGFjdGljYWwtYnV0dG9uXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1aWNrLXJlY29uLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8WmFwIGNsYXNzTmFtZT1cIm1yLTIgdy00IGgtNCBzbTp3LTUgc206aC01XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gc206aW5saW5lXCI+UVVJQ0sgUkVDT048L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic206aGlkZGVuXCI+UVVJQ0s8L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlRGVlcFNjYW59XG4gICAgICAgICAgZGlzYWJsZWQ9e2NyZWF0ZVNjYW5NdXRhdGlvbi5pc1BlbmRpbmcgfHwgIXVzZXJ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwibW9iaWxlLXRhY3RpY2FsLWJ1dHRvblwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJhaS1hbmFseXNpcy1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgPEJyYWluIGNsYXNzTmFtZT1cIm1yLTIgdy00IGgtNCBzbTp3LTUgc206aC01XCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gc206aW5saW5lXCI+QUkgQU5BTFlTSVM8L3
255NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic206aGlkZGVuXCI+QUk8L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgZGlzYWJsZWQ9eyFjcmVhdGVTY2FuTXV0YXRpb24uaXNQZW5kaW5nfVxuICAgICAgICAgIGNsYXNzTmFtZT1cIm1vYmlsZS10YWN0aWNhbC1idXR0b24gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPFN0b3BDaXJjbGUgY2xhc3NOYW1lPVwibXItMiB3LTUgaC01XCIgLz5cbiAgICAgICAgICBBQk9SVFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICB7LyogTWlzc2lvbiBTdGF0dXMgUGFuZWwgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXNsYXRlLTgwMC82MCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYmx1ZS01MDAvMzAgcC02IGJhY2tkcm9wLWJsdXItc21cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItNFwiPlxuICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJmb250LW1vbm8gZm9udC1ib2xkIHRleHQtb3JhbmdlLTUwMCB0ZXh0LWxnXCI+TUlTU0lPTiBTVEFUVVM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMiBoLTIgYmctZ3JlZW4tNTAwIHJvdW5kZWQtZnVsbCBhbmltYXRlLXB1bHNlXCI+PC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyZWVuLTQwMCBmb250LW1vbm8gdGV4dC1zbVwiPlNUQU5EQlk8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgIHtjcmVhdGVTY2FuTXV0YXRpb24uaXNQZW5kaW5nID8gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcC0zIGJnLWJsdWUtOTAwLzMwIHJvdW5kZWQgYm9yZGVyLWwtNCBib3JkZXItb3JhbmdlLTUwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMyBoLTMgYmctb3JhbmdlLTUwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1wdWxzZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtc20gdGV4dC13aGl0ZVwiPk1pc3Npb24gaW5pdGlhbGl6YXRpb246IHt0YXJnZXR9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtb3JhbmdlLTUwMCBmb250LW1vbm8gdGV4dC1zbSBmb250LWJvbGRcIj5FWEVDVVRJTkc8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwLTMgYmctZ3JlZW4tOTAwLzMwIHJvdW5kZWQgYm9yZGVyLWwtNCBib3JkZXItZ3JlZW4tNTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyBiZy1ncmVlbi01MDAgcm91bmRlZC1mdWxsIGFuaW1hdGUtcHVsc2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0ZXh0LXNtIHRleHQtd2hpdGVcIj5SZWNvbm5haXNzYW5jZSBwcm90b2NvbCBhY3RpdmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmVlbi01MDAgZm9udC1tb25vIHRleHQtc20gZm9udC1ib2xkXCI+Tk9NSU5BTDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtMyBiZy1ibHVlLTkwMC8zMCByb3VuZGVkIGJvcmRlci1sLTQgYm9yZGVyLWJsdWUtNTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0zIGgtMyBiZy1ibHVlLTUwMCByb3VuZGVkLWZ1bGwgYW5pbWF0ZS1wdWxzZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtc20gdGV4dC13aGl0ZVwiPkRhdGEgYWNxdWlzaXRpb24gaW4gcHJvZ3Jlc3M8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ibHVlLTUwMCBmb250LW1vbm8gdGV4dC1zbSBmb250LWJvbGRcIj5BQ1FVSVJJTkc8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctMTIgaC0xMiBteC1hdXRvIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tYmx1ZS02MDAgdG8tYmx1ZS04MDAgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci0yIGJvcmRlci1ibHVlLTQwMFwiPlxuICAgICAgICAgICAgICAgICAgPENyb3NzaGFpciBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtYmx1ZS0zMDBcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRleHQtYmx1ZS0zMDAgYmxvY2tcIj5cbiAgICAgICAgICAgICAgICBNaXNzaW9uIENvbnRyb2wgcmVhZHkgZm9yIHRhcmdldCBhY3F1aXNpdGlvblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbW9ubyB0ZXh0LWJsdWUtNDAwIHRleHQtc21cIj5cbiAgICAgICAgICAgICAgICB
255BbGwgc3lzdGVtcyBub21pbmFsIC0gYXdhaXRpbmcgdGFyZ2V0IGNvb3JkaW5hdGVzXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6IkFBb0lVLGNBRUEsWUFGQTtBQXBJVixTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGFBQWEsZ0JBQWdCLGdCQUFnQjtBQUN0RCxTQUFTLGNBQWM7QUFDdkIsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsYUFBYTtBQUN0QixTQUFTLFFBQVEsZUFBZSxZQUFZLGVBQWUsbUJBQW1CO0FBQzlFLFNBQVMsV0FBVyxRQUFRLEtBQUssT0FBTyxZQUFZLHFCQUFxQjtBQUN6RSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLGtCQUFrQjtBQUUzQix3QkFBd0Isb0JBQW9CO0FBQzFDLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSSxTQUFTLEVBQUU7QUFDdkMsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJLFNBQVMseUJBQXlCO0FBQ2xFLFFBQU0sRUFBRSxNQUFNLElBQUksU0FBUztBQUMzQixRQUFNLGNBQWMsZUFBZTtBQUduQyxRQUFNLEVBQUUsTUFBTSxNQUFNLFdBQVcsYUFBYSxPQUFPLFVBQVUsSUFBSSxTQUFTO0FBQUEsSUFDeEUsVUFBVSxDQUFDLFdBQVc7QUFBQSxJQUN0QixPQUFPO0FBQUEsSUFDUCxzQkFBc0I7QUFBQSxFQUN4QixDQUFDO0FBRUQsUUFBTSxxQkFBcUIsWUFBWTtBQUFBLElBQ3JDLFlBQVksT0FBTyxTQUErQztBQUVoRSxZQUFNLFdBQVc7QUFBQSxRQUNmLFFBQVEsS0FBSztBQUFBLFFBQ2IsVUFBVSxLQUFLO0FBQUEsUUFDZixRQUFRO0FBQUEsUUFDUixVQUFVO0FBQUEsUUFDVixjQUFjO0FBQUEsUUFDZCxTQUFTO0FBQUEsUUFDVCxXQUFXO0FBQUEsUUFDWCxpQkFB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

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.