epstein-files 1.1.5__py3-none-any.whl → 1.2.1__py3-none-any.whl

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.
@@ -2,6 +2,7 @@ import json
2
2
  import re
3
3
  from dataclasses import dataclass, field
4
4
 
5
+ from rich.console import Console
5
6
  from rich.highlighter import RegexHighlighter
6
7
  from rich.text import Text
7
8
 
@@ -9,25 +10,28 @@ from epstein_files.util.constant.names import *
9
10
  from epstein_files.util.constant.strings import *
10
11
  from epstein_files.util.constant.urls import ARCHIVE_LINK_COLOR
11
12
  from epstein_files.util.constants import (EMAILER_ID_REGEXES, EPSTEIN_V_ROTHSTEIN_EDWARDS,
12
- OSBORNE_LLP, REPLY_REGEX, SENT_FROM_REGEX, VIRGIN_ISLANDS)
13
+ OSBORNE_LLP, REPLY_REGEX, SENT_FROM_REGEX)
13
14
  from epstein_files.util.doc_cfg import *
14
- from epstein_files.util.data import extract_first_name, extract_last_name, without_falsey
15
+ from epstein_files.util.data import without_falsey
16
+ from epstein_files.util.env import args
15
17
  from epstein_files.util.logging import logger
16
18
 
17
19
  CIVIL_ATTORNEY = 'civil attorney'
18
20
  CRIMINAL_DEFENSE_ATTORNEY = 'criminal defense attorney'
19
21
  CRIMINAL_DEFENSE_2008 = f"{CRIMINAL_DEFENSE_ATTORNEY} on 2008 case"
20
- EPSTEIN_LAWYER = 'Epstein lawyer'
21
- EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY = f"{CIVIL_ATTORNEY} working on {EPSTEIN_V_ROTHSTEIN_EDWARDS}"
22
+ EPSTEIN_LAWYER = 'lawyer'
23
+ EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY = f"{CIVIL_ATTORNEY} {EPSTEIN_V_ROTHSTEIN_EDWARDS}"
22
24
  ESTATE_EXECUTOR = 'estate executor'
23
25
  EPSTEIN_ESTATE_EXECUTOR = f"Epstein {ESTATE_EXECUTOR}"
24
- QUESTION_MARKS_TXT = Text(QUESTION_MARKS, style='dim')
26
+ MC2_MODEL_MANAGEMENT = f"{JEAN_LUC_BRUNEL}'s MC2 Model Management"
27
+ MIDEAST = 'mideast'
28
+ QUESTION_MARKS_TXT = Text(QUESTION_MARKS, style='grey50')
25
29
  REGEX_STYLE_PREFIX = 'regex'
26
- SIMPLE_NAME_REGEX = re.compile(r"^[-\w ]+$", re.IGNORECASE)
30
+ SIMPLE_NAME_REGEX = re.compile(r"^[-\w, ]+$", re.IGNORECASE)
31
+ TECH_BRO = 'tech bro'
27
32
 
28
33
  CATEGORY_STYLE_MAPPING = {
29
34
  ARTICLE: JOURNALIST,
30
- ARTS: ENTERTAINER,
31
35
  BOOK: JOURNALIST,
32
36
  LEGAL: EPSTEIN_LAWYER,
33
37
  POLITICS: LOBBYIST,
@@ -40,6 +44,8 @@ CATEGORY_STYLES = {
40
44
  'letter': 'medium_orchid1'
41
45
  }
42
46
 
47
+ debug_console = Console(color_system='256')
48
+
43
49
 
44
50
  @dataclass(kw_only=True)
45
51
  class BaseHighlight:
@@ -121,13 +127,18 @@ class HighlightedNames(HighlightedText):
121
127
  self._pattern = '|'.join([self._emailer_pattern(e) for e in self.emailers] + self.patterns)
122
128
  self.regex = re.compile(fr"\b({self._match_group_var}({self._pattern})s?)\b", re.IGNORECASE)
123
129
 
124
- def get_info(self, name: str) -> str | None:
125
- """Label and additional info for 'name' if 'name' is in self.emailers."""
126
- info_pieces = [
127
- self.category or ('' if len(self.emailers) == 1 else self.label.replace('_', ' ')),
128
- self.emailers.get(name),
129
- ]
130
+ def category_str(self) -> str:
131
+ if self.category:
132
+ return self.category
133
+ elif len(self.emailers) == 1 and self.label == [k for k in self.emailers.keys()][0]:
134
+ return ''
135
+ else:
136
+ return self.label.replace('_', ' ')
130
137
 
138
+ def info_for(self, name: str, include_category: bool = False) -> str | None:
139
+ """Label and additional info for 'name' if 'name' is in self.emailers."""
140
+ info_pieces = [self.category_str()] if include_category else []
141
+ info_pieces.append(self.emailers.get(name) or '')
131
142
  info_pieces = without_falsey(info_pieces)
132
143
  return ', '.join(info_pieces) if info_pieces else None
133
144
 
@@ -136,28 +147,22 @@ class HighlightedNames(HighlightedText):
136
147
  if not self.should_match_first_last_name:
137
148
  return name
138
149
 
139
- name = remove_question_marks(name)
140
- first_name = extract_first_name(name)
141
- last_name = extract_last_name(name)
142
-
143
150
  if name in EMAILER_ID_REGEXES:
144
- pattern = EMAILER_ID_REGEXES[name].pattern
151
+ name_patterns = [EMAILER_ID_REGEXES[name].pattern]
152
+ else:
153
+ name_patterns = [remove_question_marks(name).replace(' ', r"\s+")]
145
154
 
146
- # Include regex for first and last names
147
- for partial_name in [first_name, last_name]:
148
- if SIMPLE_NAME_REGEX.match(partial_name) and partial_name.lower() not in NAMES_TO_NOT_HIGHLIGHT:
149
- pattern += fr"|{partial_name}"
155
+ if ' ' in name:
156
+ for partial_name in [extract_first_name(name), extract_last_name(name), reversed_name(name)]:
157
+ if partial_name.lower() not in NAMES_TO_NOT_HIGHLIGHT and SIMPLE_NAME_REGEX.match(partial_name):
158
+ name_patterns.append(partial_name.replace(' ', r"\s+"))
150
159
 
151
- return pattern
152
- elif ' ' not in name:
153
- return name
160
+ pattern = '|'.join(name_patterns)
154
161
 
155
- name_patterns = [
156
- n.replace(' ', r"\s+") for n in [name, first_name, last_name]
157
- if n.lower() not in NAMES_TO_NOT_HIGHLIGHT
158
- ]
162
+ if args.deep_debug:
163
+ debug_console.print(Text('').append(f"{name:25s}", style=self.style).append(f" '{pattern}'", style='dim'))
159
164
 
160
- return '|'.join(name_patterns)
165
+ return pattern
161
166
 
162
167
  def __str__(self) -> str:
163
168
  return super().__str__()
@@ -209,40 +214,42 @@ HIGHLIGHTED_NAMES = [
209
214
  ManualHighlight(
210
215
  label='email_subject',
211
216
  style='light_yellow3',
212
- pattern=r"^(> )?Subject: (?P<email_subject>.*)",
217
+ pattern=r"^(> )?(Classification|Flag|Subject): (?P<email_subject>.*)",
213
218
  ),
214
219
  HighlightedNames(
215
220
  label=ACADEMIA,
216
221
  style='light_goldenrod2',
217
222
  emailers={
218
- DAVID_HAIG: 'evolutionary geneticist?',
219
- JOSCHA_BACH: 'cognitive science / AI research',
220
223
  'Daniel Kahneman': 'Nobel economic sciences laureate and cognitivie psychologist (?)',
221
- 'Ed Boyden': f'Associate Professor, {MIT_MEDIA_LAB} neurobiology',
224
+ DAVID_HAIG: 'evolutionary geneticist?',
225
+ 'David Grosof': 'MIT Sloan School of Management',
226
+ 'Ed Boyden': f'{MIT_MEDIA_LAB} neurobiology professor',
222
227
  'Harry Fisch': "men's health expert at New York-Presbyterian / Weill Cornell (?)",
223
- LAWRENCE_KRAUSS: 'theoretical physicist',
228
+ JOSCHA_BACH: 'cognitive science / AI research',
229
+ LAWRENCE_KRAUSS: 'theoretical physicist with #MeToo problems',
224
230
  LINDA_STONE: f'ex-Microsoft, {MIT_MEDIA_LAB}',
225
231
  MARK_TRAMO: 'professor of neurology at UCLA',
226
232
  'Nancy Dahl': f'wife of {LAWRENCE_KRAUSS}',
227
233
  NEAL_KASSELL: 'professor of neurosurgery at University of Virginia',
234
+ NOAM_CHOMSKY: f"professor of linguistics at MIT",
235
+ 'Norman Finkelstein': 'scholar, well known critic of Israel',
228
236
  PETER_ATTIA: 'longevity medicine',
229
237
  ROBERT_TRIVERS: 'evolutionary biology',
230
238
  ROGER_SCHANK: 'Teachers College, Columbia University',
239
+ 'Valeria Chomsky': f"wife of {NOAM_CHOMSKY}",
231
240
  },
232
241
  patterns=[
233
- r"Alain Forget",
242
+ r"Bard\s+((Early )?College|High School|Schools)",
234
243
  r"Brotherton",
235
244
  r"Carl\s*Sagan",
236
245
  r"Columbia",
237
246
  r"Dan(iel|ny) Kahneman",
238
- r"David Grosof",
239
247
  r"J(ames|im)\s*Watson",
240
248
  r"(Lord\s*)?Martin\s*Rees",
241
249
  r"Massachusetts\s*Institute\s*of\s*Technology",
242
250
  r"Media\s*Lab",
243
251
  r"(Marvin\s*)?Minsky",
244
252
  r"MIT(\s*Media\s*Lab)?",
245
- r"((Noam|Valeria)\s*)?Chomsky",
246
253
  r"Norman\s*Finkelstein",
247
254
  r"Oxford(?! Analytica)",
248
255
  r"Praluent",
@@ -285,6 +292,59 @@ HIGHLIGHTED_NAMES = [
285
292
  r"Zimbabwe(an)?",
286
293
  ],
287
294
  ),
295
+ HighlightedNames(
296
+ label=ARTS,
297
+ style='light_steel_blue3',
298
+ emailers={
299
+ ANDRES_SERRANO: "'Piss Christ' artist",
300
+ 'Barry Josephson': 'American film producer, editor FamilySecurityMatters.org',
301
+ BILL_SIEGEL: 'documentary film producer and director',
302
+ DAVID_BLAINE: 'famous magician',
303
+ 'Richard Merkin': 'painter, illustrator and arts educator',
304
+ STEVEN_PFEIFFER: 'Associate Director at Independent Filmmaker Project (IFP)',
305
+ 'Steven Gaydos': 'American screenwriter and journalist',
306
+ },
307
+ patterns=[
308
+ r"(Art )?Spiegelman",
309
+ r"Artspace",
310
+ r"Bobby slayton",
311
+ r"bono\s*mick",
312
+ r"Errol(\s*Morris)?",
313
+ r"Etienne Binant",
314
+ r"(Frank\s)?Gehry",
315
+ r"Jagger",
316
+ r"(Jeffrey\s*)?Katzenberg",
317
+ r"(Johnny\s*)?Depp",
318
+ r"Kid Rock",
319
+ r"(Larry\s*)?Gagosian",
320
+ r"Lena\s*Dunham",
321
+ r"Madonna",
322
+ r"Mark\s*Burnett",
323
+ r"Phaidon",
324
+ r"Ramsey Elkholy",
325
+ r"Regan arts",
326
+ r"shirley maclaine",
327
+ r"Woody( Allen)?",
328
+ r"Zach Braff",
329
+ ],
330
+ ),
331
+ HighlightedNames(
332
+ label=BILL_GATES,
333
+ style='turquoise4',
334
+ category=TECH_BRO,
335
+ emailers={
336
+ BILL_GATES: 'ex-Microsoft, Gates Foundation, bgC3',
337
+ BORIS_NIKOLIC: f'biotech VC partner of {BILL_GATES}, {EPSTEIN_ESTATE_EXECUTOR}',
338
+ },
339
+ patterns=[
340
+ r"BG",
341
+ r"b?g?C3",
342
+ r"(Bill\s*((and|or|&)\s*Melinda\s*)?)?Gates(\s*Foundation)?",
343
+ r"Melinda(\s*Gates)?",
344
+ r"Microsoft",
345
+ r"MSFT",
346
+ ],
347
+ ),
288
348
  HighlightedNames(
289
349
  label='bitcoin',
290
350
  style='orange1 bold',
@@ -303,16 +363,18 @@ HIGHLIGHTED_NAMES = [
303
363
  r"cr[iy]?pto(currenc(y|ies))?",
304
364
  r"Digital\s*Currenc(ies|y)(\s*Initiative)?",
305
365
  r"e-currency",
306
- r"(Gavin )?Andressen",
366
+ r"(Gavin )?Andress?en",
307
367
  r"(Howard\s+)?Lutnic?k",
308
368
  r"Libra",
309
369
  r"Madars",
370
+ r"Mi(chael|ke)\s*Novogratz",
310
371
  r"(Patrick\s*)?Murck",
311
372
  r"(Ross\s*)?Ulbricht",
312
373
  r"Silk\s*Road",
313
374
  r"SpanCash",
314
375
  r"Tether",
315
376
  r"virtual\s*currenc(ies|y)",
377
+ r"Wladimir( van der Laan)?",
316
378
  r"(zero\s+knowledge\s+|zk)pro(of|tocols?)",
317
379
  ],
318
380
  ),
@@ -322,10 +384,11 @@ HIGHLIGHTED_NAMES = [
322
384
  emailers={
323
385
  ALIREZA_ITTIHADIEH: 'CEO Freestream Aircraft Limited',
324
386
  BARBRO_C_EHNBOM: 'Swedish pharmaceuticals, SALSS',
325
- 'David Mitchell': 'president of New York real estate development firm Mitchell Holdings',
387
+ BARRY_J_COHEN: None,
388
+ 'David Mitchell': 'Mitchell Holdings New York real estate developer',
326
389
  FRED_HADDAD: "co-founder of Heck's in West Virginia",
327
390
  GERALD_BARTON: "Maryland property developer Landmark Land Company",
328
- GORDON_GETTY: 'heir of oil tycoon J. Paul Getty',
391
+ GORDON_GETTY: 'heir to oil tycoon J. Paul Getty',
329
392
  NICHOLAS_RIBIS: 'Hilton CEO, former president of Trump Organization',
330
393
  'Philip Kafka': 'president of Prince Concepts (and son of Terry Kafka?)',
331
394
  ROBERT_LAWRENCE_KUHN: 'investment banker, China expert',
@@ -392,10 +455,10 @@ HIGHLIGHTED_NAMES = [
392
455
  ],
393
456
  ),
394
457
  HighlightedNames(
395
- label=DEEPAK_CHOPRA,
458
+ label='deepak',
396
459
  style='dark_sea_green4',
397
460
  emailers={
398
- CAROLYN_RANGEL: 'assistant',
461
+ CAROLYN_RANGEL: f"Deepak Chopra's assistant {QUESTION_MARKS}",
399
462
  DEEPAK_CHOPRA: 'woo woo',
400
463
  },
401
464
  ),
@@ -407,6 +470,7 @@ HIGHLIGHTED_NAMES = [
407
470
  },
408
471
  patterns=[
409
472
  r"(Al\s*)?Franken",
473
+ r"Al\s*Gore",
410
474
  r"(Barac?k )?Obama",
411
475
  r"((Bill|Hillart?y)\s*)?Clinton",
412
476
  r"((Chuck|Charles)\s*)?S(ch|hc)umer",
@@ -429,16 +493,18 @@ HIGHLIGHTED_NAMES = [
429
493
  r"(Nancy )?Pelosi",
430
494
  r"Ron\s*Dellums",
431
495
  r"Schumer",
432
- r"(Tim\s*)?Geithner",
496
+ r"(Tim(othy)?\s*)?Geithner",
497
+ r"Tom McMillen",
433
498
  r"Vernon\s*Jordan",
434
499
  ],
435
500
  ),
436
501
  HighlightedNames(
437
- label='Dubin family',
502
+ label='Dubins',
438
503
  style='medium_orchid1',
439
504
  emailers={
440
505
  GLENN_DUBIN: "Highbridge Capital Management, married to Epstein's ex-gf Eva",
441
506
  EVA: "possibly Epstein's ex-girlfriend (?)",
507
+ 'Eva Dubin': f"Epstein's ex-girlfriend now married to {GLENN_DUBIN}",
442
508
  },
443
509
  patterns=[r"((Celina|Eva( Anderss?on)?|Glenn) )?Dubin"],
444
510
  ),
@@ -449,13 +515,15 @@ HIGHLIGHTED_NAMES = [
449
515
  'Alfredo Rodriguez': "Epstein's butler, stole the journal",
450
516
  ERIC_ROTH: 'jet decorator',
451
517
  GWENDOLYN_BECK: 'Epstein fund manager in the 90s',
518
+ JANUSZ_BANASIAK: "Epstein's house manager",
452
519
  JEAN_HUGUEN: 'interior design at Alberto Pinto Cabinet',
453
- LAWRANCE_VISOSKI: 'pilot',
454
- LESLEY_GROFF: 'assistant',
520
+ LAWRANCE_VISOSKI: "Epstein's pilot",
521
+ LESLEY_GROFF: f"Epstein's assistant",
455
522
  'Linda Pinto': 'interior design at Alberto Pinto Cabinet',
456
523
  MERWIN_DELA_CRUZ: None, # HOUSE_OVERSIGHT_032652 Groff says "Jojo and Merwin both requested off Nov. 25 and 26"
457
- NADIA_MARCINKO: 'pilot',
524
+ NADIA_MARCINKO: "Epstein's pilot",
458
525
  'Sean J. Lancaster': 'airplane reseller',
526
+ ZUBAIR_KHAN: 'cybersecurity firm Tranchulas CEO, InsightsPod founder, Islamabad / Dubai',
459
527
  },
460
528
  patterns=[
461
529
  r"Adriana\s*Ross",
@@ -464,40 +532,15 @@ HIGHLIGHTED_NAMES = [
464
532
  ],
465
533
  ),
466
534
  HighlightedNames(
467
- label=ENTERTAINER,
468
- style='light_steel_blue3',
535
+ label='Epstein',
536
+ style='blue1',
469
537
  emailers={
470
- ANDRES_SERRANO: "'Piss Christ' artist",
471
- 'Barry Josephson': 'American film producer, editor FamilySecurityMatters.org',
472
- BILL_SIEGEL: 'documentary film producer and director',
473
- DAVID_BLAINE: 'famous magician',
474
- HENRY_HOLT: f"{MICHAEL_WOLFF}'s book publisher",
475
- 'Richard Merkin': 'painter, illustrator and arts educator',
476
- STEVEN_PFEIFFER: 'Associate Director at Independent Filmmaker Project (IFP)',
538
+ JEFFREY_EPSTEIN: None,
539
+ MARK_EPSTEIN: 'brother of Jeffrey',
477
540
  },
478
541
  patterns=[
479
- r"(Art )?Spiegelman",
480
- r"Artspace",
481
- r"Bobby slayton",
482
- r"bono\s*mick",
483
- r"Errol(\s*Morris)?",
484
- r"Etienne Binant",
485
- r"(Frank\s)?Gehry",
486
- r"Jagger",
487
- r"(Jeffrey\s*)?Katzenberg",
488
- r"(Johnny\s*)?Depp",
489
- r"Kid Rock",
490
- r"(Larry\s*)?Gagosian",
491
- r"Lena\s*Dunham",
492
- r"Madonna",
493
- r"Mark\s*Burnett",
494
- r"Phaidon",
495
- r"Ramsey Elkholy",
496
- r"Regan arts",
497
- r"shirley maclaine",
498
- r"Steven Gaydos?",
499
- r"Woody( Allen)?",
500
- r"Zach Braff",
542
+ r"JEGE",
543
+ r"LSJ",
501
544
  ],
502
545
  ),
503
546
  HighlightedNames(
@@ -505,10 +548,11 @@ HIGHLIGHTED_NAMES = [
505
548
  style='purple',
506
549
  emailers={
507
550
  'Alan S Halperin': 'partner at Paul, Weiss',
508
- ALAN_DERSHOWITZ: 'Harvard Law School professor and all around (in)famous American lawyer',
551
+ ALAN_DERSHOWITZ: 'Harvard Law School professor',
509
552
  ARDA_BESKARDES: 'NYC immigration attorney allegedly involved in sex-trafficking operations',
510
553
  BENNET_MOSKOWITZ: f'represented the {EPSTEIN_ESTATE_EXECUTOR}s',
511
554
  BRAD_KARP: 'head of the law firm Paul Weiss',
555
+ 'Connie Zaguirre': f"office of {ROBERT_D_CRITTON_JR}",
512
556
  DAVID_SCHOEN: f"{CRIMINAL_DEFENSE_ATTORNEY} after 2019 arrest",
513
557
  DEBBIE_FEIN: EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY,
514
558
  'Erika Kellerhals': 'attorney in St. Thomas',
@@ -523,10 +567,10 @@ HIGHLIGHTED_NAMES = [
523
567
  MICHAEL_MILLER: 'Steptoe LLP partner',
524
568
  REID_WEINGARTEN: 'Steptoe LLP partner',
525
569
  ROBERT_D_CRITTON_JR: CRIMINAL_DEFENSE_ATTORNEY,
526
- 'Robert Gold': 'helped Epstein track down millions belonging to wealthy Spanish families',
570
+ 'Robert Gold': 'helped Epstein track down money belonging to Spanish families',
527
571
  'Roy Black': CRIMINAL_DEFENSE_2008,
528
572
  SCOTT_J_LINK: CRIMINAL_DEFENSE_ATTORNEY,
529
- TONJA_HADDAD_COLEMAN: f'{EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY}, maybe daughter of Fred Haddad?',
573
+ TONJA_HADDAD_COLEMAN: f'{EPSTEIN_V_ROTHSTEIN_EDWARDS_ATTORNEY}', # relation of Fred Haddad?
530
574
  },
531
575
  patterns=[
532
576
  r"(Barry (E. )?)?Krischer",
@@ -536,7 +580,7 @@ HIGHLIGHTED_NAMES = [
536
580
  r"(Leon\s*)?Jaworski",
537
581
  r"Michael J. Pike",
538
582
  r"Paul,?\s*Weiss",
539
- r"Steptoe(\s*LLP)?",
583
+ r"Steptoe(\s*& Johnson)?(\s*LLP)?",
540
584
  r"Wein(berg|garten)",
541
585
  ],
542
586
  ),
@@ -554,11 +598,14 @@ HIGHLIGHTED_NAMES = [
554
598
  style='light_sky_blue3',
555
599
  emailers={
556
600
  ANDRZEJ_DUDA: 'former president of Poland',
601
+ 'Caroline Lang': 'daughter of Jack Lang',
602
+ "Edward Rod Larsen": f"son of {TERJE_ROD_LARSEN}",
557
603
  'Fabrice Aidan': f'diplomat who worked with {TERJE_ROD_LARSEN}',
604
+ 'Jack Lang': 'former French Minister of National Education',
558
605
  MIROSLAV_LAJCAK: 'Russia-friendly Slovakian politician, friend of Steve Bannon',
559
606
  PETER_MANDELSON: 'UK politics',
560
607
  TERJE_ROD_LARSEN: 'Norwegian diplomat',
561
- THORBJORN_JAGLAND: 'former prime minister of Norway and head of the Nobel Peace Prize Committee',
608
+ THORBJORN_JAGLAND: 'former prime minister of Norway, Nobel Peace Prize Committee',
562
609
  },
563
610
  patterns=[
564
611
  r"(Angela )?Merk(el|le)",
@@ -571,7 +618,6 @@ HIGHLIGHTED_NAMES = [
571
618
  r"Brit(ain|ish)",
572
619
  r"Brussels",
573
620
  r"Cannes",
574
- r"(Caroline|Jack)?\s*Lang(, Caroline)?",
575
621
  r"Cypr(iot|us)",
576
622
  r"Davos",
577
623
  r"ECB",
@@ -583,6 +629,7 @@ HIGHLIGHTED_NAMES = [
583
629
  r"Germany?",
584
630
  r"Gillard",
585
631
  r"Gree(ce|k)",
632
+ r"Ibiza",
586
633
  r"Ital(ian|y)",
587
634
  r"Jacques",
588
635
  r"Kiev",
@@ -601,8 +648,7 @@ HIGHLIGHTED_NAMES = [
601
648
  r"Polish",
602
649
  r"pope",
603
650
  r"(Sebastian )?Kurz",
604
- r"(Vi(c|k)tor\s+)?Orbah?n",
605
- r"Edward Rod Larsen",
651
+ r"Stockholm",
606
652
  r"Strasbourg",
607
653
  r"Strauss[- ]?Kahn",
608
654
  r"Swed(en|ish)(?![-\s]+American Life Scienc)",
@@ -610,6 +656,7 @@ HIGHLIGHTED_NAMES = [
610
656
  r"(Tony\s)?Blair",
611
657
  r"U\.K\.",
612
658
  r"Ukrain(e|ian)",
659
+ r"(Vi(c|k)tor\s+)?Orbah?n",
613
660
  r"Vienna",
614
661
  r"Zug",
615
662
  r"Zurich",
@@ -621,12 +668,13 @@ HIGHLIGHTED_NAMES = [
621
668
  emailers={
622
669
  AMANDA_ENS: 'Citigroup',
623
670
  BRAD_WECHSLER: f"head of {LEON_BLACK}'s personal investment vehicle according to FT",
671
+ CECILIA_STEEN: None,
624
672
  DANIEL_SABBA: 'UBS Investment Bank',
625
673
  DAVID_FISZEL: 'CIO Honeycomb Asset Management',
626
674
  JES_STALEY: 'former CEO of Barclays',
627
675
  JIDE_ZEITLIN: 'former partner at Goldman Sachs, allegations of sexual misconduct',
628
676
  'Laurie Cameron': 'currency trading',
629
- LEON_BLACK: 'Apollo CEO',
677
+ LEON_BLACK: 'Apollo CEO who paid Epstein tens of millions for tax advice',
630
678
  MARC_LEON: 'Luxury Properties Sari Morrocco',
631
679
  MELANIE_SPINELLA: 'representative of Leon Black',
632
680
  MORTIMER_ZUCKERMAN: 'business partner of Epstein, newspaper publisher',
@@ -642,11 +690,13 @@ HIGHLIGHTED_NAMES = [
642
690
  r"Apollo",
643
691
  r"Ari\s*Glass",
644
692
  r"Bank(\s*of\s*Scotland)",
693
+ r"Bear\s*Stearns",
645
694
  r"(Bernie\s*)?Madoff",
646
695
  r"Black(rock|stone)",
647
696
  r"B\s*of\s*A",
648
697
  r"Boothbay(\sFund\sManagement)?",
649
698
  r"Chase\s*Bank",
699
+ r"Conrad B",
650
700
  r"Credit\s*Suisse",
651
701
  r"DB",
652
702
  r"Deutsche?\s*(Asset|Bank)",
@@ -658,7 +708,7 @@ HIGHLIGHTED_NAMES = [
658
708
  r"HSBC",
659
709
  r"Invesco",
660
710
  r"(Janet\s*)?Yellen",
661
- r"(Jerome\s*)?Powell(?!M\. Cabot)",
711
+ r"(Jerome\s*)?Powell(?! M\. Cabot)",
662
712
  r"(Jimmy\s*)?Cayne",
663
713
  r"JPMC?",
664
714
  r"j\.?p\.?\s*morgan(\.?com|\s*Chase)?",
@@ -679,11 +729,11 @@ HIGHLIGHTED_NAMES = [
679
729
  ],
680
730
  ),
681
731
  HighlightedNames(
682
- label='friend',
732
+ label=FRIEND,
683
733
  style='tan',
684
734
  emailers={
685
735
  DANGENE_AND_JENNIE_ENTERPRISE: 'founders of the members-only CORE club',
686
- DAVID_STERN: f'emailed Epstein from Moscow, appears to know chairman of {DEUTSCHE_BANK}',
736
+ DAVID_STERN: f'emailed Epstein from Moscow, knows chairman of {DEUTSCHE_BANK} (?)',
687
737
  JONATHAN_FARKAS: "heir to the Alexander's department store fortune",
688
738
  'linkspirit': 'Skype username of someone Epstein communicated with',
689
739
  'Peter Thomas Roth': 'student of Epstein at Dalton, skincare company founder',
@@ -707,7 +757,7 @@ HIGHLIGHTED_NAMES = [
707
757
  LISA_NEW: f'professor of poetry, wife of {LARRY_SUMMERS}, AKA "Elisa New"',
708
758
  'Lisa Randall': 'theoretical physicist',
709
759
  MARTIN_NOWAK: 'professor of mathematics and biology',
710
- MOSHE_HOFFMAN: 'lecturer and research scholar in behavioral and evolutionary economics',
760
+ MOSHE_HOFFMAN: 'behavioral and evolutionary economics',
711
761
  },
712
762
  patterns=[
713
763
  r"Cambridge",
@@ -725,7 +775,6 @@ HIGHLIGHTED_NAMES = [
725
775
  emailers={
726
776
  ANIL_AMBANI: 'chairman of Reliance Group',
727
777
  VINIT_SAHNI: None,
728
- ZUBAIR_KHAN: 'cybersecurity firm Tranchulas CEO, InsightsPod founder, Islamabad/Dubai',
729
778
  },
730
779
  patterns=[
731
780
  r"Abraaj",
@@ -746,7 +795,7 @@ HIGHLIGHTED_NAMES = [
746
795
  label='Israel',
747
796
  style='dodger_blue2',
748
797
  emailers={
749
- EHUD_BARAK: 'former primer minister',
798
+ EHUD_BARAK: 'former prime minister of Israel, Epstein business partner',
750
799
  'Mitchell Bard': 'director of the American-Israeli Cooperative Enterprise (AICE)',
751
800
  'Nili Priell Barak': 'wife of Ehud Barak',
752
801
  },
@@ -784,36 +833,44 @@ HIGHLIGHTED_NAMES = [
784
833
  label=JOURNALIST,
785
834
  style='bright_yellow',
786
835
  emailers={
787
- EDWARD_JAY_EPSTEIN: 'no relation, wrote about the kinds of crimes Epstein was involved in',
836
+ 'Alain Forget': 'author of "How To Get Out Of This World ALIVE"',
837
+ 'Alex Yablon': 'New York Magazine fact checker (?)',
838
+ EDWARD_JAY_EPSTEIN: 'no relation, wrote books about spies',
839
+ HENRY_HOLT: f"{MICHAEL_WOLFF}'s book publisher",
788
840
  JAMES_HILL: 'ABC News',
789
- JENNIFER_JACQUET: 'Future Science',
841
+ JENNIFER_JACQUET: 'Future Science magazine',
790
842
  JOHN_BROCKMAN: 'literary agent and author specializing in scientific literature',
791
- LANDON_THOMAS: 'New York Times',
843
+ LANDON_THOMAS: 'New York Times financial reporter',
792
844
  MICHAEL_WOLFF: 'Author of "Fire and Fury: Inside the Trump White House"',
793
845
  PAUL_KRASSNER: '60s counterculture guy',
846
+ 'Peter Aldhous': 'Buzzfeed science reporter',
847
+ "Susan Edelman": 'New York Post reporter',
794
848
  'Tim Zagat': 'Zagat restaurant guide CEO',
795
849
  },
796
850
  patterns=[
797
851
  r"ABC(\s*News)?",
798
- r"Alex\s*Yablon",
799
852
  r"Arianna(\s*Huffington)?",
800
853
  r"(Arthur\s*)?Kretchmer",
801
854
  r'Associated\s*Press',
802
855
  r"Axios",
803
856
  r"BBC",
804
857
  r"Breitbart",
858
+ r"BuzzFeed",
859
+ r"CBS(\s*(4|Corp|News))?"
805
860
  r"Charlie\s*Rose",
806
861
  r"China\s*Daily",
807
862
  r"CNBC",
808
863
  r"CNN(politics?)?",
809
864
  r"Con[cs]hita", r"Sarnoff",
810
865
  r"Daily Business Review",
811
- r"(?<!Virgin[-\s]Islands[-\s])Daily\s*(Beast|Mail|News|Telegraph)",
866
+ r"(?<!Virgin[-\s]Islands[-\s])(The\s*)?Daily\s*(Beast|Mail|News|Telegraph)",
812
867
  r"(David\s*)?(Pecker|Pegg)",
813
868
  r"David\s*Brooks",
814
869
  r"Ed\s*Krassenstein",
815
870
  r"(Emily\s*)?Michot",
816
871
  r"Ezra\s*Klein",
872
+ r"Forbes",
873
+ r"Fortune\s*Magazine",
817
874
  r"Fox\s*News(\.com)?",
818
875
  r"FrontPage Magazine",
819
876
  r"FT",
@@ -825,28 +882,30 @@ HIGHLIGHTED_NAMES = [
825
882
  r"Huff(ington)?(\s*Po(st)?)?",
826
883
  r"Ingram, David",
827
884
  r"(James\s*)?(Hill|Patterson)",
885
+ r"Jesse Kornbluth",
828
886
  r"Jonathan\s*Karl",
829
887
  r"Julie\s*(K.?\s*)?Brown", r'jbrown@miamiherald.com',
830
888
  r"(Katie\s*)?Couric",
831
889
  r"Keith\s*Larsen",
832
890
  r"L\.?A\.?\s*Times",
833
891
  r"Law(360|\.com|fare)",
892
+ r"(Les\s*)?Moonves",
834
893
  r"MarketWatch",
835
894
  r"Miami\s*Herald",
836
895
  r"(Mi(chael|ke)\s*)?Bloomberg",
837
896
  r"(Michele\s*)?Dargan",
838
897
  r"Morning News USA",
839
898
  r"(National\s*)?Enquirer",
840
- r"Newsweek",
899
+ r"News(max|week)",
841
900
  r"NYer",
842
901
  r"Palm\s*Beach\s*(Daily\s*News|Post)",
843
902
  r"PERVERSION\s*OF\s*JUSTICE",
844
903
  r"Politico",
845
904
  r"Pro\s*Publica",
905
+ r"Reuters",
846
906
  r"(Sean\s*)?Hannity",
847
907
  r"Sulzberger",
848
908
  r"SunSentinel",
849
- r"Susan Edelman",
850
909
  r"(The\s*)?Financial\s*Times",
851
910
  r"The\s*Guardian",
852
911
  r"TheHill",
@@ -902,11 +961,12 @@ HIGHLIGHTED_NAMES = [
902
961
  ],
903
962
  ),
904
963
  HighlightedNames(
905
- label='law enforcement',
964
+ label='government',
906
965
  style='color(24) bold',
907
966
  emailers={
908
967
  ANN_MARIE_VILLAFANA: 'Southern District of Florida (SDFL) U.S. Attorney',
909
968
  DANNY_FROST: 'Director of Communications at Manhattan D.A.',
969
+ 'Police Code Enforcement': f"{PALM_BEACH} buildings code enforcement",
910
970
  },
911
971
  patterns=[
912
972
  r"AG",
@@ -932,9 +992,9 @@ HIGHLIGHTED_NAMES = [
932
992
  r"FINRA",
933
993
  r"FOIA",
934
994
  r"FTC",
995
+ r"(General\s*)?P(a|e)traeus",
935
996
  r"IRS",
936
997
  r"(James\s*)?Comey",
937
- r"Jeff(rey)?\s*Sessions",
938
998
  r"(Jennifer\s*Shasky\s*)?Calvery",
939
999
  r"((Judge|Mark)\s*)?(Carney|Filip)",
940
1000
  r"(Judge\s*)?(Kenneth\s*)?(A\.?\s*)?Marra",
@@ -949,14 +1009,14 @@ HIGHLIGHTED_NAMES = [
949
1009
  r"(Michael\s*)?Reiter",
950
1010
  r"OGE",
951
1011
  r"Office\s*of\s*Government\s*Ethics",
952
- r"Police Code Enforcement",
1012
+ r"police",
953
1013
  r"(Preet\s*)?Bharara",
954
1014
  r"SCOTUS",
955
1015
  r"SD(FL|NY)",
956
1016
  r"SEC",
957
1017
  r"Secret\s*Service",
958
1018
  r"Securities\s*and\s*Exchange\s*Commission",
959
- r"Southern\s*District\s*of\s*(Florida|New\s*York)",
1019
+ r"Southern\s*District(\s*of\s*(Florida|New\s*York))?",
960
1020
  r"State\s*Dep(artmen)?t",
961
1021
  r"Strzok",
962
1022
  r"Supreme\s*Court",
@@ -971,6 +1031,7 @@ HIGHLIGHTED_NAMES = [
971
1031
  label=LOBBYIST,
972
1032
  style='light_coral',
973
1033
  emailers={
1034
+ BOB_CROWE: 'partner at Nelson Mullins',
974
1035
  'Joshua Cooper Ramo': 'co-CEO of Henry Kissinger Associates',
975
1036
  KATHERINE_KEATING: 'Daughter of former Australian PM',
976
1037
  MOHAMED_WAHEED_HASSAN: 'former president of the Maldives',
@@ -980,14 +1041,13 @@ HIGHLIGHTED_NAMES = [
980
1041
  'Stanley Rosenberg': 'former President of the Massachusetts Senate',
981
1042
  },
982
1043
  patterns=[
983
- r"[BR]ob Crowe",
984
1044
  r"CSIS",
985
1045
  r"(Kevin\s*)?Rudd",
986
1046
  r"Stanley Rosenberg",
987
1047
  ],
988
1048
  ),
989
1049
  HighlightedNames(
990
- label='mideast',
1050
+ label=MIDEAST,
991
1051
  style='dark_sea_green4',
992
1052
  emailers={
993
1053
  ANAS_ALRASHEED: 'former information minister of Kuwait (???)',
@@ -1071,7 +1131,7 @@ HIGHLIGHTED_NAMES = [
1071
1131
  r"sheikh",
1072
1132
  r"shia",
1073
1133
  r"(Sultan\s*)?Yacoub",
1074
- r"Sultan",
1134
+ r"Sultan(?! Ahmed)",
1075
1135
  r"Syrian?",
1076
1136
  r"(Tarek\s*)?El\s*Sayed",
1077
1137
  r"Tehran",
@@ -1086,36 +1146,39 @@ HIGHLIGHTED_NAMES = [
1086
1146
  label='modeling',
1087
1147
  style='pale_violet_red1',
1088
1148
  emailers={
1089
- 'Abi Schwinck': 'MC2 Model Management (?)',
1149
+ 'Abi Schwinck': f'{MC2_MODEL_MANAGEMENT} {QUESTION_MARKS}',
1090
1150
  DANIEL_SIAD: None,
1091
1151
  FAITH_KATES: 'Next Models co-founder',
1092
1152
  'Gianni Serazzi': 'fashion consultant?',
1093
1153
  HEATHER_MANN: 'South African former model, ex-girlfriend of Prince Andrew (?)',
1094
- JEAN_LUC_BRUNEL: 'MC2 Model Management founder, died by suicide in French jail',
1095
- JEFF_FULLER: 'president of MC2 Model Management USA',
1154
+ JEAN_LUC_BRUNEL: f'MC2 Model Management founder, died by suicide in French jail',
1155
+ JEFF_FULLER: f'president of {MC2_MODEL_MANAGEMENT} USA',
1156
+ 'lorraine@mc2mm.com': f'{MC2_MODEL_MANAGEMENT}',
1157
+ 'pink@mc2mm.com': f'{MC2_MODEL_MANAGEMENT}',
1096
1158
  MANUELA_MARTINEZ: 'Mega Partners (Brazilian agency)',
1097
1159
  MARIANA_IDZKOWSKA: None,
1098
- 'Michael Sanka': 'MC2 Model Management (?)',
1160
+ 'Michael Sanka': f'{MC2_MODEL_MANAGEMENT} {QUESTION_MARKS}',
1099
1161
  'Vladimir Yudashkin': 'director of the 1 Mother Agency',
1100
1162
  },
1101
1163
  patterns=[
1102
1164
  r"\w+@mc2mm.com",
1103
1165
  r"MC2",
1104
- r"model(ed|ing)",
1105
1166
  r"(Nicole\s*)?Junkerman", # Also a venture fund manager now
1167
+ r"Tigrane",
1106
1168
  ],
1107
1169
  ),
1108
1170
  HighlightedNames(
1109
1171
  label=PUBLICIST,
1110
1172
  style='orange_red1',
1111
1173
  emailers={
1112
- AL_SECKEL: 'husband of Isabel Maxwell, Mindshift conference organizer who fell off a cliff',
1113
- 'Barnaby Marsh': 'co-founder of Saint Partners, a philanthropy services company',
1114
- CHRISTINA_GALBRAITH: f"{REPUTATION_MGMT}, worked with Tyler Shears",
1115
- IAN_OSBORNE: f'{OSBORNE_LLP} reputation repairer hired by Epstein in 2011',
1174
+ AL_SECKEL: "Isabel Maxwell's husband, Mindshift conference, fell off a cliff",
1175
+ 'Barnaby Marsh': 'co-founder of philanthropy services company Saint Partners',
1176
+ CHRISTINA_GALBRAITH: f"{EPSTEIN_FOUNDATION} Media/PR, worked with {TYLER_SHEARS}", # Title in 031441
1177
+ IAN_OSBORNE: f'{OSBORNE_LLP} reputation repairer hired in 2011',
1178
+ MATTHEW_HILTZIK: 'crisis PR at Hiltzik Strategies',
1116
1179
  MICHAEL_SITRICK: 'crisis PR',
1117
1180
  'Owen Blicksilver': 'OBPR, Inc.',
1118
- PEGGY_SIEGAL: 'socialite',
1181
+ PEGGY_SIEGAL: 'socialite, movie promoter',
1119
1182
  'R. Couri Hay': None,
1120
1183
  ROSS_GOW: 'Acuity Reputation Management',
1121
1184
  TYLER_SHEARS: f"{REPUTATION_MGMT}, worked on with {CHRISTINA_GALBRAITH}",
@@ -1147,14 +1210,16 @@ HIGHLIGHTED_NAMES = [
1147
1210
  r"(?<!Merwin Dela )Cruz",
1148
1211
  r"Devin\s*Nunes",
1149
1212
  r"(Don\s*)?McGa[hn]n",
1213
+ r"Gary\s*Cohn",
1150
1214
  r"George\s*(H\.?\s*)?(W\.?\s*)?Bush",
1151
1215
  r"(George\s*)?Nader",
1152
1216
  r"GOP",
1217
+ r"Jeff(rey)?\s*Sessions",
1153
1218
  r"(John\s*(R.?\s*)?)Bolton",
1154
1219
  r"Kissinger",
1155
1220
  r"Kobach",
1156
1221
  r"Kolfage",
1157
- r"Kudlow",
1222
+ r"(Larry\s*)?Kudlow",
1158
1223
  r"Lewandowski",
1159
1224
  r"(Marco\s)?Rubio",
1160
1225
  r"(Mark\s*)Meadows",
@@ -1192,8 +1257,8 @@ HIGHLIGHTED_NAMES = [
1192
1257
  style='red bold',
1193
1258
  emailers={
1194
1259
  'Dasha Zhukova': 'art collector, daughter of Alexander Zhukov',
1195
- MASHA_DROKOVA: 'silicon valley VC, former Putin Youth',
1196
- RENATA_BOLOTOVA: 'former aspiring model, now fund manager at New York State Insurance Fund',
1260
+ MASHA_DROKOVA: 'silicon valley VC, former Putin Youth member',
1261
+ RENATA_BOLOTOVA: 'former model, fund manager at New York State Insurance Fund',
1197
1262
  SVETLANA_POZHIDAEVA: "Epstein's Russian assistant who was recommended for a visa by Sergei Belyakov (FSB) and David Blaine",
1198
1263
  },
1199
1264
  patterns=[
@@ -1209,7 +1274,7 @@ HIGHLIGHTED_NAMES = [
1209
1274
  r"KGB",
1210
1275
  r"Kislyak",
1211
1276
  r"Kremlin",
1212
- r"Kuznetsova",
1277
+ r"(Anastasia\s*)?Kuznetsova",
1213
1278
  r"Lavrov",
1214
1279
  r"Lukoil",
1215
1280
  r"Moscow",
@@ -1240,6 +1305,7 @@ HIGHLIGHTED_NAMES = [
1240
1305
  r"Cambodian?",
1241
1306
  r"Laos",
1242
1307
  r"Malaysian?",
1308
+ r"Maldives",
1243
1309
  r"Myan?mar",
1244
1310
  r"Philippines",
1245
1311
  r"South\s*Korean?",
@@ -1249,7 +1315,7 @@ HIGHLIGHTED_NAMES = [
1249
1315
  ],
1250
1316
  ),
1251
1317
  HighlightedNames(
1252
- label='tech bro',
1318
+ label=TECH_BRO,
1253
1319
  style='bright_cyan',
1254
1320
  emailers={
1255
1321
  'Auren Hoffman': 'CEO of SafeGraph (firm that gathers location data from mobile devices) and LiveRamp',
@@ -1300,8 +1366,7 @@ HIGHLIGHTED_NAMES = [
1300
1366
  r"(Donald\s+(J\.\s+)?)?Trump(ism|\s*(Org(anization)?|Properties)(\s*LLC)?)?",
1301
1367
  r"Don(ald| *Jr)(?! (B|Rubin))",
1302
1368
  r"Ivank?a",
1303
- r"Jared",
1304
- r"Kushner",
1369
+ r"Jared", r"(?<!Tony )Kushner",
1305
1370
  r"(Madeleine\s*)?Westerhout",
1306
1371
  r"Mar[-\s]*a[-\s]*Lago",
1307
1372
  r"(Marla\s*)?Maples",
@@ -1317,6 +1382,33 @@ HIGHLIGHTED_NAMES = [
1317
1382
  r"(The\s*)?Art\s*of\s*the\s*Deal",
1318
1383
  ],
1319
1384
  ),
1385
+ HighlightedNames(
1386
+ label='USVI',
1387
+ style='sea_green1',
1388
+ emailers={
1389
+ CECILE_DE_JONGH: 'Virgin Islands first lady 2007-2015',
1390
+ KENNETH_E_MAPP: 'Virgin Islands Governor',
1391
+ STACEY_PLASKETT: 'Virgin Islands non-voting member of Congress',
1392
+ },
1393
+ patterns=[
1394
+ r"Antigua",
1395
+ r"Bahamas",
1396
+ r"BVI",
1397
+ r"Caribb?ean",
1398
+ r"Dominican\s*Republic",
1399
+ r"(Great|Little)\s*St.?\s*James",
1400
+ r"Haiti(an)?",
1401
+ r"(John\s*)deJongh(\s*Jr\.?)",
1402
+ r"(Kenneth E\. )?Mapp",
1403
+ r"PBI",
1404
+ r"Puerto\s*Ric(an|o)",
1405
+ r"S(ain)?t.?\s*Thomas",
1406
+ r"USVI",
1407
+ r"(?<!Epstein )VI",
1408
+ r"(The\s*)?Virgin\s*Islands(\s*Daily\s*News)?", # Hard to make this work right
1409
+ r"(West\s*)?Palm\s*Beach(?!\s*(Daily|Post))",
1410
+ ],
1411
+ ),
1320
1412
  HighlightedNames(
1321
1413
  label='victim',
1322
1414
  style='orchid1',
@@ -1347,76 +1439,40 @@ HIGHLIGHTED_NAMES = [
1347
1439
  r"(Scott\s*)?Rothstein",
1348
1440
  ],
1349
1441
  ),
1350
- HighlightedNames(
1351
- label=VIRGIN_ISLANDS,
1352
- style='sea_green1',
1353
- emailers={
1354
- CECILE_DE_JONGH: 'first lady 2007-2015',
1355
- KENNETH_E_MAPP: 'Governor',
1356
- STACEY_PLASKETT: 'non-voting member of Congress',
1357
- },
1358
- patterns=[
1359
- r"Antigua",
1360
- r"Bahamas",
1361
- r"BVI",
1362
- r"Caribb?ean",
1363
- r"Dominican\s*Republic",
1364
- r"(Great|Little)\s*St.?\s*James",
1365
- r"Haiti(an)?",
1366
- r"(John\s*)deJongh(\s*Jr\.?)",
1367
- r"(Kenneth E\. )?Mapp",
1368
- r"PBI",
1369
- r"Puerto\s*Ric(an|o)",
1370
- r"S(ain)?t.?\s*Thomas",
1371
- r"USVI",
1372
- r"(?<!Epstein )VI",
1373
- r"(The\s*)?Virgin\s*Islands(\s*Daily\s*News)?", # Hard to make this work right
1374
- r"(West\s*)?Palm\s*Beach(?!\s*(Daily|Post))",
1375
- ],
1376
- ),
1377
- HighlightedNames(
1378
- label=BILL_GATES,
1379
- style='turquoise4',
1380
- emailers={
1381
- BORIS_NIKOLIC: f'biotech VC partner of {BILL_GATES}, {EPSTEIN_ESTATE_EXECUTOR}',
1382
- },
1383
- patterns=[
1384
- r"BG",
1385
- r"b?g?C3",
1386
- r"(Bill\s*((and|or)\s*Melinda\s*)?)?Gates(\s*Foundation)?",
1387
- r"Melinda(\s*Gates)?",
1388
- r"Microsoft",
1389
- r"MSFT",
1390
- ],
1391
- ),
1392
1442
  HighlightedNames(
1393
1443
  label=STEVE_BANNON,
1394
1444
  style='color(58)',
1395
- category=POLITICS,
1445
+ category='Republican',
1396
1446
  emailers={
1397
- STEVE_BANNON: "Trump campaign manager, memecoin grifter, convicted criminal",
1447
+ SEAN_BANNON: f"{STEVE_BANNON}'s brother",
1448
+ STEVE_BANNON: "Trump campaign manager, memecoin grifter",
1398
1449
  },
1399
1450
  patterns=[
1400
1451
  r"(American\s*)?Dharma",
1401
1452
  r"Biosphere",
1402
- r"((Steve|Sean)\s*)?Bannon?",
1403
1453
  ],
1404
1454
  ),
1455
+
1456
+ # Individuals
1405
1457
  HighlightedNames(
1458
+ emailers={STEVEN_HOFFENBERG: "Epstein's Towers Financial ponzi scheme partner, prison 18 years"},
1406
1459
  style='dark_olive_green3',
1407
1460
  category=FINANCE,
1408
- emailers={STEVEN_HOFFENBERG: "Epstein's ponzi scheme partner at Towers Financial, prison for 18 years"},
1409
1461
  patterns=[r"(steven?\s*)?hoffenberg?w?"],
1410
1462
  ),
1411
- HighlightedNames(emailers={GHISLAINE_MAXWELL: None}, patterns=[r"gmax(1@ellmax.com)?", r"TerraMar"], style='deep_pink3'),
1412
- HighlightedNames(emailers={JABOR_Y: '"an influential man in Qatar"'}, category='mideast', style='spring_green1'),
1413
- HighlightedNames(emailers={JEFFREY_EPSTEIN: None}, patterns=[r"JEGE", r"LSJ", r"Mark (L. )?Epstein"], style='blue1'),
1414
- HighlightedNames(emailers={KATHRYN_RUEMMLER: 'former Obama legal counsel'}, style='magenta2'),
1415
- HighlightedNames(emailers={MELANIE_WALKER: 'doctor'}, style='pale_violet_red1'),
1416
- HighlightedNames(emailers={PAULA: "Epstein's ex-girlfriend who is now in the opera world"}, label='paula', style='pink1'),
1417
- HighlightedNames(emailers={PRINCE_ANDREW: 'British royal family'}, style='dodger_blue1'),
1418
- HighlightedNames(emailers={SOON_YI_PREVIN: 'wife of Woody Allen'}, style='hot_pink'),
1419
- HighlightedNames(emailers={SULTAN_BIN_SULAYEM: 'CEO of DP World, chairman of ports in Dubai'}, style='green1'),
1463
+ HighlightedNames(
1464
+ emailers={GHISLAINE_MAXWELL: "Epstein's girlfriend, daughter of the spy Robert Maxwell"},
1465
+ category='Epstein',
1466
+ patterns=[r"gmax(1@ellmax.com)?", r"(The )?TerraMar Project"],
1467
+ style='deep_pink3',
1468
+ ),
1469
+ HighlightedNames(emailers={JABOR_Y: '"an influential man in Qatar"'}, category=MIDEAST, style='spring_green1'),
1470
+ HighlightedNames(emailers={KATHRYN_RUEMMLER: 'former Obama legal counsel'}, style='magenta2', category=FRIEND),
1471
+ HighlightedNames(emailers={MELANIE_WALKER: f"doctor, friend of {BILL_GATES}"}, style='pale_violet_red1', category=FRIEND),
1472
+ HighlightedNames(emailers={PAULA: "Epstein's ex-girlfriend who is now in the opera world"}, label='paula', style='pink1', category=FRIEND),
1473
+ HighlightedNames(emailers={PRINCE_ANDREW: 'British royal family'}, style='dodger_blue1', category='Europe'),
1474
+ HighlightedNames(emailers={SOON_YI_PREVIN: 'wife of Woody Allen'}, style='hot_pink', category=FRIEND),
1475
+ HighlightedNames(emailers={SULTAN_BIN_SULAYEM: 'CEO of DP World, chairman of ports in Dubai'}, style='green1', category=MIDEAST),
1420
1476
 
1421
1477
  # HighlightedText not HighlightedNames bc of word boundary issue
1422
1478
  HighlightedText(
@@ -1439,7 +1495,7 @@ HIGHLIGHTED_TEXTS = [
1439
1495
  HighlightedText(
1440
1496
  label='header_field',
1441
1497
  style='plum4',
1442
- patterns=[r'^(> )?(Date|From|Sent|To|C[cC]|Importance|Reply-To|Subject|Bee|B[cC]{2}|Attachments):'],
1498
+ patterns=[r'^(> )?(Date|From|Sent|To|C[cC]|Importance|Reply-To|Subject|Bee|B[cC]{2}|Attachments|Flag|Classification):'],
1443
1499
  ),
1444
1500
  HighlightedText(
1445
1501
  label='http_links',
@@ -1495,23 +1551,6 @@ class EpsteinHighlighter(RegexHighlighter):
1495
1551
  highlights = [highlight_group.regex for highlight_group in ALL_HIGHLIGHTS]
1496
1552
 
1497
1553
 
1498
- def get_category_txt_for_name(name: str | None) -> Text | None:
1499
- highlight_group = _get_highlight_group_for_name(name)
1500
-
1501
- if highlight_group and isinstance(highlight_group, HighlightedNames):
1502
- category = highlight_group.category or highlight_group.label
1503
-
1504
- if category != name:
1505
- return styled_category(category)
1506
-
1507
-
1508
- def get_info_for_name(name: str | None) -> str | None:
1509
- highlight_group = _get_highlight_group_for_name(name)
1510
-
1511
- if highlight_group and isinstance(highlight_group, HighlightedNames) and name:
1512
- return highlight_group.get_info(name)
1513
-
1514
-
1515
1554
  def get_style_for_category(category: str) -> str | None:
1516
1555
  if category in CATEGORY_STYLES:
1517
1556
  return CATEGORY_STYLES[category]
@@ -1525,24 +1564,27 @@ def get_style_for_category(category: str) -> str | None:
1525
1564
  return highlight_group.style
1526
1565
 
1527
1566
 
1528
- def get_style_for_name(name: str | None, default_style: str = DEFAULT, allow_bold: bool = True) -> str:
1529
- highlight_group = _get_highlight_group_for_name(name or UNKNOWN)
1567
+ def get_style_for_name(name: str | None, default_style: str = DEFAULT_NAME_STYLE, allow_bold: bool = True) -> str:
1568
+ highlight_group = get_highlight_group_for_name(name or UNKNOWN)
1530
1569
  style = highlight_group.style if highlight_group else default_style
1531
- return style if allow_bold else style.replace('bold', '').strip()
1570
+ style = style if allow_bold else style.replace('bold', '').strip()
1571
+ logger.debug(f"get_style_for_name('{name}', '{default_style}', '{allow_bold}') yielded '{style}'")
1572
+ return style
1532
1573
 
1533
1574
 
1534
1575
  def styled_category(category: str | None) -> Text:
1535
1576
  if not category:
1536
1577
  return QUESTION_MARKS_TXT
1537
1578
 
1538
- return Text(category, get_style_for_category(category) or 'wheat4')
1579
+ category_str = 'resumé' if category == 'resume' else category.lower()
1580
+ return Text(category_str, get_style_for_category(category) or 'wheat4')
1539
1581
 
1540
1582
 
1541
1583
  def styled_name(name: str | None, default_style: str = DEFAULT_NAME_STYLE) -> Text:
1542
1584
  return Text(name or UNKNOWN, style=get_style_for_name(name, default_style=default_style))
1543
1585
 
1544
1586
 
1545
- def _get_highlight_group_for_name(name: str | None) -> HighlightedNames | None:
1587
+ def get_highlight_group_for_name(name: str | None) -> HighlightedNames | None:
1546
1588
  if name is None:
1547
1589
  return None
1548
1590
 
@@ -1555,6 +1597,9 @@ def _print_highlighted_names_repr() -> None:
1555
1597
  for hn in HIGHLIGHTED_NAMES:
1556
1598
  if isinstance(hn, HighlightedNames):
1557
1599
  print(indented(repr(hn)) + ',')
1600
+ print(f"pattern: '{hn.regex.pattern}'")
1558
1601
 
1559
1602
  import sys
1560
1603
  sys.exit()
1604
+
1605
+ #_print_highlighted_names_repr()