@analitikisler/ai-tag-debugger 0.17.0 → 0.19.0
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/CHANGELOG.md +17 -0
- package/README.md +16 -17
- package/README.tr.md +16 -17
- package/package.json +3 -3
- package/src/brand.js +17 -11
- package/src/browser.js +44 -8
- package/src/html/consent.js +152 -0
- package/src/html/css.js +1182 -0
- package/src/html/findings.js +493 -0
- package/src/html/journeys.js +449 -0
- package/src/html/lib.js +283 -0
- package/src/html/scope.js +350 -0
- package/src/html/script.js +300 -0
- package/src/html/shell.js +191 -0
- package/src/html/summary.js +288 -0
- package/src/i18n.js +385 -171
- package/src/metrics.js +9 -3
- package/src/plan-html.js +74 -27
- package/src/report-shared.js +123 -0
- package/src/report.js +24 -1505
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.19.0 (2026-10-25)
|
|
4
|
+
|
|
5
|
+
- New brand: the tool's name is written `ai tag debugger`, lowercase, wherever the reports, `plan.html`, the README, the MCP registry listing and the GitHub Actions examples show it. The reports and `plan.html` carry the new lockup with its red point, the ai mark on phones, the shared ai favicon, and the Analitik İşler master logo with its red point and three bars in the byline and footer. The logos take the page's text colour in light, dark and print, with only the point in red. The "broken" red is the brand's one red, `#C12D30` in light and `#FA6B6D` in dark. The `aitd` and `ai-tag-debugger` commands, the npm package and the config keys are unchanged.
|
|
6
|
+
- Fixed: dependencies with published advisories are updated: zod to 4.6.7 (the minimum is now 4.6.6), and body-parser, fast-uri and ip-address, which the MCP server's HTTP mode uses. `npm audit --omit=dev` reports none.
|
|
7
|
+
- Fixed: on macOS, a page load whose connection dropped is now tried once more, as on Linux; Chromium's error page could end the load or its retry with "interrupted by another navigation to chrome-error://chromewebdata/".
|
|
8
|
+
- Fixed: the GitHub Actions examples and the cron script pin 0.19.0. The deploy example pinned 0.6.3, which writes no `junit.xml` for its upload step.
|
|
9
|
+
- Development: the brand guide and its assets are in `brand/ai/` (a copy of `design/13-ai-brand` from the analitikisler.com repo), the retired orange set is in `brand/retired/`, and `node scripts/brand.js` embeds the assets into `src/brand.js`.
|
|
10
|
+
|
|
11
|
+
## 0.18.0 (2026-10-19)
|
|
12
|
+
|
|
13
|
+
- The HTML report was rebuilt as an inspector: a collapsible rail with seven sections (Summary, Findings, Journeys, Consent, Coverage, Inventory, Run), one screen at a time. The Summary is a score ring banded red, amber and green, the verdict, up to three lines saying what cost the points, status chips that open the findings pre-filtered, and six cards about the run. Findings have a filter bar (severity, owner, platform, journey, viewport, search) over failed, unverified and passed groups, every row collapsed and opening into Evidence, Fix, Where and Verify tabs. Journeys show the steps by page title on the left and the selected step's Hits, Data Layer and Requests tabs on the right, with a consent chip on every hit. Every card starts collapsed except the Summary; every section, filter and card has its own URL. With a model, the Summary shows its one-line headline and an AI summary card in Findings keeps its points and its "worth checking" list; a route that differs from the last run is named under the Run facts. Severity is never colour alone, one hue per kind of chip, light and dark mode, keyboard (`[` folds the rail, `1`–`7` jump), no horizontal scroll on phones, and the stacked no-JavaScript document is the print layout. Design notes and the mockups it was built from are under `docs/design/directions/`.
|
|
14
|
+
- `plan.html` uses the same stylesheet and chips as the report.
|
|
15
|
+
- The Trend table's last column is labelled "Problem points": it is the weighted count of open problems per run (lower is better), not the 0–100 data quality score.
|
|
16
|
+
- Fixed: in `report.md`, the link under a finding with no platform (a journey that did not finish, no Consent Mode default) or under a second finding with the same platform, event and check now opens its card in `report.html` instead of the Summary.
|
|
17
|
+
- Fixed: a `value` that is not a number (an unresolved template, a product name) showed as `NaN` in the platform parity table; the report now shows the text the tag sent, and a number on one platform against text on the other counts as a value difference.
|
|
18
|
+
- Development: the HTML report lives in `src/html/` (one module per section, the stylesheet and the hashed script as constants); the real demo capture is a test fixture; the design record under `docs/design/directions/` holds the UX research, the four directions with their rationales, and the chosen mockup.
|
|
19
|
+
|
|
3
20
|
## 0.17.0 (2026-10-19)
|
|
4
21
|
|
|
5
22
|
- The report opens with a verdict. A deterministic sentence names the lead problem and where it is ("purchase tracking is broken on mobile"), with a data quality score whose weights are printed next to it, so a run without an AI model still says what matters first. The same verdict heads report.md, the CLI output, `summary.json` and the Slack and email alerts.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
English | [Türkçe](README.tr.md)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<h1><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-dark.svg"><img src="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-light.svg" alt="ai tag debugger" height="40"></picture></h1>
|
|
4
4
|
|
|
5
5
|
**An open-source AI agent that QA-tests your website's analytics and ad tracking.**
|
|
6
6
|
|
|
@@ -284,7 +284,7 @@ Say yes, and the next runs can check against it with `--against latest`. A param
|
|
|
284
284
|
|
|
285
285
|
### Plan vs. site
|
|
286
286
|
|
|
287
|
-
When a run uses `--against`, the report
|
|
287
|
+
When a run uses `--against`, the report has a **Plan vs. site** section: at the top of `report.md`, and in the Coverage section of `report.html`. Each planned event lands in one bucket:
|
|
288
288
|
|
|
289
289
|
| Bucket | Meaning |
|
|
290
290
|
|---|---|
|
|
@@ -301,7 +301,7 @@ When the plan is not the site's first, the header compares it with the version s
|
|
|
301
301
|
|
|
302
302
|
### Tag inventory
|
|
303
303
|
|
|
304
|
-
Every report also has a **tag inventory**: each vendor the site sent requests to, marked first party when its requests went to the site's own domain, third party when they went to the vendor, or both. It shows how many pages the vendor was seen on and the cookies tied to it. Cookies that no vendor owns are listed apart, as first or third party. Only cookie names are recorded, never their values. It is
|
|
304
|
+
Every report also has a **tag inventory**: each vendor the site sent requests to, marked first party when its requests went to the site's own domain, third party when they went to the vendor, or both. It shows how many pages the vendor was seen on and the cookies tied to it. Cookies that no vendor owns are listed apart, as first or third party. Only cookie names are recorded, never their values. It is the **Inventory** section of `report.html` and a table in `report.md`.
|
|
305
305
|
|
|
306
306
|
### Folder layout and plan IDs
|
|
307
307
|
|
|
@@ -466,8 +466,8 @@ The file holds one entry per finding, with a `key` the run matches on (the check
|
|
|
466
466
|
| `baseline` | Optional path, relative to the config file, of a baseline of accepted findings. Same as `--baseline`. See [Accept known findings](#accept-known-findings). |
|
|
467
467
|
| `language` | Report language, `en` (default) or `tr`. Same as `--lang`. |
|
|
468
468
|
| `keep_bodies` | Default `false`. Set to `true` to store tracking requests as sent, without redacting user data. Same as `--keep-bodies`. |
|
|
469
|
-
| `branding` | Default `true`. Set to `false` to leave the Analitik İşler logo and the "Generated by
|
|
470
|
-
| `report` | Optional white label: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF or SVG, up to 512 KB, relative to the config file) and `name` replace the Analitik İşler branding in the HTML report (a small "by
|
|
469
|
+
| `branding` | Default `true`. Set to `false` to leave the Analitik İşler logo and the "Generated by ai tag debugger · analitikisler.com" line out of the reports. Same as `--no-branding`, or `branding: false` on the MCP `finish_audit` and `run_audit` tools. |
|
|
470
|
+
| `report` | Optional white label: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF or SVG, up to 512 KB, relative to the config file) and `name` replace the Analitik İşler branding in the HTML report (a small "by ai tag debugger" logo and credit stay); `color` sets the accent color; `pdf: true` also writes `report.pdf` next to `report.html`. |
|
|
471
471
|
| `provider` | Optional: `anthropic`, `openai`, `gemini`, `vercel`, `cloudflare` or `openai-compatible`. Same as `--provider`. |
|
|
472
472
|
| `base_url`, `model` | Optional: the API address and model id, e.g. for `openai-compatible`. Same as `--base-url` and `--model`. |
|
|
473
473
|
| `notify` | Optional alerts after each saved run: `slack` (a webhook URL, or `true` to read `SLACK_WEBHOOK_URL`) and `email` (an address or a list). See [Alerts](#alerts). |
|
|
@@ -592,17 +592,16 @@ jq -r '.verdict.status + " " + (.score | tostring)' aitd/example.com/runs/*/summ
|
|
|
592
592
|
|
|
593
593
|
Output:
|
|
594
594
|
|
|
595
|
-
- `report.html`: one file
|
|
596
|
-
- **
|
|
597
|
-
- **Findings**:
|
|
598
|
-
- **Journeys**: one journey at a time.
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
Events and requests can be filtered by source. GA4 item strings (`pr1`…) and dataLayer `ecommerce.items` are shown as item cards, with custom item parameters in their own group. The report has no scripts: tabs and filters are plain HTML and CSS (they need Chrome 105, Safari 15.4 or Firefox 121 or newer), and printing shows every tab. The logos are embedded, so nothing is loaded from the internet. `--no-branding` leaves out the Analitik İşler logo and credit line.
|
|
595
|
+
- `report.html`: one file, one screen at a time. A collapsible rail on the left lists seven sections; every section, filter and card has its own URL you can bookmark or share, and a link from one section opens the right card in another (a finding's "Where" chip opens that hit in its step).
|
|
596
|
+
- **Summary**: the data quality score as a ring, coloured red below 50, amber to 89 and green from 90, the verdict and its headline, up to three lines saying what cost the points (none for a perfect score), status chips that open the findings filtered by severity, and six cards about the run: vendors checked, journeys with the platforms seen on each, events checked, consent, the AI provider and the run itself.
|
|
597
|
+
- **Findings**: a filter bar (severity, owner, platform, journey, viewport, search) over three groups: failed, unverified and passed. Every row starts collapsed and opens into **Evidence**, **Fix**, **Where** and **Verify** tabs: the impact, the likely cause, the evidence with missing parameters marked, numbered fix steps, the steps where it happened, and the tools to check the fix in, such as Tag Assistant, GA4 DebugView, Meta Test Events or TikTok Pixel Helper. **Changed since last run** sits above the groups when the site has an earlier run.
|
|
598
|
+
- **Journeys**: one journey and viewport at a time. The steps on the left, named after the pages ("Open Home", "Add to cart") and grouped by page, with the hits each step produced; the selected step on the right with **Hits**, **Data Layer** and **Requests** tabs. Each hit shows its event, key parameters and consent state, and opens into the decoded parameters, item cards and the raw request. A batched GA4 request shows each of its events. It opens on the first step with a problem.
|
|
599
|
+
- **Consent**: one line per platform with what it received before a choice, after accept and after reject, the Consent Mode default and updates with their timing, and the [consent scenarios](#consent-scenarios) table.
|
|
600
|
+
- **Coverage**: whether each planned event was sent on each journey, with the parameters it still needs, conversion integrity, and, with `--against`, the [Plan vs. site](#plan-vs-site) buckets.
|
|
601
|
+
- **Inventory**: the [tag inventory](#tag-inventory), one line per platform, opening into its hosts, pages and cookies.
|
|
602
|
+
- **Run**: the facts of the run (site, version, AI provider and model, plan, journeys, viewports, platforms, timing, files) and, when the site has earlier runs, the **Trend**.
|
|
603
|
+
|
|
604
|
+
Every card starts collapsed except the Summary; each section has Expand all and Collapse all. The page carries one small script, allowed by its hash in the page's Content Security Policy, for the rail, the filters, the tabs and the deep links; without JavaScript the sections stack into one document, which is also the print layout. Keyboard: `[` folds the rail, `1`–`7` jump to a section. The logos are embedded, so nothing is loaded from the internet. `--no-branding` leaves out the Analitik İşler logo and credit line.
|
|
606
605
|
- `timeline.csv`: the same timeline as one row per hit, dataLayer push and network call, ready for Excel or Google Sheets.
|
|
607
606
|
- `report.md`: the report in Markdown for a pull request comment, a Slack message or a mail, around 100 lines and under 8 KB for a four-journey run. Its title is the verdict (`# shop.example: purchase tracking is broken on mobile`), then one meta line, the status with the data quality score, and the counts. Then, in this order: **Changed since last run** and **Trend** (when the site has earlier runs), **Plan vs. site** (with `--against`), **Priorities** (the to-do list per owner: Developer, Tag Manager, Marketing), **Findings** (up to five full blocks with Where, Impact, Cause, Evidence, Also fine on, Owner, Fix, How to verify and a link into `report.html`; the rest one line each under *Also*), **Consent** (the Consent Mode timing sentence and the scenario table with a reason in every cell), **What passed**, **Journeys** (one row per run, then only the steps that carry a problem), **Not checked** (what the run could not judge, with the config key that enables it) and the **Tag inventory**. The per-hit timeline is not in the file; `timeline.csv` has it.
|
|
608
607
|
- `capture.json`: everything captured, for your own analysis, including the tool `version`, the `ai` provider and the computed `metrics` (verdict, score, plan coverage, funnel, platform parity, consent compliance, conversion integrity, timing, priorities).
|
|
@@ -611,7 +610,7 @@ Output:
|
|
|
611
610
|
- `summary.json`: the counts, verdict, score, trend direction, journeys, findings and file names of the run in one small file for scripts.
|
|
612
611
|
- `plan.html` (in the plan's folder): a readable page of the plan's events, parameters and user properties.
|
|
613
612
|
|
|
614
|
-
Reports end with a credit line, "Generated by
|
|
613
|
+
Reports end with a credit line, "Generated by ai tag debugger · analitikisler.com", where the domain is a plain link (no images, no tracking, and no referrer, so report URLs aren't leaked). `--no-branding` removes it along with the logo.
|
|
615
614
|
|
|
616
615
|
Use `--lang tr` for a Turkish report. Finding texts, headings, and the model's explanations and fixes are all written in Turkish, and the agent describes its steps in Turkish too.
|
|
617
616
|
|
package/README.tr.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[English](README.md) | Türkçe
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<h1><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-dark.svg"><img src="https://raw.githubusercontent.com/analitikisler/ai-tag-debugger/main/brand/ai/assets/lockups/ai-tag-debugger-light.svg" alt="ai tag debugger" height="40"></picture></h1>
|
|
4
4
|
|
|
5
5
|
**Web sitenizin analitik ve reklam takibini test eden, açık kaynaklı bir yapay zekâ ajanı.**
|
|
6
6
|
|
|
@@ -284,7 +284,7 @@ Evet derseniz sonraki çalıştırmalar `--against latest` ile bu plana karşı
|
|
|
284
284
|
|
|
285
285
|
### Plan ve site
|
|
286
286
|
|
|
287
|
-
Bir çalıştırma `--against` kullandığında
|
|
287
|
+
Bir çalıştırma `--against` kullandığında raporda bir **Plan ve site** bölümü bulunur: `report.md` dosyasının başında ve `report.html` içinde Kapsam bölümünde. Planlanan her event bir kovaya düşer:
|
|
288
288
|
|
|
289
289
|
| Kova | Anlamı |
|
|
290
290
|
|---|---|
|
|
@@ -301,7 +301,7 @@ Kontrol edilen plan sitenin ilk planı değilse, rapor başlığı onu bir önce
|
|
|
301
301
|
|
|
302
302
|
### Etiket envanteri
|
|
303
303
|
|
|
304
|
-
Her raporda ayrıca bir **etiket envanteri** bulunur: sitenin istek gönderdiği her sağlayıcı; istekleri sitenin kendi alan adına gittiyse birinci taraf, sağlayıcıya gittiyse üçüncü taraf, ikisine de gittiyse ikisi olarak işaretlenir. Sağlayıcının görüldüğü sayfa sayısını ve ona bağlı çerezleri gösterir. Hiçbir sağlayıcıya ait olmayan çerezler ayrıca birinci ya da üçüncü taraf olarak listelenir. Yalnızca çerez adları kaydedilir, değerleri asla. Envanter `report.html` içindeki **
|
|
304
|
+
Her raporda ayrıca bir **etiket envanteri** bulunur: sitenin istek gönderdiği her sağlayıcı; istekleri sitenin kendi alan adına gittiyse birinci taraf, sağlayıcıya gittiyse üçüncü taraf, ikisine de gittiyse ikisi olarak işaretlenir. Sağlayıcının görüldüğü sayfa sayısını ve ona bağlı çerezleri gösterir. Hiçbir sağlayıcıya ait olmayan çerezler ayrıca birinci ya da üçüncü taraf olarak listelenir. Yalnızca çerez adları kaydedilir, değerleri asla. Envanter `report.html` içindeki **Envanter** bölümünde, `report.md` içinde ise bir tablo olarak yer alır.
|
|
305
305
|
|
|
306
306
|
### Klasör yapısı ve plan kimlikleri
|
|
307
307
|
|
|
@@ -466,8 +466,8 @@ Dosyada her bulgu için bir kayıt bulunur: çalıştırmanın eşleştirme yapt
|
|
|
466
466
|
| `baseline` | İsteğe bağlı: kabul edilen bulguların temel dosyasının, ayar dosyasına göre bağıl yolu. `--baseline` ile aynıdır. Bkz. [Bilinen bulguları kabul edin](#bilinen-bulguları-kabul-edin). |
|
|
467
467
|
| `language` | Rapor dili, `en` (varsayılan) ya da `tr`. `--lang` ile aynıdır. |
|
|
468
468
|
| `keep_bodies` | Varsayılan `false`. Takip isteklerini gönderildiği gibi, kullanıcı verisi gizlenmeden saklamak için `true` yapın. `--keep-bodies` ile aynıdır. |
|
|
469
|
-
| `branding` | Varsayılan `true`. Analitik İşler logosunu ve "Generated by
|
|
470
|
-
| `report` | İsteğe bağlı beyaz etiket: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF veya SVG; en fazla 512 KB; ayar dosyasına göre bağıl) ve `name`, HTML raporundaki Analitik İşler markasının yerine geçer (küçük bir
|
|
469
|
+
| `branding` | Varsayılan `true`. Analitik İşler logosunu ve "Generated by ai tag debugger · analitikisler.com" satırını raporlardan çıkarmak için `false` yapın. `--no-branding` ile aynıdır, ya da MCP `finish_audit` ve `run_audit` araçlarında `branding: false`. |
|
|
470
|
+
| `report` | İsteğe bağlı beyaz etiket: `{ "name": "Acme", "logo": "logo.png", "color": "#0a7d5a", "pdf": true }`. `logo` (PNG, JPG, WebP, GIF veya SVG; en fazla 512 KB; ayar dosyasına göre bağıl) ve `name`, HTML raporundaki Analitik İşler markasının yerine geçer (küçük bir ai tag debugger logosu ve kredisi kalır). `color` vurgu rengini ayarlar; `pdf: true` ise `report.html` yanına `report.pdf` de yazar. |
|
|
471
471
|
| `provider` | İsteğe bağlı: `anthropic`, `openai`, `gemini`, `vercel`, `cloudflare` ya da `openai-compatible`. `--provider` ile aynıdır. |
|
|
472
472
|
| `base_url`, `model` | İsteğe bağlı: API adresi ve model kimliği, örneğin `openai-compatible` için. `--base-url` ve `--model` ile aynıdır. |
|
|
473
473
|
| `notify` | İsteğe bağlı uyarılar, kayıtlı her çalıştırmadan sonra: `slack` (bir webhook adresi ya da `SLACK_WEBHOOK_URL` değişkenini okumak için `true`) ve `email` (bir adres ya da liste). Bkz. [Uyarılar](#uyarılar). |
|
|
@@ -592,17 +592,16 @@ jq -r '.verdict.status + " " + (.score | tostring)' aitd/example.com/runs/*/summ
|
|
|
592
592
|
|
|
593
593
|
Çıktı:
|
|
594
594
|
|
|
595
|
-
- `report.html`:
|
|
596
|
-
-
|
|
597
|
-
- **Bulgular**:
|
|
598
|
-
- **Yolculuklar**: her seferinde bir yolculuk.
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
Event'ler ve istekler kaynağa göre filtrelenebilir. GA4 ürün dizgileri (`pr1`…) ve dataLayer `ecommerce.items` ürün kartları olarak gösterilir; özel ürün parametreleri kendi grubunda yer alır. Raporda betik yoktur: sekmeler ve filtreler düz HTML ve CSS'tir (Chrome 105, Safari 15.4 ya da Firefox 121 ve sonrası gerekir) ve yazdırırken her sekme görünür. Logolar gömülüdür, bu yüzden internetten hiçbir şey yüklenmez. `--no-branding`, Analitik İşler logosunu ve kredi satırını çıkarır.
|
|
595
|
+
- `report.html`: tek bir dosya, her seferinde tek bir ekran. Soldaki katlanabilir şerit yedi bölümü listeler; her bölümün, filtrenin ve kartın paylaşılabilir ya da yer imine eklenebilir kendi URL'si vardır ve bir bölümdeki bağlantı diğerinde doğru kartı açar (bir bulgunun "Nerede" çipi o isteği kendi adımında açar).
|
|
596
|
+
- **Özet**: veri kalitesi puanı bir halka olarak; 50'nin altı kırmızı, 89'a kadar sarı, 90 ve üstü yeşil. Yanında karar ve başlığı, puanı neyin düşürdüğünü söyleyen en fazla üç satır (tam puanda hiç satır yok), bulguları önem düzeyine göre filtrelenmiş açan durum çipleri ve çalıştırmayı anlatan altı kart: kontrol edilen sağlayıcılar, her birinde görülen platformlarla yolculuklar, kontrol edilen event'ler, çerez onayı, yapay zekâ sağlayıcısı ve çalıştırmanın kendisi.
|
|
597
|
+
- **Bulgular**: üç grubun (başarısız, doğrulanmamış, geçen) üstünde bir filtre çubuğu (önem düzeyi, sorumlu, platform, yolculuk, ekran, arama). Her satır kapalı başlar ve **Kanıt**, **Düzeltme**, **Nerede** ve **Doğrula** sekmelerine açılır: etkisi, olası nedeni, eksik parametreleri işaretli kanıtı, numaralı düzeltme adımları, yaşandığı adımlar ve düzeltmeyi kontrol edebileceğiniz araçlar (Tag Assistant, GA4 DebugView, Meta Test Events, TikTok Pixel Helper). Sitenin önceki bir çalıştırması varsa **Son çalıştırmadan bu yana değişenler** grupların üstünde yer alır.
|
|
598
|
+
- **Yolculuklar**: her seferinde bir yolculuk ve ekran. Solda sayfalara göre adlandırılmış ("Ana sayfayı aç", "Sepete ekle") ve sayfaya göre gruplanmış adımlar, her adımın ürettiği isteklerle; sağda seçili adım, **İstekler**, **Data Layer** ve **Ağ** sekmeleriyle. Her istek event'ini, temel parametrelerini ve çerez onayı durumunu gösterir; çözülmüş parametrelere, ürün kartlarına ve ham isteğe açılır. Toplu bir GA4 isteği içindeki her event'i gösterir. Sorunlu ilk adımda açılır.
|
|
599
|
+
- **Onay**: her platform için bir satır: seçimden önce, kabulden sonra ve retten sonra ne aldığı; Consent Mode varsayılanı ve güncellemeleri zamanlamalarıyla; ve [onay senaryoları](#onay-senaryoları) tablosu.
|
|
600
|
+
- **Kapsam**: planlanan her event'in her yolculukta gönderilip gönderilmediği, hâlâ ihtiyaç duyduğu parametrelerle; dönüşüm bütünlüğü; ve `--against` ile [Plan ve site](#plan-ve-site) kovaları.
|
|
601
|
+
- **Envanter**: [etiket envanteri](#etiket-envanteri), platform başına bir satır; sunucularına, sayfalarına ve çerezlerine açılır.
|
|
602
|
+
- **Çalıştırma**: çalıştırmanın künyesi (site, sürüm, yapay zekâ sağlayıcısı ve modeli, plan, yolculuklar, ekranlar, platformlar, süreler, dosyalar) ve sitenin önceki çalıştırmaları varsa **Eğilim**.
|
|
603
|
+
|
|
604
|
+
Özet dışında her kart kapalı başlar; her bölümde Tümünü aç ve Tümünü kapat düğmeleri vardır. Sayfada şerit, filtreler, sekmeler ve derin bağlantılar için, sayfanın Content Security Policy'sinde özetiyle izin verilmiş küçük bir betik bulunur; JavaScript olmadan bölümler tek bir belge olarak alt alta dizilir, yazdırma düzeni de budur. Klavye: `[` şeridi katlar, `1`–`7` bir bölüme atlar. Logolar gömülüdür, bu yüzden internetten hiçbir şey yüklenmez. `--no-branding`, Analitik İşler logosunu ve kredi satırını çıkarır.
|
|
606
605
|
- `timeline.csv`: aynı zaman akışı, her isteğe, dataLayer gönderimine ve ağ çağrısına bir satır olarak; Excel ya da Google Sheets için hazır.
|
|
607
606
|
- `report.md`: raporun Markdown hali; bir çekme isteği yorumu, bir Slack mesajı ya da bir e-posta için, dört yolculuklu bir çalıştırmada yaklaşık 100 satır ve 8 KB'ın altında. Başlığı sonuçtur (`# shop.example: purchase izlemesi bozuk (mobile)`), ardından tek bir meta satırı, veri kalitesi puanıyla birlikte durum ve sayılar gelir. Sonra sırasıyla: **Son çalıştırmadan bu yana değişenler** ve **Eğilim** (sitenin önceki çalıştırmaları varsa), **Plan ve site** (`--against` ile), **Öncelikler** (sorumlu başına yapılacaklar listesi: Yazılımcı, Tag Manager, Pazarlama), **Bulgular** (Nerede, Etkisi, Neden, Kanıt, Şurada sorunsuz, Sorumlu, Çözüm, Nasıl doğrulanır ve `report.html` içine bir bağlantıyla en fazla beş tam blok; geri kalanı *Ayrıca* altında birer satır), **Onay** (Consent Mode zamanlama cümlesi ve her hücresinde bir neden bulunan senaryo tablosu), **Sorunsuz olanlar**, **Yolculuklar** (çalıştırma başına bir satır, sonra yalnızca sorun taşıyan adımlar), **Kontrol edilmeyenler** (çalıştırmanın yargılayamadıkları, bunu açan ayar anahtarıyla birlikte) ve **Etiket envanteri**. İstek başına zaman akışı dosyada yoktur; `timeline.csv` içindedir.
|
|
608
607
|
- `capture.json`: yakalanan her şey, kendi analiziniz için; aracın `version` bilgisi, `ai` sağlayıcısı ve hesaplanan `metrics` (sonuç, puan, plan kapsamı, huni, platform tutarlılığı, onay uyumu, dönüşüm bütünlüğü, zamanlama, öncelikler) dahil.
|
|
@@ -611,7 +610,7 @@ jq -r '.verdict.status + " " + (.score | tostring)' aitd/example.com/runs/*/summ
|
|
|
611
610
|
- `summary.json`: çalıştırmanın sayıları, sonucu, puanı, eğilim yönü, yolculukları, bulguları ve dosya adları, betikler için tek bir küçük dosyada.
|
|
612
611
|
- `plan.html` (planın klasöründe): planın event'lerini, parametrelerini ve kullanıcı özelliklerini gösteren okunabilir bir sayfa.
|
|
613
612
|
|
|
614
|
-
Raporlar bir kredi satırıyla biter: "Generated by
|
|
613
|
+
Raporlar bir kredi satırıyla biter: "Generated by ai tag debugger · analitikisler.com"; alan adı düz bir bağlantıdır (görsel yok, takip yok ve yönlendiren bilgisi yok; böylece rapor adresleri sızdırılmaz). `--no-branding`, bunu logosuyla birlikte kaldırır.
|
|
615
614
|
|
|
616
615
|
Türkçe rapor için `--lang tr` kullanın. Bulgu metinleri, başlıklar, modelin açıklamaları ve düzeltmeleri Türkçe yazılır; ajan adımlarını da Türkçe anlatır.
|
|
617
616
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analitikisler/ai-tag-debugger",
|
|
3
3
|
"mcpName": "io.github.analitikisler/ai-tag-debugger",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.19.0",
|
|
5
5
|
"description": "Open-source AI agent that QA-tests your website's analytics, ad and consent tracking (GA4, GTM, Google Ads, Meta, TikTok). Bring your own model (Claude, OpenAI, Gemini) or use it from your chat app over MCP.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"scripts": {
|
|
18
18
|
"setup": "node scripts/setup.js",
|
|
19
19
|
"test": "node --test test/*.test.js",
|
|
20
|
-
"test:unit": "node --test test/campaign.test.js test/changes.test.js test/ci-output.test.js test/checks.test.js test/consent-scenarios.test.js test/doctor.test.js test/gtm.test.js test/history-cli.test.js test/history.test.js test/i18n.test.js test/inventory.test.js test/journeys.test.js test/learn.test.js test/metrics.test.js test/notify.test.js test/parsers.test.js test/plan-check.test.js test/plan-html.test.js test/plan.test.js test/report-md.test.js test/report.test.js test/schema.test.js test/server-json.test.js test/server-side.test.js test/setup.test.js test/workspace.test.js",
|
|
20
|
+
"test:unit": "node --test test/campaign.test.js test/changes.test.js test/ci-output.test.js test/checks.test.js test/consent-scenarios.test.js test/doctor.test.js test/gtm.test.js test/history-cli.test.js test/history.test.js test/html-consent.test.js test/html-findings.test.js test/html-journeys.test.js test/html-scope.test.js test/html-shell.test.js test/html-summary.test.js test/i18n.test.js test/inventory.test.js test/journeys.test.js test/learn.test.js test/metrics.test.js test/notify.test.js test/parsers.test.js test/plan-check.test.js test/plan-html.test.js test/plan.test.js test/report-md.test.js test/report.test.js test/schema.test.js test/server-json.test.js test/server-side.test.js test/setup.test.js test/workspace.test.js",
|
|
21
21
|
"lint": "eslint .",
|
|
22
22
|
"demo:serve": "node examples/serve.js",
|
|
23
23
|
"demo": "node src/cli.js run --config examples/demo.config.json --scripted --no-ai"
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
59
59
|
"openai": "^7.30.1",
|
|
60
60
|
"playwright": "1.56.1",
|
|
61
|
-
"zod": "^4.6.
|
|
61
|
+
"zod": "^4.6.6"
|
|
62
62
|
},
|
|
63
63
|
"optionalDependencies": {
|
|
64
64
|
"fflate": "^0.8.3"
|
package/src/brand.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// The brand's logos for the HTML report, so a report is one file and needs nothing next to it.
|
|
2
|
+
// Written by node scripts/brand.js from brand/ai/assets/ (the brand guide is brand/ai/BRAND.md); edit the assets, not this file.
|
|
3
|
+
// atd-lockup brand/ai/assets/lockups/ai-tag-debugger-light.svg (and -dark.svg, checked to match)
|
|
4
|
+
// mark brand/ai/assets/mark/ai-mark-light.svg (and -dark.svg, checked to match)
|
|
5
|
+
// master brand/ai/assets/master/analitik-isler-light.svg (and -dark.svg, checked to match)
|
|
6
|
+
// favicon-light brand/ai/assets/icons/favicon-ai-16.svg
|
|
7
|
+
// favicon-dark brand/ai/assets/icons/favicon-ai-16-ink.svg
|
|
4
8
|
|
|
9
|
+
/** Sprite symbols: the ink is currentColor and the point is var(--brand-point), so a logo follows the page's colours. */
|
|
10
|
+
export const LOGO_ART = {
|
|
11
|
+
"atd-lockup": {"viewBox":"-0.1 1.4 1455.8 199.3","art":"<path fill=\"currentColor\" d=\"M39.42 161.88Q29.25 161.88 20.24 158.48Q11.23 155.07 5.59 147.83Q-0.04 140.6 -0.04 129.14Q-0.04 116.76 7.11 108.68Q14.26 100.6 27.35 96.63Q40.44 92.67 58.36 92.67H72.43L70.63 95.8V89.43Q70.63 79.65 67.27 75.14Q63.92 70.63 56.2 70.63Q48.71 70.63 44.83 74.61Q40.95 78.6 39.68 86.32L4.75 80.68Q6.67 71.59 12.85 64.28Q19.04 56.97 30.18 52.67Q41.32 48.37 58.11 48.37Q72.86 48.37 83.43 52.77Q94 57.17 99.67 67.77Q105.33 78.37 105.33 97.05V128.66Q105.33 132.04 106.28 133.14Q107.23 134.24 106.4 134.24H109.4V159.24H99.05Q85.49 159.24 78.81 152.72Q72.13 146.19 72.13 133.48V129.41L78.48 132.16Q77.27 136.52 74.94 141.62Q72.61 146.71 68.28 151.33Q63.96 155.94 56.94 158.91Q49.92 161.88 39.42 161.88ZM49.9 139Q56.4 139 61.1 136.12Q65.8 133.23 68.38 127.75Q70.96 122.26 70.96 114.47V111.52H60.12Q50.51 111.52 45.22 114.04Q39.93 116.56 37.87 120.14Q35.81 123.72 35.81 127.09Q35.81 129.28 36.89 132.08Q37.97 134.88 41 136.94Q44.02 139 49.9 139ZM119 159.24 154.1 159.24 154.1 55.14 119 49.44Z M241.09 159.24Q233.92 159.24 228.9 154.78Q223.88 150.31 223.88 143.2V66.31H206.75V51.24H223.88V28.83L242.45 24.75V51.24H263.65V66.31H242.45V138.67Q242.45 141.98 243.4 143.08Q244.35 144.18 247.45 144.18H263.95V159.24Z M314.75 161.67Q304.01 161.67 295.96 157.59Q287.91 153.51 283.48 146.31Q279.05 139.1 279.05 129.78Q279.05 119.82 284.89 111.63Q290.73 103.44 302.79 98.59Q314.85 93.73 333.48 93.73H351.1L349.3 95.66V89.71Q349.3 77.03 344.28 70.31Q339.25 63.6 327.49 63.6Q316.37 63.6 310.4 69.36Q304.42 75.12 303.94 84.9L283.49 80.47Q284.49 71.73 290.28 64.56Q296.07 57.4 305.87 53.1Q315.66 48.8 328.76 48.8Q342.01 48.8 350.49 53.7Q358.96 58.59 363.03 68.02Q367.11 77.44 367.11 91.08V138.67Q367.11 141.98 368.06 143.08Q369.01 144.18 372.11 144.18H378.04V159.24H366.86Q359.41 159.24 354.6 154.77Q349.8 150.3 349.8 143.2V135.95L352.68 136.21Q351.11 140.43 348.18 144.85Q345.24 149.27 340.67 153.1Q336.1 156.94 329.68 159.3Q323.27 161.67 314.75 161.67ZM319.2 146.81Q327.33 146.81 334.19 142.83Q341.06 138.84 345.24 130.41Q349.42 121.97 349.42 108.58V107.48H333.1Q320.16 107.48 312.74 110.88Q305.32 114.29 302.23 119.29Q299.14 124.28 299.14 129.22Q299.14 134.04 301.32 138.01Q303.5 141.98 307.95 144.4Q312.4 146.81 319.2 146.81Z M439.16 200.67Q414.78 200.67 403.21 193.9Q391.64 187.13 391.64 172.98Q391.64 164.87 395.8 158.68Q399.96 152.48 409.75 149.2Q405.96 146.85 403.6 143.04Q401.23 139.22 401.23 134.53Q401.23 128.86 404.77 124.39Q408.31 119.92 414.9 118Q406.9 113.27 402.46 105.24Q398.01 97.21 398.01 86.6Q398.01 75.01 403.25 66.53Q408.48 58.06 418.14 53.44Q427.81 48.81 441.1 48.81Q454.39 48.81 464.14 53.44Q473.89 58.06 479.22 66.58Q484.55 75.1 484.55 86.78Q484.55 98.27 479.22 106.66Q473.9 115.04 464.1 119.61Q454.3 124.19 440.81 124.19H431.79Q419.57 124.19 419.57 131.4Q419.57 138.23 431.46 138.23H453.09Q465.66 138.23 473.49 141.14Q481.33 144.05 485.57 148.69Q489.82 153.33 491.42 158.8Q493.01 164.26 493.01 169.38Q493.01 185.35 481.31 193.01Q469.6 200.67 445.04 200.67ZM439.25 186.51H445.1Q473.87 186.51 473.87 169.32Q473.87 162.21 468.72 157.68Q463.57 153.15 451.02 153.15H433.03Q423.54 153.15 417.07 157.05Q410.6 160.95 410.6 169.83Q410.6 178.31 417.61 182.41Q424.63 186.51 439.25 186.51ZM441.1 111.46Q453.26 111.46 459.78 105.11Q466.3 98.76 466.3 86.78Q466.3 74.9 459.78 68.32Q453.26 61.73 441.1 61.73Q429.04 61.73 422.6 68.27Q416.16 74.81 416.16 86.78Q416.16 98.76 422.6 105.11Q429.04 111.46 441.1 111.46ZM458.66 60.69V49.96Q458.66 42.85 463.68 38.39Q468.7 33.92 475.87 33.92H488.51V48.98H477.63Q474.53 48.98 473.58 50.08Q472.63 51.18 472.63 54.49V60.69Z M602.17 161.67Q589.01 161.67 578.97 154.79Q568.93 147.91 563.36 135.2Q557.78 122.5 557.78 105.13Q557.78 87.76 563.41 75.11Q569.03 62.47 579.03 55.64Q589.04 48.81 602.23 48.81Q613.02 48.81 623.28 54.14Q633.54 59.47 638.9 72.07L636.85 72.78V9.24H655.42V159.24H637.93V136.85L638.41 138.44Q633.87 150.23 623.79 155.95Q613.7 161.67 602.17 161.67ZM607.45 146.51Q615.74 146.51 622.55 142.21Q629.35 137.9 633.41 128.8Q637.48 119.69 637.48 105.53Q637.48 84.37 628.75 74.17Q620.02 63.97 607.66 63.97Q594.6 63.97 586.29 74.76Q577.97 85.54 577.97 105.56Q577.97 125 586 135.75Q594.03 146.51 607.45 146.51Z M731.49 161.67Q716.03 161.67 704.59 154.77Q693.15 147.87 686.87 135.21Q680.6 122.54 680.6 105.31Q680.6 88.01 686.85 75.32Q693.11 62.62 704.41 55.72Q715.71 48.81 730.86 48.81Q739.5 48.81 748.22 51.56Q756.94 54.31 764.16 61.07Q771.38 67.84 775.78 79.65Q780.17 91.47 780.17 109.51H692.53V95.45H763.96L759.38 101.62Q758.84 87.88 754.86 79.55Q750.89 71.22 744.56 67.48Q738.23 63.75 730.49 63.75Q721.2 63.75 714.52 68.64Q707.84 73.53 704.29 82.83Q700.73 92.13 700.73 105.42Q700.73 125.05 708.68 135.82Q716.63 146.59 731.46 146.59Q741.99 146.59 749.22 141.27Q756.45 135.95 759.9 125.79L777.82 131.56Q773.93 141.2 767.27 147.91Q760.61 154.62 751.52 158.15Q742.44 161.67 731.49 161.67Z M858.14 161.67Q847.36 161.67 837.1 156.34Q826.85 151.01 821.48 138.42L822.45 137.7V159.24H804.97V9.24H823.53V73.63L821.97 72.04Q826.53 60.23 836.61 54.52Q846.69 48.81 858.21 48.81Q871.47 48.81 881.46 55.7Q891.45 62.58 897.03 75.28Q902.6 87.98 902.6 105.36Q902.6 122.72 896.98 135.37Q891.35 148.02 881.35 154.85Q871.34 161.67 858.14 161.67ZM852.73 146.51Q865.78 146.51 874.1 135.72Q882.41 124.94 882.41 104.93Q882.41 85.48 874.38 74.72Q866.35 63.97 852.93 63.97Q844.73 63.97 837.88 68.27Q831.03 72.58 826.97 81.64Q822.9 90.7 822.9 104.96Q822.9 126.03 831.63 136.27Q840.36 146.51 852.73 146.51Z M963.38 161.67Q951.93 161.67 943.66 156.49Q935.39 151.31 930.98 141.72Q926.56 132.14 926.56 118.95V51.24H945.12V117.35Q945.12 130.53 950.05 138.52Q954.98 146.52 967.51 146.52Q976.66 146.52 983.48 141.8Q990.3 137.07 994.14 127.49Q997.99 117.91 997.99 103.34V51.24H1016.55V159.24H998.99V133.85L999.7 138.26Q995.41 148.4 986.1 155.04Q976.8 161.67 963.38 161.67Z M1087.06 200.67Q1062.68 200.67 1051.11 193.9Q1039.54 187.13 1039.54 172.98Q1039.54 164.87 1043.7 158.68Q1047.86 152.48 1057.65 149.2Q1053.86 146.85 1051.5 143.04Q1049.13 139.22 1049.13 134.53Q1049.13 128.86 1052.67 124.39Q1056.21 119.92 1062.8 118Q1054.8 113.27 1050.36 105.24Q1045.91 97.21 1045.91 86.6Q1045.91 75.01 1051.15 66.53Q1056.38 58.06 1066.04 53.44Q1075.71 48.81 1089 48.81Q1102.29 48.81 1112.04 53.44Q1121.79 58.06 1127.12 66.58Q1132.45 75.1 1132.45 86.78Q1132.45 98.27 1127.12 106.66Q1121.8 115.04 1112 119.61Q1102.2 124.19 1088.71 124.19H1079.69Q1067.47 124.19 1067.47 131.4Q1067.47 138.23 1079.36 138.23H1100.99Q1113.56 138.23 1121.39 141.14Q1129.23 144.05 1133.47 148.69Q1137.72 153.33 1139.32 158.8Q1140.91 164.26 1140.91 169.38Q1140.91 185.35 1129.21 193.01Q1117.5 200.67 1092.94 200.67ZM1087.15 186.51H1093Q1121.77 186.51 1121.77 169.32Q1121.77 162.21 1116.62 157.68Q1111.47 153.15 1098.92 153.15H1080.93Q1071.44 153.15 1064.97 157.05Q1058.5 160.95 1058.5 169.83Q1058.5 178.31 1065.51 182.41Q1072.53 186.51 1087.15 186.51ZM1089 111.46Q1101.16 111.46 1107.68 105.11Q1114.2 98.76 1114.2 86.78Q1114.2 74.9 1107.68 68.32Q1101.16 61.73 1089 61.73Q1076.94 61.73 1070.5 68.27Q1064.06 74.81 1064.06 86.78Q1064.06 98.76 1070.5 105.11Q1076.94 111.46 1089 111.46ZM1106.56 60.69V49.96Q1106.56 42.85 1111.58 38.39Q1116.6 33.92 1123.77 33.92H1136.41V48.98H1125.53Q1122.43 48.98 1121.48 50.08Q1120.53 51.18 1120.53 54.49V60.69Z M1200.76 200.67Q1176.38 200.67 1164.81 193.9Q1153.24 187.13 1153.24 172.98Q1153.24 164.87 1157.4 158.68Q1161.56 152.48 1171.35 149.2Q1167.56 146.85 1165.2 143.04Q1162.83 139.22 1162.83 134.53Q1162.83 128.86 1166.37 124.39Q1169.91 119.92 1176.5 118Q1168.5 113.27 1164.06 105.24Q1159.61 97.21 1159.61 86.6Q1159.61 75.01 1164.85 66.53Q1170.08 58.06 1179.74 53.44Q1189.41 48.81 1202.7 48.81Q1215.99 48.81 1225.74 53.44Q1235.49 58.06 1240.82 66.58Q1246.15 75.1 1246.15 86.78Q1246.15 98.27 1240.82 106.66Q1235.5 115.04 1225.7 119.61Q1215.9 124.19 1202.41 124.19H1193.39Q1181.17 124.19 1181.17 131.4Q1181.17 138.23 1193.06 138.23H1214.69Q1227.26 138.23 1235.09 141.14Q1242.93 144.05 1247.17 148.69Q1251.42 153.33 1253.02 158.8Q1254.61 164.26 1254.61 169.38Q1254.61 185.35 1242.91 193.01Q1231.2 200.67 1206.64 200.67ZM1200.85 186.51H1206.7Q1235.47 186.51 1235.47 169.32Q1235.47 162.21 1230.32 157.68Q1225.17 153.15 1212.62 153.15H1194.63Q1185.14 153.15 1178.67 157.05Q1172.2 160.95 1172.2 169.83Q1172.2 178.31 1179.21 182.41Q1186.23 186.51 1200.85 186.51ZM1202.7 111.46Q1214.86 111.46 1221.38 105.11Q1227.9 98.76 1227.9 86.78Q1227.9 74.9 1221.38 68.32Q1214.86 61.73 1202.7 61.73Q1190.64 61.73 1184.2 68.27Q1177.76 74.81 1177.76 86.78Q1177.76 98.76 1184.2 105.11Q1190.64 111.46 1202.7 111.46ZM1220.26 60.69V49.96Q1220.26 42.85 1225.28 38.39Q1230.3 33.92 1237.47 33.92H1250.11V48.98H1239.23Q1236.13 48.98 1235.18 50.08Q1234.23 51.18 1234.23 54.49V60.69Z M1320.19 161.67Q1304.73 161.67 1293.29 154.77Q1281.85 147.87 1275.57 135.21Q1269.3 122.54 1269.3 105.31Q1269.3 88.01 1275.55 75.32Q1281.81 62.62 1293.11 55.72Q1304.41 48.81 1319.56 48.81Q1328.2 48.81 1336.92 51.56Q1345.64 54.31 1352.86 61.07Q1360.08 67.84 1364.48 79.65Q1368.87 91.47 1368.87 109.51H1281.23V95.45H1352.66L1348.08 101.62Q1347.54 87.88 1343.56 79.55Q1339.59 71.22 1333.26 67.48Q1326.93 63.75 1319.19 63.75Q1309.9 63.75 1303.22 68.64Q1296.54 73.53 1292.99 82.83Q1289.43 92.13 1289.43 105.42Q1289.43 125.05 1297.38 135.82Q1305.33 146.59 1320.16 146.59Q1330.69 146.59 1337.92 141.27Q1345.15 135.95 1348.6 125.79L1366.52 131.56Q1362.63 141.2 1355.97 147.91Q1349.31 154.62 1340.22 158.15Q1331.14 161.67 1320.19 161.67Z M1393.66 159.24V51.24H1411.22V74.33L1410.54 71.66Q1415.38 60.34 1424.98 54.58Q1434.58 48.81 1444.64 48.81Q1447.57 48.81 1450.38 49.31Q1453.19 49.81 1455.69 51.01L1453.48 68.12Q1447.84 66.41 1442.36 66.41Q1438.75 66.41 1433.67 67.8Q1428.58 69.2 1423.68 73.28Q1418.78 77.36 1415.5 85.32Q1412.22 93.28 1412.22 106.41V159.24Z\"/><path style=\"fill:var(--brand-point)\" d=\"M158.51 13.21C162.22 24.64 158.23 35.1 145.98 38.19C134.52 41.06 123.86 38.6 120.13 27.81C116.74 18.2 121.96 6.11 132.86 2.77C143.37 -0.45 154.81 1.77 158.51 13.21Z\"/>"},
|
|
12
|
+
"mark": {"viewBox":"-0.1 1.4 160 160.5","art":"<path fill=\"currentColor\" d=\"M39.42 161.88Q29.25 161.88 20.24 158.48Q11.23 155.07 5.59 147.83Q-0.04 140.6 -0.04 129.14Q-0.04 116.76 7.11 108.68Q14.26 100.6 27.35 96.63Q40.44 92.67 58.36 92.67H72.43L70.63 95.8V89.43Q70.63 79.65 67.27 75.14Q63.92 70.63 56.2 70.63Q48.71 70.63 44.83 74.61Q40.95 78.6 39.68 86.32L4.75 80.68Q6.67 71.59 12.85 64.28Q19.04 56.97 30.18 52.67Q41.32 48.37 58.11 48.37Q72.86 48.37 83.43 52.77Q94 57.17 99.67 67.77Q105.33 78.37 105.33 97.05V128.66Q105.33 132.04 106.28 133.14Q107.23 134.24 106.4 134.24H109.4V159.24H99.05Q85.49 159.24 78.81 152.72Q72.13 146.19 72.13 133.48V129.41L78.48 132.16Q77.27 136.52 74.94 141.62Q72.61 146.71 68.28 151.33Q63.96 155.94 56.94 158.91Q49.92 161.88 39.42 161.88ZM49.9 139Q56.4 139 61.1 136.12Q65.8 133.23 68.38 127.75Q70.96 122.26 70.96 114.47V111.52H60.12Q50.51 111.52 45.22 114.04Q39.93 116.56 37.87 120.14Q35.81 123.72 35.81 127.09Q35.81 129.28 36.89 132.08Q37.97 134.88 41 136.94Q44.02 139 49.9 139ZM119 159.24 154.1 159.24 154.1 55.14 119 49.44Z\"/><path style=\"fill:var(--brand-point)\" d=\"M158.51 13.21C162.22 24.64 158.23 35.1 145.98 38.19C134.52 41.06 123.86 38.6 120.13 27.81C116.74 18.2 121.96 6.11 132.86 2.77C143.37 -0.45 154.81 1.77 158.51 13.21Z\"/>"},
|
|
13
|
+
"master": {"viewBox":"0.5 0.4 630.3 95.1","art":"<path fill=\"currentColor\" d=\"M18.69 73.87Q13.39 74.14 9.32 72.01Q5.24 69.89 2.88 66.02Q0.52 62.15 0.52 57.11Q0.52 51.85 3.23 48.08Q5.93 44.31 10.49 42.23Q15.05 40.16 20.63 40.16Q23.66 40.16 26.15 40.5Q28.64 40.85 30.6 41.34Q32.55 41.83 33.65 42.51L33.6 40.55Q33.6 36.69 30.64 34.19Q27.68 31.68 22.49 31.68Q19.02 31.68 15.79 33.26Q12.56 34.84 10.35 37.63L1.91 30.84Q4.45 27.48 7.69 25.26Q10.92 23.04 14.84 21.91Q18.76 20.78 23.07 20.78Q34.53 20.78 40.52 26.12Q46.51 31.45 46.51 41.71V72.58H33.6V67.41L33.05 67.53Q31.73 69.2 29.67 70.73Q27.61 72.26 24.87 73.2Q22.12 74.14 18.69 73.87Z M125.55 73.87Q120.25 74.14 116.18 72.01Q112.1 69.89 109.74 66.02Q107.38 62.15 107.38 57.11Q107.38 51.85 110.09 48.08Q112.79 44.31 117.35 42.23Q121.91 40.16 127.49 40.16Q130.52 40.16 133.01 40.5Q135.5 40.85 137.46 41.34Q139.41 41.83 140.51 42.51L140.46 40.55Q140.46 36.69 137.5 34.19Q134.54 31.68 129.35 31.68Q125.88 31.68 122.65 33.26Q119.42 34.84 117.21 37.63L108.77 30.84Q111.31 27.48 114.55 25.26Q117.78 23.04 121.7 21.91Q125.62 20.78 129.93 20.78Q141.39 20.78 147.38 26.12Q153.37 31.45 153.37 41.71V72.58H140.46V67.41L139.92 67.53Q138.59 69.2 136.53 70.73Q134.48 72.26 131.73 73.2Q128.98 74.14 125.55 73.87Z M450.75 73.87Q443.21 74.14 437.29 70.69Q431.36 67.25 427.98 61.24Q424.6 55.23 424.6 47.56Q424.6 40.38 427.93 34.27Q431.26 28.17 437.04 24.47Q442.82 20.78 450.26 20.78Q458.29 20.78 463.78 24.23Q469.27 27.68 472.12 33.45Q474.96 39.21 474.96 46.19Q474.96 47.76 474.86 48.91Q474.76 50.05 474.63 50.77H437.51Q437.95 53.33 439.04 55.35Q440.87 58.74 443.99 60.51Q447.11 62.27 450.95 62.27Q455.46 62.27 458.54 60.31Q461.62 58.36 463.42 55.19L474.05 60.5Q470.45 66.95 464.76 70.55Q459.07 74.14 450.75 73.87Z M265.67 72.58V2.26H278.77V40.4L296.99 22.34H312.92V23.5L294.27 41.82L313.81 71.45V72.58H298.43L284.98 50.94L278.77 57.04V72.58Z M379.8 95.41Q376.24 95.68 373.67 93.78Q371.1 91.88 369.95 88.83L376.5 85.98Q376.93 87.36 377.77 88.07Q378.6 88.79 379.8 88.79Q381.29 88.79 382.07 87.95Q382.85 87.11 382.85 85.95Q382.85 84.79 382.06 83.86Q381.28 82.92 379.8 82.92Q378.98 82.92 378.37 83.33Q377.77 83.73 377.22 84.34L371.04 81.42L373.96 73.81Q370.13 73.5 367.13 72.27Q362.57 70.4 359.72 67.33Q356.87 64.27 355.44 60.37L367.14 55.19Q368.84 58.85 371.62 60.61Q374.39 62.36 378.14 62.36Q381.23 62.36 383.69 61.4Q386.15 60.44 386.15 57.89Q386.15 56.07 384.88 55.01Q383.61 53.96 381.69 53.34Q379.76 52.72 377.72 52.33L371.88 51.06Q368.25 50.27 365.01 48.24Q361.77 46.21 359.75 43.08Q357.73 39.95 357.73 35.87Q357.73 31.3 360.35 27.91Q362.96 24.54 367.42 22.66Q371.89 20.78 377.27 20.78Q382.26 20.78 386.28 21.96Q390.3 23.14 393.25 25.57Q396.2 27.99 398.04 32L386.81 37Q385.22 33.95 382.78 32.81Q380.35 31.68 377.57 31.68Q374.31 31.68 372.43 32.88Q370.54 34.08 370.54 35.67Q370.54 37.38 372.43 38.68Q374.32 39.98 377.02 40.65L384.32 42.41Q391.77 44.18 395.56 48.15Q399.35 52.12 399.35 57.7Q399.35 62.66 396.49 66.38Q393.64 70.1 388.83 72.12Q385.12 73.68 380.77 73.88L379.45 76.78Q379.79 76.52 380.19 76.52H381.07Q384.94 76.52 387.67 79.08Q390.39 81.65 390.39 86.05Q390.39 88.76 389.05 90.97Q387.71 93.18 385.33 94.43Q382.96 95.68 379.8 95.41Z M54.87 72.58V22.34H67.19V28.69L67.72 28.57Q69.94 25.03 74.06 22.91Q78.18 20.78 82.99 20.78Q92.21 20.78 96.83 26.42Q101.45 32.06 101.45 41.42V72.58H88.34V43Q88.34 38.25 85.92 35.74Q83.49 33.24 79.28 33.24Q75.83 33.24 73.29 35.09Q70.76 36.95 69.36 40.05Q67.97 43.16 67.97 47V72.58Z M202.33 33.83V22.34H210.97V8.3H224.07V22.34H236.22V33.83H224.07V54.06Q224.07 57.56 225.49 59.18Q226.9 60.8 230.13 60.8Q231.66 60.8 233 60.38Q234.34 59.95 236.61 58.44V71.62Q234.35 72.48 232.14 72.92Q229.94 73.36 227.59 73.09Q219.82 73.36 215.4 68.85Q210.97 64.33 210.97 56.43V33.83Z M161.73 72.58V2.26H174.83V72.58Z M405.17 72.58V2.26H418.27V72.58Z M481.28 72.58V22.34H493.6V29.07L494.13 28.97Q495.36 26.72 497.48 24.89Q499.59 23.05 502.44 21.96Q505.29 20.88 508.52 20.88Q510.49 20.88 512.06 21.18Q513.63 21.47 514.91 22.04V35.41Q512.66 34.5 510.68 33.97Q508.7 33.44 506.48 33.44Q502.74 33.44 500 35.28Q497.27 37.13 495.83 40.33Q494.38 43.53 494.38 47.57V72.58Z M183.87 72.58V22.34H196.97V72.58Z M243.53 72.58V22.34H256.63V72.58Z M336.95 72.58V22.34H350.05V72.58Z M128.57 63.9Q132.41 63.63 135.05 61.97Q137.68 60.31 139.07 57.65Q140.46 54.99 140.46 52.21Q138.43 51.24 135.72 50.62Q133.02 49.99 130.21 49.99Q124.65 49.99 122.57 52.05Q120.48 54.11 120.48 57.1Q120.48 59.9 122.52 61.76Q124.56 63.63 128.57 63.9Z M21.71 63.9Q25.55 63.63 28.18 61.97Q30.82 60.31 32.21 57.65Q33.6 54.99 33.6 52.21Q31.57 51.24 28.86 50.62Q26.16 49.99 23.35 49.99Q17.79 49.99 15.71 52.05Q13.62 54.11 13.62 57.1Q13.62 59.9 15.66 61.76Q17.69 63.63 21.71 63.9Z M438.05 41.16 462.35 41.26Q462.25 39.84 461.39 38.13Q460.53 36.44 459 35.01Q457.47 33.59 455.31 32.68Q453.15 31.78 450.37 31.78Q446.72 31.78 443.7 33.68Q440.67 35.59 438.94 38.98Q438.41 40.01 438.05 41.16Z M190.47 17.18Q186.99 17.46 184.5 14.94Q182.02 12.41 182.02 8.88Q182.02 5.35 184.5 2.88Q186.99 0.41 190.47 0.41Q193.95 0.41 196.38 2.88Q198.82 5.35 198.82 8.88Q198.82 12.41 196.38 14.93Q193.95 17.46 190.47 17.18Z M250.12 17.18Q246.65 17.46 244.16 14.94Q241.68 12.41 241.68 8.88Q241.68 5.35 244.16 2.88Q246.65 0.41 250.12 0.41Q253.6 0.41 256.04 2.88Q258.48 5.35 258.48 8.88Q258.48 12.41 256.04 14.93Q253.6 17.46 250.12 17.18Z\"/><path fill=\"currentColor\" d=\"M571.52 72.3V6.88C571.52 5.67 572.5 4.69 573.71 4.69H598.34C599.55 4.69 600.53 5.67 600.53 6.88V72.3ZM541.25 72.3V23.43C541.25 22.22 542.23 21.25 543.43 21.25H569.12V72.3ZM603 72.3V30.99H628.56C629.77 30.99 630.75 31.97 630.75 33.18V72.3Z\"/><path style=\"fill:var(--brand-point)\" d=\"M353.23 5.91C354.89 11.02 353.11 15.7 347.63 17.08C342.51 18.36 337.75 17.27 336.08 12.44C334.56 8.14 336.89 2.74 341.77 1.25C346.47 -0.19 351.58 0.8 353.23 5.91Z\"/>"},
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/** Images as data URIs (the report CSP allows img-src data:). */
|
|
5
17
|
export const LOGOS = {
|
|
6
|
-
"
|
|
7
|
-
"stacked-dark": "data:image/webp;base64,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",
|
|
8
|
-
"horizontal-light": "data:image/webp;base64,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",
|
|
9
|
-
"horizontal-dark": "data:image/webp;base64,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",
|
|
10
|
-
"atd-lockup-light": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMzk2LjIzMSIgaGVpZ2h0PSIyMDQiIHZpZXdCb3g9IjAgMCAxMzk2LjIzMSAyMDQiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iYWkgdGFnIGRlYnVnZ2VyIj4KPHRpdGxlPmFpIHRhZyBkZWJ1Z2dlciDigJQgR29vZ2xlIFNhbnMgQm9sZCDigJQgbGlnaHQ8L3RpdGxlPgo8ZGVzYz5Mb3dlcmNhc2UgbGV0dGVyaW5nIG91dGxpbmVkIGZyb20gdGhlIGluc3RhbGxlZCBHb29nbGUgU2FucyBCb2xkIDEzLjAwMiBmb250LiBUYWcgYW5kIHZpc2libGUgd29yZG1hcmsgYm90aCBoYXZlIGhlaWdodCAxNDAuIE9yYW5nZSB0b2tlbjogI0Q5NTMxRS4gVHJhbnNwYXJlbnQgYmFja2dyb3VuZC48L2Rlc2M+CjxnIGFyaWEtbGFiZWw9ImFpIHRhZyBkZWJ1Z2dlciI+CiAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIgMzIpIHNjYWxlKDAuNjczMDc2OTIzKSIgZmlsbD0iI0Q5NTMxRSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNNDIgMEgyMjRRMjM3IDAgMjQ3IDEwTDMxMiA4OFEzMjggMTA0IDMxMiAxMjBMMjQ3IDE5OFEyMzcgMjA4IDIyNCAyMDhINDJRMCAyMDggMCAxNjZWNDJRMCAwIDQyIDBaIE00OSA5MVE2MSA3OSA3MyA5MUwxMDYgMTI0TDE4MCA1MFExOTIgMzggMjA0IDUwUTIxNiA2MiAyMDQgNzRMMTE4IDE2MFExMDYgMTcyIDk0IDE2MEw0OSAxMTVRMzcgMTAzIDQ5IDkxWiBNMjgxIDEwNGExNyAxNyAwIDEgMCAtMzQgMGExNyAxNyAwIDEgMCAzNCAwWiIvPjwvZz4KICA8cGF0aCBmaWxsPSIjMEEwRTFBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzIuMzE3Mzk3MTg0IDEzOC40MTE1ODIyMTMpIHNjYWxlKDAuMTQ0Nzc3NjYzIC0wLjE0NDc3NzY2MykiIGQ9Ik0yMjAgLTE2UTE2NiAtMTYgMTI0LjUgNS41UTgzIDI3IDU5LjAgNjYuMFEzNSAxMDUgMzUgMTU2UTM1IDIwOSA2Mi41IDI0Ny4wUTkwIDI4NSAxMzYuNSAzMDYuMFExODMgMzI3IDI0MCAzMjdRMjcxIDMyNyAyOTYuNSAzMjMuNVEzMjIgMzIwIDM0Mi4wIDMxNS4wUTM2MiAzMTAgMzc1IDMwNFYzMjZRMzc1IDM2NyAzNDQuMCAzOTMuNVEzMTMgNDIwIDI1OSA0MjBRMjIzIDQyMCAxODkuNSA0MDMuNVExNTYgMzg3IDEzNCAzNjBMNTAgNDI2UTc1IDQ1OCAxMDguMCA0ODAuNVExNDEgNTAzIDE4MS4wIDUxNC41UTIyMSA1MjYgMjY1IDUyNlEzODIgNTI2IDQ0My4wIDQ3Mi4wUTUwNCA0MTggNTA0IDMxNFYwSDM3NVY1MkgzNjdRMzUzIDM0IDMzMi4wIDE4LjVRMzExIDMgMjgzLjAgLTYuNVEyNTUgLTE2IDIyMCAtMTZaTTI1MSA4NlEyOTEgODYgMzE4LjUgMTAzLjVRMzQ2IDEyMSAzNjAuNSAxNDkuMFEzNzUgMTc3IDM3NSAyMDhRMzUzIDIxOSAzMjUuMCAyMjUuNVEyOTcgMjMyIDI2OCAyMzJRMjEwIDIzMiAxODguMCAyMTAuMFExNjYgMTg4IDE2NiAxNTZRMTY2IDEyNiAxODcuNSAxMDYuMFEyMDkgODYgMjUxIDg2Wk02MjMgMFY1MTBINzU0VjBaTTY4OSA1NjZRNjU0IDU2NiA2MjkuMCA1OTEuMFE2MDQgNjE2IDYwNCA2NTFRNjA0IDY4NiA2MjkuMCA3MTAuNVE2NTQgNzM1IDY4OSA3MzVRNzI0IDczNSA3NDguNSA3MTAuNVE3NzMgNjg2IDc3MyA2NTFRNzczIDYxNiA3NDguNSA1OTEuMFE3MjQgNTY2IDY4OSA1NjZaTTEwNzYgMzk4VjUxMEgxMTcwVjM5OFpNMTMzNCAtOFExMjU1IC04IDEyMTAuMCAzNy41UTExNjUgODMgMTE2NSAxNjNWNjU0SDEyOTZWMTg3UTEyOTYgMTUwIDEzMTEuMCAxMzIuNVExMzI2IDExNSAxMzYwIDExNVExMzc2IDExNSAxMzkwLjAgMTE5LjVRMTQwNCAxMjQgMTQyNSAxMzdWOVExNDAzIDEgMTM4MC41IC0zLjVRMTM1OCAtOCAxMzM0IC04Wk0xMjkxIDM5OFY1MTBIMTQyMVYzOThaTTE2NzYgLTE2UTE2MjIgLTE2IDE1ODAuNSA1LjVRMTUzOSAyNyAxNTE1LjAgNjYuMFExNDkxIDEwNSAxNDkxIDE1NlExNDkxIDIwOSAxNTE4LjUgMjQ3LjBRMTU0NiAyODUgMTU5Mi41IDMwNi4wUTE2MzkgMzI3IDE2OTYgMzI3UTE3MjcgMzI3IDE3NTIuNSAzMjMuNVExNzc4IDMyMCAxNzk4LjAgMzE1LjBRMTgxOCAzMTAgMTgzMSAzMDRWMzI2UTE4MzEgMzY3IDE4MDAuMCAzOTMuNVExNzY5IDQyMCAxNzE1IDQyMFExNjc5IDQyMCAxNjQ1LjUgNDAzLjVRMTYxMiAzODcgMTU5MCAzNjBMMTUwNiA0MjZRMTUzMSA0NTggMTU2NC4wIDQ4MC41UTE1OTcgNTAzIDE2MzcuMCA1MTQuNVExNjc3IDUyNiAxNzIxIDUyNlExODM4IDUyNiAxODk5LjAgNDcyLjBRMTk2MCA0MTggMTk2MCAzMTRWMEgxODMxVjUySDE4MjNRMTgwOSAzNCAxNzg4LjAgMTguNVExNzY3IDMgMTczOS4wIC02LjVRMTcxMSAtMTYgMTY3NiAtMTZaTTE3MDcgODZRMTc0NyA4NiAxNzc0LjUgMTAzLjVRMTgwMiAxMjEgMTgxNi41IDE0OS4wUTE4MzEgMTc3IDE4MzEgMjA4UTE4MDkgMjE5IDE3ODEuMCAyMjUuNVExNzUzIDIzMiAxNzI0IDIzMlExNjY2IDIzMiAxNjQ0LjAgMjEwLjBRMTYyMiAxODggMTYyMiAxNTZRMTYyMiAxMjYgMTY0My41IDEwNi4wUTE2NjUgODYgMTcwNyA4NlpNMjMxNCAtMjMyUTIyNDUgLTIzMiAyMTk0LjUgLTIxMC41UTIxNDQgLTE4OSAyMTEyLjAgLTE1NS4wUTIwODAgLTEyMSAyMDY3IC04NEwyMTkwIC0zNFEyMjA2IC03MSAyMjM4LjUgLTkzLjVRMjI3MSAtMTE2IDIzMTQgLTExNlEyMzc1IC0xMTYgMjQxMi4wIC03OC41UTI0NDkgLTQxIDI0NDkgMzBWNzBIMjQ0MVEyNDE3IDM2IDIzNzguMCAxOC4wUTIzMzkgMCAyMjg5IDBRMjIyNyAwIDIxNzIuNSAzMi4wUTIxMTggNjQgMjA4NC41IDEyMy4wUTIwNTEgMTgyIDIwNTEgMjYzUTIwNTEgMzQ1IDIwODQuNSA0MDMuNVEyMTE4IDQ2MiAyMTcyLjUgNDk0LjBRMjIyNyA1MjYgMjI4OSA1MjZRMjMzOSA1MjYgMjM3OC4wIDUwOC41UTI0MTcgNDkxIDI0NDEgNDU2SDI0NDlWNTEwSDI1NzVWMzVRMjU3NSAtNDcgMjU0My4wIC0xMDcuMFEyNTExIC0xNjcgMjQ1Mi41IC0xOTkuNVEyMzk0IC0yMzIgMjMxNCAtMjMyWk0yMzE2IDExOVEyMzUxIDExOSAyMzgxLjUgMTM1LjVRMjQxMiAxNTIgMjQzMC41IDE4NC41UTI0NDkgMjE3IDI0NDkgMjYzUTI0NDkgMzExIDI0MzAuNSAzNDMuMFEyNDEyIDM3NSAyMzgxLjUgMzkxLjBRMjM1MSA0MDcgMjMxNiA0MDdRMjI4MSA0MDcgMjI1MC4wIDM5MS4wUTIyMTkgMzc1IDIyMDAuNSAzNDMuMFEyMTgyIDMxMSAyMTgyIDI2M1EyMTgyIDIxNiAyMjAwLjUgMTgzLjVRMjIxOSAxNTEgMjI1MC4wIDEzNS4wUTIyODEgMTE5IDIzMTYgMTE5Wk0zMTU0IC0xNlEzMDg0IC0xNiAzMDI4LjAgMTguNVEyOTcyIDUzIDI5MzkuNSAxMTQuMFEyOTA3IDE3NSAyOTA3IDI1NVEyOTA3IDMzNSAyOTM5LjUgMzk2LjBRMjk3MiA0NTcgMzAyOC4wIDQ5MS41UTMwODQgNTI2IDMxNTQgNTI2UTMxOTEgNTI2IDMyMjEuMCA1MTUuMFEzMjUxIDUwNCAzMjczLjAgNDg2LjBRMzI5NSA0NjggMzMwNyA0NDhIMzMxNUwzMzA3IDUyMFY3MTZIMzQzN1YwSDMzMTVWNjFIMzMwN1EzMjk1IDQxIDMyNzMuMCAyMy41UTMyNTEgNiAzMjIxLjAgLTUuMFEzMTkxIC0xNiAzMTU0IC0xNlpNMzE3NiAxMDVRMzIxMyAxMDUgMzI0NC41IDEyNC4wUTMyNzYgMTQzIDMyOTUuNSAxNzYuNVEzMzE1IDIxMCAzMzE1IDI1NVEzMzE1IDMwMCAzMjk1LjUgMzMzLjVRMzI3NiAzNjcgMzI0NC41IDM4NS41UTMyMTMgNDA0IDMxNzYgNDA0UTMxNDAgNDA0IDMxMDguNSAzODUuNVEzMDc3IDM2NyAzMDU3LjUgMzM0LjBRMzAzOCAzMDEgMzAzOCAyNTVRMzAzOCAyMTAgMzA1Ny41IDE3Ni4wUTMwNzcgMTQyIDMxMDguNSAxMjMuNVEzMTQwIDEwNSAzMTc2IDEwNVpNMzgwMiAtMTZRMzcyNSAtMTYgMzY2NC41IDE5LjBRMzYwNCA1NCAzNTY5LjUgMTE1LjBRMzUzNSAxNzYgMzUzNSAyNTRRMzUzNSAzMjcgMzU2OS4wIDM4OS4wUTM2MDMgNDUxIDM2NjIuMCA0ODguNVEzNzIxIDUyNiAzNzk3IDUyNlEzODc5IDUyNiAzOTM1LjAgNDkxLjBRMzk5MSA0NTYgNDAyMC4wIDM5Ny41UTQwNDkgMzM5IDQwNDkgMjY4UTQwNDkgMjUyIDQwNDguMCAyNDAuNVE0MDQ3IDIyOSA0MDQ2IDIyNEgzNjA4VjMxN0gzOTIzUTM5MjIgMzM0IDM5MTMuMCAzNTIuMFEzOTA0IDM3MCAzODg4LjAgMzg1LjBRMzg3MiA0MDAgMzg0OS41IDQwOS41UTM4MjcgNDE5IDM3OTggNDE5UTM3NjAgNDE5IDM3MjguNSAzOTkuMFEzNjk3IDM3OSAzNjc5LjAgMzQzLjVRMzY2MSAzMDggMzY2MSAyNTlRMzY2MSAyMDggMzY4MC4wIDE3Mi41UTM2OTkgMTM3IDM3MzEuNSAxMTguNVEzNzY0IDEwMCAzODA0IDEwMFEzODUxIDEwMCAzODgzLjAgMTIwLjVRMzkxNSAxNDEgMzkzMyAxNzJMNDAzOSAxMjBRNDAwMyA1NyAzOTQ1LjAgMjAuNVEzODg3IC0xNiAzODAyIC0xNlpNNDQzMSAtMTZRNDM5NCAtMTYgNDM2NC4wIC01LjBRNDMzNCA2IDQzMTIuNSAyMy41UTQyOTEgNDEgNDI3OCA2MUg0MjcwVjBINDE0N1Y3MTZINDI3OFY1MjBMNDI3MCA0NDhINDI3OFE0MjkxIDQ2OCA0MzEyLjUgNDg2LjBRNDMzNCA1MDQgNDM2NC4wIDUxNS4wUTQzOTQgNTI2IDQ0MzEgNTI2UTQ1MDEgNTI2IDQ1NTYuNSA0OTEuNVE0NjEyIDQ1NyA0NjQ0LjUgMzk2LjBRNDY3NyAzMzUgNDY3NyAyNTVRNDY3NyAxNzUgNDY0NC41IDExNC4wUTQ2MTIgNTMgNDU1Ni41IDE4LjVRNDUwMSAtMTYgNDQzMSAtMTZaTTQ0MDggMTA1UTQ0NDUgMTA1IDQ0NzYuNSAxMjMuNVE0NTA4IDE0MiA0NTI3LjUgMTc2LjBRNDU0NyAyMTAgNDU0NyAyNTVRNDU0NyAzMDEgNDUyNy41IDMzNC4wUTQ1MDggMzY3IDQ0NzYuNSAzODUuNVE0NDQ1IDQwNCA0NDA4IDQwNFE0MzcyIDQwNCA0MzQwLjUgMzg1LjVRNDMwOSAzNjcgNDI4OS41IDMzMy41UTQyNzAgMzAwIDQyNzAgMjU1UTQyNzAgMjEwIDQyODkuNSAxNzYuNVE0MzA5IDE0MyA0MzQwLjUgMTI0LjBRNDM3MiAxMDUgNDQwOCAxMDVaTTQ5NTkgLTE2UTQ4NjUgLTE2IDQ4MTguMCA0Mi4wUTQ3NzEgMTAwIDQ3NzEgMjAwVjUxMEg0OTAyVjIxNlE0OTAyIDE2NCA0OTI3LjUgMTM0LjVRNDk1MyAxMDUgNDk5MyAxMDVRNTAzMiAxMDUgNTA1OS4wIDEyNC41UTUwODYgMTQ0IDUxMDAuNSAxNzcuMFE1MTE1IDIxMCA1MTE1IDI1MFY1MTBINTI0NlYwSDUxMjNWNjRINTExNVE1MTAwIDQwIDUwNzYuMCAyMi4wUTUwNTIgNCA1MDIyLjUgLTYuMFE0OTkzIC0xNiA0OTU5IC0xNlpNNTYwNyAtMjMyUTU1MzggLTIzMiA1NDg3LjUgLTIxMC41UTU0MzcgLTE4OSA1NDA1LjAgLTE1NS4wUTUzNzMgLTEyMSA1MzYwIC04NEw1NDgzIC0zNFE1NDk5IC03MSA1NTMxLjUgLTkzLjVRNTU2NCAtMTE2IDU2MDcgLTExNlE1NjY4IC0xMTYgNTcwNS4wIC03OC41UTU3NDIgLTQxIDU3NDIgMzBWNzBINTczNFE1NzEwIDM2IDU2NzEuMCAxOC4wUTU2MzIgMCA1NTgyIDBRNTUyMCAwIDU0NjUuNSAzMi4wUTU0MTEgNjQgNTM3Ny41IDEyMy4wUTUzNDQgMTgyIDUzNDQgMjYzUTUzNDQgMzQ1IDUzNzcuNSA0MDMuNVE1NDExIDQ2MiA1NDY1LjUgNDk0LjBRNTUyMCA1MjYgNTU4MiA1MjZRNTYzMiA1MjYgNTY3MS4wIDUwOC41UTU3MTAgNDkxIDU3MzQgNDU2SDU3NDJWNTEwSDU4NjhWMzVRNTg2OCAtNDcgNTgzNi4wIC0xMDcuMFE1ODA0IC0xNjcgNTc0NS41IC0xOTkuNVE1Njg3IC0yMzIgNTYwNyAtMjMyWk01NjA5IDExOVE1NjQ0IDExOSA1Njc0LjUgMTM1LjVRNTcwNSAxNTIgNTcyMy41IDE4NC41UTU3NDIgMjE3IDU3NDIgMjYzUTU3NDIgMzExIDU3MjMuNSAzNDMuMFE1NzA1IDM3NSA1Njc0LjUgMzkxLjBRNTY0NCA0MDcgNTYwOSA0MDdRNTU3NCA0MDcgNTU0My4wIDM5MS4wUTU1MTIgMzc1IDU0OTMuNSAzNDMuMFE1NDc1IDMxMSA1NDc1IDI2M1E1NDc1IDIxNiA1NDkzLjUgMTgzLjVRNTUxMiAxNTEgNTU0My4wIDEzNS4wUTU1NzQgMTE5IDU2MDkgMTE5Wk02MjI5IC0yMzJRNjE2MCAtMjMyIDYxMDkuNSAtMjEwLjVRNjA1OSAtMTg5IDYwMjcuMCAtMTU1LjBRNTk5NSAtMTIxIDU5ODIgLTg0TDYxMDUgLTM0UTYxMjEgLTcxIDYxNTMuNSAtOTMuNVE2MTg2IC0xMTYgNjIyOSAtMTE2UTYyOTAgLTExNiA2MzI3LjAgLTc4LjVRNjM2NCAtNDEgNjM2NCAzMFY3MEg2MzU2UTYzMzIgMzYgNjI5My4wIDE4LjBRNjI1NCAwIDYyMDQgMFE2MTQyIDAgNjA4Ny41IDMyLjBRNjAzMyA2NCA1OTk5LjUgMTIzLjBRNTk2NiAxODIgNTk2NiAyNjNRNTk2NiAzNDUgNTk5OS41IDQwMy41UTYwMzMgNDYyIDYwODcuNSA0OTQuMFE2MTQyIDUyNiA2MjA0IDUyNlE2MjU0IDUyNiA2MjkzLjAgNTA4LjVRNjMzMiA0OTEgNjM1NiA0NTZINjM2NFY1MTBINjQ5MFYzNVE2NDkwIC00NyA2NDU4LjAgLTEwNy4wUTY0MjYgLTE2NyA2MzY3LjUgLTE5OS41UTYzMDkgLTIzMiA2MjI5IC0yMzJaTTYyMzEgMTE5UTYyNjYgMTE5IDYyOTYuNSAxMzUuNVE2MzI3IDE1MiA2MzQ1LjUgMTg0LjVRNjM2NCAyMTcgNjM2NCAyNjNRNjM2NCAzMTEgNjM0NS41IDM0My4wUTYzMjcgMzc1IDYyOTYuNSAzOTEuMFE2MjY2IDQwNyA2MjMxIDQwN1E2MTk2IDQwNyA2MTY1LjAgMzkxLjBRNjEzNCAzNzUgNjExNS41IDM0My4wUTYwOTcgMzExIDYwOTcgMjYzUTYwOTcgMjE2IDYxMTUuNSAxODMuNVE2MTM0IDE1MSA2MTY1LjAgMTM1LjBRNjE5NiAxMTkgNjIzMSAxMTlaTTY4NTUgLTE2UTY3NzggLTE2IDY3MTcuNSAxOS4wUTY2NTcgNTQgNjYyMi41IDExNS4wUTY1ODggMTc2IDY1ODggMjU0UTY1ODggMzI3IDY2MjIuMCAzODkuMFE2NjU2IDQ1MSA2NzE1LjAgNDg4LjVRNjc3NCA1MjYgNjg1MCA1MjZRNjkzMiA1MjYgNjk4OC4wIDQ5MS4wUTcwNDQgNDU2IDcwNzMuMCAzOTcuNVE3MTAyIDMzOSA3MTAyIDI2OFE3MTAyIDI1MiA3MTAxLjAgMjQwLjVRNzEwMCAyMjkgNzA5OSAyMjRINjY2MVYzMTdINjk3NlE2OTc1IDMzNCA2OTY2LjAgMzUyLjBRNjk1NyAzNzAgNjk0MS4wIDM4NS4wUTY5MjUgNDAwIDY5MDIuNSA0MDkuNVE2ODgwIDQxOSA2ODUxIDQxOVE2ODEzIDQxOSA2NzgxLjUgMzk5LjBRNjc1MCAzNzkgNjczMi4wIDM0My41UTY3MTQgMzA4IDY3MTQgMjU5UTY3MTQgMjA4IDY3MzMuMCAxNzIuNVE2NzUyIDEzNyA2Nzg0LjUgMTE4LjVRNjgxNyAxMDAgNjg1NyAxMDBRNjkwNCAxMDAgNjkzNi4wIDEyMC41UTY5NjggMTQxIDY5ODYgMTcyTDcwOTIgMTIwUTcwNTYgNTcgNjk5OC4wIDIwLjVRNjk0MCAtMTYgNjg1NSAtMTZaTTcyMDAgMFY1MTBINzMyM1Y0NDJINzMzMVE3MzQ0IDQ2NiA3MzY1LjUgNDg0LjVRNzM4NyA1MDMgNzQxNi4wIDUxNC4wUTc0NDUgNTI1IDc0NzggNTI1UTc0OTggNTI1IDc1MTQuMCA1MjIuMFE3NTMwIDUxOSA3NTQyIDUxNFYzODNRNzUyMSAzOTEgNzUwMC41IDM5Ni41UTc0ODAgNDAyIDc0NTcgNDAyUTc0MTggNDAyIDczODkuNSAzODIuNVE3MzYxIDM2MyA3MzQ2LjAgMzI5LjVRNzMzMSAyOTYgNzMzMSAyNTRWMFoiLz4KPC9nPgo8L3N2Zz4=",
|
|
11
|
-
"atd-lockup-dark": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMzk2LjIzMSIgaGVpZ2h0PSIyMDQiIHZpZXdCb3g9IjAgMCAxMzk2LjIzMSAyMDQiIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0iYWkgdGFnIGRlYnVnZ2VyIj4KPHRpdGxlPmFpIHRhZyBkZWJ1Z2dlciDigJQgR29vZ2xlIFNhbnMgQm9sZCDigJQgZGFyazwvdGl0bGU+CjxkZXNjPkxvd2VyY2FzZSBsZXR0ZXJpbmcgb3V0bGluZWQgZnJvbSB0aGUgaW5zdGFsbGVkIEdvb2dsZSBTYW5zIEJvbGQgMTMuMDAyIGZvbnQuIFRhZyBhbmQgdmlzaWJsZSB3b3JkbWFyayBib3RoIGhhdmUgaGVpZ2h0IDE0MC4gT3JhbmdlIHRva2VuOiAjRkY2RDMzLiBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kLjwvZGVzYz4KPGcgYXJpYS1sYWJlbD0iYWkgdGFnIGRlYnVnZ2VyIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMiAzMikgc2NhbGUoMC42NzMwNzY5MjMpIiBmaWxsPSIjRkY2RDMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik00MiAwSDIyNFEyMzcgMCAyNDcgMTBMMzEyIDg4UTMyOCAxMDQgMzEyIDEyMEwyNDcgMTk4UTIzNyAyMDggMjI0IDIwOEg0MlEwIDIwOCAwIDE2NlY0MlEwIDAgNDIgMFogTTQ5IDkxUTYxIDc5IDczIDkxTDEwNiAxMjRMMTgwIDUwUTE5MiAzOCAyMDQgNTBRMjE2IDYyIDIwNCA3NEwxMTggMTYwUTEwNiAxNzIgOTQgMTYwTDQ5IDExNVEzNyAxMDMgNDkgOTFaIE0yODEgMTA0YTE3IDE3IDAgMSAwIC0zNCAwYTE3IDE3IDAgMSAwIDM0IDBaIi8+PC9nPgogIDxwYXRoIGZpbGw9IiNGNUY3RkEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3Mi4zMTczOTcxODQgMTM4LjQxMTU4MjIxMykgc2NhbGUoMC4xNDQ3Nzc2NjMgLTAuMTQ0Nzc3NjYzKSIgZD0iTTIyMCAtMTZRMTY2IC0xNiAxMjQuNSA1LjVRODMgMjcgNTkuMCA2Ni4wUTM1IDEwNSAzNSAxNTZRMzUgMjA5IDYyLjUgMjQ3LjBROTAgMjg1IDEzNi41IDMwNi4wUTE4MyAzMjcgMjQwIDMyN1EyNzEgMzI3IDI5Ni41IDMyMy41UTMyMiAzMjAgMzQyLjAgMzE1LjBRMzYyIDMxMCAzNzUgMzA0VjMyNlEzNzUgMzY3IDM0NC4wIDM5My41UTMxMyA0MjAgMjU5IDQyMFEyMjMgNDIwIDE4OS41IDQwMy41UTE1NiAzODcgMTM0IDM2MEw1MCA0MjZRNzUgNDU4IDEwOC4wIDQ4MC41UTE0MSA1MDMgMTgxLjAgNTE0LjVRMjIxIDUyNiAyNjUgNTI2UTM4MiA1MjYgNDQzLjAgNDcyLjBRNTA0IDQxOCA1MDQgMzE0VjBIMzc1VjUySDM2N1EzNTMgMzQgMzMyLjAgMTguNVEzMTEgMyAyODMuMCAtNi41UTI1NSAtMTYgMjIwIC0xNlpNMjUxIDg2UTI5MSA4NiAzMTguNSAxMDMuNVEzNDYgMTIxIDM2MC41IDE0OS4wUTM3NSAxNzcgMzc1IDIwOFEzNTMgMjE5IDMyNS4wIDIyNS41UTI5NyAyMzIgMjY4IDIzMlEyMTAgMjMyIDE4OC4wIDIxMC4wUTE2NiAxODggMTY2IDE1NlExNjYgMTI2IDE4Ny41IDEwNi4wUTIwOSA4NiAyNTEgODZaTTYyMyAwVjUxMEg3NTRWMFpNNjg5IDU2NlE2NTQgNTY2IDYyOS4wIDU5MS4wUTYwNCA2MTYgNjA0IDY1MVE2MDQgNjg2IDYyOS4wIDcxMC41UTY1NCA3MzUgNjg5IDczNVE3MjQgNzM1IDc0OC41IDcxMC41UTc3MyA2ODYgNzczIDY1MVE3NzMgNjE2IDc0OC41IDU5MS4wUTcyNCA1NjYgNjg5IDU2NlpNMTA3NiAzOThWNTEwSDExNzBWMzk4Wk0xMzM0IC04UTEyNTUgLTggMTIxMC4wIDM3LjVRMTE2NSA4MyAxMTY1IDE2M1Y2NTRIMTI5NlYxODdRMTI5NiAxNTAgMTMxMS4wIDEzMi41UTEzMjYgMTE1IDEzNjAgMTE1UTEzNzYgMTE1IDEzOTAuMCAxMTkuNVExNDA0IDEyNCAxNDI1IDEzN1Y5UTE0MDMgMSAxMzgwLjUgLTMuNVExMzU4IC04IDEzMzQgLThaTTEyOTEgMzk4VjUxMEgxNDIxVjM5OFpNMTY3NiAtMTZRMTYyMiAtMTYgMTU4MC41IDUuNVExNTM5IDI3IDE1MTUuMCA2Ni4wUTE0OTEgMTA1IDE0OTEgMTU2UTE0OTEgMjA5IDE1MTguNSAyNDcuMFExNTQ2IDI4NSAxNTkyLjUgMzA2LjBRMTYzOSAzMjcgMTY5NiAzMjdRMTcyNyAzMjcgMTc1Mi41IDMyMy41UTE3NzggMzIwIDE3OTguMCAzMTUuMFExODE4IDMxMCAxODMxIDMwNFYzMjZRMTgzMSAzNjcgMTgwMC4wIDM5My41UTE3NjkgNDIwIDE3MTUgNDIwUTE2NzkgNDIwIDE2NDUuNSA0MDMuNVExNjEyIDM4NyAxNTkwIDM2MEwxNTA2IDQyNlExNTMxIDQ1OCAxNTY0LjAgNDgwLjVRMTU5NyA1MDMgMTYzNy4wIDUxNC41UTE2NzcgNTI2IDE3MjEgNTI2UTE4MzggNTI2IDE4OTkuMCA0NzIuMFExOTYwIDQxOCAxOTYwIDMxNFYwSDE4MzFWNTJIMTgyM1ExODA5IDM0IDE3ODguMCAxOC41UTE3NjcgMyAxNzM5LjAgLTYuNVExNzExIC0xNiAxNjc2IC0xNlpNMTcwNyA4NlExNzQ3IDg2IDE3NzQuNSAxMDMuNVExODAyIDEyMSAxODE2LjUgMTQ5LjBRMTgzMSAxNzcgMTgzMSAyMDhRMTgwOSAyMTkgMTc4MS4wIDIyNS41UTE3NTMgMjMyIDE3MjQgMjMyUTE2NjYgMjMyIDE2NDQuMCAyMTAuMFExNjIyIDE4OCAxNjIyIDE1NlExNjIyIDEyNiAxNjQzLjUgMTA2LjBRMTY2NSA4NiAxNzA3IDg2Wk0yMzE0IC0yMzJRMjI0NSAtMjMyIDIxOTQuNSAtMjEwLjVRMjE0NCAtMTg5IDIxMTIuMCAtMTU1LjBRMjA4MCAtMTIxIDIwNjcgLTg0TDIxOTAgLTM0UTIyMDYgLTcxIDIyMzguNSAtOTMuNVEyMjcxIC0xMTYgMjMxNCAtMTE2UTIzNzUgLTExNiAyNDEyLjAgLTc4LjVRMjQ0OSAtNDEgMjQ0OSAzMFY3MEgyNDQxUTI0MTcgMzYgMjM3OC4wIDE4LjBRMjMzOSAwIDIyODkgMFEyMjI3IDAgMjE3Mi41IDMyLjBRMjExOCA2NCAyMDg0LjUgMTIzLjBRMjA1MSAxODIgMjA1MSAyNjNRMjA1MSAzNDUgMjA4NC41IDQwMy41UTIxMTggNDYyIDIxNzIuNSA0OTQuMFEyMjI3IDUyNiAyMjg5IDUyNlEyMzM5IDUyNiAyMzc4LjAgNTA4LjVRMjQxNyA0OTEgMjQ0MSA0NTZIMjQ0OVY1MTBIMjU3NVYzNVEyNTc1IC00NyAyNTQzLjAgLTEwNy4wUTI1MTEgLTE2NyAyNDUyLjUgLTE5OS41UTIzOTQgLTIzMiAyMzE0IC0yMzJaTTIzMTYgMTE5UTIzNTEgMTE5IDIzODEuNSAxMzUuNVEyNDEyIDE1MiAyNDMwLjUgMTg0LjVRMjQ0OSAyMTcgMjQ0OSAyNjNRMjQ0OSAzMTEgMjQzMC41IDM0My4wUTI0MTIgMzc1IDIzODEuNSAzOTEuMFEyMzUxIDQwNyAyMzE2IDQwN1EyMjgxIDQwNyAyMjUwLjAgMzkxLjBRMjIxOSAzNzUgMjIwMC41IDM0My4wUTIxODIgMzExIDIxODIgMjYzUTIxODIgMjE2IDIyMDAuNSAxODMuNVEyMjE5IDE1MSAyMjUwLjAgMTM1LjBRMjI4MSAxMTkgMjMxNiAxMTlaTTMxNTQgLTE2UTMwODQgLTE2IDMwMjguMCAxOC41UTI5NzIgNTMgMjkzOS41IDExNC4wUTI5MDcgMTc1IDI5MDcgMjU1UTI5MDcgMzM1IDI5MzkuNSAzOTYuMFEyOTcyIDQ1NyAzMDI4LjAgNDkxLjVRMzA4NCA1MjYgMzE1NCA1MjZRMzE5MSA1MjYgMzIyMS4wIDUxNS4wUTMyNTEgNTA0IDMyNzMuMCA0ODYuMFEzMjk1IDQ2OCAzMzA3IDQ0OEgzMzE1TDMzMDcgNTIwVjcxNkgzNDM3VjBIMzMxNVY2MUgzMzA3UTMyOTUgNDEgMzI3My4wIDIzLjVRMzI1MSA2IDMyMjEuMCAtNS4wUTMxOTEgLTE2IDMxNTQgLTE2Wk0zMTc2IDEwNVEzMjEzIDEwNSAzMjQ0LjUgMTI0LjBRMzI3NiAxNDMgMzI5NS41IDE3Ni41UTMzMTUgMjEwIDMzMTUgMjU1UTMzMTUgMzAwIDMyOTUuNSAzMzMuNVEzMjc2IDM2NyAzMjQ0LjUgMzg1LjVRMzIxMyA0MDQgMzE3NiA0MDRRMzE0MCA0MDQgMzEwOC41IDM4NS41UTMwNzcgMzY3IDMwNTcuNSAzMzQuMFEzMDM4IDMwMSAzMDM4IDI1NVEzMDM4IDIxMCAzMDU3LjUgMTc2LjBRMzA3NyAxNDIgMzEwOC41IDEyMy41UTMxNDAgMTA1IDMxNzYgMTA1Wk0zODAyIC0xNlEzNzI1IC0xNiAzNjY0LjUgMTkuMFEzNjA0IDU0IDM1NjkuNSAxMTUuMFEzNTM1IDE3NiAzNTM1IDI1NFEzNTM1IDMyNyAzNTY5LjAgMzg5LjBRMzYwMyA0NTEgMzY2Mi4wIDQ4OC41UTM3MjEgNTI2IDM3OTcgNTI2UTM4NzkgNTI2IDM5MzUuMCA0OTEuMFEzOTkxIDQ1NiA0MDIwLjAgMzk3LjVRNDA0OSAzMzkgNDA0OSAyNjhRNDA0OSAyNTIgNDA0OC4wIDI0MC41UTQwNDcgMjI5IDQwNDYgMjI0SDM2MDhWMzE3SDM5MjNRMzkyMiAzMzQgMzkxMy4wIDM1Mi4wUTM5MDQgMzcwIDM4ODguMCAzODUuMFEzODcyIDQwMCAzODQ5LjUgNDA5LjVRMzgyNyA0MTkgMzc5OCA0MTlRMzc2MCA0MTkgMzcyOC41IDM5OS4wUTM2OTcgMzc5IDM2NzkuMCAzNDMuNVEzNjYxIDMwOCAzNjYxIDI1OVEzNjYxIDIwOCAzNjgwLjAgMTcyLjVRMzY5OSAxMzcgMzczMS41IDExOC41UTM3NjQgMTAwIDM4MDQgMTAwUTM4NTEgMTAwIDM4ODMuMCAxMjAuNVEzOTE1IDE0MSAzOTMzIDE3Mkw0MDM5IDEyMFE0MDAzIDU3IDM5NDUuMCAyMC41UTM4ODcgLTE2IDM4MDIgLTE2Wk00NDMxIC0xNlE0Mzk0IC0xNiA0MzY0LjAgLTUuMFE0MzM0IDYgNDMxMi41IDIzLjVRNDI5MSA0MSA0Mjc4IDYxSDQyNzBWMEg0MTQ3VjcxNkg0Mjc4VjUyMEw0MjcwIDQ0OEg0Mjc4UTQyOTEgNDY4IDQzMTIuNSA0ODYuMFE0MzM0IDUwNCA0MzY0LjAgNTE1LjBRNDM5NCA1MjYgNDQzMSA1MjZRNDUwMSA1MjYgNDU1Ni41IDQ5MS41UTQ2MTIgNDU3IDQ2NDQuNSAzOTYuMFE0Njc3IDMzNSA0Njc3IDI1NVE0Njc3IDE3NSA0NjQ0LjUgMTE0LjBRNDYxMiA1MyA0NTU2LjUgMTguNVE0NTAxIC0xNiA0NDMxIC0xNlpNNDQwOCAxMDVRNDQ0NSAxMDUgNDQ3Ni41IDEyMy41UTQ1MDggMTQyIDQ1MjcuNSAxNzYuMFE0NTQ3IDIxMCA0NTQ3IDI1NVE0NTQ3IDMwMSA0NTI3LjUgMzM0LjBRNDUwOCAzNjcgNDQ3Ni41IDM4NS41UTQ0NDUgNDA0IDQ0MDggNDA0UTQzNzIgNDA0IDQzNDAuNSAzODUuNVE0MzA5IDM2NyA0Mjg5LjUgMzMzLjVRNDI3MCAzMDAgNDI3MCAyNTVRNDI3MCAyMTAgNDI4OS41IDE3Ni41UTQzMDkgMTQzIDQzNDAuNSAxMjQuMFE0MzcyIDEwNSA0NDA4IDEwNVpNNDk1OSAtMTZRNDg2NSAtMTYgNDgxOC4wIDQyLjBRNDc3MSAxMDAgNDc3MSAyMDBWNTEwSDQ5MDJWMjE2UTQ5MDIgMTY0IDQ5MjcuNSAxMzQuNVE0OTUzIDEwNSA0OTkzIDEwNVE1MDMyIDEwNSA1MDU5LjAgMTI0LjVRNTA4NiAxNDQgNTEwMC41IDE3Ny4wUTUxMTUgMjEwIDUxMTUgMjUwVjUxMEg1MjQ2VjBINTEyM1Y2NEg1MTE1UTUxMDAgNDAgNTA3Ni4wIDIyLjBRNTA1MiA0IDUwMjIuNSAtNi4wUTQ5OTMgLTE2IDQ5NTkgLTE2Wk01NjA3IC0yMzJRNTUzOCAtMjMyIDU0ODcuNSAtMjEwLjVRNTQzNyAtMTg5IDU0MDUuMCAtMTU1LjBRNTM3MyAtMTIxIDUzNjAgLTg0TDU0ODMgLTM0UTU0OTkgLTcxIDU1MzEuNSAtOTMuNVE1NTY0IC0xMTYgNTYwNyAtMTE2UTU2NjggLTExNiA1NzA1LjAgLTc4LjVRNTc0MiAtNDEgNTc0MiAzMFY3MEg1NzM0UTU3MTAgMzYgNTY3MS4wIDE4LjBRNTYzMiAwIDU1ODIgMFE1NTIwIDAgNTQ2NS41IDMyLjBRNTQxMSA2NCA1Mzc3LjUgMTIzLjBRNTM0NCAxODIgNTM0NCAyNjNRNTM0NCAzNDUgNTM3Ny41IDQwMy41UTU0MTEgNDYyIDU0NjUuNSA0OTQuMFE1NTIwIDUyNiA1NTgyIDUyNlE1NjMyIDUyNiA1NjcxLjAgNTA4LjVRNTcxMCA0OTEgNTczNCA0NTZINTc0MlY1MTBINTg2OFYzNVE1ODY4IC00NyA1ODM2LjAgLTEwNy4wUTU4MDQgLTE2NyA1NzQ1LjUgLTE5OS41UTU2ODcgLTIzMiA1NjA3IC0yMzJaTTU2MDkgMTE5UTU2NDQgMTE5IDU2NzQuNSAxMzUuNVE1NzA1IDE1MiA1NzIzLjUgMTg0LjVRNTc0MiAyMTcgNTc0MiAyNjNRNTc0MiAzMTEgNTcyMy41IDM0My4wUTU3MDUgMzc1IDU2NzQuNSAzOTEuMFE1NjQ0IDQwNyA1NjA5IDQwN1E1NTc0IDQwNyA1NTQzLjAgMzkxLjBRNTUxMiAzNzUgNTQ5My41IDM0My4wUTU0NzUgMzExIDU0NzUgMjYzUTU0NzUgMjE2IDU0OTMuNSAxODMuNVE1NTEyIDE1MSA1NTQzLjAgMTM1LjBRNTU3NCAxMTkgNTYwOSAxMTlaTTYyMjkgLTIzMlE2MTYwIC0yMzIgNjEwOS41IC0yMTAuNVE2MDU5IC0xODkgNjAyNy4wIC0xNTUuMFE1OTk1IC0xMjEgNTk4MiAtODRMNjEwNSAtMzRRNjEyMSAtNzEgNjE1My41IC05My41UTYxODYgLTExNiA2MjI5IC0xMTZRNjI5MCAtMTE2IDYzMjcuMCAtNzguNVE2MzY0IC00MSA2MzY0IDMwVjcwSDYzNTZRNjMzMiAzNiA2MjkzLjAgMTguMFE2MjU0IDAgNjIwNCAwUTYxNDIgMCA2MDg3LjUgMzIuMFE2MDMzIDY0IDU5OTkuNSAxMjMuMFE1OTY2IDE4MiA1OTY2IDI2M1E1OTY2IDM0NSA1OTk5LjUgNDAzLjVRNjAzMyA0NjIgNjA4Ny41IDQ5NC4wUTYxNDIgNTI2IDYyMDQgNTI2UTYyNTQgNTI2IDYyOTMuMCA1MDguNVE2MzMyIDQ5MSA2MzU2IDQ1Nkg2MzY0VjUxMEg2NDkwVjM1UTY0OTAgLTQ3IDY0NTguMCAtMTA3LjBRNjQyNiAtMTY3IDYzNjcuNSAtMTk5LjVRNjMwOSAtMjMyIDYyMjkgLTIzMlpNNjIzMSAxMTlRNjI2NiAxMTkgNjI5Ni41IDEzNS41UTYzMjcgMTUyIDYzNDUuNSAxODQuNVE2MzY0IDIxNyA2MzY0IDI2M1E2MzY0IDMxMSA2MzQ1LjUgMzQzLjBRNjMyNyAzNzUgNjI5Ni41IDM5MS4wUTYyNjYgNDA3IDYyMzEgNDA3UTYxOTYgNDA3IDYxNjUuMCAzOTEuMFE2MTM0IDM3NSA2MTE1LjUgMzQzLjBRNjA5NyAzMTEgNjA5NyAyNjNRNjA5NyAyMTYgNjExNS41IDE4My41UTYxMzQgMTUxIDYxNjUuMCAxMzUuMFE2MTk2IDExOSA2MjMxIDExOVpNNjg1NSAtMTZRNjc3OCAtMTYgNjcxNy41IDE5LjBRNjY1NyA1NCA2NjIyLjUgMTE1LjBRNjU4OCAxNzYgNjU4OCAyNTRRNjU4OCAzMjcgNjYyMi4wIDM4OS4wUTY2NTYgNDUxIDY3MTUuMCA0ODguNVE2Nzc0IDUyNiA2ODUwIDUyNlE2OTMyIDUyNiA2OTg4LjAgNDkxLjBRNzA0NCA0NTYgNzA3My4wIDM5Ny41UTcxMDIgMzM5IDcxMDIgMjY4UTcxMDIgMjUyIDcxMDEuMCAyNDAuNVE3MTAwIDIyOSA3MDk5IDIyNEg2NjYxVjMxN0g2OTc2UTY5NzUgMzM0IDY5NjYuMCAzNTIuMFE2OTU3IDM3MCA2OTQxLjAgMzg1LjBRNjkyNSA0MDAgNjkwMi41IDQwOS41UTY4ODAgNDE5IDY4NTEgNDE5UTY4MTMgNDE5IDY3ODEuNSAzOTkuMFE2NzUwIDM3OSA2NzMyLjAgMzQzLjVRNjcxNCAzMDggNjcxNCAyNTlRNjcxNCAyMDggNjczMy4wIDE3Mi41UTY3NTIgMTM3IDY3ODQuNSAxMTguNVE2ODE3IDEwMCA2ODU3IDEwMFE2OTA0IDEwMCA2OTM2LjAgMTIwLjVRNjk2OCAxNDEgNjk4NiAxNzJMNzA5MiAxMjBRNzA1NiA1NyA2OTk4LjAgMjAuNVE2OTQwIC0xNiA2ODU1IC0xNlpNNzIwMCAwVjUxMEg3MzIzVjQ0Mkg3MzMxUTczNDQgNDY2IDczNjUuNSA0ODQuNVE3Mzg3IDUwMyA3NDE2LjAgNTE0LjBRNzQ0NSA1MjUgNzQ3OCA1MjVRNzQ5OCA1MjUgNzUxNC4wIDUyMi4wUTc1MzAgNTE5IDc1NDIgNTE0VjM4M1E3NTIxIDM5MSA3NTAwLjUgMzk2LjVRNzQ4MCA0MDIgNzQ1NyA0MDJRNzQxOCA0MDIgNzM4OS41IDM4Mi41UTczNjEgMzYzIDczNDYuMCAzMjkuNVE3MzMxIDI5NiA3MzMxIDI1NFYwWiIvPgo8L2c+Cjwvc3ZnPg==",
|
|
12
|
-
"atd-icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMzYiIGhlaWdodD0iMjI0IiB2aWV3Qm94PSItOCAtOCAzMzYgMjI0IiByb2xlPSJpbWciIGFyaWEtbGFiZWw9ImFpIHRhZyBkZWJ1Z2dlciBlbWJsZW0iPjx0aXRsZT5haSB0YWcgZGVidWdnZXIgZW1ibGVtIOKAlCBsaWdodDwvdGl0bGU+PHBhdGggZmlsbD0iI0Q5NTMxRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNDIgMEgyMjRRMjM3IDAgMjQ3IDEwTDMxMiA4OFEzMjggMTA0IDMxMiAxMjBMMjQ3IDE5OFEyMzcgMjA4IDIyNCAyMDhINDJRMCAyMDggMCAxNjZWNDJRMCAwIDQyIDBaIE00OSA5MVE2MSA3OSA3MyA5MUwxMDYgMTI0TDE4MCA1MFExOTIgMzggMjA0IDUwUTIxNiA2MiAyMDQgNzRMMTE4IDE2MFExMDYgMTcyIDk0IDE2MEw0OSAxMTVRMzcgMTAzIDQ5IDkxWiBNMjgxIDEwNGExNyAxNyAwIDEgMCAtMzQgMGExNyAxNyAwIDEgMCAzNCAwWiIgLz48L3N2Zz4=",
|
|
13
|
-
"favicon": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE50lEQVR4nMRXa0xbVRz/3b64lLbAGI+WlQGCOBiODYMzi8SJAffFsKnDmS26mIAzPvHxyTi/+ZqPzMfIiJljLvrB6MSR6JYQSYxl06SIIhkLYQO6sgLLVgq0tL3Hc0/vbXtbKF2G7Jfcnse/5//4nf//3HM1iAJvMu/jCBoBbivHwYIVBCG4Qn97CYdTXrfzhDzPMcO8eb1Kh6N0WI9VATkjLKDZ63VeVjEvtNzJ1TPOLNZzWnwt9tS8MW+/iuNewCqD47gCtS5tVEONN+E2QbStAUFVKBOWhrXmaRRsa4YudS1NJsIeSC0REJ6LHkfkoXbG2YeR7oPwucciiqlttZY3fZDIuGXLHpQ1vAWVOpWNBUG0AKZYNCKwNjIvj0n0mEKjzwEJLGDGcS6inOMMmkTG15ZsR9nDbzPlRDIaYUA5JtFOLSonUGn0cTaWdMCYV4Hyxk+kiEg4EgUD0vhSz/uYnbyAnIpHkVnSEJKTGGYkJ5NyIMVkQWXTl+DUKcooZLrlPRZCSl0D30EI+JCSsR6ZxfVLMIDkHNDwJmzacwyalHS2MLK3ApOLSgW/Dw77CdoPILfySYT1xuYEEJMjZDkHOFTs+hx8ujUccdDvxfj5dvi9HqyraaGOmeB29mPcdpit4DOKEbFP4Jnoh3vcBj6zFCZrrRQ5iQSTyIGs0jqYLNWhKKU9dg12Yay3jfXVOgPy72kJ7a9sVFBGNfHXcbhHe6BNy4VxXW1M1SCxA/PXRiK1i1CbmlkUlvPphVK2QxG1rJjEBCgEBWXVLLcFc9PDGP/jGK39p8Ke67MrsWlvF4I0yfiMQqkkoxmIcgYkLCOSc9HnQlJJONJzCDpDPs3mB8Peaw1maKOyms8oRd6WZ2lfgD63CuaaVgTmXDCY72XVoOGzoDMWMAYUVbOIB5zeZImb5VRabNh1HGnZGxTZH5fdEs0iFtxOTNg/g+eKDZnZZvi8s5if9cJgrUNW+TP0EErDjZFOTPZ9lJiBkDE/hn46gLt2dkBnyg8bJ4rzXRoLQUwNfovpfztQ29iC6rpDMK7JZXomHcOwnW6H/cw+ZFe9EpewSzIgI8VkxZ2PfAU1Lb3Ys13OEb/HhdHuZrS88z2yzEVs/urlQej4NDouZP+9aP8V33z8OtKLH8P034eXZ0CG+OYa/uUl3LGjjb43NIozX2bDaf8UdbtfZMYHbF3obHsD857rbH1GjhVNrW0o3fwAqrbVof/82ZtjQIYx/z6sLd8rRS5luVRaznMH8WZHP60SP97dvxEL87OKtfklm9Hy3mlMUFa+aBUvXULyDMiYcdjYsxjMxRvF2w1uTDnijItwjQ2yNsdaRl/pqnDS3pQDiSAnlkq1uKpgMJhwvQq3CNfYBUZ/enY+1uQVxcnLqh8K/08IBlbeAVHpb6eOUAZUeLz1CC3BvLDMUlyJxuc+ZP1LA72Lrk8qCZcFzYEnXmtH+dYd8TJRu3TnFCvkz7MnFWK1Vmc4IN7NcIv45/dOeOdmGAPalFQseOcwOTaEIXs3Y0JE8d3304PpaGQrCLmqod710W4DVgDiqSc+sbg+NY7tu1+F42If/D5vREBtc3qjpZF2fsD/DFOWBe5rTuWtiGAn2x29yfwzdWdFWEgW9CD7cX7G2ciqIEC4l6ljPqwS6CHuQcD3vNhXfBPdjs/z/wAAAP//hkxTugAAAAZJREFUAwAgrRNzbxNrdwAAAABJRU5ErkJggg==",
|
|
18
|
+
"favicon-light": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idCI+PHRpdGxlIGlkPSJ0Ij5haTwvdGl0bGU+PGRlc2M+RmF2aWNvbiAxNnB4OiBtYXJrIG9ubHksIHN0ZW0gM3B4IG9uIHRoZSBwaXhlbCBncmlkLjwvZGVzYz48cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiNGM0YwRTgiLz48cGF0aCBmaWxsPSIjMTcxNDBGIiBkPSJNNS4yIDE1LjIzUTQuMzMgMTUuMjMgMy41NiAxNC45M1EyLjc5IDE0LjY0IDIuMzEgMTQuMDJRMS44MyAxMy40MSAxLjgzIDEyLjQzUTEuODMgMTEuMzcgMi40NCAxMC42OFEzLjA1IDkuOTkgNC4xNyA5LjY1UTUuMjkgOS4zMSA2LjgyIDkuMzFIOC4wMkw3Ljg3IDkuNThWOS4wM1E3Ljg3IDguMiA3LjU4IDcuODFRNy4yOSA3LjQzIDYuNjMgNy40M1E1Ljk5IDcuNDMgNS42NiA3Ljc3UTUuMzMgOC4xMSA1LjIyIDguNzdMMi4yMyA4LjI5UTIuNCA3LjUxIDIuOTMgNi44OFEzLjQ2IDYuMjYgNC40MSA1Ljg5UTUuMzYgNS41MiA2LjggNS41MlE4LjA2IDUuNTIgOC45NiA1LjlROS44NiA2LjI4IDEwLjM1IDcuMThRMTAuODMgOC4wOSAxMC44MyA5LjY4VjEyLjM5UTEwLjgzIDEyLjY3IDEwLjkxIDEyLjc3UTEwLjk5IDEyLjg2IDEwLjkyIDEyLjg2SDExLjE4VjE1SDEwLjNROS4xNCAxNSA4LjU3IDE0LjQ0UTcuOTkgMTMuODggNy45OSAxMi44VjEyLjQ1TDguNTQgMTIuNjlROC40MyAxMy4wNiA4LjIzIDEzLjQ5UTguMDMgMTMuOTMgNy42NyAxNC4zMlE3LjMgMTQuNzIgNi43IDE0Ljk3UTYuMSAxNS4yMyA1LjIgMTUuMjNaTTYuMDkgMTMuMjdRNi42NSAxMy4yNyA3LjA1IDEzLjAyUTcuNDUgMTIuNzggNy42NyAxMi4zMVE3Ljg5IDExLjg0IDcuODkgMTEuMTdWMTAuOTJINi45N1E2LjE1IDEwLjkyIDUuNjkgMTEuMTRRNS4yNCAxMS4zNSA1LjA3IDExLjY2UTQuODkgMTEuOTYgNC44OSAxMi4yNVE0Ljg5IDEyLjQ0IDQuOTggMTIuNjhRNS4wNyAxMi45MiA1LjMzIDEzLjA5UTUuNTkgMTMuMjcgNi4wOSAxMy4yN1pNMTIgMTUgMTUgMTUgMTUgNi4xIDEyIDUuNjJaIi8+PHBhdGggZmlsbD0iI0MxMkQzMCIgZD0iTTE1LjU4IDEuOThDMTUuOTMgMy4wOCAxNS41NSA0LjA4IDE0LjM4IDQuMzdDMTMuMjggNC42NSAxMi4yNiA0LjQxIDExLjkxIDMuMzhDMTEuNTggMi40NiAxMi4wOCAxLjMgMTMuMTIgMC45OEMxNC4xMyAwLjY3IDE1LjIzIDAuODkgMTUuNTggMS45OFoiLz48L3N2Zz4K",
|
|
19
|
+
"favicon-dark": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idCI+PHRpdGxlIGlkPSJ0Ij5haTwvdGl0bGU+PGRlc2M+RmF2aWNvbiAxNnB4OiBtYXJrIG9ubHksIHN0ZW0gM3B4IG9uIHRoZSBwaXhlbCBncmlkLjwvZGVzYz48cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMxNTEzMTAiLz48cGF0aCBmaWxsPSIjRjFFQ0UyIiBkPSJNNS4yIDE1LjIzUTQuMzMgMTUuMjMgMy41NiAxNC45M1EyLjc5IDE0LjY0IDIuMzEgMTQuMDJRMS44MyAxMy40MSAxLjgzIDEyLjQzUTEuODMgMTEuMzcgMi40NCAxMC42OFEzLjA1IDkuOTkgNC4xNyA5LjY1UTUuMjkgOS4zMSA2LjgyIDkuMzFIOC4wMkw3Ljg3IDkuNThWOS4wM1E3Ljg3IDguMiA3LjU4IDcuODFRNy4yOSA3LjQzIDYuNjMgNy40M1E1Ljk5IDcuNDMgNS42NiA3Ljc3UTUuMzMgOC4xMSA1LjIyIDguNzdMMi4yMyA4LjI5UTIuNCA3LjUxIDIuOTMgNi44OFEzLjQ2IDYuMjYgNC40MSA1Ljg5UTUuMzYgNS41MiA2LjggNS41MlE4LjA2IDUuNTIgOC45NiA1LjlROS44NiA2LjI4IDEwLjM1IDcuMThRMTAuODMgOC4wOSAxMC44MyA5LjY4VjEyLjM5UTEwLjgzIDEyLjY3IDEwLjkxIDEyLjc3UTEwLjk5IDEyLjg2IDEwLjkyIDEyLjg2SDExLjE4VjE1SDEwLjNROS4xNCAxNSA4LjU3IDE0LjQ0UTcuOTkgMTMuODggNy45OSAxMi44VjEyLjQ1TDguNTQgMTIuNjlROC40MyAxMy4wNiA4LjIzIDEzLjQ5UTguMDMgMTMuOTMgNy42NyAxNC4zMlE3LjMgMTQuNzIgNi43IDE0Ljk3UTYuMSAxNS4yMyA1LjIgMTUuMjNaTTYuMDkgMTMuMjdRNi42NSAxMy4yNyA3LjA1IDEzLjAyUTcuNDUgMTIuNzggNy42NyAxMi4zMVE3Ljg5IDExLjg0IDcuODkgMTEuMTdWMTAuOTJINi45N1E2LjE1IDEwLjkyIDUuNjkgMTEuMTRRNS4yNCAxMS4zNSA1LjA3IDExLjY2UTQuODkgMTEuOTYgNC44OSAxMi4yNVE0Ljg5IDEyLjQ0IDQuOTggMTIuNjhRNS4wNyAxMi45MiA1LjMzIDEzLjA5UTUuNTkgMTMuMjcgNi4wOSAxMy4yN1pNMTIgMTUgMTUgMTUgMTUgNi4xIDEyIDUuNjJaIi8+PHBhdGggZmlsbD0iI0ZBNkI2RCIgZD0iTTE1LjU4IDEuOThDMTUuOTMgMy4wOCAxNS41NSA0LjA4IDE0LjM4IDQuMzdDMTMuMjggNC42NSAxMi4yNiA0LjQxIDExLjkxIDMuMzhDMTEuNTggMi40NiAxMi4wOCAxLjMgMTMuMTIgMC45OEMxNC4xMyAwLjY3IDE1LjIzIDAuODkgMTUuNTggMS45OFoiLz48L3N2Zz4K",
|
|
14
20
|
};
|
package/src/browser.js
CHANGED
|
@@ -357,12 +357,23 @@ const NAVIGATION_RETRY_MS = 2000;
|
|
|
357
357
|
// a lookup or the server took too long. Blocked, refused-by-proxy, certificate and protocol errors are not here.
|
|
358
358
|
const TRANSIENT_NET_ERRORS = /net::ERR_(CONNECTION_(RESET|CLOSED|ABORTED|REFUSED|TIMED_OUT)|TIMED_OUT|NETWORK_CHANGED|NAME_NOT_RESOLVED|NAME_RESOLUTION_FAILED|DNS_TIMED_OUT|INTERNET_DISCONNECTED|ADDRESS_UNREACHABLE|EMPTY_RESPONSE|SOCKET_NOT_CONNECTED|HTTP2_(PROTOCOL|SERVER_REFUSED_STREAM|PING_FAILED)|NETWORK_IO_SUSPENDED|SPDY_PROTOCOL_ERROR|QUIC_PROTOCOL_ERROR)\b/;
|
|
359
359
|
|
|
360
|
-
|
|
361
|
-
|
|
360
|
+
// goto's error when Chromium committed its error page before goto heard why the load failed. It has no
|
|
361
|
+
// net::ERR_* code; the failed document request does. Other interruptions say nothing about the network.
|
|
362
|
+
const ERROR_PAGE_INTERRUPTION = /interrupted by another navigation to "chrome-error:/;
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* The net::ERR_* code or "timeout" from a Playwright navigation error, for the log line. failedLoad is the
|
|
366
|
+
* error text of the main frame's failed document request, which counts when an error page cut goto short.
|
|
367
|
+
*/
|
|
368
|
+
function navigationErrorCode(err, failedLoad) {
|
|
369
|
+
const message = String(err?.message ?? err);
|
|
370
|
+
if (ERROR_PAGE_INTERRUPTION.test(message)) return failedLoad?.match(/net::ERR_[A-Z0-9_]+/)?.[0] ?? "error";
|
|
371
|
+
return message.match(/net::ERR_[A-Z0-9_]+/)?.[0] ?? (err?.name === "TimeoutError" || /Timeout \d+ms exceeded/.test(message) ? "timeout" : "error");
|
|
372
|
+
}
|
|
362
373
|
|
|
363
374
|
/** True when a failed navigation is worth one more try: a transient network error or a timeout. */
|
|
364
|
-
export function isTransientNavigationError(err) {
|
|
365
|
-
const code = navigationErrorCode(err);
|
|
375
|
+
export function isTransientNavigationError(err, failedLoad) {
|
|
376
|
+
const code = navigationErrorCode(err, failedLoad);
|
|
366
377
|
return code === "timeout" || TRANSIENT_NET_ERRORS.test(code);
|
|
367
378
|
}
|
|
368
379
|
|
|
@@ -404,6 +415,8 @@ export class AuditSession {
|
|
|
404
415
|
this.skipped = {}; // step index -> { vendor label: requests }
|
|
405
416
|
this.loadedIn = new Map(); // page address -> the last step whose main-frame navigation reached it
|
|
406
417
|
this.leaving = null; // the page address being navigated away from, until the next page commits
|
|
418
|
+
this.failedLoad = null; // the error text of the main frame's last failed document request in navigate()
|
|
419
|
+
this.errorPageShown = false; // whether Chromium's error page committed in the main frame since navigate() began
|
|
407
420
|
this.bodyBytes = 0;
|
|
408
421
|
this.bodyBudgetStep = null; // the step at which POST bodies stopped being stored
|
|
409
422
|
this.startedAt = Date.now();
|
|
@@ -442,6 +455,7 @@ export class AuditSession {
|
|
|
442
455
|
this.page.on("pageerror", (err) => this.errors.push({ step: this.currentStep, message: err.message }));
|
|
443
456
|
this.page.on("framenavigated", (frame) => {
|
|
444
457
|
if (frame !== this.page.mainFrame()) return;
|
|
458
|
+
if (frame.url().startsWith("chrome-error:")) this.errorPageShown = true;
|
|
445
459
|
this.loadedIn.set(pageKey(frame.url()), this.currentStep);
|
|
446
460
|
this.leaving = null;
|
|
447
461
|
// Script redirects on the first page move where it ends up.
|
|
@@ -449,7 +463,10 @@ export class AuditSession {
|
|
|
449
463
|
});
|
|
450
464
|
// From the moment the main frame starts loading another document, the open page is leaving.
|
|
451
465
|
this.page.on("request", (request) => {
|
|
452
|
-
if (
|
|
466
|
+
if (this.isPageLoad(request)) this.leaving = pageKey(this.page.url());
|
|
467
|
+
});
|
|
468
|
+
this.page.on("requestfailed", (request) => {
|
|
469
|
+
if (this.isPageLoad(request)) this.failedLoad = request.failure()?.errorText ?? null;
|
|
453
470
|
});
|
|
454
471
|
|
|
455
472
|
const onRequest = (request) => {
|
|
@@ -659,17 +676,36 @@ export class AuditSession {
|
|
|
659
676
|
*/
|
|
660
677
|
async navigate(url) {
|
|
661
678
|
const options = { waitUntil: "domcontentloaded", timeout: 30000 };
|
|
679
|
+
this.failedLoad = null;
|
|
680
|
+
this.errorPageShown = false;
|
|
662
681
|
try {
|
|
663
682
|
return await this.page.goto(url, options);
|
|
664
683
|
} catch (err) {
|
|
665
|
-
if (this.blocked?.step === this.currentStep
|
|
684
|
+
if (this.blocked?.step === this.currentStep) throw err;
|
|
685
|
+
// When the error page cut goto short, the failed request can be reported just after goto rejects.
|
|
686
|
+
if (!this.failedLoad && ERROR_PAGE_INTERRUPTION.test(err?.message)) {
|
|
687
|
+
await this.page.waitForEvent("requestfailed", { predicate: (request) => this.isPageLoad(request), timeout: 1000 }).catch(() => {});
|
|
688
|
+
}
|
|
689
|
+
if (!isTransientNavigationError(err, this.failedLoad)) throw err;
|
|
690
|
+
const code = navigationErrorCode(err, this.failedLoad);
|
|
666
691
|
const delay = this.opts.navigationRetryMs ?? NAVIGATION_RETRY_MS;
|
|
667
|
-
this.log(` Opening ${url} failed (${
|
|
668
|
-
|
|
692
|
+
this.log(` Opening ${url} failed (${code}); trying once more in ${Math.round(delay / 1000)}s`);
|
|
693
|
+
// Chromium can commit the error page for the failed load well after goto has given up. A retry begun
|
|
694
|
+
// before that is interrupted by it, so the retry waits for it. A load that timed out gets no error page.
|
|
695
|
+
const errorPage = code === "timeout" || this.errorPageShown ? null : this.page.waitForEvent("framenavigated", {
|
|
696
|
+
predicate: (frame) => frame === this.page.mainFrame() && frame.url().startsWith("chrome-error:"),
|
|
697
|
+
timeout: 5000,
|
|
698
|
+
}).catch(() => {});
|
|
699
|
+
await Promise.all([new Promise((resolve) => setTimeout(resolve, delay)), errorPage]);
|
|
669
700
|
return this.page.goto(url, options);
|
|
670
701
|
}
|
|
671
702
|
}
|
|
672
703
|
|
|
704
|
+
/** Whether a request loads a new document into the main frame. */
|
|
705
|
+
isPageLoad(request) {
|
|
706
|
+
return request.isNavigationRequest() && request.frame() === this.page.mainFrame();
|
|
707
|
+
}
|
|
708
|
+
|
|
673
709
|
/** Error message when the browser may not be on this URL, or null. */
|
|
674
710
|
checkUrl(url) {
|
|
675
711
|
if (url.startsWith("chrome-error:")) return null; // Chromium's own error page, e.g. after a blocked navigation
|