{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"redocly_category":"Guides","product":"Fraud Prevention","type":"markdown"},"seo":{"title":"Integrate using Google Cloud CDN","description":"Everything about Mosaic Journeys, SDKs, and APIs","siteUrl":"https://developer.transmitsecurity.com/","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"integrate-using-google-cloud-cdn","__idx":0},"children":["Integrate using Google Cloud CDN"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://cloud.google.com/cdn/docs/overview"},"children":["Google Cloud CDN"]}," is a fully managed service that distributes HTTP(S) traffic across backend services and can inspect and modify traffic at the edge. This allows it to act not only as a global entry point for applications but also as a point of control for injecting or filtering content in transit."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Mosaic provides a native integration with GCP ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Service Extensions"]}," that enables you to inject the Fraud Prevention into HTML responses automatically, without modifying your web application code."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This plugin intercepts HTML responses at the CDN level and injects the required ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<script>"]}," tags for the Fraud Prevention SDK. As a result, every page served through the CDN includes the Fraud Prevention SDK, allowing Mosaic to capture risk signals from client devices transparently."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-it-works","__idx":1},"children":["How it works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a client requests an HTML page, the request passes through the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["GCP CDN"]}," (1)."," ","The backend returns the response, which is intercepted by the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Fraud Prevention plugin"]}," (2) at the CDN and modified to inject the SDK before being delivered to the browser. Once the page is loaded, the browser executes the injected Fraud Prevention SDK (3). The SDK collects device and risk signals client-side and forwards them to Mosaic for analysis (4)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The plugin uses the following ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["injection strategy"]}," (fallback order):"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["After ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<meta charset>"]}," (preferred)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["After ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<head>"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Before ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<body>"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["At the beginning of the document"]}]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"sequenceDiagram\n    participant U as Client\n    participant LB as GCP CDN\n    participant BE as Backend\n    participant SE as Service Ext (plugin)\n    participant FP as Fraud Prevention (SDK)\n\n    U->>LB: HTTP GET /page.html\n\n    Note over LB: Step 1\n\n    LB->>BE: Forward request\n    BE-->>LB: HTML response\n\n    Note over LB, SE: Step 2\n\n    LB->>SE: RESPONSE_HEADERS/BODY event (intercept)\n    SE-->>SE: Inject script for Fraud Prevention SDK and init block\n    SE-->>LB: Modified HTML response\n    LB-->>U: Deliver modified HTML\n\n    Note over U: Step 3\n\n    U->>FP: Browser loads injected Fraud Prevention script\n\n    Note over FP: Step 4\n\n    FP-->>FP: Initialize with clientId + serverPath\n    FP-->>Mosaic: Send device/risk signals\n","diagramHtml":"<svg id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1393.5px;\" viewBox=\"-50 -10 1393.5 979\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"1143.5\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1218.5\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1218.5\" dy=\"0\">Mosaic</tspan></text></g><g><rect x=\"876.5\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"FP\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"972.5\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"972.5\" dy=\"0\">Fraud Prevention (SDK)</tspan></text></g><g><rect x=\"641\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"160\" height=\"65\" name=\"SE\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"721\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"721\" dy=\"0\">Service Ext (plugin)</tspan></text></g><g><rect x=\"441\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"BE\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"516\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"516\" dy=\"0\">Backend</tspan></text></g><g><rect x=\"241\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"LB\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"316\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"316\" dy=\"0\">GCP CDN</tspan></text></g><g><rect x=\"0\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"U\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g><g><line id=\"actor5\" x1=\"1218.5\" y1=\"65\" x2=\"1218.5\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Mosaic\" data-et=\"life-line\" data-id=\"Mosaic\"></line><g id=\"root-5\" data-et=\"participant\" data-type=\"participant\" data-id=\"Mosaic\"><rect x=\"1143.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1218.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1218.5\" dy=\"0\">Mosaic</tspan></text></g></g><g><line id=\"actor4\" x1=\"972.5\" y1=\"65\" x2=\"972.5\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"FP\" data-et=\"life-line\" data-id=\"FP\"></line><g id=\"root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"FP\"><rect x=\"876.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"FP\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"972.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"972.5\" dy=\"0\">Fraud Prevention (SDK)</tspan></text></g></g><g><line id=\"actor3\" x1=\"721\" y1=\"65\" x2=\"721\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"SE\" data-et=\"life-line\" data-id=\"SE\"></line><g id=\"root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"SE\"><rect x=\"641\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"160\" height=\"65\" name=\"SE\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"721\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"721\" dy=\"0\">Service Ext (plugin)</tspan></text></g></g><g><line id=\"actor2\" x1=\"516\" y1=\"65\" x2=\"516\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"BE\" data-et=\"life-line\" data-id=\"BE\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"BE\"><rect x=\"441\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"BE\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"516\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"516\" dy=\"0\">Backend</tspan></text></g></g><g><line id=\"actor1\" x1=\"316\" y1=\"65\" x2=\"316\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"LB\" data-et=\"life-line\" data-id=\"LB\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"LB\"><rect x=\"241\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"LB\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"316\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"316\" dy=\"0\">GCP CDN</tspan></text></g></g><g><line id=\"actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"U\" data-et=\"life-line\" data-id=\"U\"></line><g id=\"root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"U\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"U\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g></g><style>#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .error-icon{fill:#552222;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .error-text{fill:#552222;stroke:#552222;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-thickness-normal{stroke-width:1px;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-thickness-thick{stroke-width:3.5px;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-pattern-solid{stroke-dasharray:0;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .marker{fill:#333333;stroke:#333333;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .marker.cross{stroke:#333333;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 p{margin:0;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .actor{stroke:#9370DB;fill:#ECECFF;stroke-width:1;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 rect.note[data-look=\"neo\"]{stroke:#aaaa33;fill:#fff5ad;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 text.actor&gt;tspan{fill:black;stroke:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .actor-line{stroke:#9370DB;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [id$=\"-arrowhead\"] path{fill:#333;stroke:#333;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .sequenceNumber{fill:white;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [id$=\"-sequencenumber\"]{fill:#333;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [id$=\"-crosshead\"] path{fill:#333;stroke:#333;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .messageText{fill:#333;stroke:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .labelBox{stroke:#9370DB;fill:#ECECFF;filter:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .labelText,#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .labelText&gt;tspan{fill:black;stroke:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .loopText,#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .loopText&gt;tspan{fill:black;stroke:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .sectionTitle,#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .sectionTitle&gt;tspan{fill:black;stroke:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#9370DB;fill:#9370DB;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .note{stroke:#aaaa33;fill:#fff5ad;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .noteText,#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .noteText&gt;tspan{fill:black;stroke:none;font-weight:normal;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .activation0{fill:#f4f4f4;stroke:#666;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .activation1{fill:#f4f4f4;stroke:#666;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .activation2{fill:#f4f4f4;stroke:#666;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .actorPopupMenu{position:absolute;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .actor-man circle,#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 line{fill:#ECECFF;stroke-width:2px;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 g rect.rect{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));stroke:#9370DB;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 .node .neo-node{stroke:#9370DB;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].node rect,#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].cluster rect,#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i1\"><rect x=\"241\" y=\"129\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"150\" height=\"42\" class=\"note\"></rect><text x=\"316\" y=\"134\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"316\">Step 1</tspan></text></g><g data-et=\"note\" data-id=\"i4\"><rect x=\"291\" y=\"289\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"455\" height=\"42\" class=\"note\"></rect><text x=\"519\" y=\"294\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"519\">Step 2</tspan></text></g><g data-et=\"note\" data-id=\"i9\"><rect x=\"0\" y=\"587\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"150\" height=\"42\" class=\"note\"></rect><text x=\"75\" y=\"592\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"75\">Step 3</tspan></text></g><g data-et=\"note\" data-id=\"i11\"><rect x=\"876.5\" y=\"693\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"192\" height=\"42\" class=\"note\"></rect><text x=\"973\" y=\"698\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"973\">Step 4</tspan></text></g><text x=\"194\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">HTTP GET /page.html</text><line x1=\"76\" y1=\"119\" x2=\"312\" y2=\"119\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"U\" data-to=\"LB\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"fill: none;\"></line><text x=\"415\" y=\"186\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Forward request</text><line x1=\"317\" y1=\"225\" x2=\"512\" y2=\"225\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"LB\" data-to=\"BE\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"fill: none;\"></line><text x=\"418\" y=\"240\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">HTML response</text><line x1=\"515\" y1=\"279\" x2=\"320\" y2=\"279\" class=\"messageLine1\" data-et=\"message\" data-id=\"i3\" data-from=\"BE\" data-to=\"LB\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"517\" y=\"346\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">RESPONSE_HEADERS/BODY event (intercept)</text><line x1=\"317\" y1=\"385\" x2=\"717\" y2=\"385\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"LB\" data-to=\"SE\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"fill: none;\"></line><text x=\"722\" y=\"400\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Inject script for Fraud Prevention SDK and init block</text><path d=\"M 722,439 C 782,429 782,469 722,459\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"SE\" data-to=\"SE\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></path><text x=\"520\" y=\"484\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Modified HTML response</text><line x1=\"720\" y1=\"523\" x2=\"320\" y2=\"523\" class=\"messageLine1\" data-et=\"message\" data-id=\"i7\" data-from=\"SE\" data-to=\"LB\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"197\" y=\"538\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Deliver modified HTML</text><line x1=\"315\" y1=\"577\" x2=\"79\" y2=\"577\" class=\"messageLine1\" data-et=\"message\" data-id=\"i8\" data-from=\"LB\" data-to=\"U\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"522\" y=\"644\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Browser loads injected Fraud Prevention script</text><line x1=\"76\" y1=\"683\" x2=\"968.5\" y2=\"683\" class=\"messageLine0\" data-et=\"message\" data-id=\"i10\" data-from=\"U\" data-to=\"FP\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"fill: none;\"></line><text x=\"974\" y=\"750\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Initialize with clientId + serverPath</text><path d=\"M 973.5,789 C 1033.5,779 1033.5,819 973.5,809\" class=\"messageLine1\" data-et=\"message\" data-id=\"i12\" data-from=\"FP\" data-to=\"FP\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></path><text x=\"1094\" y=\"834\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Send device/risk signals</text><line x1=\"973.5\" y1=\"873\" x2=\"1214.5\" y2=\"873\" class=\"messageLine1\" data-et=\"message\" data-id=\"i13\" data-from=\"FP\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-bdde1ac4f30463f9ddbb0c48ac04e0db82d51c1a33a5c20d41c27c3fc9422560-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>","diagramHtmlDark":"<svg id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 1393.5px;\" viewBox=\"-50 -10 1393.5 979\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"1143.5\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"1218.5\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1218.5\" dy=\"0\">Mosaic</tspan></text></g><g><rect x=\"876.5\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"FP\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"972.5\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"972.5\" dy=\"0\">Fraud Prevention (SDK)</tspan></text></g><g><rect x=\"641\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"160\" height=\"65\" name=\"SE\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"721\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"721\" dy=\"0\">Service Ext (plugin)</tspan></text></g><g><rect x=\"441\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"BE\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"516\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"516\" dy=\"0\">Backend</tspan></text></g><g><rect x=\"241\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"LB\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"316\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"316\" dy=\"0\">GCP CDN</tspan></text></g><g><rect x=\"0\" y=\"893\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"U\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"925.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g><g><line id=\"actor5\" x1=\"1218.5\" y1=\"65\" x2=\"1218.5\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Mosaic\" data-et=\"life-line\" data-id=\"Mosaic\"></line><g id=\"root-5\" data-et=\"participant\" data-type=\"participant\" data-id=\"Mosaic\"><rect x=\"1143.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"1218.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"1218.5\" dy=\"0\">Mosaic</tspan></text></g></g><g><line id=\"actor4\" x1=\"972.5\" y1=\"65\" x2=\"972.5\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"FP\" data-et=\"life-line\" data-id=\"FP\"></line><g id=\"root-4\" data-et=\"participant\" data-type=\"participant\" data-id=\"FP\"><rect x=\"876.5\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"192\" height=\"65\" name=\"FP\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"972.5\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"972.5\" dy=\"0\">Fraud Prevention (SDK)</tspan></text></g></g><g><line id=\"actor3\" x1=\"721\" y1=\"65\" x2=\"721\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"SE\" data-et=\"life-line\" data-id=\"SE\"></line><g id=\"root-3\" data-et=\"participant\" data-type=\"participant\" data-id=\"SE\"><rect x=\"641\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"160\" height=\"65\" name=\"SE\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"721\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"721\" dy=\"0\">Service Ext (plugin)</tspan></text></g></g><g><line id=\"actor2\" x1=\"516\" y1=\"65\" x2=\"516\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"BE\" data-et=\"life-line\" data-id=\"BE\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"BE\"><rect x=\"441\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"BE\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"516\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"516\" dy=\"0\">Backend</tspan></text></g></g><g><line id=\"actor1\" x1=\"316\" y1=\"65\" x2=\"316\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"LB\" data-et=\"life-line\" data-id=\"LB\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"LB\"><rect x=\"241\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"LB\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"316\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"316\" dy=\"0\">GCP CDN</tspan></text></g></g><g><line id=\"actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"893\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"U\" data-et=\"life-line\" data-id=\"U\"></line><g id=\"root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"U\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"U\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">Client</tspan></text></g></g><style>#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .error-icon{fill:#a44141;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .error-text{fill:#ddd;stroke:#ddd;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-thickness-normal{stroke-width:1px;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-thickness-thick{stroke-width:3.5px;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-pattern-solid{stroke-dasharray:0;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-pattern-dashed{stroke-dasharray:3;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .edge-pattern-dotted{stroke-dasharray:2;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .marker{fill:lightgrey;stroke:lightgrey;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .marker.cross{stroke:lightgrey;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c p{margin:0;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .actor{stroke:#ccc;fill:#1f2020;stroke-width:1;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c rect.note[data-look=\"neo\"]{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c text.actor&gt;tspan{fill:lightgrey;stroke:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .actor-line{stroke:#ccc;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:lightgrey;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:lightgrey;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [id$=\"-arrowhead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .sequenceNumber{fill:black;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [id$=\"-sequencenumber\"]{fill:lightgrey;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [id$=\"-crosshead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .messageText{fill:lightgrey;stroke:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .labelBox{stroke:#ccc;fill:#1f2020;filter:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .labelText,#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .labelText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .loopText,#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .loopText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .sectionTitle,#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .sectionTitle&gt;tspan{fill:lightgrey;stroke:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#ccc;fill:#ccc;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .note{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .noteText,#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .noteText&gt;tspan{fill:rgb(183.8476190475, 181.5523809523, 181.5523809523);stroke:none;font-weight:normal;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .activation0{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .activation1{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .activation2{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .actorPopupMenu{position:absolute;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .actorPopupMenuPanel{position:absolute;fill:#1f2020;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .actor-man circle,#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c line{fill:#1f2020;stroke-width:2px;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:#ccc;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c .node .neo-node{stroke:#ccc;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].node rect,#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].cluster rect,#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].node polygon{stroke:url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].node path{stroke:url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-gradient);stroke-width:1px;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].node circle{stroke:url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><g data-et=\"note\" data-id=\"i1\"><rect x=\"241\" y=\"129\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"150\" height=\"42\" class=\"note\"></rect><text x=\"316\" y=\"134\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"316\">Step 1</tspan></text></g><g data-et=\"note\" data-id=\"i4\"><rect x=\"291\" y=\"289\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"455\" height=\"42\" class=\"note\"></rect><text x=\"519\" y=\"294\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"519\">Step 2</tspan></text></g><g data-et=\"note\" data-id=\"i9\"><rect x=\"0\" y=\"587\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"150\" height=\"42\" class=\"note\"></rect><text x=\"75\" y=\"592\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"75\">Step 3</tspan></text></g><g data-et=\"note\" data-id=\"i11\"><rect x=\"876.5\" y=\"693\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"192\" height=\"42\" class=\"note\"></rect><text x=\"973\" y=\"698\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\"><tspan x=\"973\">Step 4</tspan></text></g><text x=\"194\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">HTTP GET /page.html</text><line x1=\"76\" y1=\"119\" x2=\"312\" y2=\"119\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"U\" data-to=\"LB\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"fill: none;\"></line><text x=\"415\" y=\"186\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Forward request</text><line x1=\"317\" y1=\"225\" x2=\"512\" y2=\"225\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"LB\" data-to=\"BE\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"fill: none;\"></line><text x=\"418\" y=\"240\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">HTML response</text><line x1=\"515\" y1=\"279\" x2=\"320\" y2=\"279\" class=\"messageLine1\" data-et=\"message\" data-id=\"i3\" data-from=\"BE\" data-to=\"LB\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"517\" y=\"346\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">RESPONSE_HEADERS/BODY event (intercept)</text><line x1=\"317\" y1=\"385\" x2=\"717\" y2=\"385\" class=\"messageLine0\" data-et=\"message\" data-id=\"i5\" data-from=\"LB\" data-to=\"SE\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"fill: none;\"></line><text x=\"722\" y=\"400\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Inject script for Fraud Prevention SDK and init block</text><path d=\"M 722,439 C 782,429 782,469 722,459\" class=\"messageLine1\" data-et=\"message\" data-id=\"i6\" data-from=\"SE\" data-to=\"SE\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></path><text x=\"520\" y=\"484\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Modified HTML response</text><line x1=\"720\" y1=\"523\" x2=\"320\" y2=\"523\" class=\"messageLine1\" data-et=\"message\" data-id=\"i7\" data-from=\"SE\" data-to=\"LB\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"197\" y=\"538\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Deliver modified HTML</text><line x1=\"315\" y1=\"577\" x2=\"79\" y2=\"577\" class=\"messageLine1\" data-et=\"message\" data-id=\"i8\" data-from=\"LB\" data-to=\"U\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"522\" y=\"644\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Browser loads injected Fraud Prevention script</text><line x1=\"76\" y1=\"683\" x2=\"968.5\" y2=\"683\" class=\"messageLine0\" data-et=\"message\" data-id=\"i10\" data-from=\"U\" data-to=\"FP\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"fill: none;\"></line><text x=\"974\" y=\"750\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Initialize with clientId + serverPath</text><path d=\"M 973.5,789 C 1033.5,779 1033.5,819 973.5,809\" class=\"messageLine1\" data-et=\"message\" data-id=\"i12\" data-from=\"FP\" data-to=\"FP\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></path><text x=\"1094\" y=\"834\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Send device/risk signals</text><line x1=\"973.5\" y1=\"873\" x2=\"1214.5\" y2=\"873\" class=\"messageLine1\" data-et=\"message\" data-id=\"i13\" data-from=\"FP\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-b4f230dbc924628981bb3e15ae04ddacfa00fd5928a804514fd8751000d6450c-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>"},"children":["sequenceDiagram\n    participant U as Client\n    participant LB as GCP CDN\n    participant BE as Backend\n    participant SE as Service Ext (plugin)\n    participant FP as Fraud Prevention (SDK)\n\n    U->>LB: HTTP GET /page.html\n\n    Note over LB: Step 1\n\n    LB->>BE: Forward request\n    BE-->>LB: HTML response\n\n    Note over LB, SE: Step 2\n\n    LB->>SE: RESPONSE_HEADERS/BODY event (intercept)\n    SE-->>SE: Inject script for Fraud Prevention SDK and init block\n    SE-->>LB: Modified HTML response\n    LB-->>U: Deliver modified HTML\n\n    Note over U: Step 3\n\n    U->>FP: Browser loads injected Fraud Prevention script\n\n    Note over FP: Step 4\n\n    FP-->>FP: Initialize with clientId + serverPath\n    FP-->>Mosaic: Send device/risk signals\n"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"before-you-start","__idx":2},"children":["Before you start"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before you begin:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A Google Cloud Platform account with billing enabled."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Global External HTTPS CDN"]}," (only HTTPS is supported)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["gcloud"]}," CLI installed and configured (version ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["534.0.0"]}," or higher)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-1-get-client-credentials","__idx":3},"children":["Step 1: Get client credentials"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["Admin Portal"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Client credentials are used to identify your app and generate access tokens for authorizing Mosaic requests. To obtain them, you'll need to create an application in the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://portal.transmitsecurity.io/"},"children":["Admin Portal"]}," (if you don’t have one yet)."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["From ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Applications"]},", click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add application"]},"."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add the friendly application name to display in the Admin Portal."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add a client display name, and your website URL as a redirect URI (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://your-domain.com"]},"). These fields are required for all Mosaic apps, but won’t be used for Fraud Prevention."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]}," to create your application. This will automatically generate your client credentials (you'll need your client ID in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#step-3-deploy-the-html-injection-wasm-plugin"},"children":["step 3"]},")."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-2-set-up-your--google-cloud-environment","__idx":4},"children":["Step 2: Set up your  Google Cloud environment"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["GCP"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before deploying the plugin, you need to prepare your Google Cloud environment."," ","Define your project and enable the required API for Service Extensions."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Run the following commands from a terminal where the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["gcloud CLI"]}," is installed and authenticated (for example, in your local terminal or in the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://cloud.google.com/shell"},"children":["Google Cloud Shell"]},")."," ","Make sure you have the necessary permissions to run these commands; if not, contact your GCP administrator."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Set your GCP project ID\ngcloud config set project YOUR_PROJECT_ID\n\n# Enable the Service Extensions API (required for deploying the plugin)\ngcloud services enable serviceextensions.googleapis.com\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-3-deploy-the-html-injection-wasm-plugin","__idx":5},"children":["Step 3: Deploy the HTML Injection WASM plugin"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["GCP"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this step you deploy the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Fraud Prevention HTML Injection WASM plugin"]}," provided by Mosaic."," ","This plugin runs as a GCP Service Extension and is responsible for intercepting HTML responses at the CDN level and injecting the Fraud Prevention SDK automatically, without requiring changes to your application code."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The plugin accepts the following parameters:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Parameter"},"children":["Parameter"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Example"},"children":["Example"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clientId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your Mosaic app client ID"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["XXXXXXXXXXXXXXX_XXX"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["serverPath"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Fraud Prevention API server path"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.transmitsecurity.io/risk-collect/"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Never expose your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clientId"]}," in client-side code samples, public docs, or unsecured environments."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Common server paths by region:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["US: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.transmitsecurity.io/risk-collect/"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["EU: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.eu.transmitsecurity.io/risk-collect/"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Canada: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.ca.transmitsecurity.io/risk-collect/"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Australia: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.au.transmitsecurity.io/risk-collect/"]}]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Set variables for easy configuration\nPLUGIN_VERSION=\"v1-3\"   # replace with the desired version (currently \"v1-3\")\nPLUGIN_IMAGE=\"us-central1-docker.pkg.dev/dev-riskid/drs-plugins/drs-sdk-plugin-go:latest\"  # replace with the image URI (currently Transmit Security's public image)\nCLIENT_ID=\"YOUR_CLIENT_ID\"   # replace with your DRS client ID (provided by Transmit Security)\nSERVER_PATH=\"YOUR_SERVER_PATH\"   # replace with your DRS server path (see examples below)\n\n# Create plugin configuration file\ncat > plugin-config.txt << EOF\nclientId=${CLIENT_ID},serverPath=${SERVER_PATH}\nEOF\n\n# Create the WASM plugin\ngcloud service-extensions wasm-plugins create drs-html-injection-plugin \\\n    --location=global \\\n    --main-version=\"${PLUGIN_VERSION}\" \\\n    --image=\"${PLUGIN_IMAGE}\" \\\n    --plugin-config-file=\"plugin-config.txt\" \\\n    --log-config=\"enable=True,sample-rate=1.0,min-log-level=INFO\" \\\n    --description=\"DRS HTML Injection Plugin - Automatically injects DRS SDK into HTML responses\"\n\n# (Optional)Clean up config file\nrm plugin-config.txt\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You will receive a response similar to the one below:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"Create request issued for: [drs-html-injection-plugin]\nWaiting for operation [projects/dev-riskid/locations/global/operations/operation-1755779730683-63cdf5326b4c9-95d21107-9fd2f84e] to complete...done.\nCreated WasmPlugin [drs-html-injection-plugin] with WasmPluginVersion [PLUGIN_VERSION].\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"example-of-injected-code","__idx":6},"children":["Example of injected code"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When the plugin processes an HTML response, it automatically injects into the page a snippet similar to the one below. This happens at the CDN level — you do not need to add this code manually."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"html","header":{"controls":{"copy":{}}},"source":"<script async src=\"https://platform-websdk.transmitsecurity.io/platform-websdk/2.x/ts-platform-websdk.js\"></script>\n<script>\nwindow.addEventListener('load', function() {\n  if (window.tsPlatform) {\n    window.tsPlatform.initialize({\n      clientId: 'YOUR_CLIENT_ID',\n      drs: {\n        serverPath: 'YOUR_SERVER_PATH'\n      }\n    });\n    console.log('DRS SDK initialized');\n  }\n});\n</script>\n","lang":"html"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The values YOUR_CLIENT_ID and YOUR_SERVER_PATH are automatically taken from the plugin configuration."," ","You do not need to replace them manually in your application code."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://cloud.google.com/sdk/gcloud/reference"},"children":["Google Cloud CLI"]}," to check logs and monitor the status of your Service Extension and CDN."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-4-configure-the-gcp-cdn","__idx":7},"children":["Step 4: Configure the GCP CDN"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["GCP"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Attach the plugin to your CDN"]}," so it can intercept traffic. This is done by creating a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Service Extension"]}," that links the plugin to the forwarding rule of your HTTPS CDN."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Identify the forwarding rule used by your CDN:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Set your CDN name (replace with your CDN name)\nLOAD_BALANCER_NAME=\"your-load-balancer-name\"\n\n# Get the target HTTPS proxy for your CDN\nTARGET_PROXY_NAME=$(gcloud compute target-https-proxies list --filter=\"urlMap:${LOAD_BALANCER_NAME}\" --format=\"value(name)\")\n\n# Find forwarding rules that use this target proxy\n# (replace FORWARDING_RULE_NAME with your CDN's forwarding rule name)\ngcloud compute forwarding-rules list --global --filter=\"target:${TARGET_PROXY_NAME}\" --format=\"value(name)\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create a Service Extension configuration file that attaches the previously deployed plugin (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["drs-html-injection-plugin"]},") to your forwarding rule:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# Set variables for your GCP resources\nPROJECT_ID=\"YOUR_PROJECT_ID\"            # replace with your GCP project ID\nFORWARDING_RULE_NAME=\"YOUR_FORWARDING_RULE_NAME\"  # replace with your CDN's forwarding rule name\n\n# Create service extension configuration\ncat > drs-service-extension.yaml << EOF\nname: projects/${PROJECT_ID}/locations/global/lbTrafficExtensions/drs-injection-service\ndescription: \"DRS HTML Injection Service Extension\"\nloadBalancingScheme: EXTERNAL_MANAGED\nforwardingRules:\n- https://www.googleapis.com/compute/v1/projects/${PROJECT_ID}/global/forwardingRules/${FORWARDING_RULE_NAME}\nextensionChains:\n- name: drs-injection-chain\n  matchCondition:\n    celExpression: \"true\"\n  extensions:\n  - name: drs-html-injection-plugin\n    service: projects/${PROJECT_ID}/locations/global/wasmPlugins/drs-html-injection-plugin\n    supportedEvents:\n    - RESPONSE_BODY\n    - RESPONSE_HEADERS\n    failOpen: true\nEOF\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"ol","attributes":{"start":3},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Apply the Service Extension so it becomes active on the CDN:"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"gcloud service-extensions import drs-service-extension.yaml\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-5-trigger-actions","__idx":8},"children":["Step 5: Trigger actions"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["Client"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To obtain risk recommendations for sensitive actions, your application should ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["report these actions from the web app"]}," using the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/sdk-ref/platform/introduction"},"children":["Platform SDK"]},". Add an event listener to the relevant form or button in your page and include the following code ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["in your web application"]}," (after SDK initialization). Replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[ACTION_TYPE]"]}," with an action from the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/risk/recommendations#action-types"},"children":["list of actions"]},". Optionally pass a correlation ID and a claimed user ID (for unauthenticated users)."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"// Trigger events for the action and get the actionToken\n// (Optional) correlationId and claimedUserId help improve Fraud Prevention\nconst tsAccountProtectionLoginHandler = `\n<script>\n async function onSubmitLogin(event) {\n   event.preventDefault();\n   try {\n    const value = await window.tsPlatform.drs.triggerActionEvent(\"[ACTION_TYPE]\", { correlationId: \"[CORRELATION_ID]\", claimedUserId: \"[CLAIMED_USER_ID]\" });\n    form.submit();\n   } catch (error) {\n     form.submit();\n   };\n }\n let form = document.getElementById(\"login\");\n if (form) {\n   form.addEventListener('submit', onSubmitLogin);\n }\n</script>\n`;\n","lang":"js"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note (Backend handoff)"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Make sure to pass the received ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["actionToken"]}," to your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["backend"]}," together with the actual action invocation so that your server can fetch the recommendation in the next step."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-6-fetch-recommendation","__idx":9},"children":["Step 6: Fetch recommendation"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["Backend"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["From your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["server"]},", fetch recommendations for the reported action using the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/openapi/risk/recommendations.openapi/other/getriskrecommendation"},"children":["Recommendation API"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["These APIs are authorized using an OAuth access token. Obtain a token with ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["client credentials"]}," (from Step 1)."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"  const resp = await fetch(\n    `https://api.transmitsecurity.io/oidc/token`,\n    {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded'\n      },\n      body: new URLSearchParams({\n        grant_type: 'client_credentials',\n        client_id: '[CLIENT_ID]',\n        client_secret: '[CLIENT_SECRET]'\n      })\n    }\n  );\n  const { access_token } = await resp.json();\n","lang":"js"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["From your backend, invoke the Recommendation API. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[ACCESS_TOKEN]"]}," is the token you obtained above and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[ACTION_TOKEN]"]}," is the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["actionToken"]}," received from the SDK in Step 5."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"const query = new URLSearchParams({\n  action_token: '[ACTION_TOKEN]',\n}).toString();\n\nconst resp = await fetch(\n  `https://api.transmitsecurity.io/risk/v1/recommendation?${query}`,\n  {\n    method: 'GET',\n    headers: {\n      Authorization: 'Bearer [ACCESS_TOKEN]',\n    },\n  }\n);\n","lang":"js"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note (Backend step)"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This is a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["server-side (machine-to-machine)"]}," call and is not handled by the CDN plugin or the Web SDK."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-7-set-user-after-a-successful-login","__idx":10},"children":["Step 7: Set user after a successful login"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["Client"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A user identifier should be reported to Mosaic only after the user is fully authenticated, including any required 2FA. This sets the user for subsequent events in the current browser session."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Web SDK is automatically injected and initialized by the CDN plugin after Steps 3-4. For successful ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["login"]}," and custom login actions, if the code that completes the login still has the original ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["actionToken"]}," from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#step-5-trigger-actions"},"children":["Step 5"]},", prefer ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/sdk-ref/platform/modules/drs#reportactionresult"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reportActionResult()"]}]},". This records the outcome on that login action and sets the user for the current browser session. We recommend passing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[USER_ID]"]}," as an opaque identifier from your system, not a plain-text personal identifier such as an email address."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"await window.tsPlatform.drs.reportActionResult('[ACTION_TOKEN]', 'success', {\n  userId: '[USER_ID]'\n});\n","lang":"js"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Fallback option"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If your application architecture does not preserve the original ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["actionToken"]}," through login completion, for example after a redirect, in a different page or component, in a server-side callback, or in an external identity flow, use ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/sdk-ref/platform/modules/drs#setauthenticateduser"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setAuthenticatedUser()"]}]}," as a fallback in your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["web application code"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"await window.tsPlatform.drs.setAuthenticatedUser('[USER_ID]');\n","lang":"js"},"children":[]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do not include personal user identifiers (e.g., email) in plain text."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-8-clear-user","__idx":11},"children":["Step 8: Clear user"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge-wrapper"},"children":[{"$$mdtype":"Tag","name":"div","attributes":{"className":"badge"},"children":["Client"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When the user logs out or the session expires, clear the user so future actions aren’t associated with the previous user. Implement this in your ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["web application"]}," (e.g., on logout)."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"const tsClearUserHandler = `\n<script>\n async function onUserLogout(event) {\n   await window.tsPlatform.drs.clearUser()\n }\n let button = document.getElementById(\"logout\");\n if (button) {\n   button.addEventListener('click', onUserLogout);\n }\n</script>\n`;\n","lang":"js"},"children":[]}]},"headings":[{"value":"Integrate using Google Cloud CDN","id":"integrate-using-google-cloud-cdn","depth":1},{"value":"How it works","id":"how-it-works","depth":2},{"value":"Before you start","id":"before-you-start","depth":2},{"value":"Step 1: Get client credentials","id":"step-1-get-client-credentials","depth":2},{"value":"Step 2: Set up your  Google Cloud environment","id":"step-2-set-up-your--google-cloud-environment","depth":2},{"value":"Step 3: Deploy the HTML Injection WASM plugin","id":"step-3-deploy-the-html-injection-wasm-plugin","depth":2},{"value":"Example of injected code","id":"example-of-injected-code","depth":3},{"value":"Step 4: Configure the GCP CDN","id":"step-4-configure-the-gcp-cdn","depth":2},{"value":"Step 5: Trigger actions","id":"step-5-trigger-actions","depth":2},{"value":"Step 6: Fetch recommendation","id":"step-6-fetch-recommendation","depth":2},{"value":"Step 7: Set user after a successful login","id":"step-7-set-user-after-a-successful-login","depth":2},{"value":"Step 8: Clear user","id":"step-8-clear-user","depth":2}],"frontmatter":{"markdown":{"toc":{"depth":2}},"redirects":{"/guides/risk/integrate_google_cdn/":{}},"seo":{"title":"Integrate using Google Cloud CDN"}},"lastModified":"2026-07-19T07:39:52.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/risk/quick_start_google_cdn","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}