numbpilled commited on
Commit
1ffed9d
·
verified ·
1 Parent(s): d6fdafb

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +420 -19
  3. prompts.txt +1 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Wraithpath Input Profile Username For Idealogical Overview
3
- emoji: 🏃
4
- colorFrom: blue
5
- colorTo: indigo
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: wraithpath-input-profile-username-for-idealogical-overview
3
+ emoji: 🐳
4
+ colorFrom: green
5
+ colorTo: pink
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,420 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>WRAITHPATH Ideological Fingerprinting</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ .gradient-text {
11
+ background: linear-gradient(90deg, #8b5cf6 0%, #ec4899 100%);
12
+ -webkit-background-clip: text;
13
+ background-clip: text;
14
+ color: transparent;
15
+ }
16
+ .timeline-item::before {
17
+ content: '';
18
+ position: absolute;
19
+ left: -20px;
20
+ top: 0;
21
+ width: 2px;
22
+ height: 100%;
23
+ background: #4b5563;
24
+ }
25
+ .fade-in {
26
+ animation: fadeIn 0.5s ease-in-out;
27
+ }
28
+ @keyframes fadeIn {
29
+ from { opacity: 0; transform: translateY(10px); }
30
+ to { opacity: 1; transform: translateY(0); }
31
+ }
32
+ .pulse {
33
+ animation: pulse 2s infinite;
34
+ }
35
+ @keyframes pulse {
36
+ 0% { opacity: 0.6; }
37
+ 50% { opacity: 1; }
38
+ 100% { opacity: 0.6; }
39
+ }
40
+ </style>
41
+ </head>
42
+ <body class="bg-gray-900 text-gray-200 min-h-screen font-sans">
43
+ <div class="container mx-auto px-4 py-8 max-w-6xl">
44
+ <!-- Header -->
45
+ <header class="mb-12">
46
+ <div class="flex justify-between items-center mb-6">
47
+ <h1 class="text-4xl font-bold">
48
+ <span class="gradient-text">WRAITHPATH</span>
49
+ </h1>
50
+ <button class="bg-gray-800 hover:bg-gray-700 px-4 py-2 rounded-lg flex items-center">
51
+ <i class="fas fa-user-secret mr-2"></i>
52
+ <span>Login</span>
53
+ </button>
54
+ </div>
55
+ <p class="text-xl text-gray-400 mb-6">"Their posts were a breadcrumb trail to who they really are."</p>
56
+
57
+ <!-- Search Box -->
58
+ <div class="bg-gray-800 rounded-xl p-6 shadow-lg mb-8">
59
+ <div class="flex flex-col md:flex-row gap-4">
60
+ <div class="flex-1 relative">
61
+ <div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
62
+ <i class="fas fa-search text-gray-500"></i>
63
+ </div>
64
+ <input
65
+ type="text"
66
+ id="profileUrl"
67
+ class="w-full bg-gray-700 border border-gray-600 rounded-lg pl-10 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-purple-500"
68
+ placeholder="Enter Reddit, Tumblr, or blog URL..."
69
+ >
70
+ </div>
71
+ <button
72
+ id="analyzeBtn"
73
+ class="bg-gradient-to-r from-purple-600 to-pink-500 hover:from-purple-700 hover:to-pink-600 text-white font-medium rounded-lg px-6 py-3 transition-all duration-300 flex items-center justify-center"
74
+ >
75
+ <i class="fas fa-fingerprint mr-2"></i>
76
+ Analyze Ideology
77
+ </button>
78
+ </div>
79
+ <div class="mt-4 flex flex-wrap gap-2">
80
+ <span class="text-xs bg-gray-700 px-2 py-1 rounded">Reddit: u/username</span>
81
+ <span class="text-xs bg-gray-700 px-2 py-1 rounded">Tumblr: blogname.tumblr.com</span>
82
+ <span class="text-xs bg-gray-700 px-2 py-1 rounded">WordPress: example.wordpress.com</span>
83
+ </div>
84
+ </div>
85
+ </header>
86
+
87
+ <!-- Demo Section -->
88
+ <section class="mb-16">
89
+ <h2 class="text-2xl font-semibold mb-6 flex items-center">
90
+ <i class="fas fa-ghost mr-3 text-purple-500"></i>
91
+ How It Works
92
+ </h2>
93
+ <div class="grid md:grid-cols-3 gap-6">
94
+ <div class="bg-gray-800 p-6 rounded-xl hover:bg-gray-750 transition-all">
95
+ <div class="w-12 h-12 bg-purple-900 rounded-lg flex items-center justify-center mb-4">
96
+ <i class="fas fa-link text-purple-400 text-xl"></i>
97
+ </div>
98
+ <h3 class="text-lg font-medium mb-2">1. Input Profile</h3>
99
+ <p class="text-gray-400">Provide any public social media or blog URL. We'll scrape years of posting history.</p>
100
+ </div>
101
+ <div class="bg-gray-800 p-6 rounded-xl hover:bg-gray-750 transition-all">
102
+ <div class="w-12 h-12 bg-pink-900 rounded-lg flex items-center justify-center mb-4">
103
+ <i class="fas fa-brain text-pink-400 text-xl"></i>
104
+ </div>
105
+ <h3 class="text-lg font-medium mb-2">2. Cognitive Analysis</h3>
106
+ <p class="text-gray-400">Our models detect linguistic patterns, sentiment shifts, and ideological markers.</p>
107
+ </div>
108
+ <div class="bg-gray-800 p-6 rounded-xl hover:bg-gray-750 transition-all">
109
+ <div class="w-12 h-12 bg-indigo-900 rounded-lg flex items-center justify-center mb-4">
110
+ <i class="fas fa-chart-line text-indigo-400 text-xl"></i>
111
+ </div>
112
+ <h3 class="text-lg font-medium mb-2">3. Get The Report</h3>
113
+ <p class="text-gray-400">Receive a detailed timeline of mental state evolution and belief system changes.</p>
114
+ </div>
115
+ </div>
116
+ </section>
117
+
118
+ <!-- Results Section (Initially Hidden) -->
119
+ <section id="resultsSection" class="hidden mb-16">
120
+ <div class="flex justify-between items-center mb-6">
121
+ <h2 class="text-2xl font-semibold flex items-center">
122
+ <i class="fas fa-chart-bar mr-3 text-pink-500"></i>
123
+ Ideological Fingerprint
124
+ </h2>
125
+ <button id="downloadReport" class="bg-gray-800 hover:bg-gray-700 px-4 py-2 rounded-lg flex items-center">
126
+ <i class="fas fa-file-pdf mr-2 text-red-400"></i>
127
+ <span>Download PDF</span>
128
+ </button>
129
+ </div>
130
+
131
+ <!-- Profile Summary -->
132
+ <div class="bg-gray-800 rounded-xl p-6 mb-8">
133
+ <div class="flex flex-col md:flex-row gap-6">
134
+ <div class="flex-shrink-0">
135
+ <div class="w-24 h-24 rounded-full bg-gradient-to-br from-purple-600 to-pink-500 flex items-center justify-center text-4xl font-bold">
136
+ <span id="avatarInitial">?</span>
137
+ </div>
138
+ </div>
139
+ <div class="flex-1">
140
+ <div class="flex flex-col md:flex-row md:items-center md:justify-between mb-4">
141
+ <div>
142
+ <h3 id="profileName" class="text-xl font-bold">Unknown Profile</h3>
143
+ <p id="profileHandle" class="text-gray-400">@unknown</p>
144
+ </div>
145
+ <div class="mt-2 md:mt-0">
146
+ <span id="profilePlatform" class="bg-gray-700 px-3 py-1 rounded-full text-sm">Unknown Platform</span>
147
+ </div>
148
+ </div>
149
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
150
+ <div>
151
+ <p class="text-gray-500 text-sm">Posts Analyzed</p>
152
+ <p id="postCount" class="text-lg font-medium">0</p>
153
+ </div>
154
+ <div>
155
+ <p class="text-gray-500 text-sm">Time Span</p>
156
+ <p id="timeSpan" class="text-lg font-medium">0 years</p>
157
+ </div>
158
+ <div>
159
+ <p class="text-gray-500 text-sm">Ideology Score</p>
160
+ <p id="ideologyScore" class="text-lg font-medium">0/100</p>
161
+ </div>
162
+ <div>
163
+ <p class="text-gray-500 text-sm">Volatility</p>
164
+ <p id="volatility" class="text-lg font-medium">Low</p>
165
+ </div>
166
+ </div>
167
+ </div>
168
+ </div>
169
+ </div>
170
+
171
+ <!-- Ideology Timeline -->
172
+ <div class="bg-gray-800 rounded-xl p-6 mb-8">
173
+ <h3 class="text-lg font-medium mb-4 flex items-center">
174
+ <i class="fas fa-history mr-2 text-purple-400"></i>
175
+ Ideological Timeline
176
+ </h3>
177
+ <div class="relative pl-8">
178
+ <div id="timelineContainer">
179
+ <!-- Timeline items will be added here by JavaScript -->
180
+ </div>
181
+ </div>
182
+ </div>
183
+
184
+ <!-- Sentiment Analysis -->
185
+ <div class="bg-gray-800 rounded-xl p-6 mb-8">
186
+ <h3 class="text-lg font-medium mb-4 flex items-center">
187
+ <i class="fas fa-brain mr-2 text-pink-400"></i>
188
+ Sentiment Evolution
189
+ </h3>
190
+ <div class="h-64 bg-gray-700 rounded-lg flex items-center justify-center">
191
+ <p class="text-gray-500">Sentiment chart will appear here</p>
192
+ </div>
193
+ </div>
194
+
195
+ <!-- Topic Cloud -->
196
+ <div class="bg-gray-800 rounded-xl p-6">
197
+ <h3 class="text-lg font-medium mb-4 flex items-center">
198
+ <i class="fas fa-cloud mr-2 text-indigo-400"></i>
199
+ Topic Cloud
200
+ </h3>
201
+ <div class="flex flex-wrap gap-3" id="topicCloud">
202
+ <!-- Topics will be added here by JavaScript -->
203
+ </div>
204
+ </div>
205
+ </section>
206
+
207
+ <!-- Loading State (Initially Hidden) -->
208
+ <div id="loadingState" class="hidden fixed inset-0 bg-gray-900 bg-opacity-90 flex items-center justify-center z-50">
209
+ <div class="text-center">
210
+ <div class="w-24 h-24 border-4 border-purple-500 border-t-pink-500 rounded-full animate-spin mb-6 mx-auto"></div>
211
+ <h3 class="text-2xl font-medium mb-2">Building Cognitive Profile</h3>
212
+ <p class="text-gray-400 max-w-md mx-auto">Analyzing linguistic patterns, sentiment shifts, and ideological markers across <span id="loadingPostCount">0</span> posts...</p>
213
+ <div class="mt-6 bg-gray-800 rounded-full h-2 w-64 mx-auto overflow-hidden">
214
+ <div id="progressBar" class="bg-gradient-to-r from-purple-500 to-pink-500 h-full" style="width: 0%"></div>
215
+ </div>
216
+ </div>
217
+ </div>
218
+
219
+ <!-- Footer -->
220
+ <footer class="mt-16 pt-8 border-t border-gray-800 text-gray-500">
221
+ <div class="flex flex-col md:flex-row justify-between items-center">
222
+ <div class="mb-4 md:mb-0">
223
+ <p>&copy; 2023 WRAITHPATH • Ideological Fingerprinting</p>
224
+ </div>
225
+ <div class="flex space-x-6">
226
+ <a href="#" class="hover:text-gray-300">Privacy</a>
227
+ <a href="#" class="hover:text-gray-300">Terms</a>
228
+ <a href="#" class="hover:text-gray-300">API</a>
229
+ <a href="#" class="hover:text-gray-300">Contact</a>
230
+ </div>
231
+ </div>
232
+ </footer>
233
+ </div>
234
+
235
+ <script>
236
+ document.addEventListener('DOMContentLoaded', function() {
237
+ const analyzeBtn = document.getElementById('analyzeBtn');
238
+ const profileUrl = document.getElementById('profileUrl');
239
+ const resultsSection = document.getElementById('resultsSection');
240
+ const loadingState = document.getElementById('loadingState');
241
+ const downloadReport = document.getElementById('downloadReport');
242
+
243
+ // Sample data for demonstration
244
+ const sampleTopics = [
245
+ {text: "politics", weight: 0.9},
246
+ {text: "technology", weight: 0.7},
247
+ {text: "philosophy", weight: 0.6},
248
+ {text: "economics", weight: 0.5},
249
+ {text: "culture", weight: 0.4},
250
+ {text: "science", weight: 0.4},
251
+ {text: "religion", weight: 0.3},
252
+ {text: "psychology", weight: 0.3}
253
+ ];
254
+
255
+ const sampleTimeline = [
256
+ {
257
+ year: "2015-2017",
258
+ title: "Libertarian Phase",
259
+ description: "Strong emphasis on individual freedom, skepticism of government. Frequent mentions of Austrian economics.",
260
+ sentiment: "neutral",
261
+ tags: ["libertarian", "economics", "skepticism"]
262
+ },
263
+ {
264
+ year: "2018-2019",
265
+ title: "Political Awakening",
266
+ description: "Began engaging with more radical political content. Shift toward populist rhetoric and anti-establishment views.",
267
+ sentiment: "negative",
268
+ tags: ["populism", "anti-establishment", "anger"]
269
+ },
270
+ {
271
+ year: "2020-2021",
272
+ title: "Ideological Crisis",
273
+ description: "Evident cognitive dissonance in posts. Frequent deletions and contradictions. Increased conspiracy language.",
274
+ sentiment: "negative",
275
+ tags: ["conspiracy", "confusion", "isolation"]
276
+ },
277
+ {
278
+ year: "2022-Present",
279
+ title: "Radicalization",
280
+ description: "Clear ideological framework emerges. Dogmatic language, in-group signaling, and dehumanizing rhetoric toward out-groups.",
281
+ sentiment: "negative",
282
+ tags: ["radical", "tribalism", "authoritarian"]
283
+ }
284
+ ];
285
+
286
+ analyzeBtn.addEventListener('click', function() {
287
+ const url = profileUrl.value.trim();
288
+
289
+ if (!url) {
290
+ alert('Please enter a valid URL');
291
+ return;
292
+ }
293
+
294
+ // Show loading state
295
+ loadingState.classList.remove('hidden');
296
+
297
+ // Simulate analysis progress
298
+ let progress = 0;
299
+ const progressInterval = setInterval(() => {
300
+ progress += Math.random() * 10;
301
+ if (progress > 100) progress = 100;
302
+ document.getElementById('progressBar').style.width = `${progress}%`;
303
+
304
+ // Update post count during loading
305
+ const postCount = Math.floor(Math.random() * 5000) + 1000;
306
+ document.getElementById('loadingPostCount').textContent = postCount.toLocaleString();
307
+
308
+ if (progress >= 100) {
309
+ clearInterval(progressInterval);
310
+ setTimeout(showResults, 500);
311
+ }
312
+ }, 300);
313
+
314
+ function showResults() {
315
+ loadingState.classList.add('hidden');
316
+ resultsSection.classList.remove('hidden');
317
+
318
+ // Scroll to results
319
+ resultsSection.scrollIntoView({ behavior: 'smooth' });
320
+
321
+ // Populate sample data
322
+ populateSampleData(url);
323
+ }
324
+ });
325
+
326
+ downloadReport.addEventListener('click', function() {
327
+ alert('PDF report generation would be implemented here. This is a demo.');
328
+ });
329
+
330
+ function populateSampleData(url) {
331
+ // Extract username from URL
332
+ let username = "Unknown";
333
+ let platform = "Unknown";
334
+ let avatarInitial = "?";
335
+
336
+ try {
337
+ const urlObj = new URL(url);
338
+ const host = urlObj.hostname;
339
+
340
+ if (host.includes('reddit.com')) {
341
+ platform = "Reddit";
342
+ const pathParts = urlObj.pathname.split('/');
343
+ if (pathParts.length >= 3 && pathParts[1] === 'user') {
344
+ username = pathParts[2];
345
+ avatarInitial = username.charAt(0).toUpperCase();
346
+ }
347
+ } else if (host.includes('tumblr.com')) {
348
+ platform = "Tumblr";
349
+ username = host.split('.')[0];
350
+ avatarInitial = username.charAt(0).toUpperCase();
351
+ } else {
352
+ platform = "Blog";
353
+ username = host;
354
+ avatarInitial = username.charAt(0).toUpperCase();
355
+ }
356
+ } catch (e) {
357
+ console.error("Error parsing URL", e);
358
+ }
359
+
360
+ // Set profile info
361
+ document.getElementById('profileName').textContent = username;
362
+ document.getElementById('profileHandle').textContent = `@${username.toLowerCase()}`;
363
+ document.getElementById('profilePlatform').textContent = platform;
364
+ document.getElementById('avatarInitial').textContent = avatarInitial;
365
+ document.getElementById('postCount').textContent = (Math.random() * 5000 + 1000).toLocaleString();
366
+ document.getElementById('timeSpan').textContent = `${Math.floor(Math.random() * 10) + 3} years`;
367
+ document.getElementById('ideologyScore').textContent = `${Math.floor(Math.random() * 40) + 30}/100`;
368
+ document.getElementById('volatility').textContent = ["Low", "Medium", "High"][Math.floor(Math.random() * 3)];
369
+
370
+ // Populate timeline
371
+ const timelineContainer = document.getElementById('timelineContainer');
372
+ timelineContainer.innerHTML = '';
373
+
374
+ sampleTimeline.forEach((item, index) => {
375
+ const timelineItem = document.createElement('div');
376
+ timelineItem.className = `timeline-item relative pb-8 fade-in ${index !== sampleTimeline.length - 1 ? 'border-b border-gray-700' : ''}`;
377
+
378
+ let sentimentIcon = "😐";
379
+ if (item.sentiment === "positive") sentimentIcon = "😊";
380
+ else if (item.sentiment === "negative") sentimentIcon = "😠";
381
+
382
+ timelineItem.innerHTML = `
383
+ <div class="absolute -left-8 top-0 w-6 h-6 rounded-full flex items-center justify-center ${item.sentiment === 'negative' ? 'bg-pink-900' : item.sentiment === 'positive' ? 'bg-blue-900' : 'bg-gray-700'}">
384
+ <span class="text-xs">${sentimentIcon}</span>
385
+ </div>
386
+ <div class="mb-2">
387
+ <span class="text-sm font-medium bg-gray-700 px-2 py-1 rounded">${item.year}</span>
388
+ <h4 class="text-lg font-semibold mt-1">${item.title}</h4>
389
+ </div>
390
+ <p class="text-gray-400 mb-3">${item.description}</p>
391
+ <div class="flex flex-wrap gap-2">
392
+ ${item.tags.map(tag => `<span class="text-xs bg-gray-700 px-2 py-1 rounded">${tag}</span>`).join('')}
393
+ </div>
394
+ `;
395
+
396
+ timelineContainer.appendChild(timelineItem);
397
+ });
398
+
399
+ // Populate topic cloud
400
+ const topicCloud = document.getElementById('topicCloud');
401
+ topicCloud.innerHTML = '';
402
+
403
+ sampleTopics.forEach(topic => {
404
+ const size = Math.floor(topic.weight * 20) + 12;
405
+ const opacity = topic.weight * 0.7 + 0.3;
406
+ const color = `rgba(168, 85, 247, ${opacity})`;
407
+
408
+ const topicElement = document.createElement('span');
409
+ topicElement.className = 'fade-in';
410
+ topicElement.style.fontSize = `${size}px`;
411
+ topicElement.style.color = color;
412
+ topicElement.textContent = topic.text;
413
+
414
+ topicCloud.appendChild(topicElement);
415
+ });
416
+ }
417
+ });
418
+ </script>
419
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=numbpilled/wraithpath-input-profile-username-for-idealogical-overview" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
420
+ </html>
prompts.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ WRAITHPATH A user fingerprinting engine disguised as a minimalist blog reader. Input someone’s Reddit, Tumblr, or blog and the site outputs a timeline of shifting mental states and ideological drift. Monetization: Sell PDF reports of “ideological pathology” or mental OSINT digests. Tagline: “Their posts were a breadcrumb trail to who they really are.”