Generated banner for Progressive Blur
Generated logo for Progressive Blur

Progressive Blur

Meng ToCommunityCreated by Meng To

  • Skill
  • Tool integration
  • Software development
  • MIT
  • Medium risk

From the author

Create a layered CSS progressive blur (top or bottom) using multiple backdrop-filter masks for depth and softness. Use when asked for “progressive blur”, “gradient blur overlay”, or stepped blur masks that fade from an edge of the viewport.
— the description by Meng To

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured approach to creating gradient blur overlays in CSS. By layering multiple elements with varying backdrop-filter intensities and mask gradients, it achieves a smooth, professional fade effect at the edges of a viewport. The implementation is designed to be flexible, allowing developers to easily adjust the direction, height, and intensity of the blur to suit specific UI requirements.

What it does

  • Generates CSS code for top or bottom-aligned progressive blur overlays.
  • Uses layered backdrop-filter properties to create a smooth transition.
  • Provides a modular HTML structure for easy integration into existing projects.
  • Offers customization knobs for blur strength, height, and gradient direction.
  • Includes a usage checklist to ensure correct DOM placement and z-index management.

When to use it

  • When you need a gradient blur overlay that fades content at the edge of the screen.
  • When implementing UI components that require depth and softness.
  • When you need to ensure content remains readable behind a blurred overlay.
  • When you want a performant, CSS-only solution for progressive blurring.

Advantages

  • Pure CSS implementation avoids heavy JavaScript dependencies.
  • Highly customizable via simple CSS property adjustments.
  • Layered approach creates a more natural, smooth blur effect than single-filter methods.
  • Includes built-in performance considerations for low-end devices.

Usage examples

“Create a progressive blur at the top of my page.”
The agent will provide the HTML and CSS snippet configured for a top-aligned gradient blur, along with instructions on where to place it in the DOM.
“How can I make my bottom blur effect taller?”
The agent will explain how to adjust the height percentage on the .gradient-blur class to increase the vertical span of the blur.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/mengto/progressive-blur/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip progressive-blur.zip -d .agents/skills

Documentation by Meng To

Progressive Blur Skill

Workflow

  1. Confirm placement (top or bottom), height, and z-index relative to UI.

  2. Provide the matching snippet and a short usage checklist.

  3. Offer only targeted tweaks (height, blur steps, direction, opacity stops).

Usage checklist

  • Insert the HTML inside <body>.

  • Keep the .gradient-blur element near the top of the DOM.

  • Ensure the background behind it exists (backdrop-filter blurs what is behind).

  • Adjust z-index to sit above content but below modals.

Top blur (from top)

<div class="gradient-blur">
  <div></div><div></div><div></div><div></div><div></div><div></div>
</div>
<style>
  .gradient-blur {
    position: fixed;
    z-index: 5;
    inset: 0 0 auto 0;
    height: 12%;
    pointer-events: none;
  }

  .gradient-blur > div,
  .gradient-blur::before,
  .gradient-blur::after {
    position: absolute;
    inset: 0;
  }

  .gradient-blur::before {
    content: "";
    z-index: 1;
    backdrop-filter: blur(0.5px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 0%,
      rgba(0, 0, 0, 1) 12.5%,
      rgba(0, 0, 0, 1) 25%,
      rgba(0, 0, 0, 0) 37.5%);
  }

  .gradient-blur > div:nth-of-type(1) {
    z-index: 2;
    backdrop-filter: blur(1px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 12.5%,
      rgba(0, 0, 0, 1) 25%,
      rgba(0, 0, 0, 1) 37.5%,
      rgba(0, 0, 0, 0) 50%);
  }

  .gradient-blur > div:nth-of-type(2) {
    z-index: 3;
    backdrop-filter: blur(2px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 25%,
      rgba(0, 0, 0, 1) 37.5%,
      rgba(0, 0, 0, 1) 50%,
      rgba(0, 0, 0, 0) 62.5%);
  }

  .gradient-blur > div:nth-of-type(3) {
    z-index: 4;
    backdrop-filter: blur(4px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 37.5%,
      rgba(0, 0, 0, 1) 50%,
      rgba(0, 0, 0, 1) 62.5%,
      rgba(0, 0, 0, 0) 75%);
  }

  .gradient-blur > div:nth-of-type(4) {
    z-index: 5;
    backdrop-filter: blur(8px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 50%,
      rgba(0, 0, 0, 1) 62.5%,
      rgba(0, 0, 0, 1) 75%,
      rgba(0, 0, 0, 0) 87.5%);
  }

  .gradient-blur > div:nth-of-type(5) {
    z-index: 6;
    backdrop-filter: blur(16px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 62.5%,
      rgba(0, 0, 0, 1) 75%,
      rgba(0, 0, 0, 1) 87.5%,
      rgba(0, 0, 0, 0) 100%);
  }

  .gradient-blur > div:nth-of-type(6) {
    z-index: 7;
    backdrop-filter: blur(32px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 75%,
      rgba(0, 0, 0, 1) 87.5%,
      rgba(0, 0, 0, 1) 100%);
  }

  .gradient-blur::after {
    content: "";
    z-index: 8;
    backdrop-filter: blur(64px);
    mask: linear-gradient(to top,
      rgba(0, 0, 0, 0) 87.5%,
      rgba(0, 0, 0, 1) 100%);
  }
</style>

Bottom blur (from bottom)

<div class="gradient-blur">
  <div></div><div></div><div></div><div></div><div></div><div></div>
</div>
<style>
  .gradient-blur {
    position: fixed;
    z-index: 5;
    inset: auto 0 0 0;
    height: 65%;
    pointer-events: none;
  }

  .gradient-blur > div,
  .gradient-blur::before,
  .gradient-blur::after {
    position: absolute;
    inset: 0;
  }

  .gradient-blur::before {
    content: "";
    z-index: 1;
    backdrop-filter: blur(0.5px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 0%,
      rgba(0, 0, 0, 1) 12.5%,
      rgba(0, 0, 0, 1) 25%,
      rgba(0, 0, 0, 0) 37.5%);
  }

  .gradient-blur > div:nth-of-type(1) {
    z-index: 2;
    backdrop-filter: blur(1px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 12.5%,
      rgba(0, 0, 0, 1) 25%,
      rgba(0, 0, 0, 1) 37.5%,
      rgba(0, 0, 0, 0) 50%);
  }

  .gradient-blur > div:nth-of-type(2) {
    z-index: 3;
    backdrop-filter: blur(2px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 25%,
      rgba(0, 0, 0, 1) 37.5%,
      rgba(0, 0, 0, 1) 50%,
      rgba(0, 0, 0, 0) 62.5%);
  }

  .gradient-blur > div:nth-of-type(3) {
    z-index: 4;
    backdrop-filter: blur(4px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 37.5%,
      rgba(0, 0, 0, 1) 50%,
      rgba(0, 0, 0, 1) 62.5%,
      rgba(0, 0, 0, 0) 75%);
  }

  .gradient-blur > div:nth-of-type(4) {
    z-index: 5;
    backdrop-filter: blur(8px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 50%,
      rgba(0, 0, 0, 1) 62.5%,
      rgba(0, 0, 0, 1) 75%,
      rgba(0, 0, 0, 0) 87.5%);
  }

  .gradient-blur > div:nth-of-type(5) {
    z-index: 6;
    backdrop-filter: blur(16px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 62.5%,
      rgba(0, 0, 0, 1) 75%,
      rgba(0, 0, 0, 1) 87.5%,
      rgba(0, 0, 0, 0) 100%);
  }

  .gradient-blur > div:nth-of-type(6) {
    z-index: 7;
    backdrop-filter: blur(32px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 75%,
      rgba(0, 0, 0, 1) 87.5%,
      rgba(0, 0, 0, 1) 100%);
  }

  .gradient-blur::after {
    content: "";
    z-index: 8;
    backdrop-filter: blur(64px);
    mask: linear-gradient(to bottom,
      rgba(0, 0, 0, 0) 87.5%,
      rgba(0, 0, 0, 1) 100%);
  }
</style>

Customization knobs

  • Direction: flip to top ↔ to bottom.

  • Height: adjust .gradient-blur height percentage.

  • Strength: change blur values (0.5px → 64px).

  • Steps: add/remove layers to control smoothness.

Common pitfalls

  • backdrop-filter needs content behind it; it will not blur a flat background.

  • High blur values are GPU-heavy; reduce steps on low-end devices.

  • Ensure pointer-events: none stays to avoid blocking clicks.

Questions to ask when specs are missing

  • Should the blur start from the top or bottom?

  • How tall should the blur area be?

  • Is performance a concern on lower-end devices?

Files

demo/index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="neuform-sandboxed-demo" content="1">
  <meta http-equiv="Content-Security-Policy" content="default-src 'none'; connect-src 'self'; frame-src 'self'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; base-uri 'none'; form-action 'none'; object-src 'none'">
  <title>Sandboxed Neuform demo</title>
  <style>
    html, body, iframe { width: 100%; height: 100%; margin: 0; border: 0; }
    body { overflow: hidden; background: #0b0b0b; }
    iframe { display: block; background: white; }
    .error { box-sizing: border-box; min-height: 100%; padding: 32px; color: #fff; font: 16px/1.5 system-ui, sans-serif; }
  </style>
</head>
<body>
  <iframe id="neuform-demo" title="Sandboxed Neuform design demo" sandbox="allow-scripts" referrerpolicy="no-referrer"></iframe>
  <script>
    const encodedHtml = "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2VjdXJpdHktUG9saWN5IiBjb250ZW50PSJkZWZhdWx0LXNyYyAnbm9uZSc7IGJhc2UtdXJpICdub25lJzsgY29ubmVjdC1zcmMgJ25vbmUnOyBmb250LXNyYyBkYXRhOiBodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tOyBmb3JtLWFjdGlvbiAnbm9uZSc7IGZyYW1lLXNyYyAnbm9uZSc7IGltZy1zcmMgYmxvYjo7IG1lZGlhLXNyYyBibG9iOjsgbmF2aWdhdGUtdG8gJ25vbmUnOyBvYmplY3Qtc3JjICdub25lJzsgc2NyaXB0LXNyYyAndW5zYWZlLWlubGluZScgX19ORVVGT1JNX1JVTlRJTUVfU09VUkNFU19fOyBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnIGh0dHBzOi8vYXBpLmZvbnRzaGFyZS5jb20gaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbTsgd29ya2VyLXNyYyAnbm9uZSciPgo8c2NyaXB0IGRhdGEtbmV1Zm9ybS1hc3NldC1ib290c3RyYXA+CigoKSA9PiB7CiAgbGV0IHJlY2VpdmVkID0gZmFsc2U7CiAgY29uc3Qgb2JqZWN0VXJscyA9IFtdOwogIGNvbnN0IHJlcGxhY2VBbGwgPSAodmFsdWUsIHJlcGxhY2VtZW50cykgPT4gewogICAgbGV0IG5leHQgPSBTdHJpbmcodmFsdWUgfHwgIiIpOwogICAgZm9yIChjb25zdCBbZmlsZSwgb2JqZWN0VXJsXSBvZiByZXBsYWNlbWVudHMpIG5leHQgPSBuZXh0LnNwbGl0KGZpbGUpLmpvaW4ob2JqZWN0VXJsKTsKICAgIHJldHVybiBuZXh0OwogIH07CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAoZXZlbnQpID0+IHsKICAgIGlmIChyZWNlaXZlZCB8fCBldmVudC5zb3VyY2UgIT09IHBhcmVudCB8fCBldmVudC5kYXRhPy50eXBlICE9PSAibmV1Zm9ybS1hc3NldHMtdjEiKSByZXR1cm47CiAgICByZWNlaXZlZCA9IHRydWU7CiAgICBjb25zdCByZXBsYWNlbWVudHMgPSBbXTsKICAgIGZvciAoY29uc3QgYXNzZXQgb2YgZXZlbnQuZGF0YS5hc3NldHMgfHwgW10pIHsKICAgICAgaWYgKCFhc3NldCB8fCB0eXBlb2YgYXNzZXQuZmlsZSAhPT0gInN0cmluZyIgfHwgdHlwZW9mIGFzc2V0LmJhc2U2NCAhPT0gInN0cmluZyIpIGNvbnRpbnVlOwogICAgICBjb25zdCBiaW5hcnkgPSBhdG9iKGFzc2V0LmJhc2U2NCk7CiAgICAgIGNvbnN0IGJ5dGVzID0gVWludDhBcnJheS5mcm9tKGJpbmFyeSwgKGNoYXJhY3RlcikgPT4gY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCkpOwogICAgICBjb25zdCBvYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtieXRlc10sIHsgdHlwZTogYXNzZXQuY29udGVudFR5cGUgfHwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgfSkpOwogICAgICBvYmplY3RVcmxzLnB1c2gob2JqZWN0VXJsKTsKICAgICAgcmVwbGFjZW1lbnRzLnB1c2goW2Fzc2V0LmZpbGUsIG9iamVjdFVybF0pOwogICAgfQogICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSkgewogICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgWyJzcmMiLCAicG9zdGVyIiwgInNyY3NldCIsICJzdHlsZSJdKSB7CiAgICAgICAgY29uc3QgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsKICAgICAgICBpZiAodmFsdWUpIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHJlcGxhY2VBbGwodmFsdWUsIHJlcGxhY2VtZW50cykpOwogICAgICB9CiAgICB9CiAgICBmb3IgKGNvbnN0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikpIHsKICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSByZXBsYWNlQWxsKHN0eWxlLnRleHRDb250ZW50LCByZXBsYWNlbWVudHMpOwogICAgfQogIH0pOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsICgpID0+IHsKICAgIGZvciAoY29uc3Qgb2JqZWN0VXJsIG9mIG9iamVjdFVybHMpIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTsKICB9LCB7IG9uY2U6IHRydWUgfSk7Cn0pKCk7Cjwvc2NyaXB0PgoKPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkdPTEFCUyB8IFBlcmZvcm1hbmNlIEh5ZHJhdGlvbiBDb2xsZWN0aW9uPC90aXRsZT4KICAgIAogICAgPCEtLSBUYWlsd2luZCBDU1MgLS0+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS1jY2M4ODk0YjM0MTgtcnVudGltZS5qcyI+PC9zY3JpcHQ+CiAgICAKICAgIDwhLS0gSWNvbmlmeSAtLT4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9hc3NldHMvcnVudGltZS9ydW50aW1lLTE2M2ViZDA4N2NmYy1pY29uaWZ5LWljb24tbWluLmpzIj48L3NjcmlwdD4KICAgIAogICAgPCEtLSBHU0FQIC0tPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Fzc2V0cy9ydW50aW1lL3J1bnRpbWUtMDI3MDUxZWZmYTQ3LWdzYXAtbWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9hc3NldHMvcnVudGltZS9ydW50aW1lLTY4OWNhOGRkYTQ0Yy1zY3JvbGx0cmlnZ2VyLW1pbi5qcyI+PC9zY3JpcHQ+CgogICAgPHN0eWxlPgogICAgICAgIEBpbXBvcnQgdXJsKCdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUJlYmFzK05ldWUmZmFtaWx5PUludGVyOndnaHRANDAwOzUwMDs2MDAmZGlzcGxheT1zd2FwJyk7CiAgICAgICAgCiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLyogUHJvZ3Jlc3NpdmUgQmx1ciAtIEJvdHRvbSBGYWRlICovCiAgICAgICAgLmdyYWRpZW50LWJsdXIgewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHotaW5kZXg6IDQwOwogICAgICAgICAgICBpbnNldDogYXV0byAwIDAgMDsKICAgICAgICAgICAgaGVpZ2h0OiAxMHZoOwogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB9CiAgICAgICAgLmdyYWRpZW50LWJsdXIgPiBkaXYsCiAgICAgICAgLmdyYWRpZW50LWJsdXI6OmJlZm9yZSwKICAgICAgICAuZ3JhZGllbnQtYmx1cjo6YWZ0ZXIgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGluc2V0OiAwOwogICAgICAgIH0KICAgICAgICAuZ3JhZGllbnQtYmx1cjo6YmVmb3JlIHsKICAgICAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwLjVweCk7CiAgICAgICAgICAgIG1hc2s6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMCkgMCUsIHJnYmEoMCwgMCwgMCwgMSkgMTIuNSUsIHJnYmEoMCwgMCwgMCwgMSkgMjUlLCByZ2JhKDAsIDAsIDAsIDApIDM3LjUlKTsKICAgICAgICB9CiAgICAgICAgLmdyYWRpZW50LWJsdXIgPiBkaXY6bnRoLW9mLXR5cGUoMSkgewogICAgICAgICAgICB6LWluZGV4OiAyOwogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTsKICAgICAgICAgICAgbWFzazogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwKSAxMi41JSwgcmdiYSgwLCAwLCAwLCAxKSAyNSUsIHJnYmEoMCwgMCwgMCwgMSkgMzcuNSUsIHJnYmEoMCwgMCwgMCwgMCkgNTAlKTsKICAgICAgICB9CiAgICAgICAgLmdyYWRpZW50LWJsdXIgPiBkaXY6bnRoLW9mLXR5cGUoMikgewogICAgICAgICAgICB6LWluZGV4OiAzOwogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTsKICAgICAgICAgICAgbWFzazogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwKSAyNSUsIHJnYmEoMCwgMCwgMCwgMSkgMzcuNSUsIHJnYmEoMCwgMCwgMCwgMSkgNTAlLCByZ2JhKDAsIDAsIDAsIDApIDYyLjUlKTsKICAgICAgICB9CiAgICAgICAgLmdyYWRpZW50LWJsdXIgPiBkaXY6bnRoLW9mLXR5cGUoMykgewogICAgICAgICAgICB6LWluZGV4OiA0OwogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTsKICAgICAgICAgICAgbWFzazogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwKSAzNy41JSwgcmdiYSgwLCAwLCAwLCAxKSA1MCUsIHJnYmEoMCwgMCwgMCwgMSkgNjIuNSUsIHJnYmEoMCwgMCwgMCwgMCkgNzUlKTsKICAgICAgICB9CiAgICAgICAgLmdyYWRpZW50LWJsdXIgPiBkaXY6bnRoLW9mLXR5cGUoNCkgewogICAgICAgICAgICB6LWluZGV4OiA1OwogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTsKICAgICAgICAgICAgbWFzazogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwKSA1MCUsIHJnYmEoMCwgMCwgMCwgMSkgNjIuNSUsIHJnYmEoMCwgMCwgMCwgMSkgNzUlLCByZ2JhKDAsIDAsIDAsIDApIDg3LjUlKTsKICAgICAgICB9CiAgICAgICAgLmdyYWRpZW50LWJsdXIgPiBkaXY6bnRoLW9mLXR5cGUoNSkgewogICAgICAgICAgICB6LWluZGV4OiA2OwogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTZweCk7CiAgICAgICAgICAgIG1hc2s6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMCkgNjIuNSUsIHJnYmEoMCwgMCwgMCwgMSkgNzUlLCByZ2JhKDAsIDAsIDAsIDEpIDg3LjUlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpOwogICAgICAgIH0KICAgICAgICAuZ3JhZGllbnQtYmx1ciA+IGRpdjpudGgtb2YtdHlwZSg2KSB7CiAgICAgICAgICAgIHotaW5kZXg6IDc7CiAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigzMnB4KTsKICAgICAgICAgICAgbWFzazogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwKSA3NSUsIHJnYmEoMCwgMCwgMCwgMSkgODcuNSUsIHJnYmEoMCwgMCwgMCwgMSkgMTAwJSk7CiAgICAgICAgfQogICAgICAgIC5ncmFkaWVudC1ibHVyOjphZnRlciB7CiAgICAgICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgICAgICB6LWluZGV4OiA4OwogICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNjRweCk7CiAgICAgICAgICAgIG1hc2s6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMCkgODcuNSUsIHJnYmEoMCwgMCwgMCwgMSkgMTAwJSk7CiAgICAgICAgfQoKICAgICAgICAvKiBIaWRlIFNjcm9sbGJhciBmb3IgSG9yaXpvbnRhbCBTY3JvbGxlcnMgKi8KICAgICAgICAubm8tc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQogICAgICAgIC5uby1zY3JvbGxiYXIgewogICAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7CiAgICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPSJhbnRpYWxpYXNlZCBzZWxlY3Rpb246YmctYmxhY2sgc2VsZWN0aW9uOnRleHQtd2hpdGUgcGItMjQgYmctWyNGQUZBRjddIHRleHQtYmxhY2siPgoKICAgIDwhLS0gUHJvZ3Jlc3NpdmUgQm90dG9tIEJsdXIgLS0+CiAgICA8ZGl2IGNsYXNzPSJncmFkaWVudC1ibHVyIj4KICAgICAgICA8ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gQW5ub3VuY2VtZW50IEJhciAtLT4KICAgIDxkaXYgY2xhc3M9ImJnLWJsYWNrIHRleHQtd2hpdGUgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWNlbnRlciBweS0yLjUgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCI+CiAgICAgICAgRnJlZSBTaGlwcGluZyBvdmVyIOKCrDUwICZuYnNwO3wmbmJzcDsgU3Vic2NyaWJlICYgU2F2ZSAmbmJzcDt8Jm5ic3A7IEJhY2tlZCBieSBTY2llbmNlCiAgICA8L2Rpdj4KCiAgICA8IS0tIE5hdmJhciAtLT4KICAgIDxoZWFkZXIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IGxnOnB4LTEwIHB5LTUgYm9yZGVyLWIgYm9yZGVyLWJsYWNrLzUgYmctWyNGQUZBRjddIHN0aWNreSB0b3AtMCB6LTUwIj4KICAgICAgICA8IS0tIExlZnQgTmF2IC0tPgogICAgICAgIDxuYXYgY2xhc3M9ImhpZGRlbiBsZzpmbGV4IHNwYWNlLXgtOCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiPgogICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iaG92ZXI6dGV4dC1ncmF5LTUwMCB0cmFuc2l0aW9uLWNvbG9ycyI+U2hvcDwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImhvdmVyOnRleHQtZ3JheS01MDAgdHJhbnNpdGlvbi1jb2xvcnMiPlNjaWVuY2U8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LWdyYXktNTAwIHRyYW5zaXRpb24tY29sb3JzIj5GdWVsIENsdWI8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LWdyYXktNTAwIHRyYW5zaXRpb24tY29sb3JzIj5TdG9yZXM8L2E+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LWdyYXktNTAwIHRyYW5zaXRpb24tY29sb3JzIj5TdWJzY3JpcHRpb248L2E+CiAgICAgICAgPC9uYXY+CiAgICAgICAgCiAgICAgICAgPCEtLSBNb2JpbGUgTWVudSBJY29uIC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImxnOmhpZGRlbiBmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6aGFtYnVyZ2VyLW1lbnUtbGluZWFyIiB3aWR0aD0iMjgiIHN0cm9rZS13aWR0aD0iMS41IiBjbGFzcz0iY3Vyc29yLXBvaW50ZXIiPjwvaWNvbmlmeS1pY29uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIENlbnRlciBMb2dvIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InRleHQtM3hsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodGVyIHVwcGVyY2FzZSBhYnNvbHV0ZSBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIj4KICAgICAgICAgICAgR09MQUJTCiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gUmlnaHQgSWNvbnMgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC02Ij4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgaGlkZGVuIHNtOmJsb2NrIGhvdmVyOnRleHQtZ3JheS01MDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMiPkVOL+KCrDwvc3Bhbj4KICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjp1c2VyLWxpbmVhciIgd2lkdGg9IjI0IiBzdHJva2Utd2lkdGg9IjEuNSIgY2xhc3M9ImN1cnNvci1wb2ludGVyIGhvdmVyOnRleHQtZ3JheS01MDAgdHJhbnNpdGlvbi1jb2xvcnMiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOm1hZ25pZmVyLWxpbmVhciIgd2lkdGg9IjI0IiBzdHJva2Utd2lkdGg9IjEuNSIgY2xhc3M9ImN1cnNvci1wb2ludGVyIGhvdmVyOnRleHQtZ3JheS01MDAgdHJhbnNpdGlvbi1jb2xvcnMiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNhcnQtbGFyZ2UtbWluaW1hbGlzdGljLWxpbmVhciIgd2lkdGg9IjI0IiBzdHJva2Utd2lkdGg9IjEuNSIgY2xhc3M9ImN1cnNvci1wb2ludGVyIGhvdmVyOnRleHQtZ3JheS01MDAgdHJhbnNpdGlvbi1jb2xvcnMiPjwvaWNvbmlmeS1pY29uPgogICAgICAgIDwvZGl2PgogICAgPC9oZWFkZXI+CgogICAgPCEtLSBQYWdlIFRpdGxlIC8gTWFza2VkIFJldmVhbCBTZWN0aW9uIC0tPgogICAgPGRpdiBjbGFzcz0icHgtNiBweS0xNiBtZDpweS0yNCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWNlbnRlciBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgIDxoMSBjbGFzcz0iZm9udC1bJ0JlYmFzX05ldWUnXSB0ZXh0LTd4bCBtZDp0ZXh0LTl4bCB0cmFja2luZy10aWdodCB1cHBlcmNhc2UgbGVhZGluZy1bMC44NV0gZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHBiLTEiPjxzcGFuIGNsYXNzPSJibG9jayBncy1yZXZlYWwtd29yZCB0cmFuc2xhdGUteS1mdWxsIj5Db21wbGV0ZTwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJibG9jayBvdmVyZmxvdy1oaWRkZW4gcGItMSI+PHNwYW4gY2xhc3M9ImJsb2NrIGdzLXJldmVhbC13b3JkIHRyYW5zbGF0ZS15LWZ1bGwiPkh5ZHJhdGlvbiBTeXN0ZW08L3NwYW4+PC9zcGFuPgogICAgICAgIDwvaDE+CiAgICAgICAgPHAgY2xhc3M9Im10LTYgdGV4dC1zbSBtZDp0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBtYXgtdy1tZCBteC1hdXRvIHRyYWNraW5nLXdpZGUgZ3MtcmV2ZWFsLWZhZGUgb3BhY2l0eS0wIHRyYW5zbGF0ZS15LTQiPgogICAgICAgICAgICBFbmdpbmVlcmVkIGZvciBwZXJmb3JtYW5jZSwgcmVjb3ZlcnksIGFuZCBkYWlseSBlbmVyZ3kuCiAgICAgICAgPC9wPgogICAgPC9kaXY+CgogICAgPCEtLSBDYXRlZ29yeSBUYWJzIFNlZ21lbnRlZCBOYXYgLS0+CiAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwYi04IHB4LTYiPgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBiZy1ibGFjay81IHAtMSByb3VuZGVkLWZ1bGwgb3ZlcmZsb3cteC1hdXRvIG1heC13LWZ1bGwgbm8tc2Nyb2xsYmFyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYmctYmxhY2sgdGV4dC13aGl0ZSBweC02IHB5LTIuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHNocmluay0wIHNoYWRvdy1zbSI+U2FjaGV0czwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0ZXh0LWJsYWNrIGhvdmVyOmJnLWJsYWNrLzEwIHB4LTYgcHktMi41IHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUgc2hyaW5rLTAgdHJhbnNpdGlvbi1jb2xvcnMiPkNhbnM8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idGV4dC1ibGFjayBob3ZlcjpiZy1ibGFjay8xMCBweC02IHB5LTIuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlIHNocmluay0wIHRyYW5zaXRpb24tY29sb3JzIj5CdW5kbGVzPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRleHQtYmxhY2sgaG92ZXI6YmctYmxhY2svMTAgcHgtNiBweS0yLjUgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSBzaHJpbmstMCB0cmFuc2l0aW9uLWNvbG9ycyI+R2VsczwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0ZXh0LWJsYWNrIGhvdmVyOmJnLWJsYWNrLzEwIHB4LTYgcHktMi41IHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUgc2hyaW5rLTAgdHJhbnNpdGlvbi1jb2xvcnMiPkZ1ZWw8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gQ29sbGVjdGlvbiBUb29sYmFyIC0tPgogICAgPGRpdiBjbGFzcz0iYm9yZGVyLWIgYm9yZGVyLWJsYWNrLzEwIGJnLVsjRkFGQUY3XSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTYgbGc6cHgtMTAgaC1bNjRweF0gbWF4LXctWzE5MjBweF0gbXgtYXV0byI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSBob3ZlcjpvcGFjaXR5LTYwIHRyYW5zaXRpb24tb3BhY2l0eSI+CiAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmZpbHRlci1saW5lYXIiIHdpZHRoPSIxOCIgc3Ryb2tlLXdpZHRoPSIxLjUiPjwvaWNvbmlmeS1pY29uPiBGaWx0ZXJzCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUgaG92ZXI6b3BhY2l0eS02MCB0cmFuc2l0aW9uLW9wYWNpdHkiPgogICAgICAgICAgICAgICAgU29ydCBCeSA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFsdC1hcnJvdy1kb3duLWxpbmVhciIgd2lkdGg9IjE4IiBzdHJva2Utd2lkdGg9IjEuNSI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBQcm9kdWN0IEdyaWQgLS0+CiAgICA8bWFpbiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtNCBnYXAtNiBsZzpnYXAtOCBweC02IGxnOnB4LTEwIHB5LTEyIHctZnVsbCBtYXgtdy1bMTkyMHB4XSBteC1hdXRvIj4KICAgICAgICAKICAgICAgICA8IS0tIFByb2R1Y3QgMSAtLT4KICAgICAgICA8YXJ0aWNsZSBjbGFzcz0iZ3JvdXAgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy13aGl0ZSByb3VuZGVkLVsyMHB4XSBwLTIiPgogICAgICAgICAgICA8IS0tIEltYWdlIEFyZWEgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIHctZnVsbCBhc3BlY3QtWzQvNV0gYmctWyNGNEY0RjBdIHJvdW5kZWQtWzE0cHhdIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICA8IS0tIEJhZGdlcyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0zIGxlZnQtMyBmbGV4IGZsZXgtY29sIGdhcC0xLjUgei0yMCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJnLWJsYWNrIHRleHQtd2hpdGUgdGV4dC14cyBweC0yLjUgcHktMSBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGVyIHVwcGVyY2FzZSByb3VuZGVkLXNtIGxlYWRpbmctbm9uZSI+U3Vic2NyaWJlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiZy1ibGFjayB0ZXh0LXdoaXRlIHRleHQteHMgcHgtMi41IHB5LTEgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlciB1cHBlcmNhc2Ugcm91bmRlZC1zbSBsZWFkaW5nLW5vbmUiPkJlc3RzZWxsZXI8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwhLS0gUGFjayBTaXplIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBsZWFkaW5nLW5vbmUgei0yMCB0ZXh0LWJsYWNrIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LXNlbWlib2xkIj4zMDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG10LTAuNSBzY2FsZS03NSBvcmlnaW4tdG9wIj5QYWNrPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8IS0tIEhvdmVyIEltYWdlcyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNzAwIGVhc2UtW2N1YmljLWJlemllcigwLjI1LDEsMC41LDEpXSBncm91cC1ob3ZlcjpzY2FsZS1bMS4wNF0iPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0wMS03MjQxNDJhYS00NGE2LTQ4ZDMtOWNmMy03NjFlMDBkMDViNzgtMTYwMHcuanBnIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluIHAtNiB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOm9wYWNpdHktMCIgYWx0PSJEYWlseSBIeWRyYXRpb24gU2FjaGV0cyI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTAyLTBkODY4ZmVmLWY1NjAtNDVjYS1hYjM1LTVkYWQ0ZmMyOTA1OS0zODQwdy53ZWJwIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCIgYWx0PSJEYWlseSBIeWRyYXRpb24gU2FjaGV0cyBMaWZlc3R5bGUiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8IS0tIERldGFpbHMgQXJlYSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBmbGV4LWdyb3cgcHQtNSBwYi0zIHB4LTMiPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodCB0ZXh0LWJsYWNrIG1iLTEiPkRhaWx5IEh5ZHJhdGlvbiBTYWNoZXRzIC0gQ2l0cnVzPC9oMj4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbm9ybWFsIHRleHQtZ3JheS01MDAgbGluZS1jbGFtcC0yIG1iLTUgbGVhZGluZy1yZWxheGVkIj5Db3JlIGh5ZHJhdGlvbiBlbGVjdHJvbHl0ZSBzYWNoZXRzIGRlc2lnbmVkIHRvIHN1cHBvcnQgZGFpbHkgaHlkcmF0aW9uLCBlbmVyZ3kgYW5kIG1pbmVyYWwgYmFsYW5jZS48L3A+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im10LWF1dG8gdy1mdWxsIGgtWzQ0cHhdIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLWJsYWNrIGJnLXdoaXRlIHRleHQtYmxhY2sgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgZ3JvdXAtaG92ZXI6YmctYmxhY2sgZ3JvdXAtaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2Zvcm0gZ3JvdXAtaG92ZXI6c2NhbGUtWzEuMDFdIj4KICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQ2FydCAmbWRhc2g7IOKCrDM0Ljk5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9hcnRpY2xlPgoKICAgICAgICA8IS0tIFByb2R1Y3QgMiAtLT4KICAgICAgICA8YXJ0aWNsZSBjbGFzcz0iZ3JvdXAgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy13aGl0ZSByb3VuZGVkLVsyMHB4XSBwLTIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB3LWZ1bGwgYXNwZWN0LVs0LzVdIGJnLVsjRjRGNEYwXSByb3VuZGVkLVsxNHB4XSBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTMgbGVmdC0zIGZsZXggZmxleC1jb2wgZ2FwLTEuNSB6LTIwIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmctYmxhY2sgdGV4dC13aGl0ZSB0ZXh0LXhzIHB4LTIuNSBweS0xIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctd2lkZXIgdXBwZXJjYXNlIHJvdW5kZWQtc20gbGVhZGluZy1ub25lIj5CZXN0c2VsbGVyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiZy1ibGFjayB0ZXh0LXdoaXRlIHRleHQteHMgcHgtMi41IHB5LTEgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlciB1cHBlcmNhc2Ugcm91bmRlZC1zbSBsZWFkaW5nLW5vbmUiPlN1YnNjcmliZTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi03MDAgZWFzZS1bY3ViaWMtYmV6aWVyKDAuMjUsMSwwLjUsMSldIGdyb3VwLWhvdmVyOnNjYWxlLVsxLjA0XSI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTAzLTAwNTYwMGU1LWY2YWItNGU1OS1iYzg2LWVhZWIwMjc5N2RmYS0xNjAwdy5qcGciIGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvbnRhaW4gcC02IHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDAgb3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIiBhbHQ9IlN0YXJ0ZXIgSHlkcmF0aW9uIFN5c3RlbSI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTA0LTMxODZmOWVhLTVmNWEtNDlmNy04ZmNmLTU2OGFkNTJmNTE1ZS0zODQwdy53ZWJwIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCIgYWx0PSJTdGFydGVyIEh5ZHJhdGlvbiBTeXN0ZW0gTGlmZXN0eWxlIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBmbGV4LWdyb3cgcHQtNSBwYi0zIHB4LTMiPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodCB0ZXh0LWJsYWNrIG1iLTEiPlN0YXJ0ZXIgSHlkcmF0aW9uIFN5c3RlbTwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwIGxpbmUtY2xhbXAtMiBtYi01IGxlYWRpbmctcmVsYXhlZCI+VGhlIGNvbXBsZXRlIGludHJvZHVjdGlvbiB0byB0aGUgR09MQUJTIGh5ZHJhdGlvbiBzeXN0ZW0gd2l0aCBzYWNoZXRzLCBjYW5zLCBhbmQgYSB0cmFpbmluZyBib3R0bGUuPC9wPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtdC1hdXRvIHctZnVsbCBoLVs0NHB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1ibGFjayBiZy13aGl0ZSB0ZXh0LWJsYWNrIHRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGdyb3VwLWhvdmVyOmJnLWJsYWNrIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNmb3JtIGdyb3VwLWhvdmVyOnNjYWxlLVsxLjAxXSI+CiAgICAgICAgICAgICAgICAgICAgQWRkIHRvIENhcnQgJm1kYXNoOyDigqw2NS4wMAogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYXJ0aWNsZT4KCiAgICAgICAgPCEtLSBQcm9kdWN0IDMgLS0+CiAgICAgICAgPGFydGljbGUgY2xhc3M9Imdyb3VwIHJlbGF0aXZlIGZsZXggZmxleC1jb2wgYmctd2hpdGUgcm91bmRlZC1bMjBweF0gcC0yIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgdy1mdWxsIGFzcGVjdC1bNC81XSBiZy1bI0Y0RjRGMF0gcm91bmRlZC1bMTRweF0gb3ZlcmZsb3ctaGlkZGVuIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0zIGxlZnQtMyBmbGV4IGZsZXgtY29sIGdhcC0xLjUgei0yMCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJnLWJsYWNrIHRleHQtd2hpdGUgdGV4dC14cyBweC0yLjUgcHktMSBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGVyIHVwcGVyY2FzZSByb3VuZGVkLXNtIGxlYWRpbmctbm9uZSI+QmVzdHNlbGxlcjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi03MDAgZWFzZS1bY3ViaWMtYmV6aWVyKDAuMjUsMSwwLjUsMSldIGdyb3VwLWhvdmVyOnNjYWxlLVsxLjA0XSI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTA1LTdmNzgxMzFlLTY1ZTktNDliMi1hYTFmLWNjYzMzZTI4ZGY5Zi0xNjAwdy53ZWJwIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluIHAtNiB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOm9wYWNpdHktMCIgYWx0PSJTbGVlcCBIeWRyYXRpb24gU2FjaGV0cyI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTA2LTRmNTY2OGM1LWZjNGEtNDRlMC1iYzVlLWE2NjQxODlkM2MzMS0xNjAwdy5qcGciIGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIiBhbHQ9IlNsZWVwIEh5ZHJhdGlvbiBTYWNoZXRzIExpZmVzdHlsZSI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgZmxleC1ncm93IHB0LTUgcGItMyBweC0zIj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1ibGFjayBtYi0xIj5TbGVlcCBIeWRyYXRpb24gU2FjaGV0czwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwIGxpbmUtY2xhbXAtMiBtYi01IGxlYWRpbmctcmVsYXhlZCI+T3Zlcm5pZ2h0IGVsZWN0cm9seXRlIGJsZW5kIHdpdGggc2xlZXAtc3VwcG9ydGluZyBpbmdyZWRpZW50cyBkZXNpZ25lZCBmb3IgcmVjb3ZlcnkgYW5kIHJlc3RvcmF0aW9uLjwvcD4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibXQtYXV0byB3LWZ1bGwgaC1bNDRweF0gcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItYmxhY2sgYmctd2hpdGUgdGV4dC1ibGFjayB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBncm91cC1ob3ZlcjpiZy1ibGFjayBncm91cC1ob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zZm9ybSBncm91cC1ob3ZlcjpzY2FsZS1bMS4wMV0iPgogICAgICAgICAgICAgICAgICAgIEFkZCB0byBDYXJ0ICZtZGFzaDsg4oKsMzQuOTkKICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FydGljbGU+CgogICAgICAgIDwhLS0gUHJvZHVjdCA0IC0tPgogICAgICAgIDxhcnRpY2xlIGNsYXNzPSJncm91cCByZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGJnLXdoaXRlIHJvdW5kZWQtWzIwcHhdIHAtMiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIHctZnVsbCBhc3BlY3QtWzQvNV0gYmctWyNGNEY0RjBdIHJvdW5kZWQtWzE0cHhdIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMyBsZWZ0LTMgZmxleCBmbGV4LWNvbCBnYXAtMS41IHotMjAiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiZy1ibGFjayB0ZXh0LXdoaXRlIHRleHQteHMgcHgtMi41IHB5LTEgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlciB1cHBlcmNhc2Ugcm91bmRlZC1zbSBsZWFkaW5nLW5vbmUiPkJlc3RzZWxsZXI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJnLWJsYWNrIHRleHQtd2hpdGUgdGV4dC14cyBweC0yLjUgcHktMSBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGVyIHVwcGVyY2FzZSByb3VuZGVkLXNtIGxlYWRpbmctbm9uZSI+U3Vic2NyaWJlPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMyByaWdodC0zIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGxlYWRpbmctbm9uZSB6LTIwIHRleHQtYmxhY2siPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQiPjEyPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbXQtMC41IHNjYWxlLTc1IG9yaWdpbi10b3AiPlBhY2s8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNzAwIGVhc2UtW2N1YmljLWJlemllcigwLjI1LDEsMC41LDEpXSBncm91cC1ob3ZlcjpzY2FsZS1bMS4wNF0iPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0wNy1kMTRkYzA2OS01NThhLTRjNTEtOGFhZC01Y2MyMzdmOWI2MWQtMTYwMHcuanBnIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluIHAtNiB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOm9wYWNpdHktMCIgYWx0PSJDb3JlIEh5ZHJhdGlvbiBEcmluayI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTA4LWVjYTcwN2NjLWE1YjctNDM5YS1iNGZkLTI0N2Y2MTA2YzJlMS0xNjAwdy5qcGciIGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIiBhbHQ9IkNvcmUgSHlkcmF0aW9uIERyaW5rIExpZmVzdHlsZSI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgZmxleC1ncm93IHB0LTUgcGItMyBweC0zIj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1ibGFjayBtYi0xIj5Db3JlIEh5ZHJhdGlvbiBEcmluayAtIENpdHJ1czwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwIGxpbmUtY2xhbXAtMiBtYi01IGxlYWRpbmctcmVsYXhlZCI+UmVhZHktdG8tZHJpbmsgY2l0cnVzIGVsZWN0cm9seXRlcyB3aXRoIHNvZGl1bSwgcG90YXNzaXVtIGFuZCBtYWduZXNpdW0gZm9yIGRhaWx5IHBlcmZvcm1hbmNlLjwvcD4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibXQtYXV0byB3LWZ1bGwgaC1bNDRweF0gcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItYmxhY2sgYmctd2hpdGUgdGV4dC1ibGFjayB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBncm91cC1ob3ZlcjpiZy1ibGFjayBncm91cC1ob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zZm9ybSBncm91cC1ob3ZlcjpzY2FsZS1bMS4wMV0iPgogICAgICAgICAgICAgICAgICAgIEFkZCB0byBDYXJ0ICZtZGFzaDsg4oKsMjQuMDAKICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FydGljbGU+CgogICAgICAgIDwhLS0gUHJvZHVjdCA1IC0tPgogICAgICAgIDxhcnRpY2xlIGNsYXNzPSJncm91cCByZWxhdGl2ZSBmbGV4IGZsZXgtY29sIGJnLXdoaXRlIHJvdW5kZWQtWzIwcHhdIHAtMiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIHctZnVsbCBhc3BlY3QtWzQvNV0gYmctWyNGNEY0RjBdIHJvdW5kZWQtWzE0cHhdIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMyBsZWZ0LTMgZmxleCBmbGV4LWNvbCBnYXAtMS41IHotMjAiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiZy1ibGFjayB0ZXh0LXdoaXRlIHRleHQteHMgcHgtMi41IHB5LTEgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlciB1cHBlcmNhc2Ugcm91bmRlZC1zbSBsZWFkaW5nLW5vbmUiPlN1YnNjcmliZTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBsZWFkaW5nLW5vbmUgei0yMCB0ZXh0LWJsYWNrIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LXNlbWlib2xkIj4xMjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG10LTAuNSBzY2FsZS03NSBvcmlnaW4tdG9wIj5QYWNrPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTcwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC4yNSwxLDAuNSwxKV0gZ3JvdXAtaG92ZXI6c2NhbGUtWzEuMDRdIj4KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYXNzZXRzL3BhZ2UtMDktNDczNDI1OWEtYmFkNy00MjJmLTk4MWUtY2UwMWU3OTE4NGYyLTE2MDB3LmpwZyIgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgdy1mdWxsIGgtZnVsbCBvYmplY3QtY29udGFpbiBwLTYgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTUwMCBvcGFjaXR5LTEwMCBncm91cC1ob3ZlcjpvcGFjaXR5LTAiIGFsdD0iQ29yZSBIeWRyYXRpb24gRHJpbmsgQmVycnkiPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0xMC03NzQxNWEyZS1kY2JjLTQ3NDgtYTI5ZC1mY2VkNDgyMTg4MWEtMTYwMHcuanBnIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCIgYWx0PSJDb3JlIEh5ZHJhdGlvbiBEcmluayBCZXJyeSBMaWZlc3R5bGUiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIGZsZXgtZ3JvdyBwdC01IHBiLTMgcHgtMyI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtYmFzZSBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0IHRleHQtYmxhY2sgbWItMSI+Q29yZSBIeWRyYXRpb24gRHJpbmsgLSBCZXJyeTwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwIGxpbmUtY2xhbXAtMiBtYi01IGxlYWRpbmctcmVsYXhlZCI+UmVhZHktdG8tZHJpbmsgYmVycnkgZWxlY3Ryb2x5dGVzIGZvciBoeWRyYXRpb24sIHRyYWluaW5nIGFuZCBldmVyeWRheSBlbmVyZ3kuPC9wPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtdC1hdXRvIHctZnVsbCBoLVs0NHB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1ibGFjayBiZy13aGl0ZSB0ZXh0LWJsYWNrIHRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGdyb3VwLWhvdmVyOmJnLWJsYWNrIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNmb3JtIGdyb3VwLWhvdmVyOnNjYWxlLVsxLjAxXSI+CiAgICAgICAgICAgICAgICAgICAgQWRkIHRvIENhcnQgJm1kYXNoOyDigqwyNC4wMAogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYXJ0aWNsZT4KCiAgICAgICAgPCEtLSBQcm9kdWN0IDYgLS0+CiAgICAgICAgPGFydGljbGUgY2xhc3M9Imdyb3VwIHJlbGF0aXZlIGZsZXggZmxleC1jb2wgYmctd2hpdGUgcm91bmRlZC1bMjBweF0gcC0yIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgdy1mdWxsIGFzcGVjdC1bNC81XSBiZy1bI0Y0RjRGMF0gcm91bmRlZC1bMTRweF0gb3ZlcmZsb3ctaGlkZGVuIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0zIGxlZnQtMyBmbGV4IGZsZXgtY29sIGdhcC0xLjUgei0yMCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJnLWJsYWNrIHRleHQtd2hpdGUgdGV4dC14cyBweC0yLjUgcHktMSBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGVyIHVwcGVyY2FzZSByb3VuZGVkLXNtIGxlYWRpbmctbm9uZSI+QmVzdHNlbGxlcjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi03MDAgZWFzZS1bY3ViaWMtYmV6aWVyKDAuMjUsMSwwLjUsMSldIGdyb3VwLWhvdmVyOnNjYWxlLVsxLjA0XSI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTExLTVlZTBhMzhhLWI1ZDMtNDUzMS04NzkzLTk4YmVlZDRhZjE2Mi0xNjAwdy5qcGciIGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvbnRhaW4gcC02IHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDAgb3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0wIiBhbHQ9IkVsZWN0cm9seXRlIEJ1bmRsZSI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTEyLTY1Njk1ZjgwLTIzZjktNDZlZS04NDg3LWNiYjZjOTNjYzQ4Yi0zODQwdy53ZWJwIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCIgYWx0PSJFbGVjdHJvbHl0ZSBCdW5kbGUgTGlmZXN0eWxlIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBmbGV4LWdyb3cgcHQtNSBwYi0zIHB4LTMiPgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0cmFja2luZy10aWdodCB0ZXh0LWJsYWNrIG1iLTEiPkVsZWN0cm9seXRlIEJ1bmRsZTwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwIGxpbmUtY2xhbXAtMiBtYi01IGxlYWRpbmctcmVsYXhlZCI+QSBjdXJhdGVkIHBlcmZvcm1hbmNlIGh5ZHJhdGlvbiBidW5kbGUgbWFkZSBmb3IgdHJhaW5pbmcsIHJlY292ZXJ5IGFuZCBkYWlseSBlbmVyZ3kuPC9wPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtdC1hdXRvIHctZnVsbCBoLVs0NHB4XSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1ibGFjayBiZy13aGl0ZSB0ZXh0LWJsYWNrIHRleHQteHMgZm9udC1zZW1pYm9sZCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGdyb3VwLWhvdmVyOmJnLWJsYWNrIGdyb3VwLWhvdmVyOnRleHQtd2hpdGUgdHJhbnNmb3JtIGdyb3VwLWhvdmVyOnNjYWxlLVsxLjAxXSI+CiAgICAgICAgICAgICAgICAgICAgQWRkIHRvIENhcnQgJm1kYXNoOyDigqw0OS45OQogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvYXJ0aWNsZT4KCiAgICAgICAgPCEtLSBQcm9kdWN0IDcgLS0+CiAgICAgICAgPGFydGljbGUgY2xhc3M9Imdyb3VwIHJlbGF0aXZlIGZsZXggZmxleC1jb2wgYmctd2hpdGUgcm91bmRlZC1bMjBweF0gcC0yIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgdy1mdWxsIGFzcGVjdC1bNC81XSBiZy1bI0Y0RjRGMF0gcm91bmRlZC1bMTRweF0gb3ZlcmZsb3ctaGlkZGVuIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0zIGxlZnQtMyBmbGV4IGZsZXgtY29sIGdhcC0xLjUgei0yMCI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJnLWJsYWNrIHRleHQtd2hpdGUgdGV4dC14cyBweC0yLjUgcHktMSBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGVyIHVwcGVyY2FzZSByb3VuZGVkLXNtIGxlYWRpbmctbm9uZSI+TmV3PC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTcwMCBlYXNlLVtjdWJpYy1iZXppZXIoMC4yNSwxLDAuNSwxKV0gZ3JvdXAtaG92ZXI6c2NhbGUtWzEuMDRdIj4KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYXNzZXRzL3BhZ2UtMTMtZmI2NDE1ZmQtYmY0ZC00Y2NmLThlOWQtN2FiNDQ1ZTk5MjA3LTE2MDB3LmpwZyIgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgdy1mdWxsIGgtZnVsbCBvYmplY3QtY29udGFpbiBwLTYgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTUwMCBvcGFjaXR5LTEwMCBncm91cC1ob3ZlcjpvcGFjaXR5LTAiIGFsdD0iRnVlbCBCYXIiPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0xNC1jOTI4NTJiYi1hNTEwLTQwNWEtODVhYi1mZmEwZmRlMTM2YTQtMTYwMHcuanBnIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCIgYWx0PSJGdWVsIEJhciBMaWZlc3R5bGUiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIGZsZXgtZ3JvdyBwdC01IHBiLTMgcHgtMyI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtYmFzZSBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0IHRleHQtYmxhY2sgbWItMSI+RnVlbCBCYXI8L2gyPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1ncmF5LTUwMCBsaW5lLWNsYW1wLTIgbWItNSBsZWFkaW5nLXJlbGF4ZWQiPkZ1bmN0aW9uYWwgcGVyZm9ybWFuY2UgZnVlbCBiYXIgZm9yIGF0aGxldGVzLCBjcmVhdG9ycyBhbmQgaGlnaC1vdXRwdXQgZGF5cy48L3A+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im10LWF1dG8gdy1mdWxsIGgtWzQ0cHhdIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLWJsYWNrIGJnLXdoaXRlIHRleHQtYmxhY2sgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgZ3JvdXAtaG92ZXI6YmctYmxhY2sgZ3JvdXAtaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2Zvcm0gZ3JvdXAtaG92ZXI6c2NhbGUtWzEuMDFdIj4KICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQ2FydCAmbWRhc2g7IOKCrDE5Ljk5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9hcnRpY2xlPgoKICAgICAgICA8IS0tIFByb2R1Y3QgOCAtLT4KICAgICAgICA8YXJ0aWNsZSBjbGFzcz0iZ3JvdXAgcmVsYXRpdmUgZmxleCBmbGV4LWNvbCBiZy13aGl0ZSByb3VuZGVkLVsyMHB4XSBwLTIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB3LWZ1bGwgYXNwZWN0LVs0LzVdIGJnLVsjRjRGNEYwXSByb3VuZGVkLVsxNHB4XSBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTMgbGVmdC0zIGZsZXggZmxleC1jb2wgZ2FwLTEuNSB6LTIwIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYmctYmxhY2sgdGV4dC13aGl0ZSB0ZXh0LXhzIHB4LTIuNSBweS0xIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctd2lkZXIgdXBwZXJjYXNlIHJvdW5kZWQtc20gbGVhZGluZy1ub25lIj5OZXc8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tNzAwIGVhc2UtW2N1YmljLWJlemllcigwLjI1LDEsMC41LDEpXSBncm91cC1ob3ZlcjpzY2FsZS1bMS4wNF0iPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0xNS1lNTM0MzU0ZC1jNWYyLTQzOTktYTFkOS0yZjUwMzM4ZThjNDctMTYwMHcuanBnIiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluIHAtNiB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIG9wYWNpdHktMTAwIGdyb3VwLWhvdmVyOm9wYWNpdHktMCIgYWx0PSJCYXNlIEdlbCI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTE2LTJmNTYzMzM4LTM5ZmEtNDdlYS05NzYxLTY1OGQ0ZjNmODRkYi0xNjAwdy5qcGciIGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi01MDAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIiBhbHQ9IkJhc2UgR2VsIExpZmVzdHlsZSI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgZmxleC1ncm93IHB0LTUgcGItMyBweC0zIj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1ibGFjayBtYi0xIj5CYXNlIEdlbDwvaDI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwIGxpbmUtY2xhbXAtMiBtYi01IGxlYWRpbmctcmVsYXhlZCI+Q2xlYW4gZW5lcmd5IGdlbCBtYWRlIGZvciBtb3ZlbWVudCwgZW5kdXJhbmNlIGFuZCB0cmFpbmluZyBzZXNzaW9ucy48L3A+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im10LWF1dG8gdy1mdWxsIGgtWzQ0cHhdIHJvdW5kZWQtZnVsbCBib3JkZXIgYm9yZGVyLWJsYWNrIGJnLXdoaXRlIHRleHQtYmxhY2sgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgZ3JvdXAtaG92ZXI6YmctYmxhY2sgZ3JvdXAtaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2Zvcm0gZ3JvdXAtaG92ZXI6c2NhbGUtWzEuMDFdIj4KICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQ2FydCAmbWRhc2g7IOKCrDIxLjk5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9hcnRpY2xlPgoKICAgIDwvbWFpbj4KCiAgICA8IS0tIEluaXQgR1NBUCBBbmltYXRpb25zIC0tPgogICAgPHNjcmlwdD4KICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgICAgIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcik7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBNYXNrZWQgd29yZCByZXZlYWwgZm9yIHRoZSBoZWFkZXIgdGl0bGUKICAgICAgICAgICAgZ3NhcC50bygiLmdzLXJldmVhbC13b3JkIiwgewogICAgICAgICAgICAgICAgeTogIjAlIiwKICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAxLjIsCiAgICAgICAgICAgICAgICBzdGFnZ2VyOiAwLjE1LAogICAgICAgICAgICAgICAgZWFzZTogInBvd2VyNC5vdXQiLAogICAgICAgICAgICAgICAgZGVsYXk6IDAuMQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIFN1YnRsZSBmYWRlIHVwIGZvciB0aGUgc3VidGl0bGUKICAgICAgICAgICAgZ3NhcC50bygiLmdzLXJldmVhbC1mYWRlIiwgewogICAgICAgICAgICAgICAgb3BhY2l0eTogMSwKICAgICAgICAgICAgICAgIHk6IDAsCiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMSwKICAgICAgICAgICAgICAgIGVhc2U6ICJwb3dlcjMub3V0IiwKICAgICAgICAgICAgICAgIGRlbGF5OiAwLjUKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==";
    const assetFiles = ["assets/page-01-724142aa-44a6-48d3-9cf3-761e00d05b78-1600w.jpg","assets/page-02-0d868fef-f560-45ca-ab35-5dad4fc29059-3840w.webp","assets/page-03-005600e5-f6ab-4e59-bc86-eaeb02797dfa-1600w.jpg","assets/page-04-3186f9ea-5f5a-49f7-8fcf-568ad52f515e-3840w.webp","assets/page-05-7f78131e-65e9-49b2-aa1f-ccc33e28df9f-1600w.webp","assets/page-06-4f5668c5-fc4a-44e0-bc5e-a664189d3c31-1600w.jpg","assets/page-07-d14dc069-558a-4c51-8aad-5cc237f9b61d-1600w.jpg","assets/page-08-eca707cc-a5b7-439a-b4fd-247f6106c2e1-1600w.jpg","assets/page-09-4734259a-bad7-422f-981e-ce01e79184f2-1600w.jpg","assets/page-10-77415a2e-dcbc-4748-a29d-fced4821881a-1600w.jpg","assets/page-11-5ee0a38a-b5d3-4531-8793-98beed4af162-1600w.jpg","assets/page-12-65695f80-23f9-46ee-8487-cbb6c93cc48b-3840w.webp","assets/page-13-fb6415fd-bf4d-4ccf-8e9d-7ab445e99207-1600w.jpg","assets/page-14-c92852bb-a510-405a-85ab-ffa0fde136a4-1600w.jpg","assets/page-15-e534354d-c5f2-4399-a1d9-2f50338e8c47-1600w.jpg","assets/page-16-2f563338-39fa-47ea-9761-658d4f3f84db-1600w.jpg"];
    const runtimeFiles = ["../../../../assets/runtime/runtime-027051effa47-gsap-min.js","../../../../assets/runtime/runtime-163ebd087cfc-iconify-icon-min.js","../../../../assets/runtime/runtime-689ca8dda44c-scrolltrigger-min.js","../../../../assets/runtime/runtime-ccc8894b3418-runtime.js"];
    const frame = document.getElementById("neuform-demo");
    const decodeBytes = (value) => Uint8Array.from(atob(value), (character) => character.charCodeAt(0));
    const decode = (value) => new TextDecoder().decode(decodeBytes(value));
    const encodeBytes = (bytes) => {
      let binary = "";
      for (let index = 0; index < bytes.length; index += 32768) {
        binary += String.fromCharCode(...bytes.subarray(index, index + 32768));
      }
      return btoa(binary);
    };
    const mediaTypes = {
      avif: "image/avif",
      gif: "image/gif",
      jpg: "image/jpeg",
      jpeg: "image/jpeg",
      mp4: "video/mp4",
      png: "image/png",
      webm: "video/webm",
      webp: "image/webp"
    };
    const loadAsset = async (file) => {
      const response = await fetch(file, { cache: "no-store", credentials: "omit", redirect: "error" });
      if (!response.ok) throw new Error("Could not load local demo asset: " + file);
      const extension = file.split(".").pop().toLowerCase();
      const contentType = mediaTypes[extension] || "application/octet-stream";
      const bytes = new Uint8Array(await response.arrayBuffer());
      return { base64: encodeBytes(bytes), contentType, file, kind: "asset" };
    };
    Promise.allSettled(assetFiles.map(loadAsset)).then((results) => {
      const runtimeSources = runtimeFiles.map((file) => new URL(file, location.href).href).join(" ");
      const source = decode(encodedHtml).replace("__NEUFORM_RUNTIME_SOURCES__", runtimeSources);
      const mediaAssets = [];
      for (const result of results) {
        if (result.status !== "fulfilled") continue;
        mediaAssets.push(result.value);
      }
      frame.addEventListener("load", () => {
        frame.contentWindow.postMessage({ type: "neuform-assets-v1", assets: mediaAssets }, "*");
      }, { once: true });
      frame.srcdoc = source;
    }).catch((error) => {
      document.body.innerHTML = '<div class="error">Unable to load this sandboxed demo.</div>';
      console.error(error);
    });
  </script>
</body>
</html>

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Meng To
Publisher
Meng To (Community)
Source
MengTo/Skills · agent-skills/web-design/progressive-blur · commit 5ea1661
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Meng To or Meng To.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download progressive-blur.zip