jumpy-lion 0.0.33 → 0.0.35

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.
Files changed (128) hide show
  1. package/dist/browser-controller.d.ts +2 -2
  2. package/dist/browser-controller.d.ts.map +1 -1
  3. package/dist/browser-controller.js +34 -5
  4. package/dist/browser-controller.js.map +1 -1
  5. package/dist/browser-plugin.d.ts +21 -0
  6. package/dist/browser-plugin.d.ts.map +1 -1
  7. package/dist/browser-plugin.js +10 -4
  8. package/dist/browser-plugin.js.map +1 -1
  9. package/dist/browser-process/browser.d.ts +15 -0
  10. package/dist/browser-process/browser.d.ts.map +1 -1
  11. package/dist/browser-process/browser.js +6 -3
  12. package/dist/browser-process/browser.js.map +1 -1
  13. package/dist/crawler.d.ts +15 -0
  14. package/dist/crawler.d.ts.map +1 -1
  15. package/dist/crawler.js.map +1 -1
  16. package/dist/fingerprinting/anti-webgpu/background.d.ts +2 -0
  17. package/dist/fingerprinting/anti-webgpu/background.d.ts.map +1 -0
  18. package/dist/fingerprinting/anti-webgpu/background.js +4 -0
  19. package/dist/fingerprinting/anti-webgpu/background.js.map +1 -0
  20. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts +2 -0
  21. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts.map +1 -0
  22. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js +50 -0
  23. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js.map +1 -0
  24. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts +2 -0
  25. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts.map +1 -0
  26. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js +172 -0
  27. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js.map +1 -0
  28. package/dist/fingerprinting/anti-webgpu/data/icons/128.png +0 -0
  29. package/dist/fingerprinting/anti-webgpu/data/icons/16.png +0 -0
  30. package/dist/fingerprinting/anti-webgpu/data/icons/32.png +0 -0
  31. package/dist/fingerprinting/anti-webgpu/data/icons/48.png +0 -0
  32. package/dist/fingerprinting/anti-webgpu/data/icons/64.png +0 -0
  33. package/dist/fingerprinting/anti-webgpu/data/popup/popup.css +88 -0
  34. package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts +2 -0
  35. package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts.map +1 -0
  36. package/dist/fingerprinting/anti-webgpu/data/popup/popup.html +58 -0
  37. package/dist/fingerprinting/anti-webgpu/data/popup/popup.js +96 -0
  38. package/dist/fingerprinting/anti-webgpu/data/popup/popup.js.map +1 -0
  39. package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts +2 -0
  40. package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts.map +1 -0
  41. package/dist/fingerprinting/anti-webgpu/lib/chrome.js +249 -0
  42. package/dist/fingerprinting/anti-webgpu/lib/chrome.js.map +1 -0
  43. package/dist/fingerprinting/anti-webgpu/lib/common.d.ts +2 -0
  44. package/dist/fingerprinting/anti-webgpu/lib/common.d.ts.map +1 -0
  45. package/dist/fingerprinting/anti-webgpu/lib/common.js +86 -0
  46. package/dist/fingerprinting/anti-webgpu/lib/common.js.map +1 -0
  47. package/dist/fingerprinting/anti-webgpu/lib/config.d.ts +2 -0
  48. package/dist/fingerprinting/anti-webgpu/lib/config.d.ts.map +1 -0
  49. package/dist/fingerprinting/anti-webgpu/lib/config.js +14 -0
  50. package/dist/fingerprinting/anti-webgpu/lib/config.js.map +1 -0
  51. package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts +2 -0
  52. package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts.map +1 -0
  53. package/dist/fingerprinting/anti-webgpu/lib/runtime.js +107 -0
  54. package/dist/fingerprinting/anti-webgpu/lib/runtime.js.map +1 -0
  55. package/dist/fingerprinting/anti-webgpu/manifest.json +58 -0
  56. package/dist/fingerprinting/fingerprint-injector.d.ts +85 -1
  57. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  58. package/dist/fingerprinting/fingerprint-injector.js +188 -90
  59. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  60. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts +6 -0
  61. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -0
  62. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +87 -0
  63. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -0
  64. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts +6 -0
  65. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -0
  66. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +95 -0
  67. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -0
  68. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts +6 -0
  69. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -0
  70. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +96 -0
  71. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -0
  72. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts +7 -0
  73. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -0
  74. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +219 -0
  75. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -0
  76. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +19 -0
  77. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -0
  78. package/dist/fingerprinting/fingerprint-overrides/index.js +19 -0
  79. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -0
  80. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts +6 -0
  81. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -0
  82. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +262 -0
  83. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -0
  84. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +7 -0
  85. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -0
  86. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +103 -0
  87. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -0
  88. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts +6 -0
  89. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -0
  90. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +228 -0
  91. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -0
  92. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +20 -0
  93. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -0
  94. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +227 -0
  95. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -0
  96. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +6 -0
  97. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -0
  98. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +84 -0
  99. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -0
  100. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +6 -0
  101. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -0
  102. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +440 -0
  103. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -0
  104. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +6 -0
  105. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -0
  106. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +95 -0
  107. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -0
  108. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts +12 -0
  109. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -0
  110. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +167 -0
  111. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -0
  112. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts +6 -0
  113. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -0
  114. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +205 -0
  115. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -0
  116. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts +6 -0
  117. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -0
  118. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +96 -0
  119. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -0
  120. package/dist/index.d.ts +3 -2
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.js.map +1 -1
  123. package/dist/page.d.ts +1 -0
  124. package/dist/page.d.ts.map +1 -1
  125. package/dist/page.js +42 -1
  126. package/dist/page.js.map +1 -1
  127. package/dist/tsconfig.build.tsbuildinfo +1 -1
  128. package/package.json +6 -4
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/fingerprinting/anti-webgpu/lib/config.js"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ var config = {};
2
+
3
+ config.test = {"page": "https://webbrowsertools.com/webgpu-fingerprint/"};
4
+
5
+ config.welcome = {
6
+ set lastupdate (val) {app.storage.write("lastupdate", val)},
7
+ get lastupdate () {return app.storage.read("lastupdate") !== undefined ? app.storage.read("lastupdate") : 0}
8
+ };
9
+
10
+ config.notification = {
11
+ "timeout": null,
12
+ set show (val) {app.storage.write("notification", val)},
13
+ get show () {return app.storage.read("notification") !== undefined ? app.storage.read("notification") : false}
14
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/fingerprinting/anti-webgpu/lib/config.js"],"names":[],"mappings":"AAAA,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,MAAM,CAAC,IAAI,GAAG,EAAC,MAAM,EAAE,iDAAiD,EAAC,CAAC;AAE1E,MAAM,CAAC,OAAO,GAAG;IACf,IAAI,UAAU,CAAE,GAAG,IAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA,CAAA,CAAC;IAC3D,IAAI,UAAU,KAAK,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,CAAC;CAC7G,CAAC;AAEF,MAAM,CAAC,YAAY,GAAG;IACpB,SAAS,EAAE,IAAI;IACf,IAAI,IAAI,CAAE,GAAG,IAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA,CAAA,CAAC;IACvD,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA,CAAA,CAAC;CAC/G,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/fingerprinting/anti-webgpu/lib/runtime.js"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ app.version = function () {return chrome.runtime.getManifest().version};
2
+ app.homepage = function () {return chrome.runtime.getManifest().homepage_url};
3
+
4
+ if (!navigator.webdriver) {
5
+ app.on.uninstalled(app.homepage() + "?v=" + app.version() + "&type=uninstall");
6
+ app.on.installed(function (e) {
7
+ app.on.management(function (result) {
8
+ if (result.installType === "normal") {
9
+ app.tab.query.index(function (index) {
10
+ let previous = e.previousVersion !== undefined && e.previousVersion !== app.version();
11
+ let doupdate = previous && parseInt((Date.now() - config.welcome.lastupdate) / (24 * 3600 * 1000)) > 45;
12
+ if (e.reason === "install" || (e.reason === "update" && doupdate)) {
13
+ let parameter = (e.previousVersion ? "&p=" + e.previousVersion : '') + "&type=" + e.reason;
14
+ let url = app.homepage() + "?v=" + app.version() + parameter;
15
+ app.tab.open(url, index, e.reason === "install");
16
+ config.welcome.lastupdate = Date.now();
17
+ }
18
+ });
19
+ }
20
+ });
21
+ });
22
+ }
23
+
24
+ app.on.message(function (request, sender) {
25
+ if (request) {
26
+ if (request.path === "popup-to-background") {
27
+ for (let id in app.popup.message) {
28
+ if (app.popup.message[id]) {
29
+ if ((typeof app.popup.message[id]) === "function") {
30
+ if (id === request.method) {
31
+ app.popup.message[id](request.data);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ /* */
38
+ if (request.path === "page-to-background") {
39
+ for (let id in app.page.message) {
40
+ if (app.page.message[id]) {
41
+ if ((typeof app.page.message[id]) === "function") {
42
+ if (id === request.method) {
43
+ let a = request.data || {};
44
+ if (sender) {
45
+ a.frameId = sender.frameId;
46
+ /* */
47
+ if (sender.tab) {
48
+ if (a.tabId === undefined) a.tabId = sender.tab.id;
49
+ if (a.title === undefined) a.title = sender.tab.title ? sender.tab.title : '';
50
+ if (a.top === undefined) a.top = sender.tab.url ? sender.tab.url : (sender.url ? sender.url : '');
51
+ }
52
+ }
53
+ /* */
54
+ app.page.message[id](a);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ });
62
+
63
+ app.on.connect(function (port) {
64
+ if (port) {
65
+ if (port.name) {
66
+ if (port.name in app) {
67
+ app[port.name].port = port;
68
+ }
69
+ }
70
+ /* */
71
+ port.onDisconnect.addListener(function (e) {
72
+ app.storage.load(function () {
73
+ if (e) {
74
+ if (e.name) {
75
+ if (e.name in app) {
76
+ app[e.name].port = null;
77
+ }
78
+ }
79
+ }
80
+ });
81
+ });
82
+ /* */
83
+ port.onMessage.addListener(function (e) {
84
+ app.storage.load(function () {
85
+ if (e) {
86
+ if (e.path) {
87
+ if (e.port) {
88
+ if (e.port in app) {
89
+ if (e.path === (e.port + "-to-background")) {
90
+ for (let id in app[e.port].message) {
91
+ if (app[e.port].message[id]) {
92
+ if ((typeof app[e.port].message[id]) === "function") {
93
+ if (id === e.method) {
94
+ app[e.port].message[id](e.data);
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }
104
+ });
105
+ });
106
+ }
107
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/fingerprinting/anti-webgpu/lib/runtime.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ {
2
+ "update_url": "https://clients2.google.com/service/update2/crx",
3
+
4
+ "version": "0.1.1",
5
+ "manifest_version": 3,
6
+ "offline_enabled": true,
7
+ "name": "WebGPU Fingerprint Defender",
8
+ "homepage_url": "https://mybrowseraddon.com/webgpu-defender.html",
9
+ "description": "Defending against WebGPU fingerprinting by reporting a fake value.",
10
+ "commands": {
11
+ "_execute_action": {}
12
+ },
13
+ "background": {
14
+ "service_worker": "background.js"
15
+ },
16
+ "permissions": [
17
+ "storage",
18
+ "contextMenus",
19
+ "notifications"
20
+ ],
21
+ "action": {
22
+ "default_popup": "data/popup/popup.html",
23
+ "default_title": "WebGPU Fingerprint Defender",
24
+ "default_icon": {
25
+ "16": "data/icons/16.png",
26
+ "32": "data/icons/32.png",
27
+ "48": "data/icons/48.png",
28
+ "64": "data/icons/64.png"
29
+ }
30
+ },
31
+ "content_scripts": [
32
+ {
33
+ "world": "MAIN",
34
+ "all_frames": true,
35
+ "matches": ["*://*/*"],
36
+ "match_about_blank": true,
37
+ "run_at": "document_start",
38
+ "match_origin_as_fallback": true,
39
+ "js": ["data/content_script/page_context/inject.js"]
40
+ },
41
+ {
42
+ "world": "ISOLATED",
43
+ "all_frames": true,
44
+ "matches": ["*://*/*"],
45
+ "match_about_blank": true,
46
+ "run_at": "document_start",
47
+ "match_origin_as_fallback": true,
48
+ "js": ["data/content_script/inject.js"]
49
+ }
50
+ ],
51
+ "icons": {
52
+ "16": "data/icons/16.png",
53
+ "32": "data/icons/32.png",
54
+ "48": "data/icons/48.png",
55
+ "64": "data/icons/64.png",
56
+ "128": "data/icons/128.png"
57
+ }
58
+ }
@@ -1,3 +1,65 @@
1
+ /**
2
+ * Enhanced CDP Fingerprint Injector for 2025
3
+ *
4
+ * This module provides advanced fingerprint spoofing and anti-detection capabilities
5
+ * specifically designed to bypass hardcore fingerprinting techniques used in 2025.
6
+ *
7
+ * Key Features:
8
+ *
9
+ * 1. **WebGPU Fingerprinting Protection**:
10
+ * - Spoofs GPU adapter information and capabilities
11
+ * - Fakes GPU uptime to appear as if the GPU has been running for 24-72 hours
12
+ * - Intercepts timestamp queries to prevent timing-based detection
13
+ *
14
+ * 2. **Platform Consistency (1:1 Fingerprinting)**:
15
+ * - Ensures all browser properties match the specified platform (Win32, MacIntel, Linux)
16
+ * - Synchronizes navigator properties, screen metrics, and WebGL/WebGPU values
17
+ * - Platform-specific GPU configurations for realistic fingerprints
18
+ *
19
+ * 3. **Runtime.enable Bypass**:
20
+ * - Prevents CDP detection through console.log(Error) technique
21
+ * - Intercepts and blocks Runtime.enable calls
22
+ * - Modifies Error stack traces to hide automation
23
+ *
24
+ * 4. **Advanced Canvas Protection**:
25
+ * - Adds controlled noise to canvas operations
26
+ * - Protects against both 2D and WebGL canvas fingerprinting
27
+ * - Includes font measurement variations
28
+ *
29
+ * 5. **WebRTC IP Leak Prevention**:
30
+ * - Filters STUN servers to prevent IP leaks
31
+ * - Provides fake but consistent device IDs
32
+ * - Modifies ICE candidates and statistics
33
+ *
34
+ * 6. **Audio Context Spoofing**:
35
+ * - Adds noise to audio processing to prevent fingerprinting
36
+ * - Works with both AudioContext and OfflineAudioContext
37
+ *
38
+ * 7. **Client Rect Variations**:
39
+ * - Adds small variations to getBoundingClientRect results
40
+ * - Makes automation harder to detect through DOM measurements
41
+ *
42
+ * 8. **Mouse Movement Humanization**:
43
+ * - Generates bezier curve movements instead of straight lines
44
+ * - Adds random variations to mouse paths
45
+ *
46
+ * Usage:
47
+ * ```typescript
48
+ * await CdpFingerprintInjector.injectFingerprint(page, fingerprint, {
49
+ * enableAdvancedStealth: true,
50
+ * bypassRuntimeEnable: true,
51
+ * platform: 'Win32', // Spoof as Windows for better evasion on Apify Linux
52
+ * spoofWebGL: true,
53
+ * spoofAudioContext: true,
54
+ * spoofClientRects: true,
55
+ * humanizeInteractions: true,
56
+ * spoofFonts: true, // New: Hide Linux-specific fonts
57
+ * spoofPerformance: true, // New: Windows-like timing characteristics
58
+ * spoofLocale: true, // New: Consistent Windows locale formatting
59
+ * useFingerprintDefaults: true // Use fingerprint-generator Windows values
60
+ * });
61
+ * ```
62
+ */
1
63
  import type { BrowserFingerprintWithHeaders } from 'fingerprint-generator';
2
64
  import type CdpPage from "../page.js";
3
65
  interface Viewport {
@@ -12,18 +74,40 @@ interface AttachOptions {
12
74
  proxyUrl?: string;
13
75
  detectTimezone?: boolean;
14
76
  viewport?: Viewport;
77
+ enableAdvancedStealth?: boolean;
78
+ bypassRuntimeEnable?: boolean;
79
+ humanizeInteractions?: boolean;
80
+ spoofWebGL?: boolean;
81
+ spoofAudioContext?: boolean;
82
+ spoofClientRects?: boolean;
83
+ maskAutomationFlags?: boolean;
84
+ platform?: 'Win32' | 'MacIntel' | 'Linux x86_64';
85
+ spoofFonts?: boolean;
86
+ spoofPerformance?: boolean;
87
+ spoofLocale?: boolean;
88
+ useExperimentalFingerprints?: boolean;
89
+ useFingerprintDefaults?: boolean;
15
90
  }
16
91
  export declare class CdpFingerprintInjector {
17
92
  private injector;
18
93
  private page;
19
94
  constructor(page: CdpPage);
95
+ /**
96
+ * Get recommended settings for Apify platform
97
+ * These settings are optimized for running headful Chrome on Apify (Linux)
98
+ * but spoofed to appear as Windows for better anti-bot evasion
99
+ */
100
+ static getApifyRecommendedSettings(): AttachOptions;
20
101
  static injectFingerprint(page: CdpPage, fingerprint: BrowserFingerprintWithHeaders, options?: AttachOptions): Promise<void>;
21
102
  private setViewport;
22
103
  private setExtraHTTPHeaders;
23
104
  private getTimezoneFromIp;
24
105
  private setTimezoneOverride;
25
- private createStealthScript;
26
106
  private injectStealthProtections;
107
+ /**
108
+ * Extract relevant data from fingerprint for overrides
109
+ */
110
+ private extractFingerprintData;
27
111
  attachToPage(browserFingerprintWithHeaders: BrowserFingerprintWithHeaders, options?: AttachOptions): Promise<void>;
28
112
  }
29
113
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint-injector.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/fingerprint-injector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAI3E,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AAEtC,UAAU,QAAQ;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,aAAa;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB;AAMD,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,IAAI,CAAU;gBAEV,IAAI,EAAE,OAAO;WAKZ,iBAAiB,CAC1B,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,6BAA6B,EAC1C,OAAO,CAAC,EAAE,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC;YAKF,WAAW;YAaX,mBAAmB;YAInB,iBAAiB;YAcjB,mBAAmB;IAMjC,OAAO,CAAC,mBAAmB;YAuFb,wBAAwB;IAKzB,YAAY,CACrB,6BAA6B,EAAE,6BAA6B,EAC5D,OAAO,CAAC,EAAE,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC;CAqCnB"}
1
+ {"version":3,"file":"fingerprint-injector.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/fingerprint-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AAGH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAI3E,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AAoBtC,UAAU,QAAQ;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,aAAa;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAEjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CACpC;AAMD,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,IAAI,CAAU;gBAEV,IAAI,EAAE,OAAO;IAKzB;;;;OAIG;IACH,MAAM,CAAC,2BAA2B,IAAI,aAAa;WAwBtC,iBAAiB,CAC1B,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,6BAA6B,EAC1C,OAAO,CAAC,EAAE,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC;YAKF,WAAW;YAaX,mBAAmB;YAInB,iBAAiB;YAcjB,mBAAmB;YAMnB,wBAAwB;IAKtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqCjB,YAAY,CACrB,6BAA6B,EAAE,6BAA6B,EAC5D,OAAO,CAAC,EAAE,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC;CAyHnB"}
@@ -1,6 +1,69 @@
1
+ /**
2
+ * Enhanced CDP Fingerprint Injector for 2025
3
+ *
4
+ * This module provides advanced fingerprint spoofing and anti-detection capabilities
5
+ * specifically designed to bypass hardcore fingerprinting techniques used in 2025.
6
+ *
7
+ * Key Features:
8
+ *
9
+ * 1. **WebGPU Fingerprinting Protection**:
10
+ * - Spoofs GPU adapter information and capabilities
11
+ * - Fakes GPU uptime to appear as if the GPU has been running for 24-72 hours
12
+ * - Intercepts timestamp queries to prevent timing-based detection
13
+ *
14
+ * 2. **Platform Consistency (1:1 Fingerprinting)**:
15
+ * - Ensures all browser properties match the specified platform (Win32, MacIntel, Linux)
16
+ * - Synchronizes navigator properties, screen metrics, and WebGL/WebGPU values
17
+ * - Platform-specific GPU configurations for realistic fingerprints
18
+ *
19
+ * 3. **Runtime.enable Bypass**:
20
+ * - Prevents CDP detection through console.log(Error) technique
21
+ * - Intercepts and blocks Runtime.enable calls
22
+ * - Modifies Error stack traces to hide automation
23
+ *
24
+ * 4. **Advanced Canvas Protection**:
25
+ * - Adds controlled noise to canvas operations
26
+ * - Protects against both 2D and WebGL canvas fingerprinting
27
+ * - Includes font measurement variations
28
+ *
29
+ * 5. **WebRTC IP Leak Prevention**:
30
+ * - Filters STUN servers to prevent IP leaks
31
+ * - Provides fake but consistent device IDs
32
+ * - Modifies ICE candidates and statistics
33
+ *
34
+ * 6. **Audio Context Spoofing**:
35
+ * - Adds noise to audio processing to prevent fingerprinting
36
+ * - Works with both AudioContext and OfflineAudioContext
37
+ *
38
+ * 7. **Client Rect Variations**:
39
+ * - Adds small variations to getBoundingClientRect results
40
+ * - Makes automation harder to detect through DOM measurements
41
+ *
42
+ * 8. **Mouse Movement Humanization**:
43
+ * - Generates bezier curve movements instead of straight lines
44
+ * - Adds random variations to mouse paths
45
+ *
46
+ * Usage:
47
+ * ```typescript
48
+ * await CdpFingerprintInjector.injectFingerprint(page, fingerprint, {
49
+ * enableAdvancedStealth: true,
50
+ * bypassRuntimeEnable: true,
51
+ * platform: 'Win32', // Spoof as Windows for better evasion on Apify Linux
52
+ * spoofWebGL: true,
53
+ * spoofAudioContext: true,
54
+ * spoofClientRects: true,
55
+ * humanizeInteractions: true,
56
+ * spoofFonts: true, // New: Hide Linux-specific fonts
57
+ * spoofPerformance: true, // New: Windows-like timing characteristics
58
+ * spoofLocale: true, // New: Consistent Windows locale formatting
59
+ * useFingerprintDefaults: true // Use fingerprint-generator Windows values
60
+ * });
61
+ * ```
62
+ */
1
63
  import { log } from 'crawlee';
2
64
  import { FingerprintInjector } from 'fingerprint-injector';
3
65
  import { gotScraping } from 'got-scraping';
66
+ import { createStealthScript, createWebGLSpoofingScript, createAudioFingerprintSpoofingScript, createAdvancedCanvasProtectionScript, createClientRectSpoofingScript, createWebRTCSpoofingScript, createWebGPUSpoofingScript, createPlatformConsistencyScript, setupMouseMovementHumanization, setupRuntimeEnableBypass, createFontSpoofingScript, createPerformanceSpoofingScript, createLocaleSpoofingScript, createUAClientHintsSpoofingScript, } from './fingerprint-overrides/index.js';
4
67
  export class CdpFingerprintInjector {
5
68
  constructor(page) {
6
69
  Object.defineProperty(this, "injector", {
@@ -18,6 +81,34 @@ export class CdpFingerprintInjector {
18
81
  this.injector = new FingerprintInjector();
19
82
  this.page = page;
20
83
  }
84
+ /**
85
+ * Get recommended settings for Apify platform
86
+ * These settings are optimized for running headful Chrome on Apify (Linux)
87
+ * but spoofed to appear as Windows for better anti-bot evasion
88
+ */
89
+ static getApifyRecommendedSettings() {
90
+ return {
91
+ enableAdvancedStealth: true,
92
+ bypassRuntimeEnable: true,
93
+ platform: 'Win32', // Spoof as Windows instead of Linux for better evasion
94
+ spoofWebGL: true,
95
+ spoofAudioContext: true,
96
+ spoofClientRects: true,
97
+ humanizeInteractions: true,
98
+ detectTimezone: true, // Auto-detect timezone from proxy
99
+ // New advanced spoofing options for 2025
100
+ spoofFonts: true,
101
+ spoofPerformance: true,
102
+ spoofLocale: true,
103
+ useFingerprintDefaults: true, // Use fingerprint-generator Windows values
104
+ viewport: {
105
+ width: 1920,
106
+ height: 1080,
107
+ deviceScaleFactor: 1,
108
+ mobile: false,
109
+ },
110
+ };
111
+ }
21
112
  static async injectFingerprint(page, fingerprint, options) {
22
113
  const handler = new CdpFingerprintInjector(page);
23
114
  return handler.attachToPage(fingerprint, options);
@@ -55,96 +146,42 @@ export class CdpFingerprintInjector {
55
146
  timezoneId: timezone,
56
147
  });
57
148
  }
58
- createStealthScript() {
59
- return `
60
- (() => {
61
- 'use strict';
62
-
63
- // Helper functions
64
- const wrapNative = (fnName) => {
65
- return function() {
66
- return \`function \${fnName}() { [native code] }\`;
67
- };
68
- };
69
-
70
- const hideErrorStack = () => {
71
- const originalStackDescriptor = Object.getOwnPropertyDescriptor(Error.prototype, 'stack');
72
- if (originalStackDescriptor?.configurable) {
73
- Object.defineProperty(Error.prototype, 'stack', {
74
- get() {
75
- return 'Error\\n <anonymous>:1:1';
76
- },
77
- set() {},
78
- configurable: false,
79
- enumerable: false
80
- });
81
-
82
- const maskedStackGetter = Object.getOwnPropertyDescriptor(Error.prototype, 'stack').get;
83
- if (maskedStackGetter) {
84
- maskedStackGetter.toString = wrapNative('get stack');
85
- }
86
- }
87
- };
88
-
89
- const patchConsole = () => {
90
- const _console = window.console;
91
- if (!_console || typeof _console !== 'object') return;
92
-
93
- const transformArg = (arg) => {
94
- try {
95
- return arg && typeof arg === 'object' ? JSON.stringify(arg) : String(arg);
96
- } catch {
97
- return String(arg);
98
- }
99
- };
100
-
101
- const createPatchedMethod = (originalFn, methodName) => {
102
- const newFn = function(...args) {
103
- const transformedArgs = args.map(transformArg);
104
- return Function.prototype.apply.call(originalFn, _console, transformedArgs);
105
- };
106
-
107
- Object.defineProperty(newFn, 'toString', {
108
- value: wrapNative(methodName),
109
- writable: false,
110
- enumerable: false,
111
- configurable: true
112
- });
113
-
114
- return newFn;
115
- };
116
-
117
- ['log', 'warn', 'error', 'info', 'debug'].forEach(method => {
118
- try {
119
- const originalFn = _console[method];
120
- if (originalFn && typeof originalFn === 'function') {
121
- Object.defineProperty(_console, method, {
122
- value: createPatchedMethod(originalFn, method),
123
- writable: true,
124
- enumerable: false,
125
- configurable: true
126
- });
127
- }
128
- } catch {}
129
- });
130
-
131
- Object.defineProperty(window, 'console', {
132
- value: _console,
133
- configurable: true,
134
- writable: false,
135
- enumerable: false
136
- });
137
- };
138
-
139
- // Initialize protections
140
- hideErrorStack();
141
- patchConsole();
142
- })();`;
143
- }
144
149
  async injectStealthProtections() {
145
- const stealthScript = this.createStealthScript();
150
+ const stealthScript = createStealthScript();
146
151
  await this.page.client.Page.addScriptToEvaluateOnNewDocument({ source: stealthScript });
147
152
  }
153
+ /**
154
+ * Extract relevant data from fingerprint for overrides
155
+ */
156
+ extractFingerprintData(fingerprint) {
157
+ const webglConfig = {};
158
+ const platformConfig = {};
159
+ // Extract WebGL data if available
160
+ if (fingerprint.webgl) {
161
+ webglConfig.vendor = fingerprint.webgl.vendor;
162
+ webglConfig.renderer = fingerprint.webgl.renderer;
163
+ webglConfig.vendorUnmasked = fingerprint.webgl.vendorUnmasked;
164
+ webglConfig.rendererUnmasked = fingerprint.webgl.rendererUnmasked;
165
+ }
166
+ // Extract platform data if available
167
+ if (fingerprint.navigator) {
168
+ platformConfig.platform = fingerprint.navigator.platform;
169
+ platformConfig.vendor = fingerprint.navigator.vendor;
170
+ platformConfig.vendorSub = fingerprint.navigator.vendorSub;
171
+ platformConfig.productSub = fingerprint.navigator.productSub;
172
+ platformConfig.hardwareConcurrency = fingerprint.navigator.hardwareConcurrency;
173
+ platformConfig.maxTouchPoints = fingerprint.navigator.maxTouchPoints;
174
+ platformConfig.language = fingerprint.navigator.language;
175
+ platformConfig.languages = fingerprint.navigator.languages;
176
+ platformConfig.oscpu = fingerprint.navigator.oscpu;
177
+ }
178
+ if (fingerprint.screen) {
179
+ platformConfig.devicePixelRatio = fingerprint.screen.devicePixelRatio;
180
+ platformConfig.screenDepth = fingerprint.screen.pixelDepth;
181
+ platformConfig.colorDepth = fingerprint.screen.colorDepth;
182
+ }
183
+ return { webglConfig, platformConfig };
184
+ }
148
185
  async attachToPage(browserFingerprintWithHeaders, options) {
149
186
  const { fingerprint, headers } = browserFingerprintWithHeaders;
150
187
  const shouldFetchTimezone = options?.timezone || options?.detectTimezone;
@@ -163,15 +200,76 @@ export class CdpFingerprintInjector {
163
200
  // Main script from fingerprint-injector
164
201
  // @ts-expect-error Using private
165
202
  const fingerprintScript = this.injector.getInjectableFingerprintFunction(enhancedFingerprint);
203
+ // Prepare all scripts to inject
204
+ const scriptsToInject = [fingerprintScript];
205
+ // Always inject base stealth protections
206
+ await this.injectStealthProtections();
207
+ // Extract fingerprint data if we should use it
208
+ const shouldUseFingerprintData = options?.useFingerprintDefaults !== false;
209
+ const { webglConfig, platformConfig } = shouldUseFingerprintData
210
+ ? this.extractFingerprintData(fingerprint)
211
+ : { webglConfig: undefined, platformConfig: undefined };
212
+ // Add advanced features based on options
213
+ if (options?.enableAdvancedStealth !== false) {
214
+ // UA Client Hints spoofing (NEW - 2025)
215
+ scriptsToInject.push(createUAClientHintsSpoofingScript(options?.platform));
216
+ // WebGL spoofing
217
+ if (options?.spoofWebGL !== false) {
218
+ scriptsToInject.push(createWebGLSpoofingScript(shouldUseFingerprintData ? webglConfig : undefined));
219
+ }
220
+ // Audio fingerprint spoofing
221
+ if (options?.spoofAudioContext !== false) {
222
+ scriptsToInject.push(createAudioFingerprintSpoofingScript());
223
+ }
224
+ // Canvas protection
225
+ scriptsToInject.push(createAdvancedCanvasProtectionScript());
226
+ // Client rect spoofing
227
+ if (options?.spoofClientRects !== false) {
228
+ scriptsToInject.push(createClientRectSpoofingScript());
229
+ }
230
+ // WebRTC spoofing
231
+ scriptsToInject.push(createWebRTCSpoofingScript());
232
+ // WebGPU spoofing (more aggressive when experimental fingerprints enabled)
233
+ scriptsToInject.push(createWebGPUSpoofingScript(options?.useExperimentalFingerprints));
234
+ // Font spoofing (2025)
235
+ if (options?.spoofFonts !== false) {
236
+ scriptsToInject.push(createFontSpoofingScript());
237
+ }
238
+ // Performance spoofing (2025)
239
+ if (options?.spoofPerformance !== false) {
240
+ scriptsToInject.push(createPerformanceSpoofingScript());
241
+ }
242
+ // Locale spoofing (2025)
243
+ if (options?.spoofLocale !== false) {
244
+ scriptsToInject.push(createLocaleSpoofingScript());
245
+ }
246
+ }
247
+ // Apply platform consistency script
248
+ if (options?.platform) {
249
+ scriptsToInject.push(createPlatformConsistencyScript(options.platform, shouldUseFingerprintData ? platformConfig : undefined));
250
+ }
251
+ // Inject all scripts
166
252
  await Promise.all([
167
253
  this.setViewport(options?.viewport),
168
254
  this.setExtraHTTPHeaders(filteredHeaders),
169
- this.page.client.Page.addScriptToEvaluateOnNewDocument({ source: fingerprintScript }),
170
- this.injectStealthProtections(),
255
+ ...scriptsToInject.map(async (script) => this.page.client.Page.addScriptToEvaluateOnNewDocument({ source: script })),
171
256
  ]);
172
- log.debug('Fingerprint attached with settings:', {
257
+ // Setup mouse movement humanization if requested
258
+ if (options?.humanizeInteractions) {
259
+ await setupMouseMovementHumanization(this.page.client);
260
+ }
261
+ // Additional CDP-level protections
262
+ if (options?.bypassRuntimeEnable) {
263
+ await setupRuntimeEnableBypass(this.page.client);
264
+ }
265
+ log.info('Enhanced fingerprint attached with settings:', {
173
266
  proxy: options?.proxyUrl,
174
267
  timezone,
268
+ advancedStealth: options?.enableAdvancedStealth !== false,
269
+ humanizeInteractions: options?.humanizeInteractions,
270
+ bypassRuntimeEnable: options?.bypassRuntimeEnable,
271
+ platform: options?.platform,
272
+ useFingerprintDefaults: options?.useFingerprintDefaults,
175
273
  });
176
274
  }
177
275
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint-injector.js","sourceRoot":"","sources":["../../src/fingerprinting/fingerprint-injector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fingerprint-injector.js","sourceRoot":"","sources":["../../src/fingerprinting/fingerprint-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,EACH,mBAAmB,EACnB,yBAAyB,EACzB,oCAAoC,EACpC,oCAAoC,EACpC,8BAA8B,EAC9B,0BAA0B,EAC1B,0BAA0B,EAC1B,+BAA+B,EAC/B,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,0BAA0B,EAC1B,iCAAiC,GAGpC,MAAM,kCAAkC,CAAC;AAsC1C,MAAM,OAAO,sBAAsB;IAI/B,YAAY,IAAa;QAHjB;;;;;WAA8B;QAC9B;;;;;WAAc;QAGlB,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,2BAA2B;QAC9B,OAAO;YACH,qBAAqB,EAAE,IAAI;YAC3B,mBAAmB,EAAE,IAAI;YACzB,QAAQ,EAAE,OAAO,EAAE,uDAAuD;YAC1E,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,IAAI;YACvB,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,IAAI;YAC1B,cAAc,EAAE,IAAI,EAAE,kCAAkC;YACxD,yCAAyC;YACzC,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,IAAI;YACtB,WAAW,EAAE,IAAI;YACjB,sBAAsB,EAAE,IAAI,EAAE,2CAA2C;YACzE,QAAQ,EAAE;gBACN,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,IAAI;gBACZ,iBAAiB,EAAE,CAAC;gBACpB,MAAM,EAAE,KAAK;aAChB;SACJ,CAAC;IACN,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAC1B,IAAa,EACb,WAA0C,EAC1C,OAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAmB;QACzC,MAAM,eAAe,GAAa;YAC9B,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,iBAAiB,EAAE,CAAC;YACpB,MAAM,EAAE,KAAK;SAChB,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC/D,sCAAsC;QACtC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,aAAoB,CAAC,CAAC;IACpF,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,OAA+B;QAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,QAAiB;QAC7C,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;gBAC/B,GAAG,EAAE,wBAAwB;gBAC7B,QAAQ;gBACR,YAAY,EAAE,MAAM;aACvB,CAAC,CAAC;YACH,OAAQ,QAAQ,CAAC,IAAuB,CAAC,QAAQ,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QAC9C,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;YACjD,UAAU,EAAE,QAAQ;SACvB,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,wBAAwB;QAClC,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;QAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,WAAgB;QAI3C,MAAM,WAAW,GAAgB,EAAE,CAAC;QACpC,MAAM,cAAc,GAAmB,EAAE,CAAC;QAE1C,kCAAkC;QAClC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;YAC9C,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC;YAClD,WAAW,CAAC,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC;YAC9D,WAAW,CAAC,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACtE,CAAC;QAED,qCAAqC;QACrC,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YACxB,cAAc,CAAC,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC;YACzD,cAAc,CAAC,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YACrD,cAAc,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;YAC3D,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC;YAC7D,cAAc,CAAC,mBAAmB,GAAG,WAAW,CAAC,SAAS,CAAC,mBAAmB,CAAC;YAC/E,cAAc,CAAC,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC;YACrE,cAAc,CAAC,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC;YACzD,cAAc,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;YAC3D,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;QACvD,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACrB,cAAc,CAAC,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACtE,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;YAC3D,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;QAC9D,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,YAAY,CACrB,6BAA4D,EAC5D,OAAuB;QAEvB,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,6BAA6B,CAAC;QAE/D,MAAM,mBAAmB,GAAG,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,cAAc,CAAC;QACzE,MAAM,QAAQ,GAAG,mBAAmB;YAChC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC;YACjD,CAAC,CAAC,SAAS,CAAC;QAEhB,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QAED,kDAAkD;QAClD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAErC,gDAAgD;QAChD,MAAM,mBAAmB,GAAI,IAAI,CAAC,QAAgB,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAEpF,iDAAiD;QACjD,MAAM,eAAe,GAAI,IAAI,CAAC,QAAgB,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAExF,wCAAwC;QACxC,iCAAiC;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,gCAAgC,CAAC,mBAAmB,CAAC,CAAC;QAE9F,gCAAgC;QAChC,MAAM,eAAe,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAE5C,yCAAyC;QACzC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEtC,+CAA+C;QAC/C,MAAM,wBAAwB,GAAG,OAAO,EAAE,sBAAsB,KAAK,KAAK,CAAC;QAC3E,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,wBAAwB;YAC5D,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC;YAC1C,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;QAE5D,yCAAyC;QACzC,IAAI,OAAO,EAAE,qBAAqB,KAAK,KAAK,EAAE,CAAC;YAC3C,wCAAwC;YACxC,eAAe,CAAC,IAAI,CAAC,iCAAiC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YAE3E,iBAAiB;YACjB,IAAI,OAAO,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;gBAChC,eAAe,CAAC,IAAI,CAAC,yBAAyB,CAC1C,wBAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CACrD,CAAC,CAAC;YACP,CAAC;YAED,6BAA6B;YAC7B,IAAI,OAAO,EAAE,iBAAiB,KAAK,KAAK,EAAE,CAAC;gBACvC,eAAe,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,oBAAoB;YACpB,eAAe,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,CAAC;YAE7D,uBAAuB;YACvB,IAAI,OAAO,EAAE,gBAAgB,KAAK,KAAK,EAAE,CAAC;gBACtC,eAAe,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,kBAAkB;YAClB,eAAe,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;YAEnD,2EAA2E;YAC3E,eAAe,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC;YAEvF,uBAAuB;YACvB,IAAI,OAAO,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;gBAChC,eAAe,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;YACrD,CAAC;YAED,8BAA8B;YAC9B,IAAI,OAAO,EAAE,gBAAgB,KAAK,KAAK,EAAE,CAAC;gBACtC,eAAe,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,yBAAyB;YACzB,IAAI,OAAO,EAAE,WAAW,KAAK,KAAK,EAAE,CAAC;gBACjC,eAAe,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAED,oCAAoC;QACpC,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACpB,eAAe,CAAC,IAAI,CAAC,+BAA+B,CAChD,OAAO,CAAC,QAAQ,EAChB,wBAAwB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CACxD,CAAC,CAAC;QACP,CAAC;QAED,qBAAqB;QACrB,MAAM,OAAO,CAAC,GAAG,CAAC;YACd,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC;YACnC,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;YACzC,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE,CAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAC7E;SACJ,CAAC,CAAC;QAEH,iDAAiD;QACjD,IAAI,OAAO,EAAE,oBAAoB,EAAE,CAAC;YAChC,MAAM,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,mCAAmC;QACnC,IAAI,OAAO,EAAE,mBAAmB,EAAE,CAAC;YAC/B,MAAM,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,8CAA8C,EAAE;YACrD,KAAK,EAAE,OAAO,EAAE,QAAQ;YACxB,QAAQ;YACR,eAAe,EAAE,OAAO,EAAE,qBAAqB,KAAK,KAAK;YACzD,oBAAoB,EAAE,OAAO,EAAE,oBAAoB;YACnD,mBAAmB,EAAE,OAAO,EAAE,mBAAmB;YACjD,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,sBAAsB,EAAE,OAAO,EAAE,sBAAsB;SAC1D,CAAC,CAAC;IACP,CAAC;CACJ"}