Generated banner for Book Serif Index
Generated logo for Book Serif Index

Book Serif Index

Meng ToCommunityCreated by Meng To

  • Skill
  • Content generator
  • Design and creative
  • MIT
  • Medium risk

From the author

Create an archival book-reader design system with serif-led pages, mono index navigation, aged paper surfaces, margin notes, and a premium catalog frame.
— the description by Meng To

AutoGineer summary

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

The Book Serif Index skill provides a structured design framework for building immersive, editorial-focused interfaces. It emphasizes a two-zone composition that pairs a tactile, book-like reading surface with a technical, mono-styled catalog frame. By combining serif typography, aged paper textures, and scholarly layout elements like marginalia and folio markers, the system creates a sophisticated environment suitable for archives, lore systems, and literary catalogs.

What it does

  • Defines a two-zone layout with a dark outer shell and a light, textured book-like interior.
  • Provides typographic guidelines pairing serif body text with mono-spaced utility labels.
  • Details material design elements like center creases, edge shadows, and paper gradients.
  • Suggests scholarly UI components such as annotation cards, drop caps, and index-style sidebars.
  • Offers tuning parameters to balance historical antiquity with modern technical clarity.
  • Establishes a restrained, atmospheric color palette with selective accent usage.

When to use it

  • When designing interfaces for digital archives, manuscript viewers, or research platforms.
  • When building story-driven product pages that require a literary or curated feel.
  • When creating reading-centric layouts that need to balance immersive content with technical navigation.
  • When you need a design system that feels like a premium, collected catalog.

Advantages

  • Creates a highly immersive and tactile user experience.
  • Provides a clear, disciplined structure for editorial content.
  • Balances aesthetic warmth with functional, index-based navigation.
  • Highly customizable through tuning knobs for antiquity and technical density.

Usage examples

“Design a landing page for a historical archive using the Book Serif Index system.”
The agent generates a layout featuring a central, textured paper-like reading area surrounded by a dark, mono-indexed sidebar, using serif typography for the historical content.
“Apply the Book Serif Index style to a lore-heavy game wiki.”
The agent produces a design with dual-panel page spreads, marginalia for lore annotations, and a technical catalog frame for navigation.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/mengto/book-serif-index/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip book-serif-index.zip -d .agents/skills

Documentation by Meng To

Book Serif Index Skill

Use When

  • Create an archival book-reader design system with serif-led pages, mono index navigation, aged paper surfaces, margin notes, and a premium catalog frame.

Workflow

Scope

  • Apply this as a full design-system direction when the interface should feel like a curated archival reader, manuscript viewer, or premium literary catalog.

  • Use it for editorial experiences, story-driven product pages, archives, research interfaces, lore systems, or reading-centric layouts that need bookish structure and index navigation.

  • This is not generic blog styling; it should combine immersive book surfaces with a technical or catalog-like outer frame.

Visual target

  • Create a central reading surface that feels like an open book, folio spread, or archival document laid within a darker surrounding interface shell.

  • Let typography lead the experience: display serif or gothic-inspired headings, readable serif body text, and mono utility labels for navigation, metadata, and indexing.

  • Use aged paper tones, subtle texture, crease shadows, edge shading, and light wear so the main content surface feels tactile and collected.

  • Surround the reading area with restrained index or catalog UI: sidebar sections, chapter markers, section lists, archive labels, or mono navigation rails.

  • Keep the palette restrained and atmospheric: dark outer shell, warm paper interior, muted ink tones, and one selective accent color derived from the design. If no brand accent exists, a subdued oxblood, bronze, or antique gold is acceptable.

Implementation guidance

  • Prefer a two-zone composition: a darker outer interface frame plus a lighter book-like content surface centered inside it.

  • Use serif body copy with generous line height for readability, then pair it with mono labels, tracking-heavy section names, and quiet metadata for contrast.

  • Build the book surface with gradients, inset shadows, subtle center crease treatment, edge shadows, and light paper texture so it reads as layered material rather than a flat beige card.

  • Include index-like navigation patterns such as chapter lists, section trees, archive groupings, or sidebar entries with active states and small markers.

  • Add scholarly details like drop caps, marginalia boxes, block labels, annotations, citations, folio markers, or footer metadata to reinforce the editorial system.

  • Motion should stay calm and literary: masked text reveals, gentle entrance motion, slow ambient background drift, and restrained hover cues.

  • Outer shell: dark full-screen container with thin frame lines, subtle vertical rails, and muted corner markers.

  • Book spread: two-page or dual-panel reading region with center crease, paper gradients, soft edge shadows, and slight tonal variation between pages.

  • Index navigation: mono sidebar with grouped headings, active bullets, archive sections, or chapter entries arranged like a catalog.

  • Reading details: drop caps, pull quotes, annotation cards, marginal notes, image plates with thin framed borders, and bottom folio labels.

  • Typography system: decorative serif display, highly readable serif body, and mono metadata used sparingly for structure.

Tuning knobs

  • Antiquity: increase or reduce the amount of paper texture, warm tint, and wear depending on how historical versus contemporary the interface should feel.

  • Technical overlay: add or remove catalog rails, index labels, and metadata so the design can lean more archival or more system-like.

  • Book realism: tune crease depth, page shadows, and paper contrast so the surface feels tactile without becoming skeuomorphic overload.

  • Accent use: keep accent color concentrated in headings, active index states, callouts, or notes instead of spreading it across the whole spread.

  • Density: choose between airy museum-like composition or denser scholarly indexing depending on the content.

Avoid

  • Flat cream cards with serif text but no convincing book or archive structure.

  • Generic publishing layouts that omit index rails, metadata, and material depth.

  • Bright modern SaaS color systems that break the archival tone.

  • Excessive distressed effects that make the interface dirty or hard to read.

  • Overly ornate fantasy styling without the disciplined catalog and editorial framework.

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+CjxodG1sIGxhbmc9ImVuIiBjbGFzcz0ic2Nyb2xsLXNtb290aCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBiYXNlLXVyaSAnbm9uZSc7IGNvbm5lY3Qtc3JjICdub25lJzsgZm9udC1zcmMgZGF0YTogaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbTsgZm9ybS1hY3Rpb24gJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBpbWctc3JjIGJsb2I6OyBtZWRpYS1zcmMgYmxvYjo7IG5hdmlnYXRlLXRvICdub25lJzsgb2JqZWN0LXNyYyAnbm9uZSc7IHNjcmlwdC1zcmMgJ3Vuc2FmZS1pbmxpbmUnIF9fTkVVRk9STV9SVU5USU1FX1NPVVJDRVNfXzsgc3R5bGUtc3JjICd1bnNhZmUtaW5saW5lJyBodHRwczovL2FwaS5mb250c2hhcmUuY29tIGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb207IHdvcmtlci1zcmMgJ25vbmUnIj4KPHNjcmlwdCBkYXRhLW5ldWZvcm0tYXNzZXQtYm9vdHN0cmFwPgooKCkgPT4gewogIGxldCByZWNlaXZlZCA9IGZhbHNlOwogIGNvbnN0IG9iamVjdFVybHMgPSBbXTsKICBjb25zdCByZXBsYWNlQWxsID0gKHZhbHVlLCByZXBsYWNlbWVudHMpID0+IHsKICAgIGxldCBuZXh0ID0gU3RyaW5nKHZhbHVlIHx8ICIiKTsKICAgIGZvciAoY29uc3QgW2ZpbGUsIG9iamVjdFVybF0gb2YgcmVwbGFjZW1lbnRzKSBuZXh0ID0gbmV4dC5zcGxpdChmaWxlKS5qb2luKG9iamVjdFVybCk7CiAgICByZXR1cm4gbmV4dDsKICB9OwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7CiAgICBpZiAocmVjZWl2ZWQgfHwgZXZlbnQuc291cmNlICE9PSBwYXJlbnQgfHwgZXZlbnQuZGF0YT8udHlwZSAhPT0gIm5ldWZvcm0tYXNzZXRzLXYxIikgcmV0dXJuOwogICAgcmVjZWl2ZWQgPSB0cnVlOwogICAgY29uc3QgcmVwbGFjZW1lbnRzID0gW107CiAgICBmb3IgKGNvbnN0IGFzc2V0IG9mIGV2ZW50LmRhdGEuYXNzZXRzIHx8IFtdKSB7CiAgICAgIGlmICghYXNzZXQgfHwgdHlwZW9mIGFzc2V0LmZpbGUgIT09ICJzdHJpbmciIHx8IHR5cGVvZiBhc3NldC5iYXNlNjQgIT09ICJzdHJpbmciKSBjb250aW51ZTsKICAgICAgY29uc3QgYmluYXJ5ID0gYXRvYihhc3NldC5iYXNlNjQpOwogICAgICBjb25zdCBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShiaW5hcnksIChjaGFyYWN0ZXIpID0+IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApKTsKICAgICAgY29uc3Qgb2JqZWN0VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IGFzc2V0LmNvbnRlbnRUeXBlIHx8ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIH0pKTsKICAgICAgb2JqZWN0VXJscy5wdXNoKG9iamVjdFVybCk7CiAgICAgIHJlcGxhY2VtZW50cy5wdXNoKFthc3NldC5maWxlLCBvYmplY3RVcmxdKTsKICAgIH0KICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIikpIHsKICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFsic3JjIiwgInBvc3RlciIsICJzcmNzZXQiLCAic3R5bGUiXSkgewogICAgICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgaWYgKHZhbHVlKSBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCByZXBsYWNlQWxsKHZhbHVlLCByZXBsYWNlbWVudHMpKTsKICAgICAgfQogICAgfQogICAgZm9yIChjb25zdCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKSB7CiAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gcmVwbGFjZUFsbChzdHlsZS50ZXh0Q29udGVudCwgcmVwbGFjZW1lbnRzKTsKICAgIH0KICB9KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLCAoKSA9PiB7CiAgICBmb3IgKGNvbnN0IG9iamVjdFVybCBvZiBvYmplY3RVcmxzKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7CiAgfSwgeyBvbmNlOiB0cnVlIH0pOwp9KSgpOwo8L3NjcmlwdD4KCjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICAgIDx0aXRsZT5PbW5pIOKAlCBDb3Jwb3JhdGUgTmV1cmFsIE1lbW9yeTwvdGl0bGU+CiAgICAKICAgIDwhLS0gVGFpbHdpbmQgQ1NTIC0tPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Fzc2V0cy9ydW50aW1lL3J1bnRpbWUtY2NjODg5NGIzNDE4LXJ1bnRpbWUuanMiPjwvc2NyaXB0PgogICAgCiAgICA8IS0tIEdvb2dsZSBGb250cyAtLT4KICAgIDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI+CiAgICA8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDMwMDs0MDA7NTAwJmZhbWlseT1KZXRCcmFpbnMrTW9ubzp3Z2h0QDQwMCZkaXNwbGF5PXN3YXAiIHJlbD0ic3R5bGVzaGVldCI+CiAgICAKICAgIDwhLS0gSWNvbmlmeSAtLT4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9hc3NldHMvcnVudGltZS9ydW50aW1lLTE2M2ViZDA4N2NmYy1pY29uaWZ5LWljb24tbWluLmpzIj48L3NjcmlwdD4KICAgIAogICAgPCEtLSBHU0FQICYgVGhyZWUuanMgLS0+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS0wMjcwNTFlZmZhNDctZ3NhcC1taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Fzc2V0cy9ydW50aW1lL3J1bnRpbWUtNjg5Y2E4ZGRhNDRjLXNjcm9sbHRyaWdnZXItbWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9hc3NldHMvcnVudGltZS9ydW50aW1lLTI1MDIzYjUyMWQ3Ny10aHJlZS1taW4uanMiPjwvc2NyaXB0PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgdGFpbHdpbmQuY29uZmlnID0gewogICAgICAgICAgICB0aGVtZTogewogICAgICAgICAgICAgICAgZXh0ZW5kOiB7CiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogewogICAgICAgICAgICAgICAgICAgICAgICBzYW5zOiBbJ0ludGVyJywgJ3NhbnMtc2VyaWYnXSwKICAgICAgICAgICAgICAgICAgICAgICAgbW9ubzogWydKZXRCcmFpbnMgTW9ubycsICdtb25vc3BhY2UnXSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGNvbG9yczogewogICAgICAgICAgICAgICAgICAgICAgICBuYXZ5OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDA6ICcjMDIwNjE3JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk1MDogJyMwMTAzMGEnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBlbWVyYWxkOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDA6ICcjMzRkMzk5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMDogJyMxMGI5ODEnLAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogewogICAgICAgICAgICAgICAgICAgICAgICAnMnhzJzogJzAuNjVyZW0nLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIDwvc2NyaXB0PgoKICAgIDxzdHlsZT4KICAgICAgICAvKiBUeXBvZ3JhcGh5IGFkanVzdG1lbnRzICovCiAgICAgICAgYm9keSB7IGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDIwNjE3OyBjb2xvcjogI2ZmZmZmZjsgb3ZlcmZsb3cteDogaGlkZGVuOyB9CiAgICAgICAgLmZvbnQtbW9ubyB7IGZvbnQtZmFtaWx5OiAnSmV0QnJhaW5zIE1vbm8nLCBtb25vc3BhY2U7IH0KICAgICAgICAKICAgICAgICAvKiBQcm9ncmVzc2l2ZSBCbHVyIE5hdmlnYXRpb24gKi8KICAgICAgICAubmF2LWJsdXIgeyBwb3NpdGlvbjogZml4ZWQ7IHotaW5kZXg6IDUwOyBpbnNldDogMCAwIGF1dG8gMDsgaGVpZ2h0OiAxMiU7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9CiAgICAgICAgLm5hdi1ibHVyID4gZGl2LCAubmF2LWJsdXI6OmJlZm9yZSwgLm5hdi1ibHVyOjphZnRlciB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IH0KICAgICAgICAubmF2LWJsdXI6OmJlZm9yZSB7IGNvbnRlbnQ6ICIiOyB6LWluZGV4OiAxOyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMC41cHgpOyBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDAsMCwwLDApIDAlLCByZ2JhKDAsMCwwLDEpIDEyLjUlLCByZ2JhKDAsMCwwLDEpIDI1JSwgcmdiYSgwLDAsMCwwKSAzNy41JSk7IC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLDAsMCwwKSAwJSwgcmdiYSgwLDAsMCwxKSAxMi41JSwgcmdiYSgwLDAsMCwxKSAyNSUsIHJnYmEoMCwwLDAsMCkgMzcuNSUpOyB9CiAgICAgICAgLm5hdi1ibHVyID4gZGl2Om50aC1vZi10eXBlKDEpIHsgei1pbmRleDogMjsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7IG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwwLDAsMCkgMTIuNSUsIHJnYmEoMCwwLDAsMSkgMjUlLCByZ2JhKDAsMCwwLDEpIDM3LjUlLCByZ2JhKDAsMCwwLDApIDUwJSk7IC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLDAsMCwwKSAxMi41JSwgcmdiYSgwLDAsMCwxKSAyNSUsIHJnYmEoMCwwLDAsMSkgMzcuNSUsIHJnYmEoMCwwLDAsMCkgNTAlKTsgfQogICAgICAgIC5uYXYtYmx1ciA+IGRpdjpudGgtb2YtdHlwZSgyKSB7IHotaW5kZXg6IDM7IGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpOyBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDAsMCwwLDApIDI1JSwgcmdiYSgwLDAsMCwxKSAzNy41JSwgcmdiYSgwLDAsMCwxKSA1MCUsIHJnYmEoMCwwLDAsMCkgNjIuNSUpOyAtd2Via2l0LW1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwwLDAsMCkgMjUlLCByZ2JhKDAsMCwwLDEpIDM3LjUlLCByZ2JhKDAsMCwwLDEpIDUwJSwgcmdiYSgwLDAsMCwwKSA2Mi41JSk7IH0KICAgICAgICAubmF2LWJsdXIgPiBkaXY6bnRoLW9mLXR5cGUoMykgeyB6LWluZGV4OiA0OyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNHB4KTsgbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLDAsMCwwKSAzNy41JSwgcmdiYSgwLDAsMCwxKSA1MCUsIHJnYmEoMCwwLDAsMSkgNjIuNSUsIHJnYmEoMCwwLDAsMCkgNzUlKTsgLXdlYmtpdC1tYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDAsMCwwLDApIDM3LjUlLCByZ2JhKDAsMCwwLDEpIDUwJSwgcmdiYSgwLDAsMCwxKSA2Mi41JSwgcmdiYSgwLDAsMCwwKSA3NSUpOyB9CiAgICAgICAgLm5hdi1ibHVyID4gZGl2Om50aC1vZi10eXBlKDQpIHsgei1pbmRleDogNTsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7IG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwwLDAsMCkgNTAlLCByZ2JhKDAsMCwwLDEpIDYyLjUlLCByZ2JhKDAsMCwwLDEpIDc1JSwgcmdiYSgwLDAsMCwwKSA4Ny41JSk7IC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLDAsMCwwKSA1MCUsIHJnYmEoMCwwLDAsMSkgNjIuNSUsIHJnYmEoMCwwLDAsMSkgNzUlLCByZ2JhKDAsMCwwLDApIDg3LjUlKTsgfQogICAgICAgIC5uYXYtYmx1ciA+IGRpdjpudGgtb2YtdHlwZSg1KSB7IHotaW5kZXg6IDY7IGJhY2tkcm9wLWZpbHRlcjogYmx1cigxNnB4KTsgbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLDAsMCwwKSA2Mi41JSwgcmdiYSgwLDAsMCwxKSA3NSUsIHJnYmEoMCwwLDAsMSkgODcuNSUsIHJnYmEoMCwwLDAsMCkgMTAwJSk7IC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLDAsMCwwKSA2Mi41JSwgcmdiYSgwLDAsMCwxKSA3NSUsIHJnYmEoMCwwLDAsMSkgODcuNSUsIHJnYmEoMCwwLDAsMCkgMTAwJSk7IH0KICAgICAgICAubmF2LWJsdXIgPiBkaXY6bnRoLW9mLXR5cGUoNikgeyB6LWluZGV4OiA3OyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMzJweCk7IG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwwLDAsMCkgNzUlLCByZ2JhKDAsMCwwLDEpIDg3LjUlLCByZ2JhKDAsMCwwLDEpIDEwMCUpOyAtd2Via2l0LW1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwwLDAsMCkgNzUlLCByZ2JhKDAsMCwwLDEpIDg3LjUlLCByZ2JhKDAsMCwwLDEpIDEwMCUpOyB9CiAgICAgICAgLm5hdi1ibHVyOjphZnRlciB7IGNvbnRlbnQ6ICIiOyB6LWluZGV4OiA4OyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNjRweCk7IG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwwLDAsMCkgODcuNSUsIHJnYmEoMCwwLDAsMSkgMTAwJSk7IC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLDAsMCwwKSA4Ny41JSwgcmdiYSgwLDAsMCwxKSAxMDAlKTsgfQoKICAgICAgICAvKiBEaWFnb25hbCBDb3JuZXJzICovCiAgICAgICAgLmNsaXAtZGlhZ29uYWwgeyBjbGlwLXBhdGg6IHBvbHlnb24oMTJweCAwLCAxMDAlIDAsIDEwMCUgY2FsYygxMDAlIC0gMTJweCksIGNhbGMoMTAwJSAtIDEycHgpIDEwMCUsIDAgMTAwJSwgMCAxMnB4KTsgfQogICAgICAgIC5jbGlwLWRpYWdvbmFsLWNhcmQgeyBjbGlwLXBhdGg6IHBvbHlnb24oMjRweCAwLCAxMDAlIDAsIDEwMCUgY2FsYygxMDAlIC0gMjRweCksIGNhbGMoMTAwJSAtIDI0cHgpIDEwMCUsIDAgMTAwJSwgMCAyNHB4KTsgfQoKICAgICAgICAvKiBEaXRoZXIgJiBHcmFpbiBPdmVybGF5cyAqLwogICAgICAgIC5iZy1kaXRoZXIgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDQgNCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEgMEgwdjFoMXpNMyAySDJ2MWgxek0wIDJoMXYxSDB6TTIgMGgxdjFIMnonIGZpbGw9JyUyM2ZmZmZmZicgZmlsbC1vcGFjaXR5PScwLjAzJy8lM0UlM0Mvc3ZnJTNFIik7IH0KICAgICAgICAuYmctbm9pc2UgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDIwMCAyMDAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NmaWx0ZXIgaWQ9J25vaXNlRmlsdGVyJyUzRSUzQ2ZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuODUnIG51bU9jdGF2ZXM9JzMnIHN0aXRjaFRpbGVzPSdzdGl0Y2gnLyUzRSUzQy9maWx0ZXIlM0UlM0NyZWN0IHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyBmaWx0ZXI9J3VybCglMjNub2lzZUZpbHRlciknLyUzRSUzQy9zdmclM0UiKTsgfQogICAgICAgIAogICAgICAgIC8qIEdyaWQgQmFja2dyb3VuZCAqLwogICAgICAgIC5iZy10ZWNoLWdyaWQgeyBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgyNTUsMjU1LDI1NSwwLjAyKSAxcHgsIHRyYW5zcGFyZW50IDFweCksIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjAyKSAxcHgsIHRyYW5zcGFyZW50IDFweCk7IGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4OyB9CgogICAgICAgIC8qIE1hc2tlZCBSZXZlYWwgVXRpbGl0eSAqLwogICAgICAgIC5yZXZlYWwtbWFzayB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgb3ZlcmZsb3c6IGhpZGRlbjsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgfQogICAgICAgIC5yZXZlYWwtdGV4dCB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDExMCUpOyB9CgogICAgICAgIC8qIFNrZXVvbW9ycGhpYyBHbGFzcyAqLwogICAgICAgIC5nbGFzcy1wYW5lbCB7IGJhY2tncm91bmQ6IHJnYmEoMTAsIDEyLCAyMCwgMC42KTsgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDE2cHgpOyAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxNnB4KTsgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwgaW5zZXQgMCAtMXB4IDFweCByZ2JhKDAsMCwwLDAuOCksIDAgMjRweCAyNHB4IC0xMnB4IHJnYmEoMCwwLDAsMC40KTsgfQogICAgICAgIAogICAgICAgIC8qIEN1c3RvbSBTY3JvbGxiYXIgKi8KICAgICAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDZweDsgfQogICAgICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgeyBiYWNrZ3JvdW5kOiAjMDIwNjE3OyB9CiAgICAgICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7IGJhY2tncm91bmQ6ICMxZTI5M2I7IGJvcmRlci1yYWRpdXM6IDEwcHg7IH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHkgY2xhc3M9InNlbGVjdGlvbjpiZy1lbWVyYWxkLTUwMC8zMCBzZWxlY3Rpb246dGV4dC13aGl0ZSI+CgogICAgPCEtLSBXZWJHTCBCYWNrZ3JvdW5kIExheWVyIC0tPgogICAgPGNhbnZhcyBpZD0id2ViZ2wtY2FudmFzIiBjbGFzcz0iZml4ZWQgaW5zZXQtMCB6LTAgcG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTYwIj48L2NhbnZhcz4KCiAgICA8IS0tIEdsb2JhbCBPdmVybGF5cyAtLT4KICAgIDxkaXYgY2xhc3M9ImZpeGVkIGluc2V0LTAgei0wIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctZGl0aGVyIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImZpeGVkIGluc2V0LTAgei0wIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctbm9pc2Ugb3BhY2l0eS1bMC4wNF0gbWl4LWJsZW5kLW92ZXJsYXkiPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iZml4ZWQgaW5zZXQtMCB6LTAgcG9pbnRlci1ldmVudHMtbm9uZSBiZy10ZWNoLWdyaWQgb3BhY2l0eS01MCI+PC9kaXY+CgogICAgPCEtLSBQcm9ncmVzc2l2ZSBCbHVyIEhlYWRlciAtLT4KICAgIDxkaXYgY2xhc3M9Im5hdi1ibHVyIj4KICAgICAgICA8ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTmF2aWdhdGlvbiAtLT4KICAgIDxuYXYgY2xhc3M9ImZpeGVkIHRvcC0wIHctZnVsbCB6LTUwIGZsZXgganVzdGlmeS1jZW50ZXIgcHQtNiBweC00IHBvaW50ZXItZXZlbnRzLW5vbmUiPgogICAgICAgIDxkaXYgY2xhc3M9InBvaW50ZXItZXZlbnRzLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHctZnVsbCBtYXgtdy01eGwgYmctbmF2eS05MDAvNDAgYmFja2Ryb3AtYmx1ci1tZCBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIHAtWzFweF0gY2xpcC1kaWFnb25hbCByZWxhdGl2ZSBncm91cCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmctZ3JhZGllbnQtdG8tciBmcm9tLWVtZXJhbGQtNTAwLzEwIHRvLXRyYW5zcGFyZW50IG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwIGNsaXAtZGlhZ29uYWwiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgYmctbmF2eS05NTAvODAgY2xpcC1kaWFnb25hbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtNiBweS0zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LTIgaC0yIGJnLWVtZXJhbGQtNDAwIGJvcmRlciBib3JkZXItZW1lcmFsZC0yMDAvNTAiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYWNraW5nLXdpZGUiPk9NTklfU1lTPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4gbWQ6ZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTggdGV4dC14cyBmb250LW1vbm8gdHJhY2tpbmctd2lkZXN0IHRleHQtbmV1dHJhbC00MDAiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIHVwcGVyY2FzZSI+QXJjaGl0ZWN0dXJlPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIHVwcGVyY2FzZSI+SW50ZWxsaWdlbmNlPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIHVwcGVyY2FzZSI+U2VjdXJpdHk8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRleHQteHMgZm9udC1tb25vIHRyYWNraW5nLXdpZGVzdCBiZy13aGl0ZSB0ZXh0LWJsYWNrIHB4LTQgcHktMiBjbGlwLWRpYWdvbmFsIGhvdmVyOmJnLW5ldXRyYWwtMjAwIHRyYW5zaXRpb24tY29sb3JzIHVwcGVyY2FzZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiI+CiAgICAgICAgICAgICAgICAgICAgSW5pdGlhbGl6ZSA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmFycm93LXJpZ2h0LWxpbmVhciIgc3Ryb2tlLXdpZHRoPSIxLjUiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9uYXY+CgogICAgPCEtLSBNYWluIENvbnRhaW5lciBTaGVsbCAoQWdlbmN5IE1pbmltYWwgR3JpZCkgLS0+CiAgICA8bWFpbiBjbGFzcz0icmVsYXRpdmUgei0xMCB3LWZ1bGwgbWF4LXctN3hsIG14LWF1dG8gYm9yZGVyLXggYm9yZGVyLXdoaXRlLzEwIG1pbi1oLXNjcmVlbiBwdC0zMiBmbGV4IGZsZXgtY29sIj4KICAgICAgICA8IS0tIEdsb2JhbCBWZXJ0aWNhbCBSYWlscyAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvNCB3LVsxcHhdIGJnLXdoaXRlLzUgcG9pbnRlci1ldmVudHMtbm9uZSBoaWRkZW4gbGc6YmxvY2siPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMi80IHctWzFweF0gYmctd2hpdGUvNSBwb2ludGVyLWV2ZW50cy1ub25lIGhpZGRlbiBsZzpibG9jayI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgbGVmdC0zLzQgdy1bMXB4XSBiZy13aGl0ZS81IHBvaW50ZXItZXZlbnRzLW5vbmUgaGlkZGVuIGxnOmJsb2NrIj48L2Rpdj4KCiAgICAgICAgPCEtLSBIRVJPIFNFQ1RJT04gLS0+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9InJlbGF0aXZlIHB4LTYgbGc6cHgtMTYgcHQtMjAgcGItMzIgYm9yZGVyLWIgYm9yZGVyLXdoaXRlLzEwIj4KICAgICAgICAgICAgPCEtLSBDb3JuZXIgQnJhY2tldHMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0wIGxlZnQtMCB3LTQgaC00IGJvcmRlci10IGJvcmRlci1sIGJvcmRlci13aGl0ZS8zMCAtdHJhbnNsYXRlLXgtWzFweF0gLXRyYW5zbGF0ZS15LVsxcHhdIj48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCB3LTQgaC00IGJvcmRlci10IGJvcmRlci1yIGJvcmRlci13aGl0ZS8zMCB0cmFuc2xhdGUteC1bMXB4XSAtdHJhbnNsYXRlLXktWzFweF0iPjwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBsZzpmbGV4LXJvdyBnYXAtMTYgbGc6Z2FwLTggaXRlbXMtc3RhcnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC0xIHctZnVsbCByZWxhdGl2ZSB6LTEwIj4KICAgICAgICAgICAgICAgICAgICA8IS0tIE1ldGFkYXRhIExhYmVsIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtMnhzIGZvbnQtbW9ubyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC1lbWVyYWxkLTQwMCBtYi04Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InctMS41IGgtMS41IGJnLWVtZXJhbGQtNDAwIHNoYWRvdy1bMF8wXzhweF9yZ2JhKDUyLDIxMSwxNTMsMC44KV0gYW5pbWF0ZS1wdWxzZSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM6IEFjdGl2ZSAvLyBDb3JlIFN5bmNlZAogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz0idGV4dC00eGwgc206dGV4dC01eGwgbGc6dGV4dC03eGwgZm9udC1saWdodCB0cmFja2luZy10aWdodCBsZWFkaW5nLVsxLjA1XSB0ZXh0LXdoaXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJldmVhbC1tYXNrIj48c3BhbiBjbGFzcz0icmV2ZWFsLXRleHQiPkNvcnBvcmF0ZTwvc3Bhbj48L3NwYW4+PGJyPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmV2ZWFsLW1hc2siPjxzcGFuIGNsYXNzPSJyZXZlYWwtdGV4dCB0ZXh0LW5ldXRyYWwtNDAwIj5NZW1vcnksPC9zcGFuPjwvc3Bhbj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXZlYWwtbWFzayI+PHNwYW4gY2xhc3M9InJldmVhbC10ZXh0Ij5TeW50aGVzaXplZC48L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvaDE+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMTIgbWF4LXctbWQiPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LWxpZ2h0IHRleHQtbmV1dHJhbC00MDAgbGVhZGluZy1yZWxheGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXZlYWwtbWFzayI+PHNwYW4gY2xhc3M9InJldmVhbC10ZXh0Ij5PbW5pIGNvbm5lY3RzIHNjYXR0ZXJlZCBpbnN0aXR1dGlvbmFsIGtub3dsZWRnZSBpbnRvIGEgdW5pZmllZCwgcmV0cmlldmluZyBpbnRlbGxpZ2VuY2UuIFNlY3VyZSwgbW9kdWxhciwgYW5kIGluc3RhbnRseSBhY2Nlc3NpYmxlLjwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMTIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZWxhdGl2ZSBwLVsxcHhdIGNsaXAtZGlhZ29uYWwgZ3JvdXAgaW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmctZ3JhZGllbnQtdG8tciBmcm9tLWVtZXJhbGQtNTAwIHRvLWJsdWUtNjAwIG9wYWNpdHktNzAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIGJnLWJsYWNrIHB4LTYgcHktMyBjbGlwLWRpYWdvbmFsIHRleHQtc20gZm9udC1tZWRpdW0gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcGxveSBOb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpyb3VuZC1hbHQtYXJyb3ctcmlnaHQtbGluZWFyIiBjbGFzcz0idGV4dC1lbWVyYWxkLTQwMCB0ZXh0LWxnIGdyb3VwLWhvdmVyOnRyYW5zbGF0ZS14LTEgdHJhbnNpdGlvbi10cmFuc2Zvcm0iPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBmb250LW1vbm8gdGV4dC1uZXV0cmFsLTUwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0Ij5bIFJlYWQgRG9jcyBdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBIZXJvIEdyYXBoaWMvRGV0YWlscyBQYW5lbCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxnOnctWzQwMHB4XSB3LWZ1bGwgc2hyaW5rLTAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtWzFweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLXdoaXRlLzIwIHRvLXdoaXRlLzAgY2xpcC1kaWFnb25hbC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctbmF2eS05NTAvODAgYmFja2Ryb3AtYmx1ci1tZCBjbGlwLWRpYWdvbmFsLWNhcmQgcC02IGgtZnVsbCBib3JkZXIgYm9yZGVyLXdoaXRlLzUgc2hhZG93LVswcHhfMjRweF8yNHB4Xy0xMnB4X3JnYmEoMCwwLDAsMC40KV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGJvcmRlci1iIGJvcmRlci13aGl0ZS8xMCBwYi00IG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LTJ4cyBmb250LW1vbm8gdXBwZXJjYXNlIHRleHQtbmV1dHJhbC01MDAgdHJhY2tpbmctd2lkZXN0Ij5UZWxlbWV0cnk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpncmFwaC11cC1saW5lYXIiIGNsYXNzPSJ0ZXh0LW5ldXRyYWwtNDAwIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LTJ4cyBmb250LW1vbm8gdGV4dC1uZXV0cmFsLTUwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgbWItMSI+SW5nZXN0aW9uIFJhdGU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC14bCBmb250LWxpZ2h0IHRyYWNraW5nLXRpZ2h0Ij40LjIgUEIgLyBtczwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctZnVsbCBoLXB4IGJnLXdoaXRlLzEwIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LTJ4cyBmb250LW1vbm8gdGV4dC1uZXV0cmFsLTUwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXIgbWItMSI+UmV0cmlldmFsIExhdGVuY3k8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC14bCBmb250LWxpZ2h0IHRyYWNraW5nLXRpZ2h0IHRleHQtZW1lcmFsZC00MDAiPjEyLjA0IG1zPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy1mdWxsIGgtcHggYmctd2hpdGUvMTAiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InB0LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgaC0xIGJnLXdoaXRlLzEwIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LVs4MiVdIGgtZnVsbCBiZy1ncmFkaWVudC10by1yIGZyb20tZW1lcmFsZC01MDAgdG8tYmx1ZS01MDAgcmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy00IGJnLXdoaXRlLzUwIGJsdXItc20gYW5pbWF0ZS1wdWxzZSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIG10LTIgdGV4dC0yeHMgZm9udC1tb25vIHRleHQtbmV1dHJhbC01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q2FwYWNpdHk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj44MiU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPCEtLSBMT0dPIE1BUlFVRUUgLS0+CiAgICAgICAgPHNlY3Rpb24gY2xhc3M9InB5LTggYm9yZGVyLWIgYm9yZGVyLXdoaXRlLzEwIG92ZXJmbG93LWhpZGRlbiByZWxhdGl2ZSBiZy1ibGFjay8yMCI+CiAgICAgICAgICAgIDwhLS0gRmFkZXMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTI0IGJnLWdyYWRpZW50LXRvLXIgZnJvbS1uYXZ5LTkwMCB0by10cmFuc3BhcmVudCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmUiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMjQgYmctZ3JhZGllbnQtdG8tbCBmcm9tLW5hdnktOTAwIHRvLXRyYW5zcGFyZW50IHotMTAgcG9pbnRlci1ldmVudHMtbm9uZSI+PC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IHctWzIwMCVdIG1hcnF1ZWUtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggdy0xLzIganVzdGlmeS1hcm91bmQgaXRlbXMtY2VudGVyIG9wYWNpdHktNTAiPgogICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic2ltcGxlLWljb25zOm5hc2EiIHdpZHRoPSI0OCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzaW1wbGUtaWNvbnM6c3BhY2V4IiB3aWR0aD0iNjQiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic2ltcGxlLWljb25zOnViZXIiIHdpZHRoPSI0OCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzaW1wbGUtaWNvbnM6dmlzYSIgd2lkdGg9IjQ4Ij48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNpbXBsZS1pY29uczpkamkiIHdpZHRoPSI0OCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzaW1wbGUtaWNvbnM6c29ueSIgd2lkdGg9IjY0Ij48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCB3LTEvMiBqdXN0aWZ5LWFyb3VuZCBpdGVtcy1jZW50ZXIgb3BhY2l0eS01MCI+CiAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzaW1wbGUtaWNvbnM6bmFzYSIgd2lkdGg9IjQ4Ij48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNpbXBsZS1pY29uczpzcGFjZXgiIHdpZHRoPSI2NCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzaW1wbGUtaWNvbnM6dWJlciIgd2lkdGg9IjQ4Ij48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNpbXBsZS1pY29uczp2aXNhIiB3aWR0aD0iNDgiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic2ltcGxlLWljb25zOmRqaSIgd2lkdGg9IjQ4Ij48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNpbXBsZS1pY29uczpzb255IiB3aWR0aD0iNjQiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPCEtLSBTUExJVCBMQVlPVVQ6IElOVEVMTElHRU5DRSAtLT4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0icmVsYXRpdmUgYm9yZGVyLWIgYm9yZGVyLXdoaXRlLzEwIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHctNCBoLTQgYm9yZGVyLXQgYm9yZGVyLWwgYm9yZGVyLXdoaXRlLzMwIC10cmFuc2xhdGUteC1bMXB4XSAtdHJhbnNsYXRlLXktWzFweF0iPjwvZGl2PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtMSBsZzpncmlkLWNvbHMtMiBtaW4taC1bNjAwcHhdIj4KICAgICAgICAgICAgICAgIDwhLS0gVmlzdWFsIFNpZGUgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSBwLTggbGc6cC0xNiBib3JkZXItYiBsZzpib3JkZXItYi0wIGxnOmJvcmRlci1yIGJvcmRlci13aGl0ZS8xMCBvdmVyZmxvdy1oaWRkZW4gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctWyMwMjA0MGFdIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJnLWRpdGhlciBvcGFjaXR5LTUwIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYXNzZXRzL3BhZ2UtMDEtZTUzNDM1NGQtYzVmMi00Mzk5LWExZDktMmY1MDMzOGU4YzQ3LTE2MDB3LmpwZyIgYWx0PSJBYnN0cmFjdCBEYXRhIFdhdmUiIGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIG1peC1ibGVuZC1sdW1pbm9zaXR5IG9wYWNpdHktMzAiPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvYXRpbmcgU2tldW9tb3JwaGljIFdpZGdldCAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB6LTEwIHctZnVsbCBtYXgtdy1zbSBwLVsxcHhdIHJvdW5kZWQteGwgYmctZ3JhZGllbnQtdG8tYnIgZnJvbS13aGl0ZS8yMCB0by10cmFuc3BhcmVudCB0cmFuc2Zvcm0gcm90YXRlLXktWy0xMGRlZ10gcm90YXRlLXgtWzVkZWddIHBlcnNwZWN0aXZlLTEwMDAgc2hhZG93LVswXzQxLjhweF8zMy40cHhfcmdiYSgwLDAsMCwwLjA4NiksMF8xMDBweF84MHB4X3JnYmEoMCwwLDAsMC4xMildIGdzYXAtZmxvYXQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnbGFzcy1wYW5lbCByb3VuZGVkLVsxMXB4XSBwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgbWItNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpzY2FubmVyLWxpbmVhciIgY2xhc3M9InRleHQteGwgdGV4dC1lbWVyYWxkLTQwMCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgZm9udC1tb25vIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiPlNlbWFudGljIFNlYXJjaDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoLTggYmctYmxhY2svNTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkIHB4LTMgZmxleCBpdGVtcy1jZW50ZXIgc2hhZG93LVtpbnNldF8wXzFweF8zcHhfcmdiYSgwLDAsMCwwLjUpXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtbmV1dHJhbC01MDAgZm9udC1tb25vIj5ROiBSZXRyaWV2ZSBRMyBhcmNoaXRlY3R1cmUgZGVjaXNpb25zLi4uPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZ2FwLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoLTYgdy0xLzMgYmctZW1lcmFsZC01MDAvMjAgYm9yZGVyIGJvcmRlci1lbWVyYWxkLTUwMC8zMCByb3VuZGVkIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LTJ4cyBmb250LW1vbm8gdGV4dC1lbWVyYWxkLTQwMCI+TWF0Y2ggOTglPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC02IHctMi8zIGJnLXdoaXRlLzUgYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gVGV4dCBTaWRlIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icC04IGxnOnAtMTYgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciByZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTggcmlnaHQtOCB0ZXh0LXhzIGZvbnQtbW9ubyB0ZXh0LW5ldXRyYWwtNjAwIHRyYWNraW5nLXdpZGVzdCI+WyAwMSBdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LTN4bCBsZzp0ZXh0LTR4bCBmb250LWxpZ2h0IHRyYWNraW5nLXRpZ2h0IG1iLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icmV2ZWFsLW1hc2siPjxzcGFuIGNsYXNzPSJyZXZlYWwtdGV4dCI+RnJhY3RhbCBjb250ZXh0dWFsPC9zcGFuPjwvc3Bhbj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXZlYWwtbWFzayI+PHNwYW4gY2xhc3M9InJldmVhbC10ZXh0IHRleHQtbmV1dHJhbC00MDAiPnVuZGVyc3RhbmRpbmcuPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbGlnaHQgdGV4dC1uZXV0cmFsLTQwMCBsZWFkaW5nLXJlbGF4ZWQgbWItMTAgbWF4LXctbWQiPgogICAgICAgICAgICAgICAgICAgICAgICBPbW5pIGRvZXNuJ3QganVzdCBpbmRleCBrZXl3b3Jkcy4gSXQgYnVpbGRzIGEgbXVsdGktZGltZW5zaW9uYWwgZ3JhcGggb2YgeW91ciBvcmdhbml6YXRpb24ncyBsb2dpYywgbWFwcGluZyBpbnRlbnQgYmVoaW5kIGNvbW11bmljYXRpb25zLCBjb2RlYmFzZXMsIGFuZCBzdHJhdGVneSBkb2N1bWVudHMuCiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ic3BhY2UteS02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGl0ZW1zLXN0YXJ0IGdhcC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTEgdy01IGgtNSByb3VuZGVkIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlciBib3JkZXItd2hpdGUvMjAgYmctd2hpdGUvNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpkYXRhYmFzZS1saW5lYXIiIGNsYXNzPSJ0ZXh0LXhzIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gbWItMSI+QWdub3N0aWMgSW5nZXN0aW9uPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC14cyBmb250LWxpZ2h0IHRleHQtbmV1dHJhbC01MDAgbGVhZGluZy1yZWxheGVkIj5Db25uZWN0cyB0byBTbGFjaywgSmlyYSwgR2l0SHViLCBhbmQgRHJpdmUgd2l0aG91dCBzY2hlbWEgbWFwcGluZy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmbGV4IGl0ZW1zLXN0YXJ0IGdhcC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTEgdy01IGgtNSByb3VuZGVkIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlciBib3JkZXItd2hpdGUvMjAgYmctd2hpdGUvNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpjcHUtbGluZWFyIiBjbGFzcz0idGV4dC14cyI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTEiPk5ldXJhbCBTeW50aGVzaXM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhzIGZvbnQtbGlnaHQgdGV4dC1uZXV0cmFsLTUwMCBsZWFkaW5nLXJlbGF4ZWQiPkF1dG9tYXRpY2FsbHkgcmVzb2x2ZXMgY29udHJhZGljdGlvbnMgYmV0d2VlbiBsZWdhY3kgZG9jdW1lbnRhdGlvbiBhbmQgcmVjZW50IHB1bGwgcmVxdWVzdHMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDwhLS0gTkVTVEVEIENPTlRBSU5FUlM6IEFSQ0hJVEVDVFVSRSAtLT4KICAgICAgICA8c2VjdGlvbiBjbGFzcz0icC00IGxnOnAtOCBib3JkZXItYiBib3JkZXItd2hpdGUvMTAgcmVsYXRpdmUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIHctNCBoLTQgYm9yZGVyLXQgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzMwIHRyYW5zbGF0ZS14LVsxcHhdIC10cmFuc2xhdGUteS1bMXB4XSI+PC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLVsxcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS13aGl0ZS8xMCB0by10cmFuc3BhcmVudCBjbGlwLWRpYWdvbmFsLWNhcmQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctbmF2eS05NTAgY2xpcC1kaWFnb25hbC1jYXJkIHAtOCBsZzpwLTE2IHJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBCYWNrZ3JvdW5kIHRleHR1cmUgaW5zaWRlIG5lc3RlZCBjb250YWluZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBiZy10ZWNoLWdyaWQgb3BhY2l0eS0zMCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgei0xMCBmbGV4IGZsZXgtY29sIGxnOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1lbmQgbWItMTYgZ2FwLTgiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC14cyBmb250LW1vbm8gdGV4dC1uZXV0cmFsLTYwMCB0cmFja2luZy13aWRlc3QgbWItNCI+WyAwMiBdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtM3hsIGxnOnRleHQtNHhsIGZvbnQtbGlnaHQgdHJhY2tpbmctdGlnaHQgbWF4LXctbGciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFplcm8tdHJ1c3QgYnkgZGVzaWduLjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1uZXV0cmFsLTUwMCI+QWlyLWdhcHBlZCBjYXBhYmlsaXR5Ljwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0ZXh0LXhzIGZvbnQtbW9ubyBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzIwIHRleHQtd2hpdGUgcHgtNCBweS0yIGNsaXAtZGlhZ29uYWwgaG92ZXI6Ymctd2hpdGUvNSB0cmFuc2l0aW9uLWNvbG9ycyB1cHBlcmNhc2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBTZWN1cml0eSBCcmllZgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBHcmlkIE1vZHVsZXMgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMyBnYXAtNCByZWxhdGl2ZSB6LTEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDYXJkIDEgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwIHJlbGF0aXZlIHAtWzFweF0gcm91bmRlZC1sZyBiZy1ncmFkaWVudC10by1iIGZyb20td2hpdGUvMTAgdG8tdHJhbnNwYXJlbnQgb3ZlcmZsb3ctaGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxhc2hsaWdodCBlZmZlY3Qgc2V0dXAgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIGJnLVtjb25pYy1ncmFkaWVudChmcm9tX3ZhcigtLWN1cnNvci1hbmdsZSwwZGVnKSwjZmZmLHRyYW5zcGFyZW50XzYwZGVnLHRyYW5zcGFyZW50XzMwMGRlZywjZmZmKV0gb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMjAgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTMwMCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIGgtZnVsbCBiZy1bIzA1MDcwZl0gcm91bmRlZC1bN3B4XSBwLTggZmxleCBmbGV4LWNvbCBib3JkZXIgYm9yZGVyLXdoaXRlLzUgc2hhZG93LVswcHhfMHB4XzBweF8xcHhfcmdiYSgwLDAsMCwwLjA2KSwwcHhfMTJweF8xMnB4Xy02cHhfcmdiYSgwLDAsMCwwLjUpXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjpzaGllbGQta2V5aG9sZS1saW5lYXIiIGNsYXNzPSJ0ZXh0LTJ4bCB0ZXh0LW5ldXRyYWwtNDAwIG1iLTYiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSBtYi0yIj5WUEMgRGVwbG95bWVudDwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQteHMgZm9udC1saWdodCB0ZXh0LW5ldXRyYWwtNTAwIGxlYWRpbmctcmVsYXhlZCBtdC1hdXRvIj5SdW4gdGhlIGVudGlyZSBMTE0gYW5kIHZlY3RvciBkYXRhYmFzZSB3aXRoaW4geW91ciBvd24gY2xvdWQgYm91bmRhcnkuIE5vIGRhdGEgcGhvbmVzIGhvbWUuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDYXJkIDIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwIHJlbGF0aXZlIHAtWzFweF0gcm91bmRlZC1sZyBiZy1ncmFkaWVudC10by1iIGZyb20td2hpdGUvMTAgdG8tdHJhbnNwYXJlbnQgb3ZlcmZsb3ctaGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGluc2V0LTAgYmctW2NvbmljLWdyYWRpZW50KGZyb21fdmFyKC0tY3Vyc29yLWFuZ2xlLDBkZWcpLCNmZmYsdHJhbnNwYXJlbnRfNjBkZWcsdHJhbnNwYXJlbnRfMzAwZGVnLCNmZmYpXSBvcGFjaXR5LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0yMCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMzAwIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIGgtZnVsbCBiZy1bIzA1MDcwZl0gcm91bmRlZC1bN3B4XSBwLTggZmxleCBmbGV4LWNvbCBib3JkZXIgYm9yZGVyLXdoaXRlLzUgc2hhZG93LVswcHhfMHB4XzBweF8xcHhfcmdiYSgwLDAsMCwwLjA2KSwwcHhfMTJweF8xMnB4Xy02cHhfcmdiYSgwLDAsMCwwLjUpXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJzb2xhcjp1c2Vycy1ncm91cC10d28tcm91bmRlZC1saW5lYXIiIGNsYXNzPSJ0ZXh0LTJ4bCB0ZXh0LW5ldXRyYWwtNDAwIG1iLTYiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSBtYi0yIj5SQkFDIEVuZm9yY2VtZW50PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC14cyBmb250LWxpZ2h0IHRleHQtbmV1dHJhbC01MDAgbGVhZGluZy1yZWxheGVkIG10LWF1dG8iPk1lbW9yeSByZXRyaWV2YWwgc3RyaWN0bHkgcmVzcGVjdHMgc291cmNlLXN5c3RlbSBwZXJtaXNzaW9ucy4gSWYgYSB1c2VyIGNhbid0IHNlZSBpdCBpbiBEcml2ZSwgdGhleSBjYW4ndCBhc2sgT21uaS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhcmQgMyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAgcmVsYXRpdmUgcC1bMXB4XSByb3VuZGVkLWxnIGJnLWdyYWRpZW50LXRvLWIgZnJvbS13aGl0ZS8xMCB0by10cmFuc3BhcmVudCBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBiZy1bY29uaWMtZ3JhZGllbnQoZnJvbV92YXIoLS1jdXJzb3ItYW5nbGUsMGRlZyksI2ZmZix0cmFuc3BhcmVudF82MGRlZyx0cmFuc3BhcmVudF8zMDBkZWcsI2ZmZildIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTIwIHRyYW5zaXRpb24tb3BhY2l0eSBkdXJhdGlvbi0zMDAiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgaC1mdWxsIGJnLVsjMDUwNzBmXSByb3VuZGVkLVs3cHhdIHAtOCBmbGV4IGZsZXgtY29sIGJvcmRlciBib3JkZXItd2hpdGUvNSBzaGFkb3ctWzBweF8wcHhfMHB4XzFweF9yZ2JhKDAsMCwwLDAuMDYpLDBweF8xMnB4XzEycHhfLTZweF9yZ2JhKDAsMCwwLDAuNSldIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmhpc3RvcnktbGluZWFyIiBjbGFzcz0idGV4dC0yeGwgdGV4dC1uZXV0cmFsLTQwMCBtYi02Ij48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gbWItMiI+SW1tdXRhYmxlIEF1ZGl0PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC14cyBmb250LWxpZ2h0IHRleHQtbmV1dHJhbC01MDAgbGVhZGluZy1yZWxheGVkIG10LWF1dG8iPkNyeXB0b2dyYXBoaWNhbGx5IHNpZ25lZCBsb2dzIG9mIGV2ZXJ5IHF1ZXJ5LCBzeW50aGVzaXMsIGFuZCBzb3VyY2UgcmV0cmlldmFsIGZvciBjb21wbGlhbmNlLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgIDwhLS0gRURJVE9SSUFMIFRFQ0g6IFRIRSBDT1JFIC0tPgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJweS0yNCBweC02IGxnOnB4LTE2IHJlbGF0aXZlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHctNCBoLTQgYm9yZGVyLXQgYm9yZGVyLWwgYm9yZGVyLXdoaXRlLzMwIC10cmFuc2xhdGUteC1bMXB4XSAtdHJhbnNsYXRlLXktWzFweF0iPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBib3R0b20tMCByaWdodC0wIHctNCBoLTQgYm9yZGVyLWIgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzMwIHRyYW5zbGF0ZS14LVsxcHhdIHRyYW5zbGF0ZS15LVsxcHhdIj48L2Rpdj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgbGc6ZmxleC1yb3cgZ2FwLTE2IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgb3JkZXItMiBsZzpvcmRlci0xIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXhzIGZvbnQtbW9ubyB0ZXh0LW5ldXRyYWwtNjAwIHRyYWNraW5nLXdpZGVzdCBtYi02Ij5bIDAzIF08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtNHhsIGxnOnRleHQtNXhsIGZvbnQtbGlnaHQgdHJhY2tpbmctdGlnaHQgbWItOCBsZWFkaW5nLVsxLjFdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJldmVhbC1tYXNrIj48c3BhbiBjbGFzcz0icmV2ZWFsLXRleHQiPkJ1aWx0IGZvciB0aGU8L3NwYW4+PC9zcGFuPjxicj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InJldmVhbC1tYXNrIj48c3BhbiBjbGFzcz0icmV2ZWFsLXRleHQiPmNvbXBsZXhpdHkgb2Ygc2NhbGUuPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNiB0ZXh0LXNtIGZvbnQtbGlnaHQgdGV4dC1uZXV0cmFsLTQwMCBtYXgtdy1tZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlVubGlrZSBnZW5lcmljIEFJIHdyYXBwZXJzLCBPbW5pIGlzIGJ1aWx0IG9uIGEgY3VzdG9tIGRldGVybWluaXN0aWMgcmV0cmlldmFsIGVuZ2luZSB0aGF0IHByaW9yaXRpemVzIGZhY3R1YWwgYWNjdXJhY3kgb3ZlciBjb252ZXJzYXRpb25hbCBmbHVlbmN5LjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SXQgZ2VuZXJhdGVzIGNpdGF0aW9ucyBmb3IgZXZlcnkgYXNzZXJ0aW9uLCBsaW5raW5nIGRpcmVjdGx5IHRvIHRoZSBzcGVjaWZpYyBsaW5lcyBvZiBjb2RlLCBTbGFjayB0aHJlYWRzLCBvciBwb2xpY3kgZG9jdW1lbnRzIHRoYXQgaW5mb3JtZWQgaXRzIHJlc3BvbnNlLjwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMTAgcHQtMTAgYm9yZGVyLXQgYm9yZGVyLXdoaXRlLzEwIGdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTgiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC0zeGwgZm9udC1saWdodCB0ZXh0LXdoaXRlIHRyYWNraW5nLXRpZ2h0Ij4xMDBNKzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC0yeHMgZm9udC1tb25vIHVwcGVyY2FzZSB0ZXh0LW5ldXRyYWwtNTAwIG10LTIiPlRva2VucyBDb250ZXh0IFdpbmRvdzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtM3hsIGZvbnQtbGlnaHQgdGV4dC13aGl0ZSB0cmFja2luZy10aWdodCI+MCU8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtMnhzIGZvbnQtbW9ubyB1cHBlcmNhc2UgdGV4dC1uZXV0cmFsLTUwMCBtdC0yIj5IYWxsdWNpbmF0aW9uIEd1YXJhbnRlZSo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgb3JkZXItMSBsZzpvcmRlci0yIHctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBJbWFnZSBmcmFtZWQgYXMgYSB0ZWNobmljYWwgcGxhdGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icC1bMXB4XSBiZy1ncmFkaWVudC10by1ibCBmcm9tLXdoaXRlLzIwIHRvLXRyYW5zcGFyZW50IHJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgLXRvcC0zIC1yaWdodC0zIHRleHQtMnhzIGZvbnQtbW9ubyB0ZXh0LW5ldXRyYWwtNjAwIj5GSUdfMDE8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctYmxhY2sgcC0yIGJvcmRlciBib3JkZXItd2hpdGUvNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYXNzZXRzL3BhZ2UtMDItNzI0MTQyYWEtNDRhNi00OGQzLTljZjMtNzYxZTAwZDA1Yjc4LTE2MDB3LmpwZyIgYWx0PSJGdXR1cmlzdGljIFN0cnVjdHVyZSIgY2xhc3M9InctZnVsbCBhc3BlY3QtWzQvM10gb2JqZWN0LWNvdmVyIGdyYXlzY2FsZSBvcGFjaXR5LTgwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGVjaG5pY2FsIG92ZXJsYXkgbGluZXMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC0xMCAtbGVmdC02IHctMTIgaC1bMXB4XSBiZy13aGl0ZS8yMCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGJvdHRvbS0xMCAtcmlnaHQtNiB3LTEyIGgtWzFweF0gYmctd2hpdGUvMjAiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPCEtLSBGT09URVIgLS0+CiAgICAgICAgPGZvb3RlciBjbGFzcz0iYm9yZGVyLXQgYm9yZGVyLXdoaXRlLzEwIHB5LTggcHgtOCBmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTQgYmctWyMwMTAyMDVdIHJlbGF0aXZlIHotMjAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LTEuNSBoLTEuNSBiZy1uZXV0cmFsLTYwMCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBmb250LW1vbm8gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCB0ZXh0LW5ldXRyYWwtNTAwIj5PbW5pIFN5c3RlbXMgSW5jLiDCqSAyMDI0PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBnYXAtNiB0ZXh0LXhzIGZvbnQtbW9ubyB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IHRleHQtbmV1dHJhbC01MDAiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMiPkRvY3VtZW50YXRpb248L2E+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyI+U3RhdHVzPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMiPlByaXZhY3k8L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9vdGVyPgogICAgPC9tYWluPgoKICAgIDwhLS0gU2NyaXB0cyAtLT4KICAgIDxzY3JpcHQ+CiAgICAgICAgLy8gLS0tIDEuIFRocmVlLmpzIFdlYkdMIEJhY2tncm91bmQgKE9yZ2FuaWMgTW9ycGhpbmcgRW50aXR5IC8gQUkgQ29yZSkgLS0tCiAgICAgICAgY29uc3QgaW5pdFdlYkdMID0gKCkgPT4gewogICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2ViZ2wtY2FudmFzJyk7CiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoeyBjYW52YXMsIGFudGlhbGlhczogdHJ1ZSwgYWxwaGE6IHRydWUgfSk7CiAgICAgICAgICAgIHJlbmRlcmVyLnNldFBpeGVsUmF0aW8oTWF0aC5taW4od2luZG93LmRldmljZVBpeGVsUmF0aW8sIDIpKTsKICAgICAgICAgICAgcmVuZGVyZXIuc2V0U2l6ZSh3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0KTsKCiAgICAgICAgICAgIGNvbnN0IHNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7CiAgICAgICAgICAgIHNjZW5lLmZvZyA9IG5ldyBUSFJFRS5Gb2coJyMwMjA2MTcnLCAzLCAxMCk7CgogICAgICAgICAgICAvLyBTaGlmdCBjYW1lcmEgcmlnaHQgb24gZGVza3RvcCB0byBsZWF2ZSByb29tIGZvciB0ZXh0CiAgICAgICAgICAgIGNvbnN0IGNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSg0NSwgd2luZG93LmlubmVyV2lkdGggLyB3aW5kb3cuaW5uZXJIZWlnaHQsIDAuMSwgMTAwKTsKICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnogPSA1OwogICAgICAgICAgICBjYW1lcmEucG9zaXRpb24ueCA9IHdpbmRvdy5pbm5lcldpZHRoID4gMTAyNCA/IDEuNSA6IDA7CgogICAgICAgICAgICAvLyBHZW9tZXRyeTogSGlnaCBzZWdtZW50IHNwaGVyZSBmb3Igc21vb3RoIG5vaXNlIGRpc3BsYWNlbWVudAogICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5TcGhlcmVHZW9tZXRyeSgxLjUsIDEyOCwgMTI4KTsKCiAgICAgICAgICAgIC8vIFNoYWRlciBNYXRlcmlhbCAoU2ltcGxleCBOb2lzZSArIElyaWRlc2NlbnQgRnJlc25lbCkKICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoewogICAgICAgICAgICAgICAgdW5pZm9ybXM6IHsKICAgICAgICAgICAgICAgICAgICB1VGltZTogeyB2YWx1ZTogMCB9LAogICAgICAgICAgICAgICAgICAgIHVNb3VzZTogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjIoMCwgMCkgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlcjogYAogICAgICAgICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdVRpbWU7CiAgICAgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZVdjsKICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzMgdlBvc2l0aW9uOwoKICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbGV4IDNEIE5vaXNlIGZ1bmN0aW9uIChjb21wYWN0KQogICAgICAgICAgICAgICAgICAgIHZlYzQgcGVybXV0ZSh2ZWM0IHgpe3JldHVybiBtb2QoKCh4KjM0LjApKzEuMCkqeCwgMjg5LjApO30KICAgICAgICAgICAgICAgICAgICB2ZWM0IHRheWxvckludlNxcnQodmVjNCByKXtyZXR1cm4gMS43OTI4NDI5MTQwMDE1OSAtIDAuODUzNzM0NzIwOTUzMTQgKiByO30KICAgICAgICAgICAgICAgICAgICBmbG9hdCBzbm9pc2UodmVjMyB2KXsgCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlYzIgIEMgPSB2ZWMyKDEuMC82LjAsIDEuMC8zLjApIDsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjNCAgRCA9IHZlYzQoMC4wLCAwLjUsIDEuMCwgMi4wKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBpICA9IGZsb29yKHYgKyBkb3QodiwgQy55eXkpICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eCkgOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIGcgPSBzdGVwKHgwLnl6eCwgeDAueHl6KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBsID0gMS4wIC0gZzsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBpMSA9IG1pbiggZy54eXosIGwuenh5ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgaTIgPSBtYXgoIGcueHl6LCBsLnp4eSApOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIHgxID0geDAgLSBpMSArIDEuMCAqIEMueHh4OwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIHgyID0geDAgLSBpMiArIDIuMCAqIEMueHh4OwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIHgzID0geDAgLSAxLjAgKyAzLjAgKiBDLnh4eDsKICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1vZChpLCAyODkuMCApOyAKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBwID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSggCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkueiArIHZlYzQoMC4wLCBpMS56LCBpMi56LCAxLjAgKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGkueSArIHZlYzQoMC4wLCBpMS55LCBpMi55LCAxLjAgKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpLnggKyB2ZWM0KDAuMCwgaTEueCwgaTIueCwgMS4wICkpOwogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBuXyA9IDEuMC83LjA7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgIG5zID0gbl8gKiBELnd5eiAtIEQueHp4OwogICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IGogPSBwIC0gNDkuMCAqIGZsb29yKHAgKiBucy56ICpucy56KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCB4XyA9IGZsb29yKGogKiBucy56KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCB5XyA9IGZsb29yKGogLSA3LjAgKiB4XyApOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IHggPSB4XyAqbnMueCArIG5zLnl5eXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzQgeSA9IHlfICpucy54ICsgbnMueXl5eTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBoID0gMS4wIC0gYWJzKHgpIC0gYWJzKHkpOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IGIwID0gdmVjNCggeC54eSwgeS54eSApOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IGIxID0gdmVjNCggeC56dywgeS56dyApOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IHMwID0gZmxvb3IoYjApKjIuMCArIDEuMDsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBzMSA9IGZsb29yKGIxKSoyLjAgKyAxLjA7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzQgc2ggPSAtc3RlcChoLCB2ZWM0KDAuMCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWM0IGEwID0gYjAueHp5dyArIHMwLnh6eXcqc2gueHh5eSA7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzQgYTEgPSBiMS54enl3ICsgczEueHp5dypzaC56end3IDsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBwMCA9IHZlYzMoYTAueHksaC54KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBwMSA9IHZlYzMoYTAuencsaC55KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBwMiA9IHZlYzMoYTEueHksaC56KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBwMyA9IHZlYzMoYTEuencsaC53KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBub3JtID0gdGF5bG9ySW52U3FydCh2ZWM0KGRvdChwMCxwMCksIGRvdChwMSxwMSksIGRvdChwMiwgcDIpLCBkb3QocDMscDMpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHAwICo9IG5vcm0ueDsgcDEgKj0gbm9ybS55OyBwMiAqPSBub3JtLno7IHAzICo9IG5vcm0udzsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBtID0gbWF4KDAuNiAtIHZlYzQoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSwgZG90KHgzLHgzKSksIDAuMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtICogbTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyLjAgKiBkb3QoIG0qbSwgdmVjNCggZG90KHAwLHgwKSwgZG90KHAxLHgxKSwgZG90KHAyLHgyKSwgZG90KHAzLHgzKSApICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2b2lkIG1haW4oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZVdiA9IHV2OwogICAgICAgICAgICAgICAgICAgICAgICB2Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNwbGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbm9pc2UgPSBzbm9pc2UodmVjMyhwb3NpdGlvbi54ICogMS4yICsgdVRpbWUgKiAwLjE1LCBwb3NpdGlvbi55ICogMS4yLCBwb3NpdGlvbi56ICogMS4yKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgbmV3UG9zaXRpb24gPSBwb3NpdGlvbiArIG5vcm1hbCAqIChub2lzZSAqIDAuMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB2UG9zaXRpb24gPSAobW9kZWxWaWV3TWF0cml4ICogdmVjNChuZXdQb3NpdGlvbiwgMS4wKSkueHl6OwogICAgICAgICAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KG5ld1Bvc2l0aW9uLCAxLjApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGAsCiAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogYAogICAgICAgICAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7CiAgICAgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiAgICAgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMzIHZQb3NpdGlvbjsKCiAgICAgICAgICAgICAgICAgICAgdm9pZCBtYWluKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgRnJlc25lbAogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoLXZQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGZyZXNuZWwgPSBwb3coMS4wIC0gY2xhbXAoZG90KHZpZXdEaXIsIHZOb3JtYWwpLCAwLjAsIDEuMCksIDIuNSk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAvLyBJcmlkZXNjZW50IFBhbGV0dGUgKERhcmsgY29yZSwgRW1lcmFsZC9CbHVlIGVkZ2VzKQogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIGNvcmVDb2xvciA9IHZlYzMoMC4wMSwgMC4wMiwgMC4wNSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgZWRnZUNvbG9yID0gbWl4KHZlYzMoMC4xLCAwLjUsIDAuOCksIHZlYzMoMC4yLCAwLjksIDAuNiksIHZVdi55KTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgZmluYWxDb2xvciA9IG1peChjb3JlQ29sb3IsIGVkZ2VDb2xvciwgZnJlc25lbCAqIDEuNSk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZpbmFsQ29sb3IsIDAuOCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYCwKICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLAogICAgICAgICAgICAgICAgd2lyZWZyYW1lOiBmYWxzZQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGNvbnN0IG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpOwogICAgICAgICAgICBzY2VuZS5hZGQobWVzaCk7CgogICAgICAgICAgICAvLyBJbnRlcmFjdGlvbiBzdGF0ZQogICAgICAgICAgICBsZXQgbW91c2VYID0gMDsKICAgICAgICAgICAgbGV0IG1vdXNlWSA9IDA7CiAgICAgICAgICAgIGxldCB0YXJnZXRYID0gMDsKICAgICAgICAgICAgbGV0IHRhcmdldFkgPSAwOwoKICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgKGUpID0+IHsKICAgICAgICAgICAgICAgIG1vdXNlWCA9IChlLmNsaWVudFggLyB3aW5kb3cuaW5uZXJXaWR0aCkgKiAyIC0gMTsKICAgICAgICAgICAgICAgIG1vdXNlWSA9IC0oZS5jbGllbnRZIC8gd2luZG93LmlubmVySGVpZ2h0KSAqIDIgKyAxOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGNvbnN0IGNsb2NrID0gbmV3IFRIUkVFLkNsb2NrKCk7CgogICAgICAgICAgICBjb25zdCB0aWNrID0gKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSBjbG9jay5nZXRFbGFwc2VkVGltZSgpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgU2hhZGVyIFRpbWUKICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuaWZvcm1zLnVUaW1lLnZhbHVlID0gZWxhcHNlZFRpbWU7CgogICAgICAgICAgICAgICAgLy8gQnJlYXRoaW5nIFkgb3NjaWxsYXRpb24KICAgICAgICAgICAgICAgIG1lc2gucG9zaXRpb24ueSA9IE1hdGguc2luKGVsYXBzZWRUaW1lICogMC41KSAqIDAuMTsKCiAgICAgICAgICAgICAgICAvLyBNb3VzZSBwYXJhbGxheCBzbW9vdGhpbmcKICAgICAgICAgICAgICAgIHRhcmdldFggPSBtb3VzZVggKiAwLjI7CiAgICAgICAgICAgICAgICB0YXJnZXRZID0gbW91c2VZICogMC4yOwogICAgICAgICAgICAgICAgbWVzaC5yb3RhdGlvbi55ICs9IDAuMDUgKiAodGFyZ2V0WCAtIG1lc2gucm90YXRpb24ueSk7CiAgICAgICAgICAgICAgICBtZXNoLnJvdGF0aW9uLnggKz0gMC4wNSAqICh0YXJnZXRZIC0gbWVzaC5yb3RhdGlvbi54KTsKCiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7CiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdGljaygpOwoKICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHsKICAgICAgICAgICAgICAgIGNhbWVyYS5hc3BlY3QgPSB3aW5kb3cuaW5uZXJXaWR0aCAvIHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi54ID0gd2luZG93LmlubmVyV2lkdGggPiAxMDI0ID8gMS41IDogMDsKICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRTaXplKHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQpOwogICAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICAvLyAtLS0gMi4gR1NBUCBBbmltYXRpb25zICYgSW50ZXJhY3Rpb25zIC0tLQogICAgICAgIGNvbnN0IGluaXRHU0FQID0gKCkgPT4gewogICAgICAgICAgICBnc2FwLnJlZ2lzdGVyUGx1Z2luKFNjcm9sbFRyaWdnZXIpOwoKICAgICAgICAgICAgLy8gTWFza2VkIFdvcmQgUmV2ZWFscwogICAgICAgICAgICBjb25zdCByZXZlYWxUZXh0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yZXZlYWwtdGV4dCcpOwogICAgICAgICAgICByZXZlYWxUZXh0cy5mb3JFYWNoKCh0ZXh0KSA9PiB7CiAgICAgICAgICAgICAgICBnc2FwLnRvKHRleHQsIHsKICAgICAgICAgICAgICAgICAgICB5OiAiMCUiLAogICAgICAgICAgICAgICAgICAgIGVhc2U6ICJwb3dlcjQub3V0IiwKICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMS4yLAogICAgICAgICAgICAgICAgICAgIHNjcm9sbFRyaWdnZXI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogdGV4dC5wYXJlbnRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogInRvcCA5MCUiLAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIEZsb2F0IEFuaW1hdGlvbiBmb3IgZWxlbWVudHMKICAgICAgICAgICAgZ3NhcC50bygiLmdzYXAtZmxvYXQiLCB7CiAgICAgICAgICAgICAgICB5OiAtMTUsCiAgICAgICAgICAgICAgICByb3RhdGlvblg6ICIrPTIiLAogICAgICAgICAgICAgICAgcm90YXRpb25ZOiAiKz0yIiwKICAgICAgICAgICAgICAgIGR1cmF0aW9uOiA0LAogICAgICAgICAgICAgICAgcmVwZWF0OiAtMSwKICAgICAgICAgICAgICAgIHlveW86IHRydWUsCiAgICAgICAgICAgICAgICBlYXNlOiAic2luZS5pbk91dCIKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBMb2dvIE1hcnF1ZWUgTG9vcAogICAgICAgICAgICBnc2FwLnRvKCIubWFycXVlZS1jb250YWluZXIiLCB7CiAgICAgICAgICAgICAgICB4UGVyY2VudDogLTUwLAogICAgICAgICAgICAgICAgZWFzZTogIm5vbmUiLAogICAgICAgICAgICAgICAgZHVyYXRpb246IDIwLAogICAgICAgICAgICAgICAgcmVwZWF0OiAtMQogICAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICAvLyAtLS0gMy4gRHluYW1pYyBGbGFzaGxpZ2h0IEVmZmVjdCAtLS0KICAgICAgICBjb25zdCBpbml0Rmxhc2hsaWdodCA9ICgpID0+IHsKICAgICAgICAgICAgY29uc3QgY2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZ3JvdXAnKTsKICAgICAgICAgICAgY2FyZHMuZm9yRWFjaChjYXJkID0+IHsKICAgICAgICAgICAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgKGUpID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gY2FyZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gZS5jbGllbnRYIC0gcmVjdC5sZWZ0OwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBlLmNsaWVudFkgLSByZWN0LnRvcDsKICAgICAgICAgICAgICAgICAgICBjb25zdCBjeCA9IHJlY3Qud2lkdGggLyAyOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGN5ID0gcmVjdC5oZWlnaHQgLyAyOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBhbmdsZQogICAgICAgICAgICAgICAgICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoeSAtIGN5LCB4IC0gY3gpICogKDE4MCAvIE1hdGguUEkpICsgOTA7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ2xlIDwgMCkgYW5nbGUgKz0gMzYwOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNhcmQuc3R5bGUuc2V0UHJvcGVydHkoJy0tY3Vyc29yLWFuZ2xlJywgYCR7YW5nbGV9ZGVnYCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gewogICAgICAgICAgICBpbml0V2ViR0woKTsKICAgICAgICAgICAgaW5pdEdTQVAoKTsKICAgICAgICAgICAgaW5pdEZsYXNobGlnaHQoKTsKICAgICAgICB9KTsKICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K";
    const assetFiles = ["assets/page-01-e534354d-c5f2-4399-a1d9-2f50338e8c47-1600w.jpg","assets/page-02-724142aa-44a6-48d3-9cf3-761e00d05b78-1600w.jpg"];
    const runtimeFiles = ["../../../../assets/runtime/runtime-027051effa47-gsap-min.js","../../../../assets/runtime/runtime-163ebd087cfc-iconify-icon-min.js","../../../../assets/runtime/runtime-25023b521d77-three-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/book-serif-index · 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.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download book-serif-index.zip