glin-profanity 3.1.0 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ml/index.js CHANGED
@@ -1,7 +1,3 @@
1
- import {
2
- Filter
3
- } from "../chunk-KNHWF6MX.js";
4
-
5
1
  // src/ml/ToxicityDetector.ts
6
2
  var _ToxicityDetector = class _ToxicityDetector {
7
3
  /**
@@ -279,6 +275,4939 @@ _ToxicityDetector.ALL_LABELS = [
279
275
  ];
280
276
  var ToxicityDetector = _ToxicityDetector;
281
277
 
278
+ // ../../shared/dictionaries/arabic.json
279
+ var arabic_default = {
280
+ words: [
281
+ "\u0633\u0643\u0633",
282
+ "\u0637\u064A\u0632",
283
+ "\u0634\u0631\u062C",
284
+ "\u0644\u0639\u0642",
285
+ "\u0644\u062D\u0633",
286
+ "\u062A\u0645\u0635",
287
+ "\u0628\u064A\u0636\u0627\u0646",
288
+ "\u062B\u062F\u064A",
289
+ "\u0628\u0632",
290
+ "\u062D\u0644\u0645\u0629",
291
+ "\u0645\u0641\u0644\u0642\u0633\u0629",
292
+ "\u0628\u0638\u0631",
293
+ "\u0643\u0633",
294
+ "\u0645\u0628\u0627\u062F\u0644",
295
+ "\u0639\u0627\u0647\u0631\u0629",
296
+ "\u062C\u0645\u0627\u0639",
297
+ "\u0642\u0636\u064A\u0628",
298
+ "\u0632\u0628",
299
+ "\u0644\u0648\u0637\u064A",
300
+ "\u0644\u0648\u0627\u0637",
301
+ "\u0633\u062D\u0627\u0642",
302
+ "\u0627\u063A\u062A\u0635\u0627\u0628",
303
+ "\u062E\u0646\u062B\u064A",
304
+ "\u0627\u062D\u062A\u0644\u0627\u0645",
305
+ "\u0646\u064A\u0643",
306
+ "\u0645\u062A\u0646\u0627\u0643",
307
+ "\u0634\u0631\u0645\u0648\u0637\u0629",
308
+ "\u0639\u0631\u0635",
309
+ "\u062E\u0648\u0644",
310
+ "\u0642\u062D\u0628\u0629",
311
+ "\u0644\u0628\u0648\u0629",
312
+ "\u0648\u0633\u062E",
313
+ "\u0639\u0644\u0642",
314
+ "\u0646\u0627\u0643",
315
+ "\u0645\u0646\u064A\u0643",
316
+ "\u0634\u0631\u0645\u0637",
317
+ "\u0642\u062D\u0628",
318
+ "\u0634\u0631\u0645\u0648\u0637",
319
+ "\u062E\u0648\u0644",
320
+ "\u0647\u0646\u064A\u0643",
321
+ "\u0641\u062D\u0644",
322
+ "\u062F\u064A\u0648\u062B",
323
+ "\u0645\u062A\u0646\u0627\u0643",
324
+ "\u0647\u0627\u064A\u062C",
325
+ "\u0632\u0628\u0631",
326
+ "bdsm",
327
+ "\u0632\u0627\u0646",
328
+ "\u0633\u0627\u062F\u064A",
329
+ "\u0633\u0627\u062F\u0649",
330
+ "\u0643\u0633\u0647\u0627",
331
+ "\u0643\u0633\u064A",
332
+ "\u0643\u0633\u0643",
333
+ "\u0643\u0633\u0645",
334
+ "\u0628\u0646\u062A\u0627\u0643",
335
+ "\u0628\u062A\u0646\u0627\u0643",
336
+ "\u0646\u064A\u0643\u0646\u064A",
337
+ "\u062F\u064A\u0648\u062B",
338
+ "\u0646\u064A\u0627\u0643",
339
+ "\u0641\u0634\u0627\u062E",
340
+ "\u0641\u0634\u062E",
341
+ "\u0647\u0641\u0634\u062E\u0643",
342
+ "\u0634\u0630\u0648\u0630",
343
+ "\u0644\u0648\u0627\u0637",
344
+ "\u0644\u0648\u0637\u064A",
345
+ "\u0644\u0648\u0637\u0649",
346
+ "\u0639\u0627\u0647\u0631",
347
+ "\u0644\u062D\u0633",
348
+ "\u0645\u062A\u0639",
349
+ "\u062D\u0645\u0627\u0645",
350
+ "\u0647\u0631\u0628\u0637",
351
+ "\u062F\u064A\u0627\u062B",
352
+ "\u0633\u062D\u0627\u0642",
353
+ "\u062C\u0646\u0633",
354
+ "\u062C\u0646\u0633",
355
+ "\u062C\u0648\u0632\u064A",
356
+ "\u0645\u0631\u0627\u062A\u064A",
357
+ "\u0645\u0631\u0627\u062A\u0649",
358
+ "\u0645\u0631\u0627\u062A",
359
+ "\u0648\u0631\u0627",
360
+ "\u0634\u0639\u0631",
361
+ "\u0645\u0634\u0639\u0631",
362
+ "\u0627\u0631\u0643\u0628",
363
+ "\u0641\u0631\u0633",
364
+ "\u062C\u0627\u062F",
365
+ "\u0645\u0646\u064A\u0648\u0643",
366
+ "\u0632\u0648\u0628\u0631",
367
+ "\u0637\u064A\u0627\u0632",
368
+ "\u0634\u0631\u0627\u0645\u064A\u0637",
369
+ "\u0641\u0627\u062C\u0631",
370
+ "\u0645\u062D\u0631\u0648\u0645",
371
+ "\u0648\u0627\u0642\u0641",
372
+ "\u0628\u064A\u062D\u0643",
373
+ "\u0645\u0645\u062D\u0648\u0646\u0629",
374
+ "\u0644\u0628\u0646",
375
+ "\u0644\u0628\u0648",
376
+ "\u0648\u0627\u0642\u0641",
377
+ "\u0634\u0631\u0642\u0627\u0646",
378
+ "\u0627\u0641\u0636\u064A",
379
+ "\u062F\u0647\u0648\u0644\u062A",
380
+ "bzaz",
381
+ "nek",
382
+ "nik",
383
+ "mtnak",
384
+ "zeb",
385
+ "zep",
386
+ "zobr",
387
+ "zopr",
388
+ "kos",
389
+ "a7a",
390
+ "hayg",
391
+ "\u0644\u0628\u0648\u0647",
392
+ "\u0644\u0628\u0648\u0629",
393
+ "\u0644\u0628\u0648\u062A",
394
+ "sharma",
395
+ "banoty",
396
+ "\u0628\u0646\u0648\u062A\u064A",
397
+ "\u0628\u0646\u0648\u062A\u0649",
398
+ "\u0633\u0644\u0628",
399
+ "\u0639\u0627\u064A\u0632",
400
+ "\u062F\u0643\u0631",
401
+ "\u0646\u062A\u0627\u064A\u0629",
402
+ "\u0646\u062A\u0627\u064A\u0647",
403
+ "\u0632\u0646\u062C",
404
+ "\u0645\u0645\u062D\u0648\u0646",
405
+ "\u062A\u0639\u0628\u0627\u0646",
406
+ "\u0627\u0642\u0639\u062F",
407
+ "\u0628\u0632\u0627\u0632",
408
+ "\u0647\u064A\u062C\u0627\u0646",
409
+ "\u0633\u0627\u0641\u0644",
410
+ "\u0645\u0635\u064A\u0647\u0648\u0644\u064A",
411
+ "\u0647\u062A\u0645\u0635",
412
+ "\u0645\u0635\u064A",
413
+ "\u0628\u0632",
414
+ "hayg",
415
+ "\u0643\u0644\u0648\u062A",
416
+ "\u0627\u0646\u062F\u0631",
417
+ "\u0633\u0646\u062A\u064A\u0627",
418
+ "\u0628\u0648\u0643\u0633\u0631",
419
+ "\u0628\u062A\u0627\u0639",
420
+ "\u0645\u0634\u062A\u0647\u064A",
421
+ "\u0632\u0628\u0649",
422
+ "\u0646\u0643\u062A\u0647",
423
+ "\u0627\u062A\u0646\u0627\u0643",
424
+ "nayak",
425
+ "nyak",
426
+ "neeek",
427
+ "\u0627\u063A\u062A\u0635\u0627",
428
+ "\u0632\u0628",
429
+ "\u0643\u0633",
430
+ "\u0628\u0644\u0643\u064A\u0634\u0646",
431
+ "\u0643\u064A\u0634\u0646",
432
+ "\u0644\u064A\u0633\u0628\u064A\u0627\u0646",
433
+ "\u0633\u0628\u064A\u0627\u0646"
434
+ ]
435
+ };
436
+
437
+ // ../../shared/dictionaries/chinese.json
438
+ var chinese_default = {
439
+ words: [
440
+ "13.",
441
+ "13\u70B9",
442
+ "\u4E09\u7EA7\u7247",
443
+ "\u4E0B\u4E09\u70C2",
444
+ "\u4E0B\u8D31",
445
+ "\u4E2A\u8001\u5B50\u7684",
446
+ "\u4E5D\u6E38",
447
+ "\u4E73",
448
+ "\u4E73\u4EA4",
449
+ "\u4E73\u5934",
450
+ "\u4E73\u623F",
451
+ "\u4E73\u6CE2\u81C0\u6D6A",
452
+ "\u4EA4\u914D",
453
+ "\u4EC6\u8857",
454
+ "\u4ED6\u5976\u5976",
455
+ "\u4ED6\u5976\u5976\u7684",
456
+ "\u4ED6\u5976\u5A18\u7684",
457
+ "\u4ED6\u5988",
458
+ "\u4ED6\u5988\u3109\u738B\u516B\u86CB",
459
+ "\u4ED6\u5988\u5730",
460
+ "\u4ED6\u5988\u7684",
461
+ "\u4ED6\u5A18",
462
+ "\u4ED6\u9A6C\u7684",
463
+ "\u4F60\u4E2A\u50BB\u6BD4",
464
+ "\u4F60\u4ED6\u9A6C\u7684",
465
+ "\u4F60\u5168\u5BB6",
466
+ "\u4F60\u5976\u5976\u7684",
467
+ "\u4F60\u5979\u9A6C\u7684",
468
+ "\u4F60\u5988",
469
+ "\u4F60\u5988\u7684",
470
+ "\u4F60\u5A18",
471
+ "\u4F60\u5A18\u5361\u597D",
472
+ "\u4F60\u5A18\u54A7",
473
+ "\u4F60\u5B83\u5988\u7684",
474
+ "\u4F60\u5B83\u9A6C\u7684",
475
+ "\u4F60\u662F\u9E21",
476
+ "\u4F60\u662F\u9E2D",
477
+ "\u4F60\u9A6C\u7684",
478
+ "\u505A\u7231",
479
+ "\u50BB\u6BD4",
480
+ "\u50BB\u903C",
481
+ "\u518C\u90A3",
482
+ "\u519B\u5993",
483
+ "\u51E0\u516B",
484
+ "\u51E0\u53ED",
485
+ "\u51E0\u5DF4",
486
+ "\u51E0\u82AD",
487
+ "\u521A\u5EA6",
488
+ "\u521A\u762A\u4E09",
489
+ "\u5305\u76AE",
490
+ "\u5341\u4E09\u70B9",
491
+ "\u5356B",
492
+ "\u5356\u6BD4",
493
+ "\u5356\u6DEB",
494
+ "\u5375",
495
+ "\u5375\u5B50",
496
+ "\u53CC\u5CF0\u5FAE\u98A4",
497
+ "\u53E3\u4EA4",
498
+ "\u53E3\u80AF",
499
+ "\u53EB\u5E8A",
500
+ "\u5403\u5C4E",
501
+ "\u540E\u5EAD",
502
+ "\u5439\u7BAB",
503
+ "\u585E\u4F60\u516C",
504
+ "\u585E\u4F60\u5A18",
505
+ "\u585E\u4F60\u6BCD",
506
+ "\u585E\u4F60\u7238",
507
+ "\u585E\u4F60\u8001\u5E08",
508
+ "\u585E\u4F60\u8001\u6BCD",
509
+ "\u5904\u5973",
510
+ "\u5916\u9634",
511
+ "\u5927\u5375\u5B50",
512
+ "\u5927\u5375\u6CE1",
513
+ "\u5927\u9E21\u5DF4",
514
+ "\u5976",
515
+ "\u5976\u5976\u7684\u718A",
516
+ "\u5976\u5B50",
517
+ "\u5978",
518
+ "\u5978\u4F60",
519
+ "\u5979\u5988\u5730",
520
+ "\u5979\u5988\u7684",
521
+ "\u5979\u9A6C\u7684",
522
+ "\u5988B",
523
+ "\u5988\u4E2AB",
524
+ "\u5988\u4E2A\u6BD4",
525
+ "\u5988\u4E2A\u8001\u6BD4",
526
+ "\u5988\u5988\u7684",
527
+ "\u5988\u6BD4",
528
+ "\u5988\u7684",
529
+ "\u5988\u7684B",
530
+ "\u5988\u903C",
531
+ "\u5993",
532
+ "\u5993\u5973",
533
+ "\u5993\u9662",
534
+ "\u59B3\u5979\u5988\u7684",
535
+ "\u59B3\u5988\u7684",
536
+ "\u59B3\u5A18\u7684",
537
+ "\u59B3\u8001\u6BCD\u7684",
538
+ "\u59B3\u9A6C\u7684",
539
+ "\u59D8\u5934",
540
+ "\u59E3\u897F",
541
+ "\u59E6",
542
+ "\u5A18\u4E2A\u6BD4",
543
+ "\u5A18\u7684",
544
+ "\u5A4A\u5B50",
545
+ "\u5A4A\u5B50\u517B\u7684",
546
+ "\u5AD6\u5A3C",
547
+ "\u5AD6\u5BA2",
548
+ "\u5B83\u5988\u5730",
549
+ "\u5B83\u5988\u7684",
550
+ "\u5BC6\u6D1E",
551
+ "\u5C04\u4F60",
552
+ "\u5C04\u7CBE",
553
+ "\u5C0F\u4E73\u5934",
554
+ "\u5C0F\u5375\u5B50",
555
+ "\u5C0F\u5375\u6CE1",
556
+ "\u5C0F\u762A\u4E09",
557
+ "\u5C0F\u8089\u7C92",
558
+ "\u5C0F\u9A9A\u6BD4",
559
+ "\u5C0F\u9A9A\u8D27",
560
+ "\u5C0F\u9E21\u5DF4",
561
+ "\u5C0F\u9E21\u9E21",
562
+ "\u5C41\u773C",
563
+ "\u5C41\u80A1",
564
+ "\u5C44",
565
+ "\u5C4C",
566
+ "\u5DE8\u4E73",
567
+ "\u5E72x\u5A18",
568
+ "\u5E72\u4E03\u516B",
569
+ "\u5E72\u4F60",
570
+ "\u5E72\u4F60\u5988",
571
+ "\u5E72\u4F60\u5A18",
572
+ "\u5E72\u4F60\u8001\u6BCD",
573
+ "\u5E72\u4F60\u826F",
574
+ "\u5E72\u59B3\u5988",
575
+ "\u5E72\u59B3\u5A18",
576
+ "\u5E72\u59B3\u8001\u6BCD",
577
+ "\u5E72\u59B3\u9A6C",
578
+ "\u5E72\u60A8\u5A18",
579
+ "\u5E72\u673A\u63B0",
580
+ "\u5E72\u6B7BCS",
581
+ "\u5E72\u6B7BGM",
582
+ "\u5E72\u6B7B\u4F60",
583
+ "\u5E72\u6B7B\u5BA2\u670D",
584
+ "\u5E79",
585
+ "\u5F3A\u5978",
586
+ "\u5F3A\u5978\u4F60",
587
+ "\u6027",
588
+ "\u6027\u4EA4",
589
+ "\u6027\u5668",
590
+ "\u6027\u65E0\u80FD",
591
+ "\u6027\u7231",
592
+ "\u60C5\u8272",
593
+ "\u60F3\u4E0A\u4F60",
594
+ "\u61C6\u60A8\u5988",
595
+ "\u61C6\u60A8\u5A18",
596
+ "\u61D28",
597
+ "\u61D2\u516B",
598
+ "\u61D2\u53EB",
599
+ "\u61D2\u6559",
600
+ "\u6210\u4EBA",
601
+ "\u6211\u64CD\u4F60\u7956\u5B97\u5341\u516B\u4EE3",
602
+ "\u6252\u5149",
603
+ "\u6253\u70AE",
604
+ "\u6253\u98DE\u673A",
605
+ "\u62BD\u63D2",
606
+ "\u62DB\u5993",
607
+ "\u63D2\u4F60",
608
+ "\u63D2\u6B7B\u4F60",
609
+ "\u6492\u5C3F",
610
+ "\u64CD\u4F60",
611
+ "\u64CD\u4F60\u5168\u5BB6",
612
+ "\u64CD\u4F60\u5976\u5976",
613
+ "\u64CD\u4F60\u5988",
614
+ "\u64CD\u4F60\u5A18",
615
+ "\u64CD\u4F60\u7956\u5B97",
616
+ "\u64CD\u4F60\u8001\u5988",
617
+ "\u64CD\u4F60\u8001\u6BCD",
618
+ "\u64CD\u59B3",
619
+ "\u64CD\u59B3\u5168\u5BB6",
620
+ "\u64CD\u59B3\u5988",
621
+ "\u64CD\u59B3\u5A18",
622
+ "\u64CD\u59B3\u7956\u5B97",
623
+ "\u64CD\u673A\u63B0",
624
+ "\u64CD\u6BD4",
625
+ "\u64CD\u903C",
626
+ "\u653E\u8361",
627
+ "\u65E5\u4ED6\u5A18",
628
+ "\u65E5\u4F60",
629
+ "\u65E5\u4F60\u5988",
630
+ "\u65E5\u4F60\u8001\u5A18",
631
+ "\u65E5\u4F60\u8001\u6BCD",
632
+ "\u65E5\u6279",
633
+ "\u6708\u7ECF",
634
+ "\u673A\u516B",
635
+ "\u673A\u5DF4",
636
+ "\u673A\u673A\u6B6A\u6B6A",
637
+ "\u6742\u79CD",
638
+ "\u6D6A\u53EB",
639
+ "\u6DEB",
640
+ "\u6DEB\u4E71",
641
+ "\u6DEB\u5987",
642
+ "\u6DEB\u68CD",
643
+ "\u6DEB\u6C34",
644
+ "\u6DEB\u79FD",
645
+ "\u6DEB\u8361",
646
+ "\u6DEB\u897F",
647
+ "\u6E7F\u900F\u7684\u5185\u88E4",
648
+ "\u6FC0\u60C5",
649
+ "\u7068\u4F60\u5A18",
650
+ "\u70C2\u8D27",
651
+ "\u70C2\u903C",
652
+ "\u721B",
653
+ "\u72D7\u5C41",
654
+ "\u72D7\u65E5",
655
+ "\u72D7\u72FC\u517B\u7684",
656
+ "\u7389\u6775",
657
+ "\u738B\u516B\u86CB",
658
+ "\u74DC\u5A03\u5B50",
659
+ "\u74DC\u5A46\u5A18",
660
+ "\u74DC\u6279",
661
+ "\u762A\u4E09",
662
+ "\u767D\u70C2",
663
+ "\u767D\u75F4",
664
+ "\u767D\u7661",
665
+ "\u7956\u5B97",
666
+ "\u79C1\u670D",
667
+ "\u7B28\u86CB",
668
+ "\u7CBE\u5B50",
669
+ "\u8001\u4E8C",
670
+ "\u8001\u5473",
671
+ "\u8001\u6BCD",
672
+ "\u8001\u762A\u4E09",
673
+ "\u8001\u9A9A\u6BD4",
674
+ "\u8001\u9A9A\u8D27",
675
+ "\u8089\u58C1",
676
+ "\u8089\u68CD\u5B50",
677
+ "\u8089\u68D2",
678
+ "\u8089\u7F1D",
679
+ "\u808F",
680
+ "\u809B\u4EA4",
681
+ "\u80A5\u897F",
682
+ "\u8272\u60C5",
683
+ "\u82B1\u67F3",
684
+ "\u8361\u5987",
685
+ "\u8CE4",
686
+ "\u8D1D\u8089",
687
+ "\u8D31B",
688
+ "\u8D31\u4EBA",
689
+ "\u8D31\u8D27",
690
+ "\u8D3C\u4F60\u5988",
691
+ "\u8D5B\u4F60\u8001\u6BCD",
692
+ "\u8D5B\u59B3\u963F\u6BCD",
693
+ "\u8D63\u60A8\u5A18",
694
+ "\u8F6E\u5978",
695
+ "\u8FF7\u836F",
696
+ "\u903C",
697
+ "\u903C\u6837",
698
+ "\u91CE\u9E21",
699
+ "\u9633\u5177",
700
+ "\u9633\u840E",
701
+ "\u9634\u5507",
702
+ "\u9634\u6237",
703
+ "\u9634\u6838",
704
+ "\u9634\u6BDB",
705
+ "\u9634\u830E",
706
+ "\u9634\u9053",
707
+ "\u9634\u90E8",
708
+ "\u96DE\u5DF4",
709
+ "\u9760\u5317",
710
+ "\u9760\u6BCD",
711
+ "\u9760\u7238",
712
+ "\u9760\u80CC",
713
+ "\u9760\u8170",
714
+ "\u9A76\u4F60\u516C",
715
+ "\u9A76\u4F60\u5A18",
716
+ "\u9A76\u4F60\u6BCD",
717
+ "\u9A76\u4F60\u7238",
718
+ "\u9A76\u4F60\u8001\u5E08",
719
+ "\u9A76\u4F60\u8001\u6BCD",
720
+ "\u9A9A\u6BD4",
721
+ "\u9A9A\u8D27",
722
+ "\u9A9A\u903C",
723
+ "\u9B3C\u516C",
724
+ "\u9E218",
725
+ "\u9E21\u516B",
726
+ "\u9E21\u53ED",
727
+ "\u9E21\u5427",
728
+ "\u9E21\u5978",
729
+ "\u9E21\u5DF4",
730
+ "\u9E21\u82AD",
731
+ "\u9E21\u9E21",
732
+ "\u9F9F\u513F\u5B50",
733
+ "\u9F9F\u5934"
734
+ ]
735
+ };
736
+
737
+ // ../../shared/dictionaries/czech.json
738
+ var czech_default = {
739
+ words: [
740
+ "bordel",
741
+ "buzna",
742
+ "\u010Dum\u011Bt",
743
+ "\u010Dur\xE1k",
744
+ "debil",
745
+ "do pi\u010De",
746
+ "do prdele",
747
+ "dr\u0161\u0165ka",
748
+ "dr\u017Eka",
749
+ "flundra",
750
+ "hajzl",
751
+ "hovno",
752
+ "chcanky",
753
+ "chuj",
754
+ "jebat",
755
+ "kokot",
756
+ "kokotina",
757
+ "ko\u0148omrd",
758
+ "kunda",
759
+ "kurva",
760
+ "mamrd",
761
+ "mrdat",
762
+ "mrdka",
763
+ "mrdn\xEDk",
764
+ "oslo\u0161oust",
765
+ "pi\u010Da",
766
+ "p\xED\u010Dus",
767
+ "p\xEDchat",
768
+ "pizda",
769
+ "prcat",
770
+ "prdel",
771
+ "prdelka",
772
+ "sra\u010Dka",
773
+ "sr\xE1t",
774
+ "\u0161oustat",
775
+ "\u0161ulin",
776
+ "vyp\xED\u010Denec",
777
+ "zkurvit",
778
+ "zkurvysyn",
779
+ "zmrd",
780
+ "\u017Er\xE1t"
781
+ ]
782
+ };
783
+
784
+ // ../../shared/dictionaries/danish.json
785
+ var danish_default = {
786
+ words: [
787
+ "anus",
788
+ "b\xF8sser\xF8v",
789
+ "cock",
790
+ "fisse",
791
+ "fisseh\xE5r",
792
+ "fuck",
793
+ "hestepik",
794
+ "kussekryller",
795
+ "lort",
796
+ "luder",
797
+ "pik",
798
+ "pikh\xE5r",
799
+ "pikslugeri",
800
+ "piksutteri",
801
+ "pis",
802
+ "r\xF8v",
803
+ "r\xF8vhul",
804
+ "r\xF8vsk\xE6g",
805
+ "r\xF8vspr\xE6ke",
806
+ "shit"
807
+ ]
808
+ };
809
+
810
+ // ../../shared/dictionaries/dutch.json
811
+ var dutch_default = {
812
+ words: [
813
+ "aardappels afgieteng",
814
+ "achter het raam zitten",
815
+ "afberen",
816
+ "aflebberen",
817
+ "afrossen",
818
+ "afrukken",
819
+ "aftrekken",
820
+ "afwerkplaats",
821
+ "afzeiken",
822
+ "afzuigen",
823
+ "anderhalve man en een paardekop",
824
+ "anita",
825
+ "asbak",
826
+ "aso",
827
+ "bagger schijten",
828
+ "balen",
829
+ "bedonderen",
830
+ "befborstelg",
831
+ "beffen",
832
+ "bekken",
833
+ "belazeren",
834
+ "besodemieterd zijn",
835
+ "besodemieteren",
836
+ "beurt",
837
+ "boemelen",
838
+ "boerelul",
839
+ "boerenpummelg",
840
+ "bokkelul",
841
+ "botergeil",
842
+ "broekhoesten",
843
+ "brugpieperg",
844
+ "buffelen",
845
+ "buiten de pot piesen",
846
+ "da's kloten van de bok",
847
+ "de ballen",
848
+ "de hoer spelen",
849
+ "de hond uitlaten",
850
+ "de koffer induiken",
851
+ "delg",
852
+ "de pijp aan maarten geven",
853
+ "de pijp uitgaan",
854
+ "dombo",
855
+ "draaikontg",
856
+ "driehoog achter wonen",
857
+ "drolg",
858
+ "drooggeiler",
859
+ "droogkloot",
860
+ "een beurt geven",
861
+ "een nummertje maken",
862
+ "een wip maken",
863
+ "eikel",
864
+ "engerd",
865
+ "flamoes",
866
+ "flikken",
867
+ "flikker",
868
+ "gadverdamme",
869
+ "galbak",
870
+ "gat",
871
+ "gedoogzone",
872
+ "geilneef",
873
+ "gesodemieter",
874
+ "godverdomme",
875
+ "graftak",
876
+ "gras maaien",
877
+ "gratenkutg",
878
+ "greppeldel",
879
+ "griet",
880
+ "hoempert",
881
+ "hoer",
882
+ "hoerenbuurt",
883
+ "hoerenloper",
884
+ "hoerig",
885
+ "hol",
886
+ "hufter",
887
+ "huisdealer",
888
+ "johny",
889
+ "kanen",
890
+ "kettingzeugg",
891
+ "klaarkomen",
892
+ "klerebeer",
893
+ "klojo",
894
+ "klooien",
895
+ "klootjesvolk",
896
+ "klootoog",
897
+ "klootzak",
898
+ "kloten",
899
+ "knor",
900
+ "kontg",
901
+ "kontneuken",
902
+ "krentekakker",
903
+ "kut",
904
+ "kuttelikkertje",
905
+ "kwakkieg",
906
+ "liefdesgrot",
907
+ "lul",
908
+ "lul-de-behanger",
909
+ "lulhannes",
910
+ "lummel",
911
+ "mafketel",
912
+ "matennaaierg",
913
+ "matje",
914
+ "mof",
915
+ "mutsg",
916
+ "naaien",
917
+ "naakt",
918
+ "neuken",
919
+ "neukstier",
920
+ "nicht",
921
+ "oetlul",
922
+ "opgeilen",
923
+ "opkankeren",
924
+ "oprotten",
925
+ "opsodemieteren",
926
+ "op z'n hondjes",
927
+ "op z'n sodemieter geven",
928
+ "opzouten",
929
+ "ouwehoer",
930
+ "ouwehoeren",
931
+ "ouwe rukker",
932
+ "paal",
933
+ "paardelul",
934
+ "palen",
935
+ "penozeg",
936
+ "piesen",
937
+ "pijpbekkieg",
938
+ "pijpen",
939
+ "pik",
940
+ "pleurislaaier",
941
+ "poep",
942
+ "poepen",
943
+ "poot",
944
+ "portiekslet",
945
+ "pot",
946
+ "potverdorie",
947
+ "publiciteitsgeil",
948
+ "raaskallen",
949
+ "reet",
950
+ "reetridder",
951
+ "reet trappen, voor zijn",
952
+ "remsporeng",
953
+ "reutelen",
954
+ "rothoer",
955
+ "rotzak",
956
+ "rukhond",
957
+ "rukken",
958
+ "schatje",
959
+ "schijt",
960
+ "schijten",
961
+ "schoft",
962
+ "schuinsmarcheerder",
963
+ "shit",
964
+ "slempen",
965
+ "sletg",
966
+ "sletterig",
967
+ "slik mijn zaad",
968
+ "snolg",
969
+ "spuiten",
970
+ "standje",
971
+ "standje-69g",
972
+ "stoephoer",
973
+ "stootje",
974
+ "strontg",
975
+ "sufferdg",
976
+ "tapijtnek",
977
+ "teefg",
978
+ "temeier",
979
+ "teringlijer",
980
+ "toeter",
981
+ "tongzoeng",
982
+ "triootjeg",
983
+ "trottoir prostitu\xE9e",
984
+ "trottoirteef",
985
+ "vergallen",
986
+ "verkloten",
987
+ "verneuken",
988
+ "viespeuk",
989
+ "vingeren",
990
+ "vleesroos",
991
+ "voor jan lul",
992
+ "voor jan-met-de-korte-achternaam",
993
+ "watje",
994
+ "welzijnsmafia",
995
+ "wijf",
996
+ "wippen",
997
+ "wuftje",
998
+ "zaadje",
999
+ "zakkenwasser",
1000
+ "zeiken",
1001
+ "zeiker",
1002
+ "zuigen",
1003
+ "zuiplap"
1004
+ ]
1005
+ };
1006
+
1007
+ // ../../shared/dictionaries/esperanto.json
1008
+ var esperanto_default = {
1009
+ words: [
1010
+ "bugren",
1011
+ "bugri",
1012
+ "bugru",
1013
+ "\u0109iesulino",
1014
+ "\u0109iesulo",
1015
+ "diofek",
1016
+ "diofeka",
1017
+ "fek",
1018
+ "feken",
1019
+ "fekfikanto",
1020
+ "feklekulo",
1021
+ "fekulo",
1022
+ "fik",
1023
+ "fikado",
1024
+ "fikema",
1025
+ "fikfek",
1026
+ "fiki",
1027
+ "fiki\u011Di",
1028
+ "fiki\u011Du",
1029
+ "fikilo",
1030
+ "fikkla\u016Dno",
1031
+ "fikota",
1032
+ "fiku",
1033
+ "forfiki",
1034
+ "forfiki\u011Du",
1035
+ "forfiku",
1036
+ "forfurzu",
1037
+ "forpisi",
1038
+ "forpisu",
1039
+ "furzulo",
1040
+ "kacen",
1041
+ "kaco",
1042
+ "kacsu\u0109ulo",
1043
+ "kojono",
1044
+ "pi\u0109en",
1045
+ "pi\u0109o",
1046
+ "zamenfek"
1047
+ ]
1048
+ };
1049
+
1050
+ // ../../shared/dictionaries/english.json
1051
+ var english_default = {
1052
+ words: [
1053
+ "2 girls 1 cup",
1054
+ "2g1c",
1055
+ "a$$",
1056
+ "acrotomophilia",
1057
+ "alabama hot pocket",
1058
+ "alaskan pipeline",
1059
+ "anal",
1060
+ "anilingus",
1061
+ "anus",
1062
+ "apeshit",
1063
+ "arsehole",
1064
+ "ass",
1065
+ "asshat",
1066
+ "asshole",
1067
+ "assmunch",
1068
+ "asswipe",
1069
+ "auto erotic",
1070
+ "autoerotic",
1071
+ "b!tch",
1072
+ "babeland",
1073
+ "baby batter",
1074
+ "baby juice",
1075
+ "ball gag",
1076
+ "ball gravy",
1077
+ "ball kicking",
1078
+ "ball licking",
1079
+ "ball sack",
1080
+ "ball sucking",
1081
+ "bangbros",
1082
+ "bareback",
1083
+ "barely legal",
1084
+ "barenaked",
1085
+ "bastard",
1086
+ "bastardized",
1087
+ "bastardo",
1088
+ "bastinado",
1089
+ "bbw",
1090
+ "bdsm",
1091
+ "beaner",
1092
+ "beaners",
1093
+ "beaver cleaver",
1094
+ "beaver lips",
1095
+ "bestiality",
1096
+ "big black",
1097
+ "big breasts",
1098
+ "big knockers",
1099
+ "big tits",
1100
+ "bimbos",
1101
+ "birdlock",
1102
+ "bitch",
1103
+ "bitches",
1104
+ "black cock",
1105
+ "blonde action",
1106
+ "blonde on blonde action",
1107
+ "blow job",
1108
+ "blow your load",
1109
+ "blowjob",
1110
+ "blue waffle",
1111
+ "blumpkin",
1112
+ "bollocks",
1113
+ "bondage",
1114
+ "boner",
1115
+ "boob",
1116
+ "boobs",
1117
+ "booty call",
1118
+ "brown showers",
1119
+ "brunette action",
1120
+ "bs",
1121
+ "bukkake",
1122
+ "bulldyke",
1123
+ "bullet vibe",
1124
+ "bullshit",
1125
+ "bung hole",
1126
+ "bunghole",
1127
+ "busty",
1128
+ "butt",
1129
+ "buttcheeks",
1130
+ "butthole",
1131
+ "camel toe",
1132
+ "camgirl",
1133
+ "camslut",
1134
+ "camwhore",
1135
+ "carpet muncher",
1136
+ "carpetmuncher",
1137
+ "chocolate rosebuds",
1138
+ "circlejerk",
1139
+ "cleveland steamer",
1140
+ "clit",
1141
+ "clitoris",
1142
+ "clover clamps",
1143
+ "clusterfuck",
1144
+ "cock",
1145
+ "cocks",
1146
+ "cocksucker",
1147
+ "coon",
1148
+ "coons",
1149
+ "coprolagnia",
1150
+ "coprophilia",
1151
+ "cornhole",
1152
+ "creampie",
1153
+ "cum",
1154
+ "cumming",
1155
+ "cunnilingus",
1156
+ "cunt",
1157
+ "darkie",
1158
+ "date rape",
1159
+ "daterape",
1160
+ "deep throat",
1161
+ "deepthroat",
1162
+ "dendrophilia",
1163
+ "dick",
1164
+ "dildo",
1165
+ "dingleberries",
1166
+ "dingleberry",
1167
+ "dipshit",
1168
+ "dirty pillows",
1169
+ "dirty sanchez",
1170
+ "dog style",
1171
+ "doggie style",
1172
+ "doggiestyle",
1173
+ "doggy style",
1174
+ "doggystyle",
1175
+ "dolcett",
1176
+ "domination",
1177
+ "dominatrix",
1178
+ "dommes",
1179
+ "donkey punch",
1180
+ "double dong",
1181
+ "double penetration",
1182
+ "dp action",
1183
+ "dry hump",
1184
+ "dumbass",
1185
+ "dvda",
1186
+ "eat my ass",
1187
+ "ecchi",
1188
+ "ejaculation",
1189
+ "erotic",
1190
+ "erotism",
1191
+ "escort",
1192
+ "eunuch",
1193
+ "f*ck",
1194
+ "f@ck",
1195
+ "faggot",
1196
+ "fecal",
1197
+ "felch",
1198
+ "fellatio",
1199
+ "feltch",
1200
+ "female squirting",
1201
+ "femdom",
1202
+ "figging",
1203
+ "fingerbang",
1204
+ "fingering",
1205
+ "fisting",
1206
+ "foot fetish",
1207
+ "footjob",
1208
+ "frotting",
1209
+ "fuck",
1210
+ "fuck buttons",
1211
+ "fucker",
1212
+ "fuckface",
1213
+ "fuckin",
1214
+ "fucking",
1215
+ "fucktards",
1216
+ "fudge packer",
1217
+ "fudgepacker",
1218
+ "fuq",
1219
+ "futanari",
1220
+ "g-spot",
1221
+ "gang bang",
1222
+ "gay sex",
1223
+ "genitals",
1224
+ "giant cock",
1225
+ "girl on",
1226
+ "girl on top",
1227
+ "girls gone wild",
1228
+ "goatcx",
1229
+ "goatse",
1230
+ "god damn",
1231
+ "gokkun",
1232
+ "golden shower",
1233
+ "goo girl",
1234
+ "goodpoop",
1235
+ "goregasm",
1236
+ "grope",
1237
+ "group sex",
1238
+ "guro",
1239
+ "hand job",
1240
+ "handjob",
1241
+ "hard core",
1242
+ "hardcore",
1243
+ "hentai",
1244
+ "hoe",
1245
+ "homoerotic",
1246
+ "honkey",
1247
+ "hooker",
1248
+ "hot carl",
1249
+ "hot chick",
1250
+ "how to kill",
1251
+ "how to murder",
1252
+ "huge fat",
1253
+ "humping",
1254
+ "incest",
1255
+ "intercourse",
1256
+ "jack off",
1257
+ "jackass",
1258
+ "jail bait",
1259
+ "jailbait",
1260
+ "jelly donut",
1261
+ "jerk off",
1262
+ "jigaboo",
1263
+ "jiggaboo",
1264
+ "jiggerboo",
1265
+ "jizz",
1266
+ "juggs",
1267
+ "kike",
1268
+ "kinbaku",
1269
+ "kinkster",
1270
+ "kinky",
1271
+ "knobbing",
1272
+ "leather restraint",
1273
+ "leather straight jacket",
1274
+ "lemon party",
1275
+ "lmfao",
1276
+ "lolita",
1277
+ "lovemaking",
1278
+ "make me come",
1279
+ "male squirting",
1280
+ "masturbate",
1281
+ "menage a trois",
1282
+ "mf",
1283
+ "milf",
1284
+ "missionary position",
1285
+ "motherfucker",
1286
+ "mound of venus",
1287
+ "mr hands",
1288
+ "muff diver",
1289
+ "muffdiving",
1290
+ "nambla",
1291
+ "nawashi",
1292
+ "negro",
1293
+ "neonazi",
1294
+ "nig nog",
1295
+ "nigga",
1296
+ "nigger",
1297
+ "nimphomania",
1298
+ "nipple",
1299
+ "nipples",
1300
+ "nsfw images",
1301
+ "nude",
1302
+ "nudity",
1303
+ "nympho",
1304
+ "nymphomania",
1305
+ "octopussy",
1306
+ "omfg",
1307
+ "omorashi",
1308
+ "one cup two girls",
1309
+ "one guy one jar",
1310
+ "orgasm",
1311
+ "orgy",
1312
+ "paedophile",
1313
+ "paki",
1314
+ "panties",
1315
+ "panty",
1316
+ "pedobear",
1317
+ "pedophile",
1318
+ "pegging",
1319
+ "penis",
1320
+ "phone sex",
1321
+ "piece of shit",
1322
+ "piss pig",
1323
+ "pissed",
1324
+ "pissing",
1325
+ "pisspig",
1326
+ "playboy",
1327
+ "pleasure chest",
1328
+ "pole smoker",
1329
+ "ponyplay",
1330
+ "poof",
1331
+ "poon",
1332
+ "poontang",
1333
+ "poop chute",
1334
+ "poopchute",
1335
+ "porn",
1336
+ "porno",
1337
+ "pornography",
1338
+ "prince albert piercing",
1339
+ "pthc",
1340
+ "pubes",
1341
+ "punany",
1342
+ "pussy",
1343
+ "queaf",
1344
+ "queef",
1345
+ "quim",
1346
+ "raghead",
1347
+ "raging boner",
1348
+ "rape",
1349
+ "raping",
1350
+ "rapist",
1351
+ "rectum",
1352
+ "retard",
1353
+ "retarded",
1354
+ "reverse cowgirl",
1355
+ "rimjob",
1356
+ "rimming",
1357
+ "rosy palm",
1358
+ "rosy palm and her 5 sisters",
1359
+ "rusty trombone",
1360
+ "s&m",
1361
+ "sadism",
1362
+ "santorum",
1363
+ "scat",
1364
+ "schlong",
1365
+ "scissoring",
1366
+ "semen",
1367
+ "sex",
1368
+ "sexo",
1369
+ "sexy",
1370
+ "sh!t",
1371
+ "shaved beaver",
1372
+ "shaved pussy",
1373
+ "shemale",
1374
+ "shibari",
1375
+ "shit",
1376
+ "shitblimp",
1377
+ "shithead",
1378
+ "shitshow",
1379
+ "shitty",
1380
+ "shota",
1381
+ "shrimping",
1382
+ "simp",
1383
+ "skeet",
1384
+ "slanteye",
1385
+ "slut",
1386
+ "smut",
1387
+ "snatch",
1388
+ "snowballing",
1389
+ "sodomize",
1390
+ "sodomy",
1391
+ "spic",
1392
+ "splooge",
1393
+ "splooge moose",
1394
+ "spooge",
1395
+ "spread legs",
1396
+ "spunk",
1397
+ "stfu",
1398
+ "strap on",
1399
+ "strapon",
1400
+ "strappado",
1401
+ "strip club",
1402
+ "style doggy",
1403
+ "suck",
1404
+ "sucks",
1405
+ "suicide girls",
1406
+ "sultry women",
1407
+ "swastika",
1408
+ "swinger",
1409
+ "tainted love",
1410
+ "taste my",
1411
+ "tea bagging",
1412
+ "testbad01",
1413
+ "threesome",
1414
+ "throating",
1415
+ "tied up",
1416
+ "tight white",
1417
+ "tit",
1418
+ "tits",
1419
+ "titties",
1420
+ "titty",
1421
+ "tongue in a",
1422
+ "topless",
1423
+ "tosser",
1424
+ "towelhead",
1425
+ "tranny",
1426
+ "tribadism",
1427
+ "tub girl",
1428
+ "tubgirl",
1429
+ "tushy",
1430
+ "twat",
1431
+ "twink",
1432
+ "twinkie",
1433
+ "two girls one cup",
1434
+ "undressing",
1435
+ "upskirt",
1436
+ "urethra play",
1437
+ "urophilia",
1438
+ "vagina",
1439
+ "venus mound",
1440
+ "vibrator",
1441
+ "violet wand",
1442
+ "vorarephilia",
1443
+ "voyeur",
1444
+ "vulva",
1445
+ "wank",
1446
+ "wet dream",
1447
+ "wetback",
1448
+ "white power",
1449
+ "wrapping men",
1450
+ "wrinkled starfish",
1451
+ "wtf",
1452
+ "xx",
1453
+ "xxx",
1454
+ "yaoi",
1455
+ "yellow showers",
1456
+ "yiffy",
1457
+ "zoophilia",
1458
+ "\u{1F595}"
1459
+ ]
1460
+ };
1461
+
1462
+ // ../../shared/dictionaries/finnish.json
1463
+ var finnish_default = {
1464
+ words: [
1465
+ "alfred nussi",
1466
+ "bylsi\xE4",
1467
+ "haahka",
1468
+ "haista paska",
1469
+ "haista vittu",
1470
+ "hatullinen",
1471
+ "helvetisti",
1472
+ "hevonkuusi",
1473
+ "hevonpaska",
1474
+ "hevonperse",
1475
+ "hevonvittu",
1476
+ "hevonvitunperse",
1477
+ "hitosti",
1478
+ "hitto",
1479
+ "huorata",
1480
+ "h\xE4ssi\xE4",
1481
+ "juosten kustu",
1482
+ "jutku",
1483
+ "jutsku",
1484
+ "j\xE4tk\xE4",
1485
+ "kananpaska",
1486
+ "koiranpaska",
1487
+ "kuin esterin perseest\xE4",
1488
+ "kulli",
1489
+ "kullinluikaus",
1490
+ "kuppainen",
1491
+ "kusaista",
1492
+ "kuseksia",
1493
+ "kusettaa",
1494
+ "kusi",
1495
+ "kusip\xE4\xE4",
1496
+ "kusta",
1497
+ "kyrpiintynyt",
1498
+ "kyrpiinty\xE4",
1499
+ "kyrpi\xE4",
1500
+ "kyrp\xE4",
1501
+ "kyrp\xE4naama",
1502
+ "kyrvitys",
1503
+ "lahtari",
1504
+ "lutka",
1505
+ "molo",
1506
+ "molop\xE4\xE4",
1507
+ "mulkero",
1508
+ "mulkku",
1509
+ "mulkvisti",
1510
+ "muna",
1511
+ "munap\xE4\xE4",
1512
+ "munaton",
1513
+ "mutakuono",
1514
+ "mutiainen",
1515
+ "naida",
1516
+ "nainti",
1517
+ "narttu",
1518
+ "neekeri",
1519
+ "nekru",
1520
+ "nuolla persett\xE4",
1521
+ "nussia",
1522
+ "nussija",
1523
+ "nussinta",
1524
+ "paljaalla",
1525
+ "palli",
1526
+ "pallit",
1527
+ "paneskella",
1528
+ "panettaa",
1529
+ "panna",
1530
+ "pano",
1531
+ "pantava",
1532
+ "paska",
1533
+ "paskainen",
1534
+ "paskamainen",
1535
+ "paskanmarjat",
1536
+ "paskantaa",
1537
+ "paskapuhe",
1538
+ "paskap\xE4\xE4",
1539
+ "paskattaa",
1540
+ "paskiainen",
1541
+ "paskoa",
1542
+ "pehko",
1543
+ "pentele",
1544
+ "perkele",
1545
+ "perkeleesti",
1546
+ "persaukinen",
1547
+ "perse",
1548
+ "perseennuolija",
1549
+ "perseet olalla",
1550
+ "persereik\xE4",
1551
+ "perse\xE4\xE4li\xF6",
1552
+ "persl\xE4pi",
1553
+ "perspano",
1554
+ "persvako",
1555
+ "pilkunnussija",
1556
+ "pillu",
1557
+ "pillut",
1558
+ "pipari",
1559
+ "piru",
1560
+ "pist\xE4\xE4",
1561
+ "pyllyvako",
1562
+ "reik\xE4",
1563
+ "reva",
1564
+ "ripsipiirakka",
1565
+ "runkata",
1566
+ "runkkari",
1567
+ "runkkaus",
1568
+ "runkku",
1569
+ "ryss\xE4",
1570
+ "r\xE4ttip\xE4\xE4",
1571
+ "saatanasti",
1572
+ "suklaaosasto",
1573
+ "tavara",
1574
+ "toosa",
1575
+ "tuhkaluukku",
1576
+ "tumputtaa",
1577
+ "turpasauna",
1578
+ "tussu",
1579
+ "tussukka",
1580
+ "tussut",
1581
+ "vakipano",
1582
+ "vet\xE4\xE4 k\xE4teen",
1583
+ "viiksi",
1584
+ "vittu",
1585
+ "vittuilla",
1586
+ "vittuilu",
1587
+ "vittumainen",
1588
+ "vittuuntua",
1589
+ "vittuuntunut",
1590
+ "vitun",
1591
+ "vitusti",
1592
+ "vituttaa",
1593
+ "vitutus",
1594
+ "\xE4p\xE4r\xE4"
1595
+ ]
1596
+ };
1597
+
1598
+ // ../../shared/dictionaries/german.json
1599
+ var german_default = {
1600
+ words: [
1601
+ "analritter",
1602
+ "arsch",
1603
+ "arschficker",
1604
+ "arschlecker",
1605
+ "arschloch",
1606
+ "bimbo",
1607
+ "bratze",
1608
+ "bumsen",
1609
+ "bonze",
1610
+ "d\xF6del",
1611
+ "fick",
1612
+ "ficken",
1613
+ "flittchen",
1614
+ "fotze",
1615
+ "fratze",
1616
+ "hackfresse",
1617
+ "hure",
1618
+ "hurensohn",
1619
+ "ische",
1620
+ "kackbratze",
1621
+ "kacke",
1622
+ "kacken",
1623
+ "kackwurst",
1624
+ "kampflesbe",
1625
+ "kanake",
1626
+ "kimme",
1627
+ "l\xFCmmel",
1628
+ "MILF",
1629
+ "m\xF6pse",
1630
+ "morgenlatte",
1631
+ "m\xF6se",
1632
+ "mufti",
1633
+ "muschi",
1634
+ "nackt",
1635
+ "neger",
1636
+ "nigger",
1637
+ "nippel",
1638
+ "nutte",
1639
+ "onanieren",
1640
+ "orgasmus",
1641
+ "pimmel",
1642
+ "pimpern",
1643
+ "pinkeln",
1644
+ "pissen",
1645
+ "pisser",
1646
+ "popel",
1647
+ "poppen",
1648
+ "porno",
1649
+ "reudig",
1650
+ "rosette",
1651
+ "schabracke",
1652
+ "schlampe",
1653
+ "schei\xDFe",
1654
+ "scheisser",
1655
+ "schiesser",
1656
+ "schnackeln",
1657
+ "schwanzlutscher",
1658
+ "schwuchtel",
1659
+ "tittchen",
1660
+ "titten",
1661
+ "v\xF6geln",
1662
+ "vollpfosten",
1663
+ "wichse",
1664
+ "wichsen",
1665
+ "wichser"
1666
+ ]
1667
+ };
1668
+
1669
+ // ../../shared/dictionaries/hindi.json
1670
+ var hindi_default = {
1671
+ words: [
1672
+ "aand",
1673
+ "aandu",
1674
+ "balatkar",
1675
+ "beti chod",
1676
+ "bhadva",
1677
+ "bhadve",
1678
+ "bhandve",
1679
+ "bhootni ke",
1680
+ "bhosad",
1681
+ "bhosadi ke",
1682
+ "boobe",
1683
+ "chakke",
1684
+ "chinaal",
1685
+ "chinki",
1686
+ "chod",
1687
+ "chodu",
1688
+ "chodu bhagat",
1689
+ "chooche",
1690
+ "choochi",
1691
+ "choot",
1692
+ "choot ke baal",
1693
+ "chootia",
1694
+ "chootiya",
1695
+ "chuche",
1696
+ "chuchi",
1697
+ "chudai khanaa",
1698
+ "chudan chudai",
1699
+ "chut",
1700
+ "chut ke baal",
1701
+ "chut ke dhakkan",
1702
+ "chut maarli",
1703
+ "chutad",
1704
+ "chutadd",
1705
+ "chutan",
1706
+ "chutia",
1707
+ "chutiya",
1708
+ "gaand",
1709
+ "gaandfat",
1710
+ "gaandmasti",
1711
+ "gaandufad",
1712
+ "gandu",
1713
+ "gashti",
1714
+ "gasti",
1715
+ "ghassa",
1716
+ "ghasti",
1717
+ "harami",
1718
+ "haramzade",
1719
+ "hawas",
1720
+ "hawas ke pujari",
1721
+ "hijda",
1722
+ "hijra",
1723
+ "jhant",
1724
+ "jhant chaatu",
1725
+ "jhant ke baal",
1726
+ "jhantu",
1727
+ "kamine",
1728
+ "kaminey",
1729
+ "kanjar",
1730
+ "kutta",
1731
+ "kutta kamina",
1732
+ "kutte ki aulad",
1733
+ "kutte ki jat",
1734
+ "kuttiya",
1735
+ "loda",
1736
+ "lodu",
1737
+ "lund",
1738
+ "lund choos",
1739
+ "lund khajoor",
1740
+ "lundtopi",
1741
+ "lundure",
1742
+ "maa ki chut",
1743
+ "maal",
1744
+ "madar chod",
1745
+ "mooh mein le",
1746
+ "mutth",
1747
+ "najayaz",
1748
+ "najayaz aulaad",
1749
+ "najayaz paidaish",
1750
+ "paki",
1751
+ "pataka",
1752
+ "patakha",
1753
+ "raand",
1754
+ "randi",
1755
+ "saala",
1756
+ "saala kutta",
1757
+ "saali kutti",
1758
+ "saali randi",
1759
+ "suar",
1760
+ "suar ki aulad",
1761
+ "tatte",
1762
+ "tatti",
1763
+ "teri maa ka bhosada",
1764
+ "teri maa ka boba chusu",
1765
+ "teri maa ki chut",
1766
+ "tharak",
1767
+ "tharki"
1768
+ ]
1769
+ };
1770
+
1771
+ // ../../shared/dictionaries/hungarian.json
1772
+ var hungarian_default = {
1773
+ words: [
1774
+ "balfasz",
1775
+ "balfaszok",
1776
+ "balfaszokat",
1777
+ "balfaszt",
1778
+ "barmok",
1779
+ "barmokat",
1780
+ "barmot",
1781
+ "barom",
1782
+ "baszik",
1783
+ "bazmeg",
1784
+ "buksza",
1785
+ "buksz\xE1k",
1786
+ "buksz\xE1kat",
1787
+ "buksz\xE1t",
1788
+ "b\xFAr",
1789
+ "b\xFArok",
1790
+ "cs\xF6cs",
1791
+ "cs\xF6cs\xF6k",
1792
+ "cs\xF6cs\xF6ket",
1793
+ "cs\xF6cs\xF6t",
1794
+ "fasz",
1795
+ "faszfej",
1796
+ "faszfejek",
1797
+ "faszfejeket",
1798
+ "faszfejet",
1799
+ "faszok",
1800
+ "faszokat",
1801
+ "faszt",
1802
+ "fing",
1803
+ "fingok",
1804
+ "fingokat",
1805
+ "fingot",
1806
+ "franc",
1807
+ "francok",
1808
+ "francokat",
1809
+ "francot",
1810
+ "geci",
1811
+ "gecibb",
1812
+ "gecik",
1813
+ "geciket",
1814
+ "gecit",
1815
+ "kibaszott",
1816
+ "kibaszottabb",
1817
+ "k\xFAr",
1818
+ "kurafi",
1819
+ "kurafik",
1820
+ "kurafikat",
1821
+ "kurafit",
1822
+ "kurva",
1823
+ "kurv\xE1k",
1824
+ "kurv\xE1kat",
1825
+ "kurv\xE1t",
1826
+ "leggecibb",
1827
+ "legkibaszottabb",
1828
+ "legszarabb",
1829
+ "marha",
1830
+ "marh\xE1k",
1831
+ "marh\xE1kat",
1832
+ "marh\xE1t",
1833
+ "megd\xF6glik",
1834
+ "pele",
1835
+ "pel\xE9k",
1836
+ "picsa",
1837
+ "pics\xE1kat",
1838
+ "pics\xE1t",
1839
+ "pina",
1840
+ "pin\xE1k",
1841
+ "pin\xE1kat",
1842
+ "pin\xE1t",
1843
+ "pofa",
1844
+ "pof\xE1kat",
1845
+ "pof\xE1t",
1846
+ "p\xF6cs",
1847
+ "p\xF6cs\xF6k",
1848
+ "p\xF6cs\xF6ket",
1849
+ "p\xF6cs\xF6t",
1850
+ "punci",
1851
+ "puncik",
1852
+ "segg",
1853
+ "seggek",
1854
+ "seggeket",
1855
+ "segget",
1856
+ "seggfej",
1857
+ "seggfejek",
1858
+ "seggfejeket",
1859
+ "seggfejet",
1860
+ "szajha",
1861
+ "szajh\xE1k",
1862
+ "szajh\xE1kat",
1863
+ "szajh\xE1t",
1864
+ "szar",
1865
+ "szarabb",
1866
+ "szarik",
1867
+ "szarok",
1868
+ "szarokat",
1869
+ "szart"
1870
+ ]
1871
+ };
1872
+
1873
+ // ../../shared/dictionaries/korean.json
1874
+ var korean_default = {
1875
+ words: [
1876
+ "\uAC15\uAC04",
1877
+ "\uAC1C\uC0C8\uB07C",
1878
+ "\uAC1C\uC790\uC2DD",
1879
+ "\uAC1C\uC886",
1880
+ "\uAC1C\uCC28\uBC18",
1881
+ "\uAC70\uC720",
1882
+ "\uACC4\uC9D1\uB144",
1883
+ "\uACE0\uC790",
1884
+ "\uADFC\uCE5C",
1885
+ "\uB178\uBAA8",
1886
+ "\uB2C8\uAE30\uBBF8",
1887
+ "\uB4A4\uC9C8\uB798",
1888
+ "\uB538\uB538\uC774",
1889
+ "\uB54C\uC539",
1890
+ "\uB610\uB77C\uC774",
1891
+ "\uB664\uB188",
1892
+ "\uB85C\uB9AC\uD0C0",
1893
+ "\uB9DD\uAC00",
1894
+ "\uBAB0\uCE74",
1895
+ "\uBBF8\uCE5C",
1896
+ "\uBBF8\uCE5C\uC0C8\uB07C",
1897
+ "\uBC14\uBC14\uB9AC\uB9E8",
1898
+ "\uBCC0\uD0DC",
1899
+ "\uBCD1\uC2E0",
1900
+ "\uBCF4\uC9C0",
1901
+ "\uBD88\uC54C",
1902
+ "\uBE60\uAD6C\uB9AC",
1903
+ "\uC0AC\uAE4C\uC2DC",
1904
+ "\uC139\uC2A4",
1905
+ "\uC2A4\uC640\uD551",
1906
+ "\uC30D\uB188",
1907
+ "\uC528\uBC1C",
1908
+ "\uC528\uBC1C\uB188",
1909
+ "\uC528\uD314",
1910
+ "\uC539",
1911
+ "\uC539\uBB3C",
1912
+ "\uC539\uBE68",
1913
+ "\uC539\uC0C8\uB07C",
1914
+ "\uC539\uC54C",
1915
+ "\uC539\uCC3D",
1916
+ "\uC539\uD314",
1917
+ "\uC554\uCE90",
1918
+ "\uC560\uC790",
1919
+ "\uC57C\uB3D9",
1920
+ "\uC57C\uC0AC",
1921
+ "\uC57C\uC560\uB2C8",
1922
+ "\uC5C4\uCC3D",
1923
+ "\uC5D0\uB85C",
1924
+ "\uC5FC\uBCD1",
1925
+ "\uC618\uBCD1",
1926
+ "\uC720\uBAA8",
1927
+ "\uC721\uAC11",
1928
+ "\uC740\uAF34",
1929
+ "\uC790\uC704",
1930
+ "\uC790\uC9C0",
1931
+ "\uC7A1\uB144",
1932
+ "\uC885\uAC04\uB098",
1933
+ "\uC886",
1934
+ "\uC886\uB9CC",
1935
+ "\uC8FD\uC77C\uB144",
1936
+ "\uC950\uC886",
1937
+ "\uC9C1\uCD2C",
1938
+ "\uC9F1\uAE68",
1939
+ "\uCABD\uBC14\uB9AC",
1940
+ "\uCC3D\uB140",
1941
+ "\uD3EC\uB974\uB178",
1942
+ "\uD558\uB4DC\uCF54\uC5B4",
1943
+ "\uD638\uB85C",
1944
+ "\uD654\uB0E5\uB144",
1945
+ "\uD6C4\uB808\uC544\uB4E4",
1946
+ "\uD6C4\uC7A5",
1947
+ "\uD76C\uCB48\uADF8\uB9AC"
1948
+ ]
1949
+ };
1950
+
1951
+ // ../../shared/dictionaries/Norwegian.json
1952
+ var Norwegian_default = {
1953
+ words: [
1954
+ "drittsekk",
1955
+ "faen i helvete",
1956
+ "fitte",
1957
+ "j\xE6vla",
1958
+ "kuk",
1959
+ "kukene",
1960
+ "kuker",
1961
+ "nigger",
1962
+ "pikk",
1963
+ "sotr\xF8r",
1964
+ "st\xE5pikk",
1965
+ "st\xE5pikkene",
1966
+ "st\xE5pikker"
1967
+ ]
1968
+ };
1969
+
1970
+ // ../../shared/dictionaries/persian.json
1971
+ var persian_default = {
1972
+ words: [
1973
+ "\u0622\u0628 \u06A9\u06CC\u0631",
1974
+ "\u0627\u0631\u06AF\u0627\u0633\u0645",
1975
+ "\u0628\u0631\u0647\u0646\u0647",
1976
+ "\u067E\u0648\u0631\u0646",
1977
+ "\u067E\u0648\u0631\u0646\u0648",
1978
+ "\u062A\u062C\u0627\u0648\u0632",
1979
+ "\u062A\u062E\u0645\u06CC",
1980
+ "\u062C\u0642",
1981
+ "\u062C\u0642\u06CC",
1982
+ "\u062C\u0644\u0642",
1983
+ "\u062C\u0646\u062F\u0647",
1984
+ "\u0686\u0648\u0686\u0648\u0644",
1985
+ "\u062D\u0634\u0631",
1986
+ "\u062D\u0634\u0631\u06CC",
1987
+ "\u062F\u0627\u0641",
1988
+ "\u062F\u0648\u062F\u0648\u0644",
1989
+ "\u0633\u0627\u06A9 \u0632\u062F\u0646",
1990
+ "\u0633\u06A9\u0633",
1991
+ "\u0633\u06A9\u0633 \u06A9\u0631\u062F\u0646",
1992
+ "\u0633\u06A9\u0633\u06CC",
1993
+ "\u0633\u0648\u067E\u0631",
1994
+ "\u0634\u0642 \u06A9\u0631\u062F\u0646",
1995
+ "\u0634\u0647\u0648\u062A",
1996
+ "\u0634\u0647\u0648\u062A\u06CC",
1997
+ "\u0634\u0648\u0646\u0628\u0648\u0644",
1998
+ "\u0641\u06CC\u0644\u0645 \u0633\u0648\u067E\u0631",
1999
+ "\u06A9\u0633",
2000
+ "\u06A9\u0633 \u062F\u0627\u062F\u0646",
2001
+ "\u06A9\u0633 \u06A9\u0631\u062F\u0646",
2002
+ "\u06A9\u0633\u06A9\u0634",
2003
+ "\u06A9\u0648\u0633",
2004
+ "\u06A9\u0648\u0646",
2005
+ "\u06A9\u0648\u0646 \u062F\u0627\u062F\u0646",
2006
+ "\u06A9\u0648\u0646 \u06A9\u0631\u062F\u0646",
2007
+ "\u06A9\u0648\u0646\u06A9\u0634",
2008
+ "\u06A9\u0648\u0646\u06CC",
2009
+ "\u06A9\u06CC\u0631",
2010
+ "\u06A9\u06CC\u0631\u06CC",
2011
+ "\u0644\u0627\u067E\u0627",
2012
+ "\u0644\u0627\u067E\u0627\u06CC\u06CC",
2013
+ "\u0644\u0627\u0634\u06CC",
2014
+ "\u0644\u062E\u062A",
2015
+ "\u0644\u0634",
2016
+ "\u0645\u0646\u06CC",
2017
+ "\u0647\u0631\u0632\u0647"
2018
+ ]
2019
+ };
2020
+
2021
+ // ../../shared/dictionaries/polish.json
2022
+ var polish_default = {
2023
+ words: [
2024
+ "burdel",
2025
+ "burdelmama",
2026
+ "chuj",
2027
+ "chujnia",
2028
+ "ciota",
2029
+ "cipa",
2030
+ "cyc",
2031
+ "debil",
2032
+ "dmucha\u0107",
2033
+ "do kurwy n\u0119dzy",
2034
+ "dupa",
2035
+ "dupek",
2036
+ "duperele",
2037
+ "dziwka",
2038
+ "fiut",
2039
+ "g\xF3wno",
2040
+ "g\xF3wno prawda",
2041
+ "huj",
2042
+ "jajco",
2043
+ "jajeczko",
2044
+ "jajko",
2045
+ "jajo",
2046
+ "ja pierdol\u0119",
2047
+ "jeba\u0107",
2048
+ "jebany",
2049
+ "kurwa",
2050
+ "kurwy",
2051
+ "kutafon",
2052
+ "kutas",
2053
+ "liza\u0107 pa\u0142\u0119",
2054
+ "obci\u0105ga\u0107 chuja",
2055
+ "obci\u0105ga\u0107 fiuta",
2056
+ "obci\u0105ga\u0107 loda",
2057
+ "pieprzy\u0107",
2058
+ "pierdolec",
2059
+ "pierdoli\u0107",
2060
+ "pierdolni\u0119ty",
2061
+ "pierdo\u0142a",
2062
+ "pierdzie\u0107",
2063
+ "pizda",
2064
+ "pojeb",
2065
+ "popierdolony",
2066
+ "robic loda",
2067
+ "robi\u0107 loda",
2068
+ "rucha\u0107",
2069
+ "rzyga\u0107",
2070
+ "skurwysyn",
2071
+ "sraczka",
2072
+ "sra\u0107",
2073
+ "suka",
2074
+ "syf",
2075
+ "wkurwia\u0107",
2076
+ "zajebisty"
2077
+ ]
2078
+ };
2079
+
2080
+ // ../../shared/dictionaries/portuguese.json
2081
+ var portuguese_default = {
2082
+ words: [
2083
+ "aborto",
2084
+ "amador",
2085
+ "\xE2nus",
2086
+ "aranha",
2087
+ "ariano",
2088
+ "balalao",
2089
+ "bastardo",
2090
+ "bicha",
2091
+ "biscate",
2092
+ "bissexual",
2093
+ "boceta",
2094
+ "boob",
2095
+ "bosta",
2096
+ "braulio de borracha",
2097
+ "bumbum",
2098
+ "burro",
2099
+ "cabrao",
2100
+ "cacete",
2101
+ "cagar",
2102
+ "camisinha",
2103
+ "caralho",
2104
+ "cerveja",
2105
+ "chochota",
2106
+ "chupar",
2107
+ "clitoris",
2108
+ "coca\xEDna",
2109
+ "colhoes",
2110
+ "comer",
2111
+ "cona",
2112
+ "consolo",
2113
+ "corno",
2114
+ "cu",
2115
+ "dar o rabo",
2116
+ "dum raio",
2117
+ "esporra",
2118
+ "fecal",
2119
+ "filho da puta",
2120
+ "foda",
2121
+ "foda-se",
2122
+ "foder",
2123
+ "frango assado",
2124
+ "gozar",
2125
+ "grelho",
2126
+ "hero\xEDna",
2127
+ "heterosexual",
2128
+ "homem gay",
2129
+ "homoer\xF3tico",
2130
+ "homosexual",
2131
+ "inferno",
2132
+ "l\xE9sbica",
2133
+ "lolita",
2134
+ "mama",
2135
+ "merda",
2136
+ "paneleiro",
2137
+ "passar um cheque",
2138
+ "pau",
2139
+ "peidar",
2140
+ "p\xEAnis",
2141
+ "pinto",
2142
+ "porra",
2143
+ "puta",
2144
+ "puta que pariu",
2145
+ "puta que te pariu",
2146
+ "queca",
2147
+ "sacanagem",
2148
+ "saco",
2149
+ "torneira",
2150
+ "transar",
2151
+ "vai-te foder",
2152
+ "vai tomar no cu",
2153
+ "veado",
2154
+ "vibrador",
2155
+ "xana",
2156
+ "xochota"
2157
+ ]
2158
+ };
2159
+
2160
+ // ../../shared/dictionaries/russian.json
2161
+ var russian_default = {
2162
+ words: [
2163
+ "bychara",
2164
+ "byk",
2165
+ "chernozhopyi",
2166
+ "dolboy'eb",
2167
+ "ebalnik",
2168
+ "ebalo",
2169
+ "ebalom sch'elkat",
2170
+ "gol",
2171
+ "mudack",
2172
+ "opizdenet",
2173
+ "osto'eblo",
2174
+ "ostokhuitel'no",
2175
+ "ot'ebis",
2176
+ "otmudohat",
2177
+ "otpizdit",
2178
+ "otsosi",
2179
+ "padlo",
2180
+ "pedik",
2181
+ "perdet",
2182
+ "petuh",
2183
+ "pidar gnoinyj",
2184
+ "pizda",
2185
+ "pizdato",
2186
+ "pizdatyi",
2187
+ "piz'det",
2188
+ "pizdetc",
2189
+ "pizdoi nakryt'sja",
2190
+ "pizd'uk",
2191
+ "piz`dyulina",
2192
+ "podi ku'evo",
2193
+ "poeben",
2194
+ "po'imat' na konchik",
2195
+ "po'iti posrat",
2196
+ "po khuy",
2197
+ "poluchit pizdy",
2198
+ "pososi moyu konfetku",
2199
+ "prissat",
2200
+ "proebat",
2201
+ "promudobl'adsksya pizdopro'ebina",
2202
+ "propezdoloch",
2203
+ "prosrat",
2204
+ "raspeezdeyi",
2205
+ "raspizdatyi",
2206
+ "raz'yebuy",
2207
+ "raz'yoba",
2208
+ "s'ebat'sya",
2209
+ "shalava",
2210
+ "styervo",
2211
+ "sukin syn",
2212
+ "svodit posrat",
2213
+ "svoloch",
2214
+ "trakhat'sya",
2215
+ "trimandoblydskiy pizdoproyob",
2216
+ "ubl'yudok",
2217
+ "uboy",
2218
+ "u'ebitsche",
2219
+ "vafl'a",
2220
+ "vafli lovit",
2221
+ "v pizdu",
2222
+ "vyperdysh",
2223
+ "vzdrochennyi",
2224
+ "yeb vas",
2225
+ "za'ebat",
2226
+ "zaebis",
2227
+ "zalupa",
2228
+ "zalupat",
2229
+ "zasranetc",
2230
+ "zassat",
2231
+ "zlo'ebuchy",
2232
+ "\u0431\u0430\u0440\u0434\u0430\u043A",
2233
+ "\u0431\u0437\u0434\u0451\u043D\u043E\u043A",
2234
+ "\u0431\u043B\u044F\u0434\u043A\u0438",
2235
+ "\u0431\u043B\u044F\u0434\u043E\u0432\u0430\u0442\u044C",
2236
+ "\u0431\u043B\u044F\u0434\u0441\u0442\u0432\u043E",
2237
+ "\u0431\u043B\u044F\u0434\u044C",
2238
+ "\u0431\u0443\u0433\u043E\u0440",
2239
+ "\u0432\u043E \u043F\u0438\u0437\u0434\u0443",
2240
+ "\u0432\u0441\u0442\u0430\u0442\u044C \u0440\u0430\u043A\u043E\u043C",
2241
+ "\u0432\u044B\u0451\u0431\u044B\u0432\u0430\u0442\u044C\u0441\u044F",
2242
+ "\u0433\u0430\u043D\u0434\u043E\u043D",
2243
+ "\u0433\u043E\u0432\u043D\u043E",
2244
+ "\u0433\u043E\u0432\u043D\u044E\u043A",
2245
+ "\u0433\u043E\u043B\u044B\u0439",
2246
+ "\u0434\u0430\u0442\u044C \u043F\u0438\u0437\u0434\u044B",
2247
+ "\u0434\u0435\u0440\u044C\u043C\u043E",
2248
+ "\u0434\u0440\u043E\u0447\u0438\u0442\u044C",
2249
+ "\u0434\u0440\u0443\u0433\u043E\u0439 \u0434\u0440\u0430\u0437\u043D\u0438\u0442\u0441\u044F",
2250
+ "\u0451\u0431\u0430\u0440\u044C",
2251
+ "\u0435\u0431\u0430\u0442\u044C",
2252
+ "\u0435\u0431\u0430\u0442\u044C-\u043A\u043E\u043F\u0430\u0442\u044C",
2253
+ "\u0435\u0431\u043B\u043E",
2254
+ "\u0435\u0431\u043D\u0443\u0442\u044C",
2255
+ "\u0451\u0431 \u0442\u0432\u043E\u044E \u043C\u0430\u0442\u044C",
2256
+ "\u0436\u043E\u043F\u0430",
2257
+ "\u0436\u043E\u043F\u043E\u043B\u0438\u0437",
2258
+ "\u0438\u0433\u0440\u0430\u0442\u044C \u043D\u0430 \u043A\u043E\u0436\u0430\u043D\u043E\u0439 \u0444\u043B\u0435\u0439\u0442\u0435",
2259
+ "\u0438\u0437\u043C\u0443\u0434\u043E\u0445\u0430\u0442\u044C",
2260
+ "\u043A\u0430\u0436\u0434\u044B\u0439 \u0434\u0440\u043E\u0447\u0438\u0442 \u043A\u0430\u043A \u043E\u043D \u0445\u043E\u0447\u0435\u0442",
2261
+ "\u043A\u0430\u043A\u0430\u044F \u0440\u0430\u0437\u043D\u0438\u0446\u0430",
2262
+ "\u043A\u0430\u043A \u0434\u0432\u0430 \u043F\u0430\u043B\u044C\u0446\u0430 \u043E\u0431\u043E\u0441\u0441\u0430\u0442\u044C",
2263
+ "\u043A\u0443\u0440\u0438\u0442\u0435 \u043C\u043E\u044E \u0442\u0440\u0443\u0431\u043A\u0443",
2264
+ "\u043B\u044B\u0441\u043E\u0433\u043E \u0432 \u043A\u0443\u043B\u0430\u043A\u0435 \u0433\u043E\u043D\u044F\u0442\u044C",
2265
+ "\u043C\u0430\u043B\u043E\u0444\u044F",
2266
+ "\u043C\u0430\u043D\u0434\u0430",
2267
+ "\u043C\u0430\u043D\u0434\u0430\u0432\u043E\u0448\u043A\u0430",
2268
+ "\u043C\u0435\u043D\u0442",
2269
+ "\u043C\u0443\u0434\u0430",
2270
+ "\u043C\u0443\u0434\u0438\u043B\u043E",
2271
+ "\u043C\u0443\u0434\u043E\u0437\u043C\u043E\u043D",
2272
+ "\u043D\u0430\u0435\u0431\u0430\u0442\u044C",
2273
+ "\u043D\u0430\u0435\u0431\u0435\u043D\u0438\u0442\u044C\u0441\u044F",
2274
+ "\u043D\u0430\u0435\u0431\u043D\u0443\u0442\u044C\u0441\u044F",
2275
+ "\u043D\u0430 \u0444\u0438\u0433",
2276
+ "\u043D\u0430 \u0445\u0443\u0439",
2277
+ "\u043D\u0430 \u0445\u0443\u044E \u0432\u0435\u0440\u0442\u0435\u0442\u044C",
2278
+ "\u043D\u0430 \u0445\u0443\u044F",
2279
+ "\u043D\u0430\u0445\u0443\u044F\u0447\u0438\u0442\u044C\u0441\u044F",
2280
+ "\u043D\u0435\u0432\u0435\u0431\u0435\u043D\u043D\u044B\u0439",
2281
+ "\u043D\u0435 \u0435\u0431\u0435\u0442",
2282
+ "\u043D\u0438 \u0437\u0430 \u0445\u0443\u0439 \u0441\u043E\u0431\u0430\u0447\u0443",
2283
+ "\u043D\u0438 \u0445\u0443\u044F",
2284
+ "\u043E\u0431\u043D\u0430\u0436\u0435\u043D\u043D\u044B\u0439",
2285
+ "\u043E\u0431\u043E\u0441\u0441\u0430\u0442\u044C\u0441\u044F \u043C\u043E\u0436\u043D\u043E",
2286
+ "\u043E\u0434\u0438\u043D \u0435\u0431\u0451\u0442\u0441\u044F",
2287
+ "\u043E\u043F\u0435\u0441\u0434\u043E\u043B",
2288
+ "\u043E\u0444\u0438\u0433\u0435\u0442\u044C",
2289
+ "\u043E\u0445\u0443\u0435\u0442\u044C",
2290
+ "\u043E\u0445\u0443\u0439\u0442\u0435\u043B\u044C\u043D\u043E",
2291
+ "\u043F\u043E\u043B\u043E\u0432\u043E\u0435 \u0441\u043D\u043E\u0448\u0435\u043D\u0438\u0435",
2292
+ "\u0441\u0435\u043A\u0441",
2293
+ "\u0441\u0438\u0441\u043A\u0438",
2294
+ "\u0441\u043F\u0438\u0437\u0434\u0438\u0442\u044C",
2295
+ "\u0441\u0440\u0430\u0442\u044C",
2296
+ "\u0441\u0441\u0430\u0442\u044C",
2297
+ "\u0442\u0440\u0430x\u0430\u0442\u044C",
2298
+ "\u0442\u044B \u043C\u043D\u0435 \u0432\u0430\u043D\u044C\u043A\u0443 \u043D\u0435 \u0432\u0430\u043B\u044F\u0439",
2299
+ "\u0444\u0438\u0433\u0430",
2300
+ "\u0445\u0430\u043F\u0430\u0442\u044C",
2301
+ "\u0445\u0435\u0440 \u0441 \u043D\u0435\u0439",
2302
+ "\u0445\u0435\u0440 \u0441 \u043D\u0438\u043C",
2303
+ "\u0445\u043E\u0445\u043E\u043B",
2304
+ "\u0445\u0440\u0435\u043D",
2305
+ "\u0445\u0443\u0451\u0432\u043E",
2306
+ "\u0445\u0443\u0451\u0432\u044B\u0439",
2307
+ "\u0445\u0443\u0435\u043C \u0433\u0440\u0443\u0448\u0438 \u043E\u043A\u043E\u043B\u0430\u0447\u0438\u0432\u0430\u0442\u044C",
2308
+ "\u0445\u0443\u0435\u043F\u043B\u0435\u0442",
2309
+ "\u0445\u0443\u0438\u043B\u043E",
2310
+ "\u0445\u0443\u0438\u043D\u0435\u0439 \u0441\u0442\u0440\u0430\u0434\u0430\u0442\u044C",
2311
+ "\u0445\u0443\u0438\u043D\u044F",
2312
+ "\u0445\u0443\u0439",
2313
+ "\u0445\u0443\u0439\u043D\u0443\u0442\u044C",
2314
+ "\u0445\u0443\u0439 \u043F\u0438\u043D\u0430\u0442\u044C"
2315
+ ]
2316
+ };
2317
+
2318
+ // ../../shared/dictionaries/french.json
2319
+ var french_default = {
2320
+ words: [
2321
+ "baiser",
2322
+ "bander",
2323
+ "bigornette",
2324
+ "bite",
2325
+ "bitte",
2326
+ "bloblos",
2327
+ "bordel",
2328
+ "bosser",
2329
+ "bourr\xE9",
2330
+ "bourr\xE9e",
2331
+ "brackmard",
2332
+ "branlage",
2333
+ "branler",
2334
+ "branlette",
2335
+ "branleur",
2336
+ "branleuse",
2337
+ "brouter le cresson",
2338
+ "caca",
2339
+ "cailler",
2340
+ "chatte",
2341
+ "chiasse",
2342
+ "chier",
2343
+ "chiottes",
2344
+ "clito",
2345
+ "clitoris",
2346
+ "con",
2347
+ "connard",
2348
+ "connasse",
2349
+ "conne",
2350
+ "couilles",
2351
+ "cramouille",
2352
+ "cul",
2353
+ "d\xE9conne",
2354
+ "d\xE9conner",
2355
+ "drague",
2356
+ "emmerdant",
2357
+ "emmerder",
2358
+ "emmerdeur",
2359
+ "emmerdeuse",
2360
+ "encul\xE9",
2361
+ "encul\xE9e",
2362
+ "enculeur",
2363
+ "enculeurs",
2364
+ "enfoir\xE9",
2365
+ "enfoir\xE9e",
2366
+ "\xE9tron",
2367
+ "fille de pute",
2368
+ "fils de pute",
2369
+ "folle",
2370
+ "foutre",
2371
+ "gerbe",
2372
+ "gerber",
2373
+ "gouine",
2374
+ "grande folle",
2375
+ "grogniasse",
2376
+ "gueule",
2377
+ "jouir",
2378
+ "la putain de ta m\xE8re",
2379
+ "MALPT",
2380
+ "m\xE9nage \xE0 trois",
2381
+ "merde",
2382
+ "merdeuse",
2383
+ "merdeux",
2384
+ "meuf",
2385
+ "n\xE8gre",
2386
+ "nique ta m\xE8re",
2387
+ "nique ta race",
2388
+ "palucher",
2389
+ "p\xE9dale",
2390
+ "p\xE9d\xE9",
2391
+ "p\xE9ter",
2392
+ "pipi",
2393
+ "pisser",
2394
+ "pouffiasse",
2395
+ "pousse-crotte",
2396
+ "putain",
2397
+ "pute",
2398
+ "ramoner",
2399
+ "sac \xE0 foutre",
2400
+ "sac \xE0 merde",
2401
+ "salaud",
2402
+ "salope",
2403
+ "suce",
2404
+ "tapette",
2405
+ "tanche",
2406
+ "teuch",
2407
+ "teuf",
2408
+ "tringler",
2409
+ "trique",
2410
+ "troncher",
2411
+ "trou du cul",
2412
+ "turlute",
2413
+ "veuve",
2414
+ "zigounette",
2415
+ "zizi"
2416
+ ]
2417
+ };
2418
+
2419
+ // ../../shared/dictionaries/italian.json
2420
+ var italian_default = {
2421
+ words: [
2422
+ "allupato",
2423
+ "ammucchiata",
2424
+ "anale",
2425
+ "arrapato",
2426
+ "arrusa",
2427
+ "arruso",
2428
+ "assatanato",
2429
+ "bagascia",
2430
+ "bagassa",
2431
+ "bagnarsi",
2432
+ "baldracca",
2433
+ "balle",
2434
+ "battere",
2435
+ "battona",
2436
+ "belino",
2437
+ "biga",
2438
+ "bocchinara",
2439
+ "bocchino",
2440
+ "bofilo",
2441
+ "boiata",
2442
+ "bordello",
2443
+ "brinca",
2444
+ "bucaiolo",
2445
+ "budi\xF9lo",
2446
+ "buona donna",
2447
+ "busone",
2448
+ "cacca",
2449
+ "caccati in mano e prenditi a schiaffi",
2450
+ "caciocappella",
2451
+ "cadavere",
2452
+ "cagare",
2453
+ "cagata",
2454
+ "cagna",
2455
+ "cammello",
2456
+ "cappella",
2457
+ "carciofo",
2458
+ "carit\xE0",
2459
+ "casci",
2460
+ "cazzata",
2461
+ "cazzimma",
2462
+ "cazzo",
2463
+ "checca",
2464
+ "chiappa",
2465
+ "chiavare",
2466
+ "chiavata",
2467
+ "ciospo",
2468
+ "ciucciami il cazzo",
2469
+ "coglione",
2470
+ "coglioni",
2471
+ "cornuto",
2472
+ "cozza",
2473
+ "culattina",
2474
+ "culattone",
2475
+ "culo",
2476
+ "di merda",
2477
+ "ditalino",
2478
+ "duro",
2479
+ "fare una\u0160",
2480
+ "fava",
2481
+ "femminuccia",
2482
+ "fica",
2483
+ "figa",
2484
+ "figlio di buona donna",
2485
+ "figlio di puttana",
2486
+ "figone",
2487
+ "finocchio",
2488
+ "fottere",
2489
+ "fottersi",
2490
+ "fracicone",
2491
+ "fregna",
2492
+ "frocio",
2493
+ "froscio",
2494
+ "fuori come un balcone",
2495
+ "goldone",
2496
+ "grilletto",
2497
+ "guanto",
2498
+ "guardone",
2499
+ "incazzarsi",
2500
+ "incoglionirsi",
2501
+ "ingoio",
2502
+ "l'arte bolognese",
2503
+ "leccaculo",
2504
+ "lecchino",
2505
+ "lofare",
2506
+ "loffa",
2507
+ "loffare",
2508
+ "lumaca",
2509
+ "manico",
2510
+ "mannaggia",
2511
+ "merda",
2512
+ "merdata",
2513
+ "merdoso",
2514
+ "mignotta",
2515
+ "minchia",
2516
+ "minchione",
2517
+ "mona",
2518
+ "monta",
2519
+ "montare",
2520
+ "mussa",
2521
+ "nave scuola",
2522
+ "nerchia",
2523
+ "nudo",
2524
+ "padulo",
2525
+ "palle",
2526
+ "palloso",
2527
+ "patacca",
2528
+ "patonza",
2529
+ "pecorina",
2530
+ "pesce",
2531
+ "picio",
2532
+ "pincare",
2533
+ "pipa",
2534
+ "pip\xEC",
2535
+ "pippone",
2536
+ "pirla",
2537
+ "pisciare",
2538
+ "piscio",
2539
+ "pisello",
2540
+ "pistola",
2541
+ "pistolotto",
2542
+ "pomiciare",
2543
+ "pompa",
2544
+ "pompino",
2545
+ "porca",
2546
+ "porca madonna",
2547
+ "porca miseria",
2548
+ "porca puttana",
2549
+ "porco due",
2550
+ "porco zio",
2551
+ "potta",
2552
+ "puppami",
2553
+ "puttana",
2554
+ "quaglia",
2555
+ "recchione",
2556
+ "regina",
2557
+ "rincoglionire",
2558
+ "rizzarsi",
2559
+ "rompiballe",
2560
+ "ruffiano",
2561
+ "sbattere",
2562
+ "sbattersi",
2563
+ "sborra",
2564
+ "sborrata",
2565
+ "sborrone",
2566
+ "sbrodolata",
2567
+ "scopare",
2568
+ "scopata",
2569
+ "scorreggiare",
2570
+ "sega",
2571
+ "slinguare",
2572
+ "slinguata",
2573
+ "smandrappata",
2574
+ "soccia",
2575
+ "socmel",
2576
+ "sorca",
2577
+ "spagnola",
2578
+ "spompinare",
2579
+ "sticchio",
2580
+ "stronza",
2581
+ "stronzata",
2582
+ "stronzo",
2583
+ "succhiami",
2584
+ "sveltina",
2585
+ "sverginare",
2586
+ "tarzanello",
2587
+ "terrone",
2588
+ "testa di cazzo",
2589
+ "tette",
2590
+ "tirare",
2591
+ "topa",
2592
+ "troia",
2593
+ "trombare",
2594
+ "uccello",
2595
+ "vacca",
2596
+ "vaffanculo",
2597
+ "vangare",
2598
+ "venire",
2599
+ "zinne",
2600
+ "zio cantante",
2601
+ "zoccola"
2602
+ ]
2603
+ };
2604
+
2605
+ // ../../shared/dictionaries/japanese.json
2606
+ var japanese_default = {
2607
+ words: [
2608
+ "3p",
2609
+ "g \u30B9\u30DD\u30C3\u30C8",
2610
+ "s \uFF06 m",
2611
+ "sm",
2612
+ "sm\u5973\u738B",
2613
+ "xx",
2614
+ "\u30A2\u30B8\u30A2\u306E\u304B\u308F\u3044\u3044\u5973\u306E\u5B50",
2615
+ "\u30A2\u30B9\u30DB\u30FC\u30EB",
2616
+ "\u30A2\u30CA\u30EA\u30F3\u30B0\u30B9",
2617
+ "\u30A2\u30CA\u30EB",
2618
+ "\u3044\u305F\u305A\u3089",
2619
+ "\u30A4\u30E9\u30DE\u30C1\u30AA",
2620
+ "\u30A6\u30A7\u30D6\u30AB\u30E1\u30E9",
2621
+ "\u30A8\u30AF\u30B9\u30BF\u30B7\u30FC",
2622
+ "\u30A8\u30B9\u30B3\u30FC\u30C8",
2623
+ "\u30A8\u30C3\u30C1",
2624
+ "\u30A8\u30ED\u30C6\u30A3\u30BA\u30E0",
2625
+ "\u30A8\u30ED\u30C6\u30A3\u30C3\u30AF",
2626
+ "\u30AA\u30FC\u30AC\u30BA\u30E0",
2627
+ "\u30AA\u30AB\u30DE",
2628
+ "\u304A\u3057\u3063\u3053",
2629
+ "\u304A\u3057\u308A",
2630
+ "\u30AA\u30B7\u30EA",
2631
+ "\u304A\u3057\u308A\u306E\u3042\u306A",
2632
+ "\u304A\u3063\u3071\u3044",
2633
+ "\u30AA\u30C3\u30D1\u30A4",
2634
+ "\u30AA\u30CA\u30CB\u30FC",
2635
+ "\u30AA\u30DE\u30F3\u30B3",
2636
+ "\u304A\u3082\u3089\u3057",
2637
+ "\u304A\u5C3B",
2638
+ "\u30AB\u30FC\u30DE\u30B9\u30FC\u30C8\u30E9",
2639
+ "\u30AB\u30F3\u30C8",
2640
+ "\u30AF\u30EA\u30C8\u30EA\u30B9",
2641
+ "\u30B0\u30EB\u30FC\u30D7\u30FB\u30BB\u30C3\u30AF\u30B9",
2642
+ "\u30B0\u30ED",
2643
+ "\u30AF\u30F3\u30CB\u30EA\u30F3\u30B0\u30B9",
2644
+ "\u30B2\u30A4\u30FB\u30BB\u30C3\u30AF\u30B9",
2645
+ "\u30B2\u30A4\u306E\u7537\u6027",
2646
+ "\u30B2\u30A4\u30DC\u30FC\u30A4",
2647
+ "\u30B4\u30FC\u30EB\u30C7\u30F3\u30B7\u30E3\u30EF\u30FC",
2648
+ "\u30B3\u30AB\u30A4\u30F3",
2649
+ "\u30B4\u30C3\u30AF\u30F3",
2650
+ "\u30B5\u30C7\u30A3\u30BA\u30E0",
2651
+ "\u3057\u3070\u308A",
2652
+ "\u30B9\u30A6\u30A3\u30F3\u30AC\u30FC",
2653
+ "\u30B9\u30AB\u30FC\u30C8\u306E\u4E2D",
2654
+ "\u30B9\u30AB\u30C8\u30ED",
2655
+ "\u30B9\u30C8\u30E9\u30C3\u30D7\u30AA\u30F3",
2656
+ "\u30B9\u30C8\u30EA\u30C3\u30D7\u5287\u5834",
2657
+ "\u30B9\u30E9\u30C3\u30C8",
2658
+ "\u30B9\u30EA\u30C3\u30C8",
2659
+ "\u30BB\u30AF\u30B7\u30FC\u306A",
2660
+ "\u30BB\u30AF\u30B7\u30FC\u306A 10 \u4EE3",
2661
+ "\u30BB\u30C3\u30AF\u30B9",
2662
+ "\u30BD\u30C9\u30DF\u30FC",
2663
+ "\u3061\u3093\u3053",
2664
+ "\u30C7\u30A3\u30FC\u30D7\u30FB\u30B9\u30ED\u30FC\u30C8",
2665
+ "\u30C7\u30A3\u30C3\u30AF",
2666
+ "\u30C7\u30A3\u30EB\u30C9",
2667
+ "\u30C7\u30FC\u30C8\u30EC\u30A4\u30D7",
2668
+ "\u30C7\u30D6",
2669
+ "\u30C6\u30EC\u30D5\u30A9\u30F3\u30BB\u30C3\u30AF\u30B9",
2670
+ "\u30C9\u30C3\u30B0\u30B9\u30BF\u30A4\u30EB",
2671
+ "\u30C8\u30C3\u30D7\u30EC\u30B9",
2672
+ "\u306A\u3081",
2673
+ "\u30CB\u30AC\u30FC",
2674
+ "\u30CC\u30FC\u30C9",
2675
+ "\u30CD\u30AA\u30FB\u30CA\u30C1",
2676
+ "\u30CF\u30FC\u30C9\u30B3\u30A2",
2677
+ "\u30D1\u30A4\u30D1\u30F3",
2678
+ "\u30D0\u30A4\u30D6\u30EC\u30FC\u30BF\u30FC",
2679
+ "\u30D0\u30C3\u30AF\u30FB\u30B9\u30BF\u30A4\u30EB",
2680
+ "\u30D1\u30F3\u30C6\u30A3\u30FC",
2681
+ "\u30D3\u30C3\u30C1",
2682
+ "\u30D5\u30A1\u30C3\u30AF",
2683
+ "\u30D5\u30A1\u30F3\u30BF\u30B8\u30FC",
2684
+ "\u30D5\u30A3\u30B9\u30C8",
2685
+ "\u30D5\u30A7\u30C6\u30A3\u30C3\u30B7\u30E5",
2686
+ "\u30D5\u30A7\u30E9\u30C1\u30AA",
2687
+ "\u3075\u305F\u306A\u308A",
2688
+ "\u3076\u3063\u304B\u3051",
2689
+ "\u30D5\u30C3\u30AF",
2690
+ "\u30D7\u30EA\u30F3\u30B9 \u30A2\u30EB\u30D0\u30FC\u30C8 \u30D4\u30A2\u30B9",
2691
+ "\u30D7\u30EC\u30A4\u30DC\u30FC\u30A4",
2692
+ "\u30D9\u30A2\u30D0\u30C3\u30AF",
2693
+ "\u30DA\u30CB\u30B9",
2694
+ "\u30DA\u30CB\u30B9\u30D0\u30F3\u30C9",
2695
+ "\u30DC\u30FC\u30A4\u30BA\u30E9\u30D6",
2696
+ "\u30DC\u30FC\u30EB\u30AE\u30E3\u30B0",
2697
+ "\u30DC\u30FC\u30EB\u3092\u8E74\u308B",
2698
+ "\u307D\u3063\u3061\u3083\u308A",
2699
+ "\u30DB\u30E2",
2700
+ "\u30DD\u30EB\u30CE",
2701
+ "\u30DD\u30EB\u30CE\u30B0\u30E9\u30D5\u30A3\u30FC",
2702
+ "\u30DC\u30F3\u30C6\u30FC\u30B8",
2703
+ "\u30DE\u30B6\u30FC\u30FB\u30D5\u30A1\u30C3\u30AB\u30FC",
2704
+ "\u30DE\u30B9\u30BF\u30FC\u30D9\u30FC\u30B7\u30E7\u30F3",
2705
+ "\u307E\u3093\u3053",
2706
+ "\u3084\u304A\u3044",
2707
+ "\u3084\u308A\u307E\u3093",
2708
+ "\u30E6\u30C0\u30E4\u4EBA",
2709
+ "\u30E9\u30C6\u30A3\u30FC\u30CA",
2710
+ "\u30E9\u30D0\u30FC",
2711
+ "\u30E9\u30F3\u30B8\u30A7\u30EA\u30FC",
2712
+ "\u30EC\u30A4\u30D7",
2713
+ "\u30EC\u30BA\u30D3\u30A2\u30F3",
2714
+ "\u30ED\u30FC\u30BF\u30FC",
2715
+ "\u30ED\u30EA\u30FC\u30BF",
2716
+ "\u6DEB\u4E71",
2717
+ "\u9670\u6BDB",
2718
+ "\u9769\u6291\u5236",
2719
+ "\u9A0E\u4E0A\u4F4D",
2720
+ "\u5DE8\u6839",
2721
+ "\u5DE8\u4E73",
2722
+ "\u5F37\u59E6\u72AF",
2723
+ "\u7389\u306A\u3081",
2724
+ "\u7389\u8210\u3081",
2725
+ "\u7DCA\u7E1B",
2726
+ "\u8FD1\u89AA\u76F8\u59E6",
2727
+ "\u5ACC\u3044",
2728
+ "\u5F8C\u80CC\u4F4D",
2729
+ "\u5408\u610F\u306E\u6027\u4EA4",
2730
+ "\u62F7\u554F",
2731
+ "\u6BBA\u3057\u65B9",
2732
+ "\u6BBA\u4EBA\u4E8B\u4EF6",
2733
+ "\u6BBA\u4EBA\u65B9\u6CD5",
2734
+ "\u652F\u914D",
2735
+ "\u5150\u7AE5\u6027\u8650\u5F85",
2736
+ "\u81EA\u5DF1\u611B\u6027",
2737
+ "\u5C04\u7CBE",
2738
+ "\u624B\u30B3\u30AD",
2739
+ "\u7363\u59E6",
2740
+ "\u5973\u306E\u5B50",
2741
+ "\u5973\u738B\u69D8",
2742
+ "\u5973\u5B50\u9AD8\u751F",
2743
+ "\u5973\u88C5",
2744
+ "\u65B0\u3057\u3044\u30DD\u30EB\u30CE",
2745
+ "\u4EBA\u59BB",
2746
+ "\u4EBA\u7A2E",
2747
+ "\u6027\u4EA4",
2748
+ "\u6B63\u5E38\u4F4D",
2749
+ "\u751F\u6B96\u5668",
2750
+ "\u7CBE\u6DB2",
2751
+ "\u633F\u5165",
2752
+ "\u8DB3\u30D5\u30A7\u30C1",
2753
+ "\u8DB3\u3092\u5E83\u3052\u308B",
2754
+ "\u5927\u9670\u5507",
2755
+ "\u8131\u8863",
2756
+ "\u8336\u8272\u306E\u30B7\u30E3\u30EF\u30FC",
2757
+ "\u4E2D\u51FA\u3057",
2758
+ "\u6F6E\u5439\u304D\u5973",
2759
+ "\u6F6E\u5439\u304D\u7537\u6027",
2760
+ "\u76F4\u8178",
2761
+ "\u5243\u6BDB",
2762
+ "\u8C9E\u64CD\u5E2F",
2763
+ "\u5974\u96B7",
2764
+ "\u4E8C\u7A74",
2765
+ "\u4E73\u9996",
2766
+ "\u5C3F\u9053\u30D7\u30EC\u30A4",
2767
+ "\u8997\u304D",
2768
+ "\u58F2\u6625\u5A66",
2769
+ "\u7E1B\u308A",
2770
+ "\u5674\u51FA",
2771
+ "\u7CDE",
2772
+ "\u7CDE\u5C3F\u611B\u597D\u75C7",
2773
+ "\u7CDE\u4FBF",
2774
+ "\u5E73\u624B\u6253\u3061",
2775
+ "\u5909\u614B",
2776
+ "\u52C3\u8D77\u3059\u308B",
2777
+ "\u5922\u7CBE",
2778
+ "\u6BDB\u6DF1\u3044",
2779
+ "\u8A98\u60D1",
2780
+ "\u5E7C\u5150",
2781
+ "\u5E7C\u5150\u6027\u611B\u8005",
2782
+ "\u88F8",
2783
+ "\u88F8\u306E\u5973\u6027",
2784
+ "\u4E71\u4EA4",
2785
+ "\u4E21\u6027",
2786
+ "\u4E21\u6027\u5177\u6709",
2787
+ "\u4E21\u5200",
2788
+ "\u8F2A\u59E6",
2789
+ "\u534D",
2790
+ "\u5BA6\u5B98",
2791
+ "\u809B\u9580",
2792
+ "\u81A3"
2793
+ ]
2794
+ };
2795
+
2796
+ // ../../shared/dictionaries/turkish.json
2797
+ var turkish_default = {
2798
+ words: [
2799
+ "18+",
2800
+ "30+1",
2801
+ "31",
2802
+ ":poop:",
2803
+ "a.g.",
2804
+ "a.mk",
2805
+ "a.q",
2806
+ "a.q.",
2807
+ "a.\u0131g",
2808
+ "abaza",
2809
+ "abazan",
2810
+ "adi",
2811
+ "ag",
2812
+ "ag.",
2813
+ "ahmak",
2814
+ "ak",
2815
+ "akp",
2816
+ "al a\u011Fz\u0131na",
2817
+ "allah",
2818
+ "allahs\u0131z",
2819
+ "am",
2820
+ "am biti",
2821
+ "am.k",
2822
+ "amar\u0131m",
2823
+ "ambiti",
2824
+ "amcik",
2825
+ "amck",
2826
+ "amckl",
2827
+ "amcklama",
2828
+ "amcklaryla",
2829
+ "amckta",
2830
+ "amcktan",
2831
+ "amcuk",
2832
+ "amc\u0131k",
2833
+ "amc\u0131k ho\u015Faf\u0131",
2834
+ "amc\u0131ka\u011F\u0131z",
2835
+ "amc\u0131klama",
2836
+ "amc\u0131kland\u0131",
2837
+ "amc\u0131klar\u0131",
2838
+ "amc\u0131\u011F\u0131 ",
2839
+ "amc\u0131\u011F\u0131n",
2840
+ "amc\u0131\u011F\u0131n\u0131",
2841
+ "amc\u0131\u011F\u0131n\u0131z\u0131",
2842
+ "amed",
2843
+ "amg",
2844
+ "amin oglu",
2845
+ "amina",
2846
+ "amina g",
2847
+ "amina k",
2848
+ "amina koyarim",
2849
+ "amina koyayim",
2850
+ "amina koyay\u0131m",
2851
+ "aminako",
2852
+ "aminakoyarim",
2853
+ "aminakoyim",
2854
+ "aminda",
2855
+ "amindan",
2856
+ "amindayken",
2857
+ "amini",
2858
+ "aminiyarraaniskiim",
2859
+ "aminoglu",
2860
+ "amiyum",
2861
+ "amk",
2862
+ "amk \xE7ocu\u011Fu",
2863
+ "amk.",
2864
+ "amkafa",
2865
+ "amlarnzn",
2866
+ "aml\u0131",
2867
+ "amm",
2868
+ "ammak",
2869
+ "ammna",
2870
+ "amm\u0131na",
2871
+ "amn",
2872
+ "amna",
2873
+ "amnda",
2874
+ "amndaki",
2875
+ "amngtn",
2876
+ "amnn",
2877
+ "amona",
2878
+ "amq",
2879
+ "amsiz",
2880
+ "amsz",
2881
+ "ams\u0131z",
2882
+ "amteri",
2883
+ "amugaa",
2884
+ "amuna",
2885
+ "amu\u011Fa",
2886
+ "am\u0131g",
2887
+ "am\u0131k",
2888
+ "am\u0131n",
2889
+ "am\u0131n feryad\u0131",
2890
+ "am\u0131n oglu",
2891
+ "am\u0131n o\u011Flu",
2892
+ "am\u0131na",
2893
+ "Am\u0131na",
2894
+ "am\u0131na g",
2895
+ "am\u0131na k",
2896
+ "am\u0131na koy",
2897
+ "am\u0131na koyar\u0131m",
2898
+ "am\u0131na koyay\u0131m",
2899
+ "am\u0131na koyim",
2900
+ "am\u0131na koyyim",
2901
+ "am\u0131na s",
2902
+ "am\u0131na sikem",
2903
+ "am\u0131na sokam",
2904
+ "am\u0131nad\xFCrz\xFC",
2905
+ "am\u0131nako",
2906
+ "am\u0131nakoyim",
2907
+ "am\u0131no\u011Flu",
2908
+ "am\u0131n\u0131",
2909
+ "am\u0131n\u0131 s",
2910
+ "am\u0131s\u0131na",
2911
+ "am\u0131s\u0131n\u0131",
2912
+ "ana",
2913
+ "anaaann",
2914
+ "anal",
2915
+ "analarn",
2916
+ "anam",
2917
+ "anamla",
2918
+ "anan",
2919
+ "anana",
2920
+ "anandan",
2921
+ "anani",
2922
+ "anani sikerim",
2923
+ "anani sikeyim",
2924
+ "ananin",
2925
+ "ananisikerim",
2926
+ "ananisikeyim",
2927
+ "anann",
2928
+ "ananz",
2929
+ "anan\u0131",
2930
+ "anan\u0131 ",
2931
+ "anan\u0131 sikerim",
2932
+ "anan\u0131 sikeyim",
2933
+ "anan\u0131n",
2934
+ "anan\u0131n am",
2935
+ "anan\u0131n am\u0131",
2936
+ "anan\u0131n d\xF6l\xFC",
2937
+ "anan\u0131nki",
2938
+ "anan\u0131sikerim",
2939
+ "anan\u0131sikeyim",
2940
+ "anan\u0131z\u0131",
2941
+ "anan\u0131z\u0131n",
2942
+ "anan\u0131z\u0131n am",
2943
+ "anas",
2944
+ "anasi",
2945
+ "anasinin",
2946
+ "anas\u0131 orospu",
2947
+ "anas\u0131n\u0131",
2948
+ "anas\u0131n\u0131 avrad\u0131n\u0131",
2949
+ "anas\u0131n\u0131n am",
2950
+ "anay",
2951
+ "anayin",
2952
+ "angut",
2953
+ "anl\u0131k be\u011Feni",
2954
+ "anneni",
2955
+ "annenin",
2956
+ "annesiz",
2957
+ "anuna",
2958
+ "aptal",
2959
+ "aq",
2960
+ "aq.",
2961
+ "ass",
2962
+ "atkafas\u0131",
2963
+ "atm\u0131k",
2964
+ "attrrm",
2965
+ "att\u0131rd\u0131\u011F\u0131m",
2966
+ "auzlu",
2967
+ "avon",
2968
+ "avrad\u0131n\u0131",
2969
+ "avrat",
2970
+ "ayklarmalrmsikerim",
2971
+ "azd\u0131m",
2972
+ "azd\u0131r",
2973
+ "azd\u0131r\u0131c\u0131",
2974
+ "a\u011Fz\u0131na",
2975
+ "a\u011Fz\u0131na s\u0131\xE7ay\u0131m",
2976
+ "a\u015Fa\u011Fl\u0131k",
2977
+ "a\u015Fa\u011Fl\u0131ksn\u0131z",
2978
+ "a\u015Fa\u011F\u0131l\u0131ks\u0131n",
2979
+ "a\u015Fa\u011F\u0131l\u0131ks\u0131n\u0131z",
2980
+ "b.k",
2981
+ "babaannesi ka\u015Far",
2982
+ "babafingo",
2983
+ "babani",
2984
+ "baban\u0131",
2985
+ "baban\u0131n",
2986
+ "babas\u0131 pezevenk",
2987
+ "babas\u0131 tornac\u0131 anas\u0131 orospu",
2988
+ "baca\u011F\u0131na s\u0131\xE7ay\u0131m",
2989
+ "bacini",
2990
+ "bacn",
2991
+ "bacndan",
2992
+ "bacy",
2993
+ "bac\u0131n",
2994
+ "bac\u0131na",
2995
+ "bac\u0131n\u0131",
2996
+ "bac\u0131n\u0131n",
2997
+ "bastard",
2998
+ "basur",
2999
+ "bayanlar",
3000
+ "beyinsiz",
3001
+ "be\u011Fen",
3002
+ "be\u011Fenirmisiniz",
3003
+ "bira",
3004
+ "biseksuel",
3005
+ "bisekuel",
3006
+ "bisexual",
3007
+ "bisikiverem",
3008
+ "bitch",
3009
+ "biting",
3010
+ "bok",
3011
+ "boka",
3012
+ "bokbok",
3013
+ "bokhu",
3014
+ "bokkkumu",
3015
+ "boklar",
3016
+ "boktan",
3017
+ "boku",
3018
+ "bokubokuna",
3019
+ "bokum",
3020
+ "bok\xE7a",
3021
+ "bombok",
3022
+ "boner",
3023
+ "bosalmak",
3024
+ "boycot",
3025
+ "boycott",
3026
+ "boykot",
3027
+ "bo\u015Falmak",
3028
+ "bo\u015Fluk",
3029
+ "browni",
3030
+ "b\u0131z\u0131r",
3031
+ "ccc",
3032
+ "ccc ccc",
3033
+ "ccc incisiker ccc",
3034
+ "cccincisikerccc",
3035
+ "ccs colgate ccc",
3036
+ "cenabet",
3037
+ "cibiliyetsiz",
3038
+ "cibilliyetini",
3039
+ "cibilliyetsiz",
3040
+ "cif",
3041
+ "cikar",
3042
+ "cim",
3043
+ "cm",
3044
+ "coca cola",
3045
+ "cola",
3046
+ "dalaks\u0131z",
3047
+ "dallama",
3048
+ "daltassak",
3049
+ "dalyarak",
3050
+ "dalyarrak",
3051
+ "dangalak",
3052
+ "dasak",
3053
+ "dassagi",
3054
+ "dassak",
3055
+ "da\u015Fak",
3056
+ "da\u015F\u015Fak",
3057
+ "da\u015F\u015Faks\u0131z",
3058
+ "dede",
3059
+ "destek",
3060
+ "destekk",
3061
+ "deste\u011Finizi",
3062
+ "devsol",
3063
+ "dhkp",
3064
+ "diktim",
3065
+ "dildo",
3066
+ "din",
3067
+ "dinci",
3068
+ "dingil",
3069
+ "dingilini",
3070
+ "dinsiz",
3071
+ "dkerim",
3072
+ "domal",
3073
+ "domalan",
3074
+ "domald\u0131",
3075
+ "domald\u0131n",
3076
+ "domalmak",
3077
+ "domalm\u0131\u015F",
3078
+ "domals\u0131n",
3079
+ "domalt",
3080
+ "domaltarak",
3081
+ "domaltip",
3082
+ "domaltmak",
3083
+ "domalt\u0131p",
3084
+ "domalt\u0131r",
3085
+ "domalt\u0131r\u0131m",
3086
+ "domal\u0131k",
3087
+ "domal\u0131yor",
3088
+ "domuz yag\u0131",
3089
+ "domuz ya\u011F\u0131",
3090
+ "domuzyag\u0131",
3091
+ "durum",
3092
+ "d\xF6l\xFC",
3093
+ "d\xF6nek",
3094
+ "d\xFCd\xFCk",
3095
+ "d\xFCrz\xFC",
3096
+ "eben",
3097
+ "ebeni",
3098
+ "ebenin",
3099
+ "ebeninki",
3100
+ "ebleh",
3101
+ "ecdadini",
3102
+ "ecdad\u0131n\u0131",
3103
+ "edit",
3104
+ "embesil",
3105
+ "emek server",
3106
+ "emi",
3107
+ "ensest",
3108
+ "erotik",
3109
+ "escinsel",
3110
+ "ev han\u0131mlar\u0131",
3111
+ "ezik",
3112
+ "e\u015Fcinsel",
3113
+ "fahise",
3114
+ "fahi\u015Fe",
3115
+ "farmasi",
3116
+ "fasist",
3117
+ "fasizm",
3118
+ "fa\u015Fist",
3119
+ "fa\u015Fizm",
3120
+ "feri\u015Ftah",
3121
+ "ferre",
3122
+ "fuck",
3123
+ "fucker",
3124
+ "fuckin",
3125
+ "fucking",
3126
+ "f\u0131rsat",
3127
+ "g*t",
3128
+ "g*t\xFC",
3129
+ "g*t\xFCn",
3130
+ "g*t\xFCne",
3131
+ "g.t",
3132
+ "gasp",
3133
+ "gavad",
3134
+ "gavat",
3135
+ "gavurun d\xF6l\xFC",
3136
+ "gay",
3137
+ "geber",
3138
+ "geberik",
3139
+ "gebermek",
3140
+ "gebermi\u015F",
3141
+ "gebersin",
3142
+ "gebertir",
3143
+ "geri zekal\u0131",
3144
+ "gerizekali",
3145
+ "gerizekal\u0131",
3146
+ "gerizekal\u0131d\u0131r",
3147
+ "gerzek",
3148
+ "ger\u0131 zekal\u0131d\u0131r",
3149
+ "ger\u0131zekal\u0131",
3150
+ "giberim",
3151
+ "giberler",
3152
+ "gibis",
3153
+ "gibi\u015F",
3154
+ "gibmek",
3155
+ "gibtiler",
3156
+ "giren \xE7\u0131kan",
3157
+ "goddamn",
3158
+ "godo\u015F",
3159
+ "godumun",
3160
+ "got",
3161
+ "gotelek",
3162
+ "gotlalesi",
3163
+ "gotlu",
3164
+ "gotten",
3165
+ "gotundeki",
3166
+ "gotunden",
3167
+ "gotune",
3168
+ "gotunu",
3169
+ "gotuze",
3170
+ "gotveren",
3171
+ "goyiim",
3172
+ "goyum",
3173
+ "goyuyim",
3174
+ "goyyim",
3175
+ "gtelek",
3176
+ "gtn",
3177
+ "gtnde",
3178
+ "gtnden",
3179
+ "gtne",
3180
+ "gtten",
3181
+ "gtveren",
3182
+ "guat",
3183
+ "g\xF6t",
3184
+ "g\xF6t deli\u011Fi",
3185
+ "g\xF6t herif",
3186
+ "g\xF6t o\u011Flan\u0131",
3187
+ "g\xF6t veren",
3188
+ "g\xF6t verir",
3189
+ "g\xF6te",
3190
+ "g\xF6telek",
3191
+ "g\xF6tlalesi",
3192
+ "g\xF6tlek",
3193
+ "g\xF6to\u011Flan\u0131",
3194
+ "g\xF6to\u015F",
3195
+ "g\xF6ts\xFCn",
3196
+ "g\xF6ts\xFCn\xFCz",
3197
+ "g\xF6tten",
3198
+ "g\xF6tveren",
3199
+ "g\xF6tvern",
3200
+ "g\xF6t\xFC",
3201
+ "g\xF6t\xFCn",
3202
+ "g\xF6t\xFCne",
3203
+ "g\xF6t\xFCne koyim",
3204
+ "g\xF6t\xFCnekoyim",
3205
+ "g\xF6t\xFCn\xFC",
3206
+ "g\xF6t\xFCn\xFCze",
3207
+ "g\xF6t\xFCyle",
3208
+ "g\xF6\u011F\xFCs",
3209
+ "hack",
3210
+ "han\u0131mlar",
3211
+ "has siktir",
3212
+ "hasiktir",
3213
+ "hasiktr",
3214
+ "hassikome",
3215
+ "hassiktir",
3216
+ "hassittir",
3217
+ "hastir",
3218
+ "haydar",
3219
+ "haysiyetsiz",
3220
+ "hayvan",
3221
+ "hayvan herif",
3222
+ "ha\u015Fgerya",
3223
+ "hile",
3224
+ "hizbullah",
3225
+ "homo",
3226
+ "ho\u015Faf\u0131",
3227
+ "hristiyan",
3228
+ "hsktr",
3229
+ "huur",
3230
+ "hz.muhammed",
3231
+ "hz.\xF6mer",
3232
+ "h\xF6d\xFCk",
3233
+ "h\u0131rs\u0131z",
3234
+ "h\u0131yar",
3235
+ "h\u0131yara\u011Fas\u0131",
3236
+ "i.ne",
3237
+ "ibina",
3238
+ "ibine",
3239
+ "ibinenin",
3240
+ "ibne",
3241
+ "ibnedir",
3242
+ "ibneler",
3243
+ "ibneleri",
3244
+ "ibnelik",
3245
+ "ibneli\u011Fi",
3246
+ "ibnelri",
3247
+ "ibneni",
3248
+ "ibnenin",
3249
+ "ibnerator",
3250
+ "ibnesi",
3251
+ "idiot",
3252
+ "idiyot",
3253
+ "igrenc",
3254
+ "ilk yorum",
3255
+ "imansz",
3256
+ "inci siker",
3257
+ "incisike",
3258
+ "incisiker",
3259
+ "ipne",
3260
+ "ipneler",
3261
+ "irsail",
3262
+ "iserim",
3263
+ "israil",
3264
+ "israli",
3265
+ "israyil",
3266
+ "isra\u0131l",
3267
+ "it",
3268
+ "iti",
3269
+ "itler",
3270
+ "ito\u011Flu it",
3271
+ "izrail",
3272
+ "i\u011Fren\xE7",
3273
+ "i\u015F f\u0131rsat\u0131",
3274
+ "i\u015Ferim",
3275
+ "k.o.c",
3276
+ "k.o.\xE7",
3277
+ "kadek",
3278
+ "kafam girsin",
3279
+ "kafasiz",
3280
+ "kafas\u0131z",
3281
+ "kahpe",
3282
+ "kahpenin",
3283
+ "kahpenin feryad\u0131",
3284
+ "kaka",
3285
+ "kaltak",
3286
+ "kancik",
3287
+ "kanc\u0131k",
3288
+ "kan\u0131",
3289
+ "kan\u0131 bozuk",
3290
+ "kappe",
3291
+ "karhane",
3292
+ "kariyer f\u0131rsat\u0131",
3293
+ "kavat",
3294
+ "kavatn",
3295
+ "kaypak",
3296
+ "kayyum",
3297
+ "kazik",
3298
+ "kazma",
3299
+ "kaz\u0131k",
3300
+ "ka\xE7\u0131rma",
3301
+ "ka\u015Far",
3302
+ "kerane",
3303
+ "kerhane",
3304
+ "kerhanelerde",
3305
+ "keriz",
3306
+ "kerizler",
3307
+ "kevase",
3308
+ "keva\u015Fe",
3309
+ "kevvase",
3310
+ "koca g\xF6t",
3311
+ "kodumun",
3312
+ "kodumunun",
3313
+ "koduumun",
3314
+ "kodu\u011Fmun",
3315
+ "kodu\u011Fmunun",
3316
+ "komonist",
3317
+ "komunist",
3318
+ "komunizm",
3319
+ "kom\xFCnist",
3320
+ "kom\xFCnizm",
3321
+ "kongragel",
3322
+ "kopegi",
3323
+ "kope\u011Fi",
3324
+ "koyarm",
3325
+ "koyay\u0131m",
3326
+ "koyiim",
3327
+ "koyiiym",
3328
+ "koyim",
3329
+ "koyum",
3330
+ "koyyim",
3331
+ "krar",
3332
+ "kro",
3333
+ "kro musunuz",
3334
+ "kromusunuz",
3335
+ "kuku",
3336
+ "kukudaym",
3337
+ "kurdistan",
3338
+ "k\xF6peginin",
3339
+ "k\xF6pekle\u015Fme",
3340
+ "k\xFCrdistan",
3341
+ "k\u0131ro",
3342
+ "k\u0131\xE7",
3343
+ "k\u0131\xE7\u0131n\u0131z",
3344
+ "k\u0131\xE7\u0131n\u0131za",
3345
+ "l.an",
3346
+ "laciye boyad\u0131m",
3347
+ "lan",
3348
+ "lanet",
3349
+ "lann",
3350
+ "lannn",
3351
+ "lavuk",
3352
+ "len",
3353
+ "leyn",
3354
+ "lezle",
3355
+ "lezler",
3356
+ "libo\u015F",
3357
+ "madafaka",
3358
+ "mal",
3359
+ "malafat",
3360
+ "malak",
3361
+ "mallar",
3362
+ "manda",
3363
+ "mankafa",
3364
+ "manyak",
3365
+ "mcik",
3366
+ "meme",
3367
+ "memelerini",
3368
+ "memi\u015F",
3369
+ "mezveleli",
3370
+ "minaamc\u0131k",
3371
+ "mincikliyim",
3372
+ "mk",
3373
+ "mna",
3374
+ "moloz",
3375
+ "monakkoluyum",
3376
+ "moron",
3377
+ "motherfucker",
3378
+ "mudik",
3379
+ "musevi",
3380
+ "musevi bozuk",
3381
+ "m\xFCsl\xFCman",
3382
+ "nah",
3383
+ "o \xE7",
3384
+ "o. \xE7ocu\u011Fu",
3385
+ "o.\xE7",
3386
+ "o.\xE7.",
3387
+ "oc",
3388
+ "ocuu",
3389
+ "ocuun",
3390
+ "odun",
3391
+ "okuz",
3392
+ "oriflame",
3393
+ "orosbu",
3394
+ "orosbucocuu",
3395
+ "orospu",
3396
+ "orospu cocugu",
3397
+ "orospu \xE7oc",
3398
+ "orospu \xE7ocuklar\u0131",
3399
+ "orospu \xE7ocu\u011Fu",
3400
+ "orospu \xE7ocu\u011Fudur",
3401
+ "orospucocugu",
3402
+ "orospudur",
3403
+ "orospular",
3404
+ "orospunun",
3405
+ "orospunun evlad\u0131",
3406
+ "orospuydu",
3407
+ "orospuyuz",
3408
+ "orospu\xE7ocu\u011Fu",
3409
+ "orostoban",
3410
+ "orostopol",
3411
+ "orrospu",
3412
+ "oruc",
3413
+ "oruspu",
3414
+ "oruspu \xE7ocu\u011Fu",
3415
+ "oruspu\xE7ocu\u011Fu",
3416
+ "oru\xE7",
3417
+ "osbir",
3418
+ "ossurduum",
3419
+ "ossurmak",
3420
+ "ossuruk",
3421
+ "osur",
3422
+ "osuram",
3423
+ "osurduu",
3424
+ "osuruk",
3425
+ "osururum",
3426
+ "otusbir",
3427
+ "otuzbir",
3428
+ "oyna",
3429
+ "O\xC7",
3430
+ "o\xE7",
3431
+ "o\xE7.",
3432
+ "o\u011Flan",
3433
+ "o\u011Flanc\u0131",
3434
+ "o\u011Flu it",
3435
+ "p kk",
3436
+ "patlak zar",
3437
+ "penis",
3438
+ "peygamber",
3439
+ "pezevek",
3440
+ "pezeven",
3441
+ "pezeveng",
3442
+ "pezevengi",
3443
+ "pezevengin evlad\u0131",
3444
+ "pezevenk",
3445
+ "pezevenkler",
3446
+ "pezo",
3447
+ "pic",
3448
+ "pici",
3449
+ "picler",
3450
+ "pipi",
3451
+ "pipi\u015F",
3452
+ "pis",
3453
+ "pisliktir",
3454
+ "pi\xE7",
3455
+ "pi\xE7 kurusu",
3456
+ "pi\xE7i",
3457
+ "pi\xE7in o\u011Flu",
3458
+ "pi\xE7inin",
3459
+ "pi\xE7ler",
3460
+ "pi\xE7sin",
3461
+ "pi\xE7siniz",
3462
+ "pkk",
3463
+ "pok",
3464
+ "pokunu",
3465
+ "pompalama",
3466
+ "pompalamak",
3467
+ "porn",
3468
+ "porno",
3469
+ "protesto",
3470
+ "pussy",
3471
+ "putpererst",
3472
+ "putperest",
3473
+ "pu\u015Ft",
3474
+ "pu\u015Fttur",
3475
+ "pvp",
3476
+ "rahminde",
3477
+ "rak",
3478
+ "rak\u0131",
3479
+ "revizyonist",
3480
+ "s.ikerim",
3481
+ "s.iktm",
3482
+ "s.ktir",
3483
+ "s.tir",
3484
+ "s1kerim",
3485
+ "s1kerm",
3486
+ "s1krm",
3487
+ "sahtekar",
3488
+ "sakso",
3489
+ "saksofon",
3490
+ "salaak",
3491
+ "salak",
3492
+ "sana ne",
3493
+ "sanane",
3494
+ "saxo",
3495
+ "sayfa",
3496
+ "sekis",
3497
+ "seks",
3498
+ "serefsiz",
3499
+ "serefsz",
3500
+ "serefszler",
3501
+ "sevgi koyar\u0131m",
3502
+ "sevi\u015F",
3503
+ "sevi\u015Felim",
3504
+ "sevi\u015Fmek",
3505
+ "sex",
3506
+ "sexs",
3507
+ "shit",
3508
+ "si.\xE7mak",
3509
+ "sicarsin",
3510
+ "sicmak",
3511
+ "sicti",
3512
+ "sie",
3513
+ "sigara",
3514
+ "sik",
3515
+ "sik k\u0131r\u0131\u011F\u0131",
3516
+ "sikdi",
3517
+ "sikdi\u011Fim",
3518
+ "sike",
3519
+ "sikecem",
3520
+ "sikem",
3521
+ "siken",
3522
+ "sikenin",
3523
+ "siker",
3524
+ "sikerim",
3525
+ "sikerler",
3526
+ "sikersin",
3527
+ "sikert",
3528
+ "sikertir",
3529
+ "sikertirler",
3530
+ "sikertmek",
3531
+ "sikesen",
3532
+ "sikesicenin",
3533
+ "sikey",
3534
+ "sikeydim",
3535
+ "sikeyim",
3536
+ "sikeym",
3537
+ "siki",
3538
+ "sikicem",
3539
+ "sikici",
3540
+ "sikien",
3541
+ "sikienler",
3542
+ "sikiiim",
3543
+ "sikiiimmm",
3544
+ "sikiim",
3545
+ "sikiir",
3546
+ "sikiirken",
3547
+ "sikik",
3548
+ "sikil",
3549
+ "sikildiini",
3550
+ "sikilesice",
3551
+ "sikilmi",
3552
+ "sikilmie",
3553
+ "sikilmis",
3554
+ "sikilmi\u015F",
3555
+ "sikilsin",
3556
+ "sikim",
3557
+ "sikimde",
3558
+ "sikimden",
3559
+ "sikime",
3560
+ "sikimi",
3561
+ "sikimiin",
3562
+ "sikimin",
3563
+ "sikimle",
3564
+ "sikimsonik",
3565
+ "sikimtrak",
3566
+ "sikin",
3567
+ "sikinde",
3568
+ "sikinden",
3569
+ "sikine",
3570
+ "sikini",
3571
+ "sikip",
3572
+ "sikis",
3573
+ "sikisek",
3574
+ "sikisen",
3575
+ "sikish",
3576
+ "sikismis",
3577
+ "sikitiin",
3578
+ "sikiyim",
3579
+ "sikiym",
3580
+ "sikiyorum",
3581
+ "siki\u015F",
3582
+ "siki\u015Fen",
3583
+ "siki\u015Fken",
3584
+ "siki\u015Fme",
3585
+ "siki\u015Fmek",
3586
+ "sikkim",
3587
+ "sikko",
3588
+ "sikleri",
3589
+ "sikleriii",
3590
+ "sikli",
3591
+ "sikm",
3592
+ "sikmek",
3593
+ "sikmem",
3594
+ "sikmeyi",
3595
+ "sikmiler",
3596
+ "sikmisligim",
3597
+ "siksem",
3598
+ "sikseydin",
3599
+ "sikseyidin",
3600
+ "siksin",
3601
+ "siksinbaya",
3602
+ "siksinler",
3603
+ "siksiz",
3604
+ "siksok",
3605
+ "siksz",
3606
+ "sikt",
3607
+ "sikti",
3608
+ "siktigimin",
3609
+ "siktigiminin",
3610
+ "siktii",
3611
+ "siktiim",
3612
+ "siktiimin",
3613
+ "siktiiminin",
3614
+ "siktiler",
3615
+ "siktim",
3616
+ "siktim ",
3617
+ "siktimin",
3618
+ "siktiminin",
3619
+ "siktin",
3620
+ "siktir",
3621
+ "siktir et",
3622
+ "siktir git",
3623
+ "siktir lan",
3624
+ "siktir ol git",
3625
+ "siktirgit",
3626
+ "siktirir",
3627
+ "siktiririm",
3628
+ "siktiriyor",
3629
+ "siktirolgit",
3630
+ "siktirsin",
3631
+ "sikti\u011Fim",
3632
+ "sikti\u011Fimin",
3633
+ "sikti\u011Fiminin",
3634
+ "siktr",
3635
+ "siqem",
3636
+ "sisme",
3637
+ "sittimin",
3638
+ "sittir",
3639
+ "skcem",
3640
+ "skecem",
3641
+ "skem",
3642
+ "sker",
3643
+ "skerim",
3644
+ "skerm",
3645
+ "skeyim",
3646
+ "skiim",
3647
+ "skik",
3648
+ "skim",
3649
+ "skime",
3650
+ "skiym",
3651
+ "skm",
3652
+ "skmek",
3653
+ "skrm",
3654
+ "sksin",
3655
+ "sksn",
3656
+ "sksz",
3657
+ "sktiimin",
3658
+ "sktim",
3659
+ "sktir",
3660
+ "sktirsin",
3661
+ "sktr",
3662
+ "sktroradan",
3663
+ "sktrr",
3664
+ "sktrsn",
3665
+ "skyim",
3666
+ "slaleni",
3667
+ "snane",
3668
+ "sokacak",
3669
+ "sokam",
3670
+ "sokarim",
3671
+ "sokarm",
3672
+ "sokarmkoduumun",
3673
+ "sokar\u0131m",
3674
+ "sokaym",
3675
+ "sokay\u0131m",
3676
+ "sokiim",
3677
+ "soktu\u011Fumunun",
3678
+ "sokuk",
3679
+ "sokum",
3680
+ "sokuyum",
3681
+ "soku\u015F",
3682
+ "soxum",
3683
+ "sperm",
3684
+ "sulaleni",
3685
+ "s\xE7kik",
3686
+ "s\xFClaleni",
3687
+ "s\xFClalenizi",
3688
+ "s\xFCrt\xFCk",
3689
+ "s\xFCt\xFC bozuk",
3690
+ "s\xFCzme",
3691
+ "s\u0131ecem",
3692
+ "s\u0131ker\u0131m",
3693
+ "s\u0131km",
3694
+ "s\u0131kt\u0131r",
3695
+ "s\u0131\xE7ar\u0131m",
3696
+ "s\u0131\xE7mak",
3697
+ "s\u0131\xE7t\u0131\u011F\u0131m",
3698
+ "taaklarn",
3699
+ "taaklarna",
3700
+ "takip",
3701
+ "takip et",
3702
+ "takma",
3703
+ "tarrakimin",
3704
+ "tasak",
3705
+ "tassak",
3706
+ "tayyip",
3707
+ "ta\u015Fak",
3708
+ "ta\u015F\u015Fak",
3709
+ "temas\u0131yla",
3710
+ "teror",
3711
+ "terorist",
3712
+ "ter\xF6r",
3713
+ "ter\xF6rist",
3714
+ "thumb?",
3715
+ "tipini s.k",
3716
+ "tipinizi s.keyim",
3717
+ "tiyniyat",
3718
+ "tokmaklama",
3719
+ "tokmaklamak",
3720
+ "top",
3721
+ "toplarm",
3722
+ "topsun",
3723
+ "toto\u015F",
3724
+ "transeksuel",
3725
+ "transeks\xFCel",
3726
+ "travesti",
3727
+ "ukler",
3728
+ "ulan",
3729
+ "ulen",
3730
+ "ulker",
3731
+ "vagina",
3732
+ "vajina",
3733
+ "vajinan\u0131",
3734
+ "va\u015Fina",
3735
+ "veled",
3736
+ "veled i zina",
3737
+ "veledizina",
3738
+ "verdiimin",
3739
+ "verem",
3740
+ "vodka",
3741
+ "votka",
3742
+ "weled",
3743
+ "weledizina",
3744
+ "whore",
3745
+ "wslik",
3746
+ "wslik server",
3747
+ "xikeyim",
3748
+ "yaaraaa",
3749
+ "yahudi",
3750
+ "yalaka",
3751
+ "yalama",
3752
+ "yalarun",
3753
+ "yalar\u0131m",
3754
+ "yaraaam",
3755
+ "yarak",
3756
+ "yaraks\u0131z",
3757
+ "yaraktr",
3758
+ "yaram",
3759
+ "yaraminbasi",
3760
+ "yaramn",
3761
+ "yararmorospunun",
3762
+ "yark",
3763
+ "yarra",
3764
+ "yarraaaa",
3765
+ "yarraak",
3766
+ "yarraam",
3767
+ "yarraam\u0131",
3768
+ "yarragi",
3769
+ "yarragimi",
3770
+ "yarragina",
3771
+ "yarragindan",
3772
+ "yarragm",
3773
+ "yarraimin",
3774
+ "yarrak",
3775
+ "yarram",
3776
+ "yarramin",
3777
+ "yarraminba\u015F\u0131",
3778
+ "yarramn",
3779
+ "yarram\u0131n",
3780
+ "yarran",
3781
+ "yarrana",
3782
+ "yarra\u011F",
3783
+ "yarra\u011F\u0131m",
3784
+ "yarra\u011F\u0131m\u0131",
3785
+ "yarrk",
3786
+ "yarro",
3787
+ "yarrrak",
3788
+ "yaudi",
3789
+ "yavak",
3790
+ "yavu\u015Fak",
3791
+ "yav\u015F",
3792
+ "yav\u015Fak",
3793
+ "yav\u015Fakt\u0131r",
3794
+ "yav\u015Famak",
3795
+ "ya\u011Fudi",
3796
+ "yilisik",
3797
+ "yogurtlayam",
3798
+ "yosma",
3799
+ "yo\u011Furtlayam",
3800
+ "yrak",
3801
+ "yrk",
3802
+ "yrrak",
3803
+ "y\u0131l\u0131\u015F\u0131k",
3804
+ "zibidi",
3805
+ "zigsin",
3806
+ "zikeyim",
3807
+ "zikiiim",
3808
+ "zikiim",
3809
+ "zikik",
3810
+ "zikim",
3811
+ "ziksiiin",
3812
+ "ziksiin",
3813
+ "zina",
3814
+ "zulliyetini",
3815
+ "zviyetini",
3816
+ "z\u0131kk\u0131m\u0131m",
3817
+ "\xE7al\u0131\u015Fmak istermisiniz?",
3818
+ "\xE7\xFCk",
3819
+ "\xF6k\xFCz",
3820
+ "\xF6l",
3821
+ "\xF6\u015Fex",
3822
+ "\xFCkler",
3823
+ "\xFClker",
3824
+ "\xFClk\xFCc\xFC",
3825
+ "\u0131bnel\u0131k",
3826
+ "\u015Ferefsiz",
3827
+ "\u015Ferefsizler",
3828
+ "\u015Ferefsizlerin",
3829
+ "\u015Ferefsizlik",
3830
+ "\u015Firret",
3831
+ "\u015Fi\u015Fme",
3832
+ "\u015Fi\u015Fme bebek",
3833
+ "\u015Fi\u015Fme kad\u0131n",
3834
+ "\u015Fi\u015Fme manken",
3835
+ "\u015F\u0131ll\u0131k",
3836
+ "\u015F\u0131rf\u0131nt\u0131"
3837
+ ]
3838
+ };
3839
+
3840
+ // ../../shared/dictionaries/spanish.json
3841
+ var spanish_default = {
3842
+ words: [
3843
+ "sesinato",
3844
+ "asno",
3845
+ "bastardo",
3846
+ "Bollera",
3847
+ "Cabron",
3848
+ "Cabr\xF3n",
3849
+ "Caca",
3850
+ "Chupada",
3851
+ "Chupapollas",
3852
+ "Chupet\xF3n",
3853
+ "concha",
3854
+ "Concha de tu madre",
3855
+ "Co\xF1o",
3856
+ "Coprofag\xEDa",
3857
+ "Culo",
3858
+ "Drogas",
3859
+ "Esperma",
3860
+ "Fiesta de salchichas",
3861
+ "Follador",
3862
+ "Follar",
3863
+ "Gilipichis",
3864
+ "Gilipollas",
3865
+ "Hacer una paja",
3866
+ "Haciendo el amor",
3867
+ "Hero\xEDna",
3868
+ "Hija de puta",
3869
+ "Hijaputa",
3870
+ "Hijo de puta",
3871
+ "Hijoputa",
3872
+ "Idiota",
3873
+ "Imb\xE9cil",
3874
+ "infierno",
3875
+ "Jilipollas",
3876
+ "Kapullo",
3877
+ "Lameculos",
3878
+ "Maciza",
3879
+ "Macizorra",
3880
+ "maldito",
3881
+ "Mamada",
3882
+ "Marica",
3883
+ "Maric\xF3n",
3884
+ "Mariconazo",
3885
+ "martillo",
3886
+ "Mierda",
3887
+ "Nazi",
3888
+ "Orina",
3889
+ "Pedo",
3890
+ "Pervertido",
3891
+ "Pez\xF3n",
3892
+ "Pinche",
3893
+ "Pis",
3894
+ "Prostituta",
3895
+ "Puta",
3896
+ "Racista",
3897
+ "Ramera",
3898
+ "S\xE1dico",
3899
+ "Semen",
3900
+ "Sexo",
3901
+ "Sexo oral",
3902
+ "Soplagaitas",
3903
+ "Soplapollas",
3904
+ "Tetas grandes",
3905
+ "T\xEDa buena",
3906
+ "Travesti",
3907
+ "Trio",
3908
+ "Verga",
3909
+ "vete a la mierda",
3910
+ "Vulva"
3911
+ ]
3912
+ };
3913
+
3914
+ // ../../shared/dictionaries/swedish.json
3915
+ var swedish_default = {
3916
+ words: [
3917
+ "arsle",
3918
+ "brutta",
3919
+ "discofitta",
3920
+ "dra \xE5t helvete",
3921
+ "fan",
3922
+ "fitta",
3923
+ "fittig",
3924
+ "f\xF6r helvete",
3925
+ "helvete",
3926
+ "h\xE5rd",
3927
+ "j\xE4vlar",
3928
+ "knulla",
3929
+ "kuk",
3930
+ "kuks\xE5s",
3931
+ "k\xF6tthuvud",
3932
+ "k\xF6ttnacke",
3933
+ "moona",
3934
+ "moonade",
3935
+ "moonar",
3936
+ "moonat",
3937
+ "mutta",
3938
+ "nigger",
3939
+ "neger",
3940
+ "olla",
3941
+ "pippa",
3942
+ "pitt",
3943
+ "prutt",
3944
+ "p\xF6k",
3945
+ "runka",
3946
+ "r\xF6v",
3947
+ "r\xF6vh\xE5l",
3948
+ "r\xF6vknulla",
3949
+ "satan",
3950
+ "skita",
3951
+ "skit ner dig",
3952
+ "sk\xE4ggbiff",
3953
+ "snedfitta",
3954
+ "snefitta",
3955
+ "stake",
3956
+ "subba",
3957
+ "s\xE5s",
3958
+ "s\xE4tta p\xE5",
3959
+ "tusan"
3960
+ ]
3961
+ };
3962
+
3963
+ // ../../shared/dictionaries/thai.json
3964
+ var thai_default = {
3965
+ words: [
3966
+ "\u0E01\u0E23\u0E30\u0E14\u0E2D",
3967
+ "\u0E01\u0E23\u0E30\u0E40\u0E14\u0E49\u0E32",
3968
+ "\u0E01\u0E23\u0E30\u0E2B\u0E23\u0E35\u0E48",
3969
+ "\u0E01\u0E30\u0E1B\u0E34",
3970
+ "\u0E01\u0E39",
3971
+ "\u0E02\u0E35\u0E49",
3972
+ "\u0E04\u0E27\u0E22",
3973
+ "\u0E08\u0E34\u0E4B\u0E21",
3974
+ "\u0E08\u0E39\u0E4B",
3975
+ "\u0E40\u0E08\u0E4A\u0E01",
3976
+ "\u0E40\u0E08\u0E35\u0E4A\u0E22\u0E27",
3977
+ "\u0E14\u0E2D\u0E01\u0E17\u0E2D\u0E07",
3978
+ "\u0E15\u0E2D\u0E41\u0E2B\u0E25",
3979
+ "\u0E15\u0E39\u0E14",
3980
+ "\u0E19\u0E49\u0E4D\u0E32\u0E41\u0E15\u0E01",
3981
+ "\u0E21\u0E36\u0E07",
3982
+ "\u0E41\u0E21\u0E48\u0E07",
3983
+ "\u0E40\u0E22\u0E47\u0E14",
3984
+ "\u0E23\u0E39\u0E15\u0E39\u0E14",
3985
+ "\u0E25\u0E49\u0E32\u0E07\u0E15\u0E39\u0E49\u0E40\u0E22\u0E47\u0E19",
3986
+ "\u0E2A\u0E49\u0E19\u0E15\u0E35\u0E19",
3987
+ "\u0E2A\u0E31\u0E14",
3988
+ "\u0E40\u0E2A\u0E37\u0E2D\u0E01",
3989
+ "\u0E2B\u0E0D\u0E34\u0E07\u0E0A\u0E32\u0E15\u0E34\u0E0A\u0E31\u0E48\u0E27",
3990
+ "\u0E2B\u0E25\u0E31\u0E48\u0E07",
3991
+ "\u0E2B\u0E48\u0E32",
3992
+ "\u0E2B\u0E4D\u0E32",
3993
+ "\u0E2B\u0E35",
3994
+ "\u0E40\u0E2B\u0E35\u0E49\u0E22",
3995
+ "\u0E2D\u0E21\u0E19\u0E01\u0E40\u0E02\u0E32",
3996
+ "\u0E44\u0E2D\u0E49\u0E04\u0E27\u0E32\u0E22"
3997
+ ]
3998
+ };
3999
+
4000
+ // src/data/dictionary.ts
4001
+ var dictionary_default = {
4002
+ arabic: arabic_default.words,
4003
+ chinese: chinese_default.words,
4004
+ czech: czech_default.words,
4005
+ danish: danish_default.words,
4006
+ dutch: dutch_default.words,
4007
+ english: english_default.words,
4008
+ esperanto: esperanto_default.words,
4009
+ finnish: finnish_default.words,
4010
+ french: french_default.words,
4011
+ german: german_default.words,
4012
+ hindi: hindi_default.words,
4013
+ hungarian: hungarian_default.words,
4014
+ italian: italian_default.words,
4015
+ japanese: japanese_default.words,
4016
+ korean: korean_default.words,
4017
+ norwegian: Norwegian_default.words,
4018
+ persian: persian_default.words,
4019
+ polish: polish_default.words,
4020
+ portuguese: portuguese_default.words,
4021
+ russian: russian_default.words,
4022
+ spanish: spanish_default.words,
4023
+ turkish: turkish_default.words,
4024
+ swedish: swedish_default.words,
4025
+ thai: thai_default.words
4026
+ };
4027
+
4028
+ // src/nlp/contextAnalyzer.ts
4029
+ var POSITIVE_INDICATORS = /* @__PURE__ */ new Set([
4030
+ "amazing",
4031
+ "awesome",
4032
+ "excellent",
4033
+ "fantastic",
4034
+ "great",
4035
+ "love",
4036
+ "wonderful",
4037
+ "brilliant",
4038
+ "perfect",
4039
+ "incredible",
4040
+ "outstanding",
4041
+ "superb",
4042
+ "magnificent",
4043
+ "marvelous",
4044
+ "spectacular",
4045
+ "phenomenal",
4046
+ "terrific",
4047
+ "fabulous",
4048
+ "divine",
4049
+ "best",
4050
+ "good",
4051
+ "nice",
4052
+ "cool",
4053
+ "sweet",
4054
+ "rad",
4055
+ "sick",
4056
+ "dope",
4057
+ "fire",
4058
+ "lit",
4059
+ "epic",
4060
+ "legendary",
4061
+ "godlike",
4062
+ "insane",
4063
+ "crazy",
4064
+ "wild",
4065
+ "beast",
4066
+ "movie",
4067
+ "film",
4068
+ "show",
4069
+ "song",
4070
+ "music",
4071
+ "game",
4072
+ "book",
4073
+ "restaurant",
4074
+ "food",
4075
+ "dish",
4076
+ "meal",
4077
+ "place",
4078
+ "spot",
4079
+ "location",
4080
+ "experience"
4081
+ ]);
4082
+ var NEGATIVE_INDICATORS = /* @__PURE__ */ new Set([
4083
+ "hate",
4084
+ "terrible",
4085
+ "awful",
4086
+ "horrible",
4087
+ "disgusting",
4088
+ "pathetic",
4089
+ "stupid",
4090
+ "idiot",
4091
+ "moron",
4092
+ "loser",
4093
+ "worthless",
4094
+ "useless",
4095
+ "garbage",
4096
+ "trash",
4097
+ "suck",
4098
+ "sucks",
4099
+ "worst",
4100
+ "bad",
4101
+ "ugly",
4102
+ "gross",
4103
+ "nasty",
4104
+ "annoying",
4105
+ "irritating",
4106
+ "frustrating",
4107
+ "disappointing",
4108
+ "lame",
4109
+ "weak",
4110
+ "fail",
4111
+ "you",
4112
+ "your",
4113
+ "yourself",
4114
+ "u",
4115
+ "ur",
4116
+ "ure",
4117
+ "youre"
4118
+ ]);
4119
+ var GAMING_POSITIVE = /* @__PURE__ */ new Set([
4120
+ "player",
4121
+ "gamer",
4122
+ "team",
4123
+ "squad",
4124
+ "clan",
4125
+ "guild",
4126
+ "match",
4127
+ "game",
4128
+ "round",
4129
+ "level",
4130
+ "boss",
4131
+ "raid",
4132
+ "quest",
4133
+ "achievement",
4134
+ "skill",
4135
+ "build",
4136
+ "loadout",
4137
+ "strategy",
4138
+ "tactic",
4139
+ "play",
4140
+ "move",
4141
+ "combo"
4142
+ ]);
4143
+ var POSITIVE_PHRASES = /* @__PURE__ */ new Map([
4144
+ ["the bomb", 0.9],
4145
+ // "this movie is the bomb"
4146
+ ["da bomb", 0.9],
4147
+ // slang for "the best"
4148
+ ["bomb.com", 0.9],
4149
+ // website reference
4150
+ ["bomb diggity", 0.9],
4151
+ // slang for excellent
4152
+ ["photo bomb", 0.8],
4153
+ // photography term
4154
+ ["bath bomb", 0.8],
4155
+ // cosmetic product
4156
+ ["bomb squad", 0.7]
4157
+ // could be neutral/positive in gaming
4158
+ ]);
4159
+ var NEGATIVE_PHRASES = /* @__PURE__ */ new Map([
4160
+ ["you are", 0.1],
4161
+ // "you are [profanity]"
4162
+ ["ur a", 0.1],
4163
+ // "ur a [profanity]"
4164
+ ["such a", 0.2],
4165
+ // "such a [profanity]"
4166
+ ["fucking", 0.1],
4167
+ // intensifier, usually negative
4168
+ ["damn", 0.2]
4169
+ // mild profanity, context dependent
4170
+ ]);
4171
+ var ContextAnalyzer = class {
4172
+ constructor(config) {
4173
+ this.contextWindow = config.contextWindow;
4174
+ this.language = config.language;
4175
+ this.domainWhitelists = new Set(config.domainWhitelists || []);
4176
+ }
4177
+ /**
4178
+ * Analyzes the context around a profanity match to determine if it should be flagged
4179
+ */
4180
+ analyzeContext(text, matchWord, matchIndex) {
4181
+ const words = this.tokenize(text);
4182
+ const matchWordIndex = this.findWordIndex(words, matchIndex);
4183
+ if (matchWordIndex === -1) {
4184
+ return {
4185
+ contextScore: 0.5,
4186
+ reason: "Could not locate match in tokenized text",
4187
+ isWhitelisted: false
4188
+ };
4189
+ }
4190
+ const startIndex = Math.max(0, matchWordIndex - this.contextWindow);
4191
+ const endIndex = Math.min(words.length, matchWordIndex + this.contextWindow + 1);
4192
+ const contextWords = words.slice(startIndex, endIndex);
4193
+ const contextText = contextWords.join(" ").toLowerCase();
4194
+ const phraseResult = this.checkPhraseContext(contextText, matchWord);
4195
+ if (phraseResult) {
4196
+ return phraseResult;
4197
+ }
4198
+ if (this.isDomainWhitelisted(contextWords, matchWord)) {
4199
+ return {
4200
+ contextScore: 0.8,
4201
+ reason: "Domain-specific whitelist match",
4202
+ isWhitelisted: true
4203
+ };
4204
+ }
4205
+ const sentimentScore = this.calculateSentimentScore(contextWords, matchWordIndex - startIndex);
4206
+ return {
4207
+ contextScore: sentimentScore,
4208
+ reason: this.generateReason(sentimentScore, contextWords),
4209
+ isWhitelisted: false
4210
+ };
4211
+ }
4212
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4213
+ checkPhraseContext(contextText, matchWord) {
4214
+ for (const [phrase, score] of POSITIVE_PHRASES.entries()) {
4215
+ if (contextText.includes(phrase)) {
4216
+ return {
4217
+ contextScore: score,
4218
+ reason: `Positive phrase detected: "${phrase}"`,
4219
+ isWhitelisted: true
4220
+ };
4221
+ }
4222
+ }
4223
+ for (const [phrase, score] of NEGATIVE_PHRASES.entries()) {
4224
+ if (contextText.includes(phrase)) {
4225
+ return {
4226
+ contextScore: score,
4227
+ reason: `Negative phrase detected: "${phrase}"`,
4228
+ isWhitelisted: false
4229
+ };
4230
+ }
4231
+ }
4232
+ return null;
4233
+ }
4234
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4235
+ isDomainWhitelisted(contextWords, matchWord) {
4236
+ for (const word of contextWords) {
4237
+ if (this.domainWhitelists.has(word) || GAMING_POSITIVE.has(word)) {
4238
+ return true;
4239
+ }
4240
+ }
4241
+ return false;
4242
+ }
4243
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4244
+ generateReason(score, contextWords) {
4245
+ if (score >= 0.7) {
4246
+ return "Positive context detected - likely not profanity";
4247
+ } else if (score <= 0.3) {
4248
+ return "Negative context detected - likely profanity";
4249
+ } else {
4250
+ return "Neutral context - uncertain classification";
4251
+ }
4252
+ }
4253
+ tokenize(text) {
4254
+ return text.toLowerCase().replace(/[^\w\s]/g, " ").split(/\s+/).filter((word) => word.length > 0);
4255
+ }
4256
+ findWordIndex(words, charIndex) {
4257
+ let currentPos = 0;
4258
+ for (let i = 0; i < words.length; i++) {
4259
+ if (currentPos >= charIndex) {
4260
+ return Math.max(0, i - 1);
4261
+ }
4262
+ currentPos += words[i].length + 1;
4263
+ }
4264
+ return words.length - 1;
4265
+ }
4266
+ calculateSentimentScore(contextWords, matchPosition) {
4267
+ let positiveCount = 0;
4268
+ let negativeCount = 0;
4269
+ const totalWords = contextWords.length;
4270
+ for (let i = 0; i < contextWords.length; i++) {
4271
+ const word = contextWords[i];
4272
+ const distance = Math.abs(i - matchPosition);
4273
+ const weight = Math.max(0.1, 1 - distance * 0.2);
4274
+ if (POSITIVE_INDICATORS.has(word)) {
4275
+ positiveCount += weight;
4276
+ } else if (NEGATIVE_INDICATORS.has(word)) {
4277
+ negativeCount += weight;
4278
+ }
4279
+ }
4280
+ const totalSentiment = positiveCount + negativeCount;
4281
+ if (totalSentiment === 0) {
4282
+ return 0.5;
4283
+ }
4284
+ const rawScore = positiveCount / totalSentiment;
4285
+ let adjustedScore = rawScore;
4286
+ const confidenceMultiplier = Math.min(1, totalWords / 5);
4287
+ adjustedScore = 0.5 + (adjustedScore - 0.5) * confidenceMultiplier;
4288
+ const hasPersonalPronouns = contextWords.some(
4289
+ (word) => ["you", "your", "u", "ur"].includes(word)
4290
+ );
4291
+ if (hasPersonalPronouns && rawScore < 0.7) {
4292
+ adjustedScore *= 0.7;
4293
+ }
4294
+ const hasObjectReferences = contextWords.some(
4295
+ (word) => ["movie", "song", "game", "book", "show", "this", "that", "it"].includes(word)
4296
+ );
4297
+ if (hasObjectReferences && rawScore > 0.3) {
4298
+ adjustedScore = Math.min(1, adjustedScore * 1.3);
4299
+ }
4300
+ return Math.max(0, Math.min(1, adjustedScore));
4301
+ }
4302
+ /**
4303
+ * Updates the domain whitelist for this analyzer instance
4304
+ */
4305
+ updateDomainWhitelist(newWhitelist) {
4306
+ this.domainWhitelists = new Set(newWhitelist);
4307
+ }
4308
+ /**
4309
+ * Adds words to the domain whitelist
4310
+ */
4311
+ addToDomainWhitelist(words) {
4312
+ words.forEach((word) => this.domainWhitelists.add(word.toLowerCase()));
4313
+ }
4314
+ };
4315
+
4316
+ // src/utils/leetspeak.ts
4317
+ var BASIC_SUBSTITUTIONS = {
4318
+ "0": "o",
4319
+ "1": "i",
4320
+ "3": "e",
4321
+ "4": "a",
4322
+ "5": "s",
4323
+ "7": "t",
4324
+ "8": "b",
4325
+ "9": "g"
4326
+ };
4327
+ var MODERATE_SUBSTITUTIONS = {
4328
+ ...BASIC_SUBSTITUTIONS,
4329
+ "@": "a",
4330
+ "$": "s",
4331
+ "!": "i",
4332
+ "(": "c",
4333
+ "<": "c",
4334
+ "{": "c",
4335
+ "[": "c",
4336
+ "+": "t",
4337
+ "\u20AC": "e",
4338
+ "&": "e",
4339
+ "#": "h",
4340
+ "\xA5": "y",
4341
+ "\xA7": "s",
4342
+ "\u2020": "t",
4343
+ "\xAE": "r",
4344
+ "\xA9": "c",
4345
+ "\xB2": "2",
4346
+ "\xB3": "3"
4347
+ };
4348
+ var AGGRESSIVE_MULTI_CHAR = [
4349
+ // Letter A patterns
4350
+ [/\/\\/g, "a"],
4351
+ [/\/-\\/g, "a"],
4352
+ [/\^/g, "a"],
4353
+ // Letter B patterns
4354
+ [/\|3/g, "b"],
4355
+ [/13/g, "b"],
4356
+ [/ß/g, "b"],
4357
+ // Letter D patterns
4358
+ [/\|\)/g, "d"],
4359
+ [/\|>/g, "d"],
4360
+ [/\[\)/g, "d"],
4361
+ // Letter F patterns
4362
+ [/\|=/g, "f"],
4363
+ [/ph/gi, "f"],
4364
+ // Letter H patterns
4365
+ [/\|-\|/g, "h"],
4366
+ [/\}\{/g, "h"],
4367
+ // Letter K patterns
4368
+ [/\|</g, "k"],
4369
+ [/\|\{/g, "k"],
4370
+ // Letter L patterns
4371
+ [/\|_/g, "l"],
4372
+ // Letter M patterns
4373
+ [/\/\\\/\\/g, "m"],
4374
+ [/\|V\|/g, "m"],
4375
+ [/\[V\]/g, "m"],
4376
+ // Letter N patterns
4377
+ [/\/\\\//g, "n"],
4378
+ [/\|\\\|/g, "n"],
4379
+ // Letter P patterns
4380
+ [/\|\*/g, "p"],
4381
+ [/\|o/g, "p"],
4382
+ // Letter R patterns
4383
+ [/\|2/g, "r"],
4384
+ [/\|\?/g, "r"],
4385
+ // Letter U patterns
4386
+ [/\|_\|/g, "u"],
4387
+ [/\\_\\/g, "u"],
4388
+ [/\/_\//g, "u"],
4389
+ // Letter V patterns
4390
+ [/\\\//g, "v"],
4391
+ // Letter W patterns
4392
+ [/\\\/\\\//g, "w"],
4393
+ [/vv/gi, "w"],
4394
+ // Letter X patterns
4395
+ [/><]/g, "x"],
4396
+ // Letter Y patterns
4397
+ [/'\//g, "y"],
4398
+ // Letter Z patterns
4399
+ [/7_/g, "z"]
4400
+ ];
4401
+ var AGGRESSIVE_SUBSTITUTIONS = {
4402
+ ...MODERATE_SUBSTITUTIONS,
4403
+ "|": "i",
4404
+ "6": "g",
4405
+ "2": "z",
4406
+ "%": "z"
4407
+ };
4408
+ function normalizeLeetspeak(text, options = {}) {
4409
+ const {
4410
+ level = "moderate",
4411
+ collapseRepeated = true,
4412
+ maxRepeated = 2,
4413
+ removeSpacedChars = true
4414
+ } = options;
4415
+ let normalized = text;
4416
+ if (removeSpacedChars) {
4417
+ normalized = collapseSpacedCharacters(normalized);
4418
+ }
4419
+ if (level === "aggressive") {
4420
+ for (const [pattern, replacement] of AGGRESSIVE_MULTI_CHAR) {
4421
+ normalized = normalized.replace(pattern, replacement);
4422
+ }
4423
+ }
4424
+ const substitutions = getSubstitutionMap(level);
4425
+ normalized = normalized.split("").map((char) => substitutions[char] || char).join("");
4426
+ if (collapseRepeated) {
4427
+ normalized = collapseRepeatedCharacters(normalized, maxRepeated);
4428
+ }
4429
+ return normalized;
4430
+ }
4431
+ function getSubstitutionMap(level) {
4432
+ switch (level) {
4433
+ case "basic":
4434
+ return BASIC_SUBSTITUTIONS;
4435
+ case "moderate":
4436
+ return MODERATE_SUBSTITUTIONS;
4437
+ case "aggressive":
4438
+ return AGGRESSIVE_SUBSTITUTIONS;
4439
+ default:
4440
+ return MODERATE_SUBSTITUTIONS;
4441
+ }
4442
+ }
4443
+ function collapseSpacedCharacters(text) {
4444
+ const spacedPattern = /\b([a-zA-Z0-9@$!#])\s+([a-zA-Z0-9@$!#])(\s+[a-zA-Z0-9@$!#])+\b/g;
4445
+ return text.replace(spacedPattern, (match) => {
4446
+ return match.replace(/\s+/g, "");
4447
+ });
4448
+ }
4449
+ function collapseRepeatedCharacters(text, maxRepeated = 2) {
4450
+ const pattern = new RegExp(`(.)\\1{${maxRepeated},}`, "gi");
4451
+ return text.replace(pattern, (match, char) => char.repeat(maxRepeated));
4452
+ }
4453
+
4454
+ // src/utils/unicode.ts
4455
+ var HOMOGLYPHS = {
4456
+ // Cyrillic homoglyphs (look like Latin)
4457
+ "\u0430": "a",
4458
+ // Cyrillic small a
4459
+ "\u0410": "A",
4460
+ // Cyrillic capital A
4461
+ "\u0435": "e",
4462
+ // Cyrillic small e
4463
+ "\u0415": "E",
4464
+ // Cyrillic capital E
4465
+ "\u043E": "o",
4466
+ // Cyrillic small o
4467
+ "\u041E": "O",
4468
+ // Cyrillic capital O
4469
+ "\u0440": "p",
4470
+ // Cyrillic small er
4471
+ "\u0420": "P",
4472
+ // Cyrillic capital Er
4473
+ "\u0441": "c",
4474
+ // Cyrillic small es
4475
+ "\u0421": "C",
4476
+ // Cyrillic capital Es
4477
+ "\u0443": "y",
4478
+ // Cyrillic small u
4479
+ "\u0423": "Y",
4480
+ // Cyrillic capital U
4481
+ "\u0445": "x",
4482
+ // Cyrillic small ha
4483
+ "\u0425": "X",
4484
+ // Cyrillic capital Ha
4485
+ "\u0456": "i",
4486
+ // Cyrillic small i (Ukrainian)
4487
+ "\u0406": "I",
4488
+ // Cyrillic capital I (Ukrainian)
4489
+ "\u0458": "j",
4490
+ // Cyrillic small je
4491
+ "\u0408": "J",
4492
+ // Cyrillic capital Je
4493
+ "\u0455": "s",
4494
+ // Cyrillic small dze
4495
+ "\u0405": "S",
4496
+ // Cyrillic capital Dze
4497
+ // Greek homoglyphs
4498
+ "\u03B1": "a",
4499
+ // Greek small alpha
4500
+ "\u0391": "A",
4501
+ // Greek capital Alpha
4502
+ "\u03B2": "b",
4503
+ // Greek small beta (sort of)
4504
+ "\u0392": "B",
4505
+ // Greek capital Beta
4506
+ "\u03B5": "e",
4507
+ // Greek small epsilon
4508
+ "\u0395": "E",
4509
+ // Greek capital Epsilon
4510
+ "\u03B7": "n",
4511
+ // Greek small eta
4512
+ "\u0397": "H",
4513
+ // Greek capital Eta
4514
+ "\u03B9": "i",
4515
+ // Greek small iota
4516
+ "\u0399": "I",
4517
+ // Greek capital Iota
4518
+ "\u03BA": "k",
4519
+ // Greek small kappa
4520
+ "\u039A": "K",
4521
+ // Greek capital Kappa
4522
+ "\u03BD": "v",
4523
+ // Greek small nu (looks like v)
4524
+ "\u039D": "N",
4525
+ // Greek capital Nu
4526
+ "\u03BF": "o",
4527
+ // Greek small omicron
4528
+ "\u039F": "O",
4529
+ // Greek capital Omicron
4530
+ "\u03C1": "p",
4531
+ // Greek small rho
4532
+ "\u03A1": "P",
4533
+ // Greek capital Rho
4534
+ "\u03C4": "t",
4535
+ // Greek small tau
4536
+ "\u03A4": "T",
4537
+ // Greek capital Tau
4538
+ "\u03C5": "u",
4539
+ // Greek small upsilon
4540
+ "\u03A5": "Y",
4541
+ // Greek capital Upsilon
4542
+ "\u03C7": "x",
4543
+ // Greek small chi
4544
+ "\u03A7": "X",
4545
+ // Greek capital Chi
4546
+ // Mathematical symbols
4547
+ "\u2102": "C",
4548
+ // Double-struck capital C
4549
+ "\u210D": "H",
4550
+ // Double-struck capital H
4551
+ "\u2115": "N",
4552
+ // Double-struck capital N
4553
+ "\u2119": "P",
4554
+ // Double-struck capital P
4555
+ "\u211A": "Q",
4556
+ // Double-struck capital Q
4557
+ "\u211D": "R",
4558
+ // Double-struck capital R
4559
+ "\u2124": "Z",
4560
+ // Double-struck capital Z
4561
+ // Subscript/superscript
4562
+ "\u1D43": "a",
4563
+ "\u1D47": "b",
4564
+ "\u1D9C": "c",
4565
+ "\u1D48": "d",
4566
+ "\u1D49": "e",
4567
+ "\u1DA0": "f",
4568
+ "\u1D4D": "g",
4569
+ "\u02B0": "h",
4570
+ "\u2071": "i",
4571
+ "\u02B2": "j",
4572
+ "\u1D4F": "k",
4573
+ "\u02E1": "l",
4574
+ "\u1D50": "m",
4575
+ "\u207F": "n",
4576
+ "\u1D52": "o",
4577
+ "\u1D56": "p",
4578
+ "\u02B3": "r",
4579
+ "\u02E2": "s",
4580
+ "\u1D57": "t",
4581
+ "\u1D58": "u",
4582
+ "\u1D5B": "v",
4583
+ "\u02B7": "w",
4584
+ "\u02E3": "x",
4585
+ "\u02B8": "y",
4586
+ "\u1DBB": "z",
4587
+ // Small caps
4588
+ "\u1D00": "A",
4589
+ "\u0299": "B",
4590
+ "\u1D04": "C",
4591
+ "\u1D05": "D",
4592
+ "\u1D07": "E",
4593
+ "\uA730": "F",
4594
+ "\u0262": "G",
4595
+ "\u029C": "H",
4596
+ "\u026A": "I",
4597
+ "\u1D0A": "J",
4598
+ "\u1D0B": "K",
4599
+ "\u029F": "L",
4600
+ "\u1D0D": "M",
4601
+ "\u0274": "N",
4602
+ "\u1D0F": "O",
4603
+ "\u1D18": "P",
4604
+ "\u01EB": "Q",
4605
+ "\u0280": "R",
4606
+ "\uA731": "S",
4607
+ "\u1D1B": "T",
4608
+ "\u1D1C": "U",
4609
+ "\u1D20": "V",
4610
+ "\u1D21": "W",
4611
+ "\u028F": "Y",
4612
+ "\u1D22": "Z",
4613
+ // Other lookalikes
4614
+ "\u24D0": "a",
4615
+ "\u24D1": "b",
4616
+ "\u24D2": "c",
4617
+ "\u24D3": "d",
4618
+ "\u24D4": "e",
4619
+ "\u24D5": "f",
4620
+ "\u24D6": "g",
4621
+ "\u24D7": "h",
4622
+ "\u24D8": "i",
4623
+ "\u24D9": "j",
4624
+ "\u24DA": "k",
4625
+ "\u24DB": "l",
4626
+ "\u24DC": "m",
4627
+ "\u24DD": "n",
4628
+ "\u24DE": "o",
4629
+ "\u24DF": "p",
4630
+ "\u24E0": "q",
4631
+ "\u24E1": "r",
4632
+ "\u24E2": "s",
4633
+ "\u24E3": "t",
4634
+ "\u24E4": "u",
4635
+ "\u24E5": "v",
4636
+ "\u24E6": "w",
4637
+ "\u24E7": "x",
4638
+ "\u24E8": "y",
4639
+ "\u24E9": "z",
4640
+ // Fancy Unicode letters
4641
+ "\uFF41": "a",
4642
+ "\uFF42": "b",
4643
+ "\uFF43": "c",
4644
+ "\uFF44": "d",
4645
+ "\uFF45": "e",
4646
+ "\uFF46": "f",
4647
+ "\uFF47": "g",
4648
+ "\uFF48": "h",
4649
+ "\uFF49": "i",
4650
+ "\uFF4A": "j",
4651
+ "\uFF4B": "k",
4652
+ "\uFF4C": "l",
4653
+ "\uFF4D": "m",
4654
+ "\uFF4E": "n",
4655
+ "\uFF4F": "o",
4656
+ "\uFF50": "p",
4657
+ "\uFF51": "q",
4658
+ "\uFF52": "r",
4659
+ "\uFF53": "s",
4660
+ "\uFF54": "t",
4661
+ "\uFF55": "u",
4662
+ "\uFF56": "v",
4663
+ "\uFF57": "w",
4664
+ "\uFF58": "x",
4665
+ "\uFF59": "y",
4666
+ "\uFF5A": "z",
4667
+ // Mirrored/rotated
4668
+ "\u0250": "a",
4669
+ "\u0254": "c",
4670
+ "\u01DD": "e",
4671
+ "\u025F": "j",
4672
+ "\u0265": "h",
4673
+ "\u026F": "m",
4674
+ "\u0279": "r",
4675
+ "\u0287": "t",
4676
+ "\u028C": "v",
4677
+ "\u028D": "w",
4678
+ // Common lookalikes
4679
+ "\u0142": "l",
4680
+ "\u0141": "L",
4681
+ "\xF8": "o",
4682
+ "\xD8": "O",
4683
+ "\u0111": "d",
4684
+ "\u0110": "D",
4685
+ "\u0127": "h",
4686
+ "\u0126": "H",
4687
+ "\u0131": "i",
4688
+ "\u0130": "I",
4689
+ "\u0138": "k",
4690
+ "\u0140": "l",
4691
+ "\u013F": "L",
4692
+ "\u014B": "n",
4693
+ "\u014A": "N",
4694
+ "\u0153": "oe",
4695
+ "\u0152": "OE",
4696
+ "\u017F": "s",
4697
+ "\u0167": "t",
4698
+ "\u0166": "T"
4699
+ };
4700
+ var ZERO_WIDTH_CHARS = [
4701
+ "\u200B",
4702
+ // Zero-width space
4703
+ "\u200C",
4704
+ // Zero-width non-joiner
4705
+ "\u200D",
4706
+ // Zero-width joiner
4707
+ "\u200E",
4708
+ // Left-to-right mark
4709
+ "\u200F",
4710
+ // Right-to-left mark
4711
+ "\u2060",
4712
+ // Word joiner
4713
+ "\u2061",
4714
+ // Function application
4715
+ "\u2062",
4716
+ // Invisible times
4717
+ "\u2063",
4718
+ // Invisible separator
4719
+ "\u2064",
4720
+ // Invisible plus
4721
+ "\uFEFF",
4722
+ // Byte order mark / zero-width no-break space
4723
+ "\xAD",
4724
+ // Soft hyphen
4725
+ "\u034F",
4726
+ // Combining grapheme joiner
4727
+ "\u061C",
4728
+ // Arabic letter mark
4729
+ "\u115F",
4730
+ // Hangul choseong filler
4731
+ "\u1160",
4732
+ // Hangul jungseong filler
4733
+ "\u17B4",
4734
+ // Khmer vowel inherent Aq
4735
+ "\u17B5",
4736
+ // Khmer vowel inherent Aa
4737
+ "\u180E",
4738
+ // Mongolian vowel separator
4739
+ "\u3164"
4740
+ // Hangul filler
4741
+ ];
4742
+ function normalizeUnicode(text, options = {}) {
4743
+ const {
4744
+ nfkd = true,
4745
+ homoglyphs = true,
4746
+ fullWidth = true,
4747
+ removeDiacritics = true,
4748
+ removeZeroWidth = true
4749
+ } = options;
4750
+ let normalized = text;
4751
+ if (removeZeroWidth) {
4752
+ normalized = removeZeroWidthCharacters(normalized);
4753
+ }
4754
+ if (fullWidth) {
4755
+ normalized = convertFullWidth(normalized);
4756
+ }
4757
+ if (homoglyphs) {
4758
+ normalized = convertHomoglyphs(normalized);
4759
+ }
4760
+ if (nfkd || removeDiacritics) {
4761
+ normalized = normalizeNFKD(normalized, removeDiacritics);
4762
+ }
4763
+ return normalized;
4764
+ }
4765
+ function removeZeroWidthCharacters(text) {
4766
+ const pattern = new RegExp(`[${ZERO_WIDTH_CHARS.join("")}]`, "g");
4767
+ return text.replace(pattern, "");
4768
+ }
4769
+ function convertFullWidth(text) {
4770
+ return text.replace(/[\uFF01-\uFF5E]/g, (char) => {
4771
+ return String.fromCharCode(char.charCodeAt(0) - 65248);
4772
+ });
4773
+ }
4774
+ function convertHomoglyphs(text) {
4775
+ return text.split("").map((char) => HOMOGLYPHS[char] || char).join("");
4776
+ }
4777
+ function normalizeNFKD(text, removeDiacritics = true) {
4778
+ let normalized = text.normalize("NFKD");
4779
+ if (removeDiacritics) {
4780
+ normalized = normalized.replace(/[\u0300-\u036f]/g, "");
4781
+ }
4782
+ return normalized;
4783
+ }
4784
+
4785
+ // src/filters/Filter.ts
4786
+ var Filter = class {
4787
+ /**
4788
+ * Creates a new Filter instance with the specified configuration.
4789
+ *
4790
+ * @param config - Filter configuration options
4791
+ *
4792
+ * @example
4793
+ * ```typescript
4794
+ * // Basic usage
4795
+ * const filter = new Filter({ languages: ['english'] });
4796
+ *
4797
+ * // With leetspeak detection
4798
+ * const filter = new Filter({
4799
+ * languages: ['english'],
4800
+ * detectLeetspeak: true,
4801
+ * leetspeakLevel: 'moderate',
4802
+ * });
4803
+ *
4804
+ * // With all advanced features
4805
+ * const filter = new Filter({
4806
+ * languages: ['english', 'spanish'],
4807
+ * detectLeetspeak: true,
4808
+ * normalizeUnicode: true,
4809
+ * cacheResults: true,
4810
+ * enableContextAware: true,
4811
+ * });
4812
+ * ```
4813
+ */
4814
+ constructor(config) {
4815
+ const defaultLanguage = "english";
4816
+ this.enableContextAware = config?.enableContextAware ?? false;
4817
+ this.contextWindow = config?.contextWindow ?? 3;
4818
+ this.confidenceThreshold = config?.confidenceThreshold ?? 0.7;
4819
+ this.primaryLanguage = config?.languages?.[0] || defaultLanguage;
4820
+ if (this.enableContextAware) {
4821
+ this.contextAnalyzer = new ContextAnalyzer({
4822
+ contextWindow: this.contextWindow,
4823
+ language: this.primaryLanguage,
4824
+ domainWhitelists: config?.domainWhitelists?.[this.primaryLanguage] || []
4825
+ });
4826
+ }
4827
+ this.caseSensitive = config?.caseSensitive ?? false;
4828
+ this.allowObfuscatedMatch = config?.allowObfuscatedMatch ?? false;
4829
+ this.wordBoundaries = config?.wordBoundaries ?? !this.allowObfuscatedMatch;
4830
+ this.replaceWith = config?.replaceWith;
4831
+ this.severityLevels = config?.severityLevels ?? false;
4832
+ this.ignoreWords = new Set(
4833
+ config?.ignoreWords?.map((word) => word.toLowerCase()) || []
4834
+ );
4835
+ this.logProfanity = config?.logProfanity ?? false;
4836
+ this.fuzzyToleranceLevel = config?.fuzzyToleranceLevel ?? 0.8;
4837
+ this.detectLeetspeak = config?.detectLeetspeak ?? false;
4838
+ this.leetspeakLevel = config?.leetspeakLevel ?? "moderate";
4839
+ this.normalizeUnicodeEnabled = config?.normalizeUnicode ?? true;
4840
+ this.cacheResults = config?.cacheResults ?? false;
4841
+ this.maxCacheSize = config?.maxCacheSize ?? 1e3;
4842
+ this.cache = /* @__PURE__ */ new Map();
4843
+ let words = [];
4844
+ if (config?.allLanguages) {
4845
+ for (const lang in dictionary_default) {
4846
+ if (Object.prototype.hasOwnProperty.call(dictionary_default, lang)) {
4847
+ words = [...words, ...dictionary_default[lang]];
4848
+ }
4849
+ }
4850
+ } else {
4851
+ const languages = config?.languages || ["english"];
4852
+ const languagesChecks = new Set(languages);
4853
+ languagesChecks.forEach((lang) => {
4854
+ words = [...words, ...dictionary_default[lang]];
4855
+ });
4856
+ }
4857
+ if (config?.customWords) {
4858
+ words = [...words, ...config.customWords];
4859
+ }
4860
+ this.words = new Map(words.map((word) => [word.toLowerCase(), 1]));
4861
+ }
4862
+ debugLog(...args) {
4863
+ if (this.logProfanity) {
4864
+ console.log("[glin-profanity]", ...args);
4865
+ }
4866
+ }
4867
+ /**
4868
+ * Normalizes text for profanity detection using all enabled normalization methods.
4869
+ * Applies Unicode normalization, leetspeak detection, and obfuscation handling.
4870
+ *
4871
+ * @param text - The input text to normalize
4872
+ * @returns The normalized text
4873
+ */
4874
+ normalizeText(text) {
4875
+ let normalized = text;
4876
+ if (this.normalizeUnicodeEnabled) {
4877
+ normalized = normalizeUnicode(normalized);
4878
+ }
4879
+ if (this.detectLeetspeak) {
4880
+ normalized = normalizeLeetspeak(normalized, {
4881
+ level: this.leetspeakLevel,
4882
+ collapseRepeated: true,
4883
+ removeSpacedChars: true
4884
+ });
4885
+ }
4886
+ if (this.allowObfuscatedMatch && !this.detectLeetspeak) {
4887
+ normalized = this.normalizeObfuscated(normalized);
4888
+ }
4889
+ return normalized;
4890
+ }
4891
+ /**
4892
+ * Legacy obfuscation normalization method (for backward compatibility).
4893
+ * @deprecated Use normalizeText() with detectLeetspeak option instead.
4894
+ */
4895
+ normalizeObfuscated(text) {
4896
+ let normalized = text.replace(/([a-zA-Z])\1{1,}/g, "$1$1");
4897
+ const charMap = {
4898
+ "@": "a",
4899
+ $: "s",
4900
+ "!": "i",
4901
+ "1": "i",
4902
+ "*": ""
4903
+ };
4904
+ normalized = normalized.replace(/[@$!1*]/g, (m) => charMap[m] || m);
4905
+ return normalized;
4906
+ }
4907
+ /**
4908
+ * Clears the result cache.
4909
+ * Useful when dictionary or configuration changes.
4910
+ */
4911
+ clearCache() {
4912
+ this.cache.clear();
4913
+ }
4914
+ /**
4915
+ * Gets the current cache size.
4916
+ * @returns Number of cached results
4917
+ */
4918
+ getCacheSize() {
4919
+ return this.cache.size;
4920
+ }
4921
+ /**
4922
+ * Exports the current filter configuration as a JSON-serializable object.
4923
+ * Useful for saving configuration to files or sharing between environments.
4924
+ *
4925
+ * @returns The current filter configuration
4926
+ *
4927
+ * @example
4928
+ * ```typescript
4929
+ * const filter = new Filter({
4930
+ * languages: ['english', 'spanish'],
4931
+ * detectLeetspeak: true,
4932
+ * leetspeakLevel: 'aggressive',
4933
+ * });
4934
+ *
4935
+ * const config = filter.getConfig();
4936
+ * // Save to file: fs.writeFileSync('filter.config.json', JSON.stringify(config));
4937
+ *
4938
+ * // Later, restore:
4939
+ * // const saved = JSON.parse(fs.readFileSync('filter.config.json'));
4940
+ * // const restored = new Filter(saved);
4941
+ * ```
4942
+ */
4943
+ getConfig() {
4944
+ return {
4945
+ languages: [this.primaryLanguage],
4946
+ caseSensitive: this.caseSensitive,
4947
+ wordBoundaries: this.wordBoundaries,
4948
+ replaceWith: this.replaceWith,
4949
+ severityLevels: this.severityLevels,
4950
+ ignoreWords: Array.from(this.ignoreWords),
4951
+ logProfanity: this.logProfanity,
4952
+ allowObfuscatedMatch: this.allowObfuscatedMatch,
4953
+ fuzzyToleranceLevel: this.fuzzyToleranceLevel,
4954
+ enableContextAware: this.enableContextAware,
4955
+ contextWindow: this.contextWindow,
4956
+ confidenceThreshold: this.confidenceThreshold,
4957
+ detectLeetspeak: this.detectLeetspeak,
4958
+ leetspeakLevel: this.leetspeakLevel,
4959
+ normalizeUnicode: this.normalizeUnicodeEnabled,
4960
+ cacheResults: this.cacheResults,
4961
+ maxCacheSize: this.maxCacheSize
4962
+ };
4963
+ }
4964
+ /**
4965
+ * Returns the current word dictionary size.
4966
+ * Useful for monitoring and debugging.
4967
+ *
4968
+ * @returns Number of words in the dictionary
4969
+ */
4970
+ getWordCount() {
4971
+ return this.words.size;
4972
+ }
4973
+ /**
4974
+ * Adds a result to the cache, evicting oldest entries if necessary.
4975
+ */
4976
+ addToCache(key, result) {
4977
+ if (!this.cacheResults) return;
4978
+ if (this.cache.size >= this.maxCacheSize) {
4979
+ const firstKey = this.cache.keys().next().value;
4980
+ if (firstKey) {
4981
+ this.cache.delete(firstKey);
4982
+ }
4983
+ }
4984
+ this.cache.set(key, result);
4985
+ }
4986
+ /**
4987
+ * Gets a cached result if available.
4988
+ */
4989
+ getFromCache(key) {
4990
+ if (!this.cacheResults) return void 0;
4991
+ return this.cache.get(key);
4992
+ }
4993
+ getRegex(word) {
4994
+ const flags = this.caseSensitive ? "g" : "gi";
4995
+ const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4996
+ const boundary = this.wordBoundaries ? "\\b" : "";
4997
+ return new RegExp(`${boundary}${escapedWord}${boundary}`, flags);
4998
+ }
4999
+ isFuzzyToleranceMatch(word, text) {
5000
+ const simplifiedText = text.toLowerCase().replace(/[^a-z]/g, "");
5001
+ const simplifiedWord = word.toLowerCase();
5002
+ let matchCount = 0;
5003
+ let index = 0;
5004
+ for (let i = 0; i < simplifiedText.length; i++) {
5005
+ if (simplifiedText[i] === simplifiedWord[index]) {
5006
+ matchCount++;
5007
+ index++;
5008
+ if (index === simplifiedWord.length) break;
5009
+ }
5010
+ }
5011
+ const score = matchCount / simplifiedWord.length;
5012
+ return score >= this.fuzzyToleranceLevel;
5013
+ }
5014
+ evaluateSeverity(word, text) {
5015
+ if (this.wordBoundaries && this.getRegex(word).test(text)) {
5016
+ return 1 /* EXACT */;
5017
+ }
5018
+ if (this.getRegex(word).test(text)) return 1 /* EXACT */;
5019
+ if (this.isFuzzyToleranceMatch(word, text)) return 2 /* FUZZY */;
5020
+ return void 0;
5021
+ }
5022
+ /**
5023
+ * Checks if the given text contains profanity.
5024
+ *
5025
+ * @param value - The text to check
5026
+ * @returns True if the text contains profanity
5027
+ *
5028
+ * @example
5029
+ * ```typescript
5030
+ * const filter = new Filter({ detectLeetspeak: true });
5031
+ *
5032
+ * filter.isProfane('hello'); // false
5033
+ * filter.isProfane('fuck'); // true
5034
+ * filter.isProfane('f4ck'); // true (leetspeak)
5035
+ * filter.isProfane('fυck'); // true (Unicode homoglyph)
5036
+ * ```
5037
+ */
5038
+ isProfane(value) {
5039
+ const input = this.normalizeText(value);
5040
+ for (const word of this.words.keys()) {
5041
+ if (!this.ignoreWords.has(word.toLowerCase()) && this.evaluateSeverity(word, input) !== void 0) {
5042
+ return true;
5043
+ }
5044
+ }
5045
+ return false;
5046
+ }
5047
+ matches(word) {
5048
+ return this.isProfane(word);
5049
+ }
5050
+ /**
5051
+ * Performs a comprehensive profanity check on the given text.
5052
+ *
5053
+ * @param text - The text to check for profanity
5054
+ * @returns Result object containing detected profanity information
5055
+ *
5056
+ * @example
5057
+ * ```typescript
5058
+ * const filter = new Filter({
5059
+ * languages: ['english'],
5060
+ * detectLeetspeak: true,
5061
+ * normalizeUnicode: true,
5062
+ * });
5063
+ *
5064
+ * const result = filter.checkProfanity('This is f4ck!ng bad');
5065
+ * console.log(result.containsProfanity); // true
5066
+ * console.log(result.profaneWords); // ['fuck']
5067
+ *
5068
+ * // With caching for repeated checks
5069
+ * const filter2 = new Filter({ cacheResults: true });
5070
+ * filter2.checkProfanity('same text'); // Computed
5071
+ * filter2.checkProfanity('same text'); // Retrieved from cache
5072
+ * ```
5073
+ */
5074
+ checkProfanity(text) {
5075
+ const cacheKey = text;
5076
+ const cachedResult = this.getFromCache(cacheKey);
5077
+ if (cachedResult) {
5078
+ this.debugLog("Cache hit for:", text.substring(0, 50));
5079
+ return cachedResult;
5080
+ }
5081
+ if (!this.enableContextAware) {
5082
+ let input2 = this.normalizeText(text);
5083
+ input2 = input2.toLowerCase();
5084
+ const profaneWords2 = [];
5085
+ const severityMap2 = {};
5086
+ for (const dictWord of this.words.keys()) {
5087
+ if (this.ignoreWords.has(dictWord.toLowerCase())) continue;
5088
+ const severity = this.evaluateSeverity(dictWord, input2);
5089
+ if (severity !== void 0) {
5090
+ const regex = this.getRegex(dictWord);
5091
+ let match;
5092
+ while ((match = regex.exec(input2)) !== null) {
5093
+ profaneWords2.push(match[0]);
5094
+ if (severityMap2[match[0]] === void 0) {
5095
+ severityMap2[match[0]] = severity;
5096
+ }
5097
+ }
5098
+ }
5099
+ }
5100
+ let processedText2 = text;
5101
+ if (this.replaceWith && profaneWords2.length > 0) {
5102
+ const uniqueWords = Array.from(new Set(profaneWords2));
5103
+ for (const word of uniqueWords) {
5104
+ const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
5105
+ const replacementRegex = this.wordBoundaries ? new RegExp(`\\b${escaped}\\b`, "gi") : new RegExp(escaped, "gi");
5106
+ processedText2 = processedText2.replace(
5107
+ replacementRegex,
5108
+ this.replaceWith
5109
+ );
5110
+ }
5111
+ }
5112
+ const result2 = {
5113
+ containsProfanity: profaneWords2.length > 0,
5114
+ profaneWords: Array.from(new Set(profaneWords2)),
5115
+ processedText: this.replaceWith ? processedText2 : void 0,
5116
+ severityMap: this.severityLevels && Object.keys(severityMap2).length > 0 ? severityMap2 : void 0
5117
+ };
5118
+ this.addToCache(cacheKey, result2);
5119
+ return result2;
5120
+ }
5121
+ let input = this.normalizeText(text);
5122
+ input = input.toLowerCase();
5123
+ const originalText = text;
5124
+ const profaneWords = [];
5125
+ const severityMap = {};
5126
+ const matches = [];
5127
+ for (const dictWord of this.words.keys()) {
5128
+ if (this.ignoreWords.has(dictWord.toLowerCase())) continue;
5129
+ const severity = this.evaluateSeverity(dictWord, input);
5130
+ if (severity !== void 0) {
5131
+ const regex = this.getRegex(dictWord);
5132
+ let match;
5133
+ while ((match = regex.exec(input)) !== null) {
5134
+ const matchedWord = match[0];
5135
+ const matchIndex = match.index;
5136
+ const matchObj = {
5137
+ word: matchedWord,
5138
+ index: matchIndex,
5139
+ severity
5140
+ };
5141
+ if (this.enableContextAware && this.contextAnalyzer) {
5142
+ const contextResult = this.contextAnalyzer.analyzeContext(
5143
+ originalText,
5144
+ matchedWord,
5145
+ matchIndex
5146
+ );
5147
+ matchObj.contextScore = contextResult.contextScore;
5148
+ matchObj.reason = contextResult.reason;
5149
+ matchObj.isWhitelisted = contextResult.isWhitelisted;
5150
+ if (contextResult.isWhitelisted || contextResult.contextScore > this.confidenceThreshold) {
5151
+ continue;
5152
+ }
5153
+ }
5154
+ profaneWords.push(matchedWord);
5155
+ if (severityMap[matchedWord] === void 0) {
5156
+ severityMap[matchedWord] = severity;
5157
+ }
5158
+ matches.push(matchObj);
5159
+ }
5160
+ }
5161
+ }
5162
+ if (profaneWords.length > 0) {
5163
+ this.debugLog("Detected:", profaneWords);
5164
+ }
5165
+ let processedText = text;
5166
+ if (this.replaceWith && profaneWords.length > 0) {
5167
+ const uniqueWords = Array.from(new Set(profaneWords));
5168
+ for (const word of uniqueWords) {
5169
+ const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
5170
+ const replacementRegex = this.wordBoundaries ? new RegExp(`\\b${escaped}\\b`, "gi") : new RegExp(escaped, "gi");
5171
+ processedText = processedText.replace(
5172
+ replacementRegex,
5173
+ this.replaceWith
5174
+ );
5175
+ }
5176
+ }
5177
+ let contextScore;
5178
+ if (this.enableContextAware && matches.length > 0) {
5179
+ const totalScore = matches.reduce((sum, match) => sum + (match.contextScore || 0.5), 0);
5180
+ contextScore = totalScore / matches.length;
5181
+ }
5182
+ const result = {
5183
+ containsProfanity: profaneWords.length > 0,
5184
+ profaneWords: Array.from(new Set(profaneWords)),
5185
+ processedText: this.replaceWith ? processedText : void 0,
5186
+ severityMap: this.severityLevels && Object.keys(severityMap).length > 0 ? severityMap : void 0,
5187
+ matches: matches.length > 0 ? matches : void 0,
5188
+ contextScore,
5189
+ reason: matches.length > 0 ? `Found ${matches.length} potential profanity matches` : "No profanity detected"
5190
+ };
5191
+ this.addToCache(cacheKey, result);
5192
+ return result;
5193
+ }
5194
+ /**
5195
+ * Checks profanity with minimum severity filtering.
5196
+ *
5197
+ * @param text - The text to check
5198
+ * @param minSeverity - Minimum severity level to include in results
5199
+ * @returns Object with filtered words and full result
5200
+ */
5201
+ checkProfanityWithMinSeverity(text, minSeverity = 1 /* EXACT */) {
5202
+ const result = this.checkProfanity(text);
5203
+ const filteredWords = result.severityMap && result.profaneWords.length > 0 ? result.profaneWords.filter((word) => {
5204
+ const severity = result.severityMap?.[word];
5205
+ return typeof severity === "number" && severity >= minSeverity;
5206
+ }) : [];
5207
+ return { filteredWords, result };
5208
+ }
5209
+ };
5210
+
282
5211
  // src/ml/HybridFilter.ts
283
5212
  var HybridFilter = class {
284
5213
  /**
@@ -551,7 +5480,5 @@ var HybridFilter = class {
551
5480
  this.mlDetector?.dispose();
552
5481
  }
553
5482
  };
554
- export {
555
- HybridFilter,
556
- ToxicityDetector
557
- };
5483
+
5484
+ export { HybridFilter, ToxicityDetector };