Generated banner for Editorial Tech
Generated logo for Editorial Tech

Editorial Tech

Meng ToCommunityCreated by Meng To

  • Skill
  • Guidelines
  • Design and creative
  • MIT
  • Medium risk

From the author

Blend editorial magazine composition with precision product-tech detailing using asymmetrical grids, cinematic media bands, mono utility labels, and restrained accent color.
— the description by Meng To

AutoGineer summary

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

Editorial Tech provides a structured approach to UI design that merges the narrative flow of editorial layouts with the engineered precision of high-end technology products. It emphasizes asymmetrical grids, cinematic media integration, and a restrained color palette to create a premium, narrative-driven user experience. The system balances expressive typography with utility-focused labels and technical markers to ensure the interface feels both sophisticated and functional.

What it does

  • Defines a visual language using asymmetrical grids and deliberate negative space.
  • Provides patterns for cinematic media bands and immersive visual slices.
  • Establishes typography rules pairing expressive headlines with mono utility text.
  • Guides the use of technical markers, grid traces, and thin strokes for an engineered aesthetic.
  • Sets standards for restrained accent color usage to maintain a premium tone.
  • Offers motion guidelines focused on intentional, technical transitions.

When to use it

  • When designing interfaces that require a balance between narrative storytelling and technical product utility.
  • When moving away from generic SaaS layouts toward a more bespoke, editorial-inspired aesthetic.
  • When building high-end product documentation or landing pages that demand a premium feel.
  • When a project needs a sophisticated visual system that avoids over-decorated or playful UI elements.

Advantages

  • Creates a distinct, premium visual identity that stands out from standard SaaS templates.
  • Improves narrative flow through intentional use of asymmetrical composition.
  • Maintains high readability by balancing expressive headlines with clear, functional utility text.
  • Ensures a cohesive look across complex layouts through strict grid and structural rules.

Usage examples

“Apply the Editorial Tech style to a new product landing page.”
The agent generates a layout featuring an asymmetrical hero section with a large headline, a cinematic media strip, and a clean, mono-labeled feature list.
“How should I structure a technical documentation page using the Editorial Tech guidelines?”
The agent suggests a multi-column layout with chapter markers, compact metadata clusters, and thin-framed panels to reinforce the grid.

Install

  1. Download the skill as a ZIP:

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

    mkdir -p .agents/skills && unzip editorial-tech.zip -d .agents/skills

Documentation by Meng To

Editorial Tech Skill

Use When

  • Blend editorial magazine composition with precision product-tech detailing using asymmetrical grids, cinematic media bands, mono utility labels, and restrained accent color.

Workflow

Scope

  • Apply this as a full design-system style direction across layout, typography, surfaces, media treatment, navigation, and motion.

  • Use it when the design should feel like a premium editorial spread merged with a high-end technology product interface.

  • This is not generic corporate SaaS and not pure magazine minimalism; it should sit in the middle with narrative composition plus precise technical detailing.

Visual target

  • Build asymmetrical editorial compositions with strong column structure, deliberate negative space, and clear spatial rhythm.

  • Pair large expressive headline moments with quieter utility text, mono labels, small metadata, and measured supporting copy.

  • Use cinematic media bands, panoramic image strips, inset photography panels, or immersive visual slices to create narrative flow across the layout.

  • Add fine divider lines, grid traces, subtle borders, section rules, and technical markers so the page feels engineered rather than soft or lifestyle-first.

  • Keep the palette restrained: mostly dark neutrals or controlled light neutrals, with one active accent color derived from the brand or design system.

Implementation guidance

  • Favor multi-column layouts, offset alignment, and editorial cropping instead of centered generic SaaS hero blocks.

  • Use one display-oriented type treatment for hero or section headlines, then support it with clean sans-serif or mono utility text for labels, steps, timestamps, and UI annotations.

  • Surfaces should feel premium and quiet: dark panels, muted fills, thin strokes, gradient-border shells, or lightly luminous overlays instead of loud glassmorphism.

  • Introduce cinematic horizontal bands or framed media regions that can cut across the grid and overlap adjacent columns in a controlled way.

  • Add subtle motion such as masked text reveals, calm parallax, slow media drift, or hover-state line brightening. Motion should feel intentional and technical, never playful or bouncy.

  • Accent color use should be selective: active states, numeric highlights, current steps, progress indicators, focal separators, or key call-to-action surfaces.

  • Navigation: sparse top bars with wide spacing, muted links, and a precise central mark or framed logo treatment.

  • Hero sections: oversized editorial headline on one side, compact supporting copy on another, then a cinematic band or inset media strip crossing the composition.

  • Information modules: step lists, chapter markers, mono counters, timeline ticks, bordered pills, and compact metadata clusters.

  • Containers: thin-framed panels, controlled image crops, subtle glow accents, and structural lines that reinforce the grid.

  • CTAs: simple but premium controls with crisp geometry, dark/light contrast, and restrained accent emphasis rather than oversized marketing buttons.

Tuning knobs

  • Editorial intensity: increase or reduce asymmetry and overlap depending on how dramatic the composition should feel.

  • Technical density: add or remove rules, markers, mono labels, and interface metadata to control how product-like the page becomes.

  • Accent restraint: keep color usage sparse so the system stays premium and not over-styled.

  • Media prominence: tune how much cinematic imagery or visual bands dominate compared with pure typography.

  • Contrast: preserve strong readability even when using moody dark surfaces and layered image treatments.

Avoid

  • Generic centered SaaS layouts with interchangeable cards and stock gradients.

  • Overdecorated sci-fi chrome, excessive neon, or noisy HUD overlays.

  • Bright multi-color palettes that break the restrained editorial tone.

  • Treating it as plain magazine design without any technical precision cues.

  • Using the accent color everywhere instead of letting it punctuate the composition.

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+IHsKICAgIGZvciAoY29uc3Qgb2JqZWN0VXJsIG9mIG9iamVjdFVybHMpIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTsKICB9LCB7IG9uY2U6IHRydWUgfSk7Cn0pKCk7Cjwvc2NyaXB0PgoKPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPk5FVVMgfCBFbnRlcnByaXNlIEJyYW5kIEFyY2hpdGVjdHVyZTwvdGl0bGU+CiAgICAKICAgIDxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI+CiAgICA8bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Imh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20iIGNyb3Nzb3JpZ2luPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1JbnRlcjp3Z2h0QDMwMDs0MDA7NTAwJmZhbWlseT1Sb2JvdG8rTW9ubzp3Z2h0QDMwMDs0MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgogICAgCiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS1jY2M4ODk0YjM0MTgtcnVudGltZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS0xNjNlYmQwODdjZmMtaWNvbmlmeS1pY29uLW1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vYXNzZXRzL3J1bnRpbWUvcnVudGltZS0wMjcwNTFlZmZhNDctZ3NhcC1taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Fzc2V0cy9ydW50aW1lL3J1bnRpbWUtNjg5Y2E4ZGRhNDRjLXNjcm9sbHRyaWdnZXItbWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9hc3NldHMvcnVudGltZS9ydW50aW1lLTI1MDIzYjUyMWQ3Ny10aHJlZS1taW4uanMiPjwvc2NyaXB0PgoKICAgIDxzdHlsZT4KICAgICAgICAvKiBIaWRlIHNjcm9sbGJhciBmb3IgYSBjbGVhbmVyIHRlY2huaWNhbCBsb29rIHdoaWxlIGtlZXBpbmcgc2Nyb2xsIGZ1bmN0aW9uYWxpdHkgKi8KICAgICAgICAubm8tc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7IGRpc3BsYXk6IG5vbmU7IH0KICAgICAgICAubm8tc2Nyb2xsYmFyIHsgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyBzY3JvbGxiYXItd2lkdGg6IG5vbmU7IH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHkgY2xhc3M9ImJnLVsjMDMwMzA1XSB0ZXh0LXdoaXRlLzkwIGFudGlhbGlhc2VkIG92ZXJmbG93LWhpZGRlbiBzZWxlY3Rpb246YmctWyMwMEYwRkZdLzMwIHNlbGVjdGlvbjp0ZXh0LXdoaXRlIiBzdHlsZT0iZm9udC1mYW1pbHk6ICdJbnRlcicsIHNhbnMtc2VyaWY7Ij4KCiAgICA8IS0tIEJhY2tncm91bmQgTGF5ZXIgMDogV2ViR0wgU3BhY2UvQmVhbSBTaGFkZXIgLS0+CiAgICA8Y2FudmFzIGlkPSJiZy1jYW52YXMiIGNsYXNzPSJmaXhlZCBpbnNldC0wIHotMCBwb2ludGVyLWV2ZW50cy1ub25lIG9wYWNpdHktNDAiPjwvY2FudmFzPgoKICAgIDwhLS0gQmFja2dyb3VuZCBMYXllciAxOiBEaXRoZXIgVGV4dHVyZSAtLT4KICAgIDxjYW52YXMgaWQ9ImRpdGhlci1jYW52YXMiIGNsYXNzPSJmaXhlZCBpbnNldC0wIHotMCBwb2ludGVyLWV2ZW50cy1ub25lIG9wYWNpdHktWzAuMl0iPjwvY2FudmFzPgoKICAgIDwhLS0gQmFja2dyb3VuZCBMYXllciAyOiBTVkcgTm9pc2UgRE5BIC0tPgogICAgPGRpdiBjbGFzcz0iZml4ZWQgaW5zZXQtMCB6LTAgcG9pbnRlci1ldmVudHMtbm9uZSBtaXgtYmxlbmQtb3ZlcmxheSBvcGFjaXR5LVswLjA4XSIgc3R5bGU9ImJhY2tncm91bmQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2aWV3Qm94PSUyMjAgMCAyMDAgMjAwJTIyIHhtbG5zPSUyMmh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJTIyJTNFJTNDZmlsdGVyIGlkPSUyMm5vaXNlRmlsdGVyJTIyJTNFJTNDZmVUdXJidWxlbmNlIHR5cGU9JTIyZnJhY3RhbE5vaXNlJTIyIGJhc2VGcmVxdWVuY3k9JTIyMC44JTIyIG51bU9jdGF2ZXM9JTIyMyUyMiBzdGl0Y2hUaWxlcz0lMjJzdGl0Y2glMjIvJTNFJTNDL2ZpbHRlciUzRSUzQ3JlY3Qgd2lkdGg9JTIyMTAwJTI1JTIyIGhlaWdodD0lMjIxMDAlMjUlMjIgZmlsdGVyPSUyMnVybCglMjNub2lzZUZpbHRlciklMjIvJTNFJTNDL3N2ZyUzRScpOyI+PC9kaXY+CgogICAgPCEtLSBNYWluIEFwcGxpY2F0aW9uIEZyYW1lIC0tPgogICAgPG1haW4gY2xhc3M9ImZsZXggaC1zY3JlZW4gdy1mdWxsIHJlbGF0aXZlIHotMTAiPgoKICAgICAgICA8IS0tIFByaW1hcnkgQ29udGVudCBBcmVhIC0tPgogICAgICAgIDxzZWN0aW9uIGNsYXNzPSJmbGV4LTEgcC04IG1kOnAtMTYgbGc6cC0yNCBib3JkZXItciBib3JkZXItd2hpdGUvMTAgb3ZlcmZsb3cteS1hdXRvIG5vLXNjcm9sbGJhciByZWxhdGl2ZSBmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gRGlhZ29uYWwgVGFjdGljYWwgR3JpZCAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIHotMCIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudCAxNXB4LCByZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIDE1cHgsIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikgMTZweCk7Ij48L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gQ29udGVudCBXcmFwcGVyIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB6LTEwIG1heC13LTV4bCBteC1hdXRvIHctZnVsbCBwYi0zMiI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwhLS0gRWRpdG9yaWFsIEhlYWRlciAtLT4KICAgICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0IG1iLTI0IHctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBnYXAtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctOCBoLTggYm9yZGVyIGJvcmRlci13aGl0ZS8yMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjay81MCByZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgdy0xLjUgaC0xLjUgYm9yZGVyLXQgYm9yZGVyLWwgYm9yZGVyLVsjMDBGMEZGXSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBib3R0b20tMCByaWdodC0wIHctMS41IGgtMS41IGJvcmRlci1iIGJvcmRlci1yIGJvcmRlci1bIzAwRjBGRl0iPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy0yIGgtMiBiZy1bIzAwRjBGRl0gc2hhZG93LVswXzBfOHB4XyMwMEYwRkZdIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LVsxMnB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC13aGl0ZS80MCBtdC00IiBzdHlsZT0iZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTsiPk5FVVMgLy8gMjAyNjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8bmF2IGNsYXNzPSJoaWRkZW4gbWQ6ZmxleCBnYXAtMTIgdGV4dC1bMTJweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE1ZW1dIHRleHQtd2hpdGUvNDAiIHN0eWxlPSJmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlOyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LVsjMDBGMEZGXSB0cmFuc2l0aW9uLWNvbG9ycyI+TWFuaWZlc3RvPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iaG92ZXI6dGV4dC1bIzAwRjBGRl0gdHJhbnNpdGlvbi1jb2xvcnMiPlZpc3VhbCBBc3NldHM8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJob3Zlcjp0ZXh0LVsjMDBGMEZGXSB0cmFuc2l0aW9uLWNvbG9ycyI+Q29tcG9uZW50czwvYT4KICAgICAgICAgICAgICAgICAgICA8L25hdj4KICAgICAgICAgICAgICAgIDwvaGVhZGVyPgoKICAgICAgICAgICAgICAgIDwhLS0gSGVybyBUeXBvZ3JhcGh5IC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItMjQgZmxleCBmbGV4LWNvbCBsZzpmbGV4LXJvdyBnYXAtMTIgbGc6Z2FwLTI0IGl0ZW1zLWVuZCI+CiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPSJ0ZXh0LVs2NHB4XSBtZDp0ZXh0LVs5NnB4XSBmb250LWxpZ2h0IHRyYWNraW5nLVstMC4wNWVtXSBsZWFkaW5nLVswLjldIHRleHQtd2hpdGUgcmV2ZWFsLXRleHQgZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtPGJyPkFyY2hpdGVjdHVyZQogICAgICAgICAgICAgICAgICAgIDwvaDE+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy1mdWxsIGxnOnctMS8zIGZsZXggZmxleC1jb2wgZ2FwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSB0ZXh0LXdoaXRlLzYwIGZvbnQtbGlnaHQgbGVhZGluZy1yZWxheGVkIHJldmVhbC1mYWRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVzdGFibGlzaGluZyBhIHRlY2huaWNhbCBiYXNlbGluZSBmb3IgY3J5cHRvZ3JhcGhpYyBlbnZpcm9ubWVudHMuIFRoZSBORVVTIHZpc3VhbCBzeXN0ZW0gbWVyZ2VzIGVuZ2luZWVyZWQgcHJlY2lzaW9uIHdpdGggaW1tZXJzaXZlIGF0bW9zcGhlcmljIGRlcHRoLgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQnV0dG9uIEFuYXRvbXkgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Imdyb3VwIGZsZXggaXRlbXMtc3RyZXRjaCB3LW1heCByZXZlYWwtZmFkZSBjdXJzb3ItcG9pbnRlciByZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEdyYWRpZW50IEJvcmRlciBXcmFwcGVyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgaW5zZXQtMCBwLVsxcHhdIGJnLWdyYWRpZW50LXRvLXIgZnJvbS13aGl0ZS8zMCB0by13aGl0ZS81IHotMCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHRleHQtYmxhY2sgcHgtNiBweS0zIGZvbnQtbWVkaXVtIHRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmUgei0xMCB0cmFja2luZy10aWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5JVElBTElaRSBBU1NFVFMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctWyMwQTBBMEFdIHB4LTUgcHktMyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbCBib3JkZXItd2hpdGUvMTAgcmVsYXRpdmUgei0xMCB0cmFuc2l0aW9uLWNvbG9ycyBncm91cC1ob3ZlcjpiZy1bIzExMV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6YXJyb3ctcmlnaHQtbGluZWFyIiBzdHlsZT0iZm9udC1zaXplOiAxLjJyZW07IiBjbGFzcz0idGV4dC1bIzAwRjBGRl0gZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMSB0cmFuc2l0aW9uLXRyYW5zZm9ybSI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIFRlY2huaWNhbCBXaXJlZnJhbWUgSW5mbyBMYXlvdXQgKEdsb2JlIENlbnRyYWwpIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUgdy1mdWxsIGgtWzYwMHB4XSBib3JkZXIgYm9yZGVyLXdoaXRlLzEwIGJnLWJsYWNrLzQwIG1iLTI0IHJldmVhbC1mYWRlIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBDb3JuZXIgQnJhY2tldHMgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHctNCBoLTQgYm9yZGVyLXQgYm9yZGVyLWwgYm9yZGVyLXdoaXRlLzMwIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIHctNCBoLTQgYm9yZGVyLXQgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzMwIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgdy00IGgtNCBib3JkZXItYiBib3JkZXItbCBib3JkZXItd2hpdGUvMzAiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGJvdHRvbS0wIHJpZ2h0LTAgdy00IGgtNCBib3JkZXItYiBib3JkZXItciBib3JkZXItd2hpdGUvMzAiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIFdlYkdMIENvbnRhaW5lciAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJnbG9iZS1jb250YWluZXIiIGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMTAgY3Vyc29yLWNyb3NzaGFpciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gVGVjaG5pY2FsIERpYWdub3N0aWMgT3ZlcmxheSBVSSAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtOCBsZWZ0LTggei0yMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LVsxMnB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC1bIzAwRjBGRl0gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiIHN0eWxlPSJmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LTEuNSBoLTEuNSBiZy1bIzAwRjBGRl0gcm91bmRlZC1mdWxsIGFuaW1hdGUtcHVsc2UiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZSBEaWFnbm9zdGljcwogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvYXRpbmcgTGFiZWwgMSAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSB0b3AtWzIwJV0gcmlnaHQtWzEwJV0gei0yMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBoaWRkZW4gbWQ6ZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMTYgaC1bMXB4XSBiZy13aGl0ZS8yMCBib3JkZXItdCBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8zMCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWJsYWNrLzgwIGJhY2tkcm9wLWJsdXItc20gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBwLTMgZmxleCBmbGV4LWNvbCBnYXAtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1bMTBweF0gdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IiBzdHlsZT0iZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTsiPk9yYml0YWwgUmluZzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlIGZvbnQtbWVkaXVtIHRyYWNraW5nLXRpZ2h0Ij5Db25zZW5zdXMgTGF5ZXIgQWN0aXZlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBGbG9hdGluZyBMYWJlbCAyIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIGJvdHRvbS1bMjAlXSBsZWZ0LVsxMCVdIHotMjAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgZmxleC1yb3ctcmV2ZXJzZSBoaWRkZW4gbWQ6ZmxleCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMjQgaC1bMXB4XSBiZy13aGl0ZS8yMCBib3JkZXItdCBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8zMCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWJsYWNrLzgwIGJhY2tkcm9wLWJsdXItc20gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBwLTMgZmxleCBmbGV4LWNvbCBnYXAtMSBpdGVtcy1lbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCIgc3R5bGU9ImZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7Ij5EZW5zZSBDb3JlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtWzEycHhdIHRleHQtd2hpdGUgZm9udC1tZWRpdW0gdHJhY2tpbmctdGlnaHQiPkltbXV0YWJsZSBTdGF0ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gR3JpZCBvdmVybGF5IGluIGNvbnRhaW5lciAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSBpbnNldC0wIHotMCBwb2ludGVyLWV2ZW50cy1ub25lIG9wYWNpdHktMjAiIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAxcHgsIHRyYW5zcGFyZW50IDFweCksIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAxcHgsIHRyYW5zcGFyZW50IDFweCk7IGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4OyI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIEVkaXRvcmlhbCBNZWRpYSBCYW5kIChBdXJhIEFic3RyYWN0KSAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTEyIGdhcC04IHJldmVhbC1mYWRlIGl0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZDpjb2wtc3Bhbi00IGZsZXggZmxleC1jb2wgZ2FwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQteGwgZm9udC1saWdodCB0ZXh0LXdoaXRlIHRyYWNraW5nLXRpZ2h0IGJvcmRlci1iIGJvcmRlci13aGl0ZS8xMCBwYi00Ij5DaW5lbWF0aWMgVG9wb2xvZ2llczwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LVsxMnB4XSBsZWFkaW5nLXJlbGF4ZWQgdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDVlbV0iIHN0eWxlPSJmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXN1YWxzIGxldmVyYWdlIGRlZXAgc2hhZG93LCBzdHJ1Y3R1cmVkIGdyaWQgbm9pc2UsIGFuZCBpc29sYXRlZCBuZW9uIHZlY3RvcnMgdG8gZGVub3RlIG9wZXJhdGlvbmFsIGNhcGFjaXR5LgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWQ6Y29sLXNwYW4tOCBwLVsxcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS13aGl0ZS8yMCB0by10cmFuc3BhcmVudCB3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSB3LWZ1bGwgYXNwZWN0LVsxNi85XSBiZy1bIzBBMEEwQV0gb3ZlcmZsb3ctaGlkZGVuIGdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0wMS1mYTUxOTAyYi1jMmE0LTRjMzMtYTk2ZS1hOGYxZWY2N2VkYzYtMTYwMHcuanBnIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJBYnN0cmFjdCBMaWdodCBXYXZlIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIG9wYWNpdHktNzAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6c2NhbGUtWzEuMDJdIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTEwMDAgbWl4LWJsZW5kLXNjcmVlbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIHRvcC00IGxlZnQtNCBib3JkZXIgYm9yZGVyLXdoaXRlLzIwIGJnLWJsYWNrLzYwIGJhY2tkcm9wLWJsdXItbWQgcHgtMiBweS0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249InNvbGFyOmNhbWVyYS1taW5pbWFsaXN0aWMtbGluZWFyIiBjbGFzcz0idGV4dC13aGl0ZS82MCI+PC9pY29uaWZ5LWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNjAgdHJhY2tpbmctd2lkZXN0IHVwcGVyY2FzZSIgc3R5bGU9ImZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7Ij5Bc3NldF9JRDogRkE1MTk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgPCEtLSBGaXhlZCBXaWR0aCBTaWRlYmFyIC0tPgogICAgICAgIDxhc2lkZSBjbGFzcz0idy1bMzIwcHhdIGxnOnctWzQwMHB4XSBmbGV4LXNocmluay0wIGJhY2tkcm9wLWJsdXItbWQgYmctYmxhY2svMTAgYm9yZGVyLWwgYm9yZGVyLXdoaXRlLzEwIGgtZnVsbCBvdmVyZmxvdy15LWF1dG8gbm8tc2Nyb2xsYmFyIHJlbGF0aXZlIGhpZGRlbiBtZDpmbGV4IGZsZXgtY29sIHotMjAiPgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSBTaWRlIEhlYWRlciAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC04IGJvcmRlci1iIGJvcmRlci13aGl0ZS8xMCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgYmctWyMwQTBBMEFdLzUwIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LVsxMnB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMTVlbV0gdGV4dC13aGl0ZS82MCIgc3R5bGU9ImZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7Ij5UZWxlbWV0cnk8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGdhcC0xIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LTEuNSBoLTMgYmctd2hpdGUvMjAiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMS41IGgtMyBiZy13aGl0ZS8yMCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy0xLjUgaC0zIGJnLVsjMDBGMEZGXSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFNrZXVvbW9ycGhpYyBTdGF0dXMgV2lkZ2V0IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLTggYm9yZGVyLWIgYm9yZGVyLXdoaXRlLzEwIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtWzFweF0gcm91bmRlZC1bMTZweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLXdoaXRlLzE1IHRvLXRyYW5zcGFyZW50IHNoYWRvdy1bMF84cHhfMzBweF9yZ2JhKDAsMCwwLDAuOCldIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy1bIzBBMEEwQV0gcm91bmRlZC1bMTZweF0gcC02IHNoYWRvdy1baW5zZXRfMF8ycHhfNXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNiksX2luc2V0XzBfLTJweF81cHhfcmdiYSgwLDAsMCwwLjgpXSByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbnRlcm5hbCBoaWdobGlnaHQgLyBnbGFyZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMXB4XSBiZy1ncmFkaWVudC10by1yIGZyb20tdHJhbnNwYXJlbnQgdmlhLXdoaXRlLzIwIHRvLXRyYW5zcGFyZW50Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgLXRvcC0xMCAtcmlnaHQtMTAgdy0zMiBoLTMyIGJnLVsjMDBGMEZGXS8xMCBibHVyLTN4bCByb3VuZGVkLWZ1bGwiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtc3RhcnQgbWItNiByZWxhdGl2ZSB6LTEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ic29sYXI6c2VydmVyLXNxdWFyZS1saW5lYXIiIHN0eWxlPSJmb250LXNpemU6IDEuNXJlbTsiIGNsYXNzPSJ0ZXh0LXdoaXRlLzgwIGRyb3Atc2hhZG93LVswXzJweF8ycHhfcmdiYSgwLDAsMCwxKV0iPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtWzEwcHhdIHRleHQtWyMwMEYwRkZdIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgcHgtMiBweS0xIGJnLVsjMDBGMEZGXS8xMCByb3VuZGVkIGJvcmRlciBib3JkZXItWyMwMEYwRkZdLzMwIiBzdHlsZT0iZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTsiPkFjdGl2ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTQgcmVsYXRpdmUgei0xMCB0ZXh0LXNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMSldIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1bMTBweF0gdGV4dC13aGl0ZS80MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXN0IG1iLTEiIHN0eWxlPSJmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlOyI+TmV0d29yayBMb2FkPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC0yeGwgZm9udC1saWdodCB0ZXh0LXdoaXRlIHRyYWNraW5nLXRpZ2h0Ij44NC4yPHNwYW4gY2xhc3M9InRleHQtWzEycHhdIHRleHQtd2hpdGUvNDAgbWwtMSI+JTwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5zZXQgUHJvZ3Jlc3MgVHJhY2sgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgaC0yIGJnLVsjMDMwMzA1XSByb3VuZGVkLWZ1bGwgc2hhZG93LVtpbnNldF8wXzFweF8zcHhfcmdiYSgwLDAsMCwxKSxfMF8xcHhfMF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDUpXSBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImgtZnVsbCBiZy1ncmFkaWVudC10by1yIGZyb20tWyMwMEYwRkZdLzQwIHRvLVsjMDBGMEZGXSB3LVs4NCVdIHJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgdG9wLTAgcmlnaHQtMCBib3R0b20tMCB3LTIgYmctd2hpdGUvNTAgYmx1ci1bMnB4XSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIExlYWRlcnNoaXAgLyBCcmFuZCBQb3J0cmFpdHMgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtOCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtNiI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1bMTJweF0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjE1ZW1dIHRleHQtd2hpdGUvNDAiIHN0eWxlPSJmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlOyI+Rm91bmRpbmcgUHJvdG9jb2w8L3NwYW4+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDwhLS0gQXVyYSBQb3J0cmFpdCAxIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgZ3JvdXAgY3Vyc29yLXBvaW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMTIgaC0xMiByb3VuZGVkLXNtIG92ZXJmbG93LWhpZGRlbiBwLVsxcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS13aGl0ZS8yMCB0by10cmFuc3BhcmVudCBzaHJpbmstMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvcGFnZS0wMi00ZjU2NjhjNS1mYzRhLTQ0ZTAtYmM1ZS1hNjY0MTg5ZDNjMzEtMTYwMHcuanBnIiBhbHQ9IkxlYWRlcnNoaXAgUG9ydHJhaXQiIGNsYXNzPSJ3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb3ZlciBmaWx0ZXIgZ3JheXNjYWxlIGdyb3VwLWhvdmVyOmdyYXlzY2FsZS0wIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMCIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFja2luZy10aWdodCI+RWxlbmEgUm9zdG92YTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtWzEwcHhdIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVzdCBtdC0wLjUiIHN0eWxlPSJmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlOyI+Q2hpZWYgQXJjaGl0ZWN0PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBBdXJhIFBvcnRyYWl0IDIgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBncm91cCBjdXJzb3ItcG9pbnRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy0xMiBoLTEyIHJvdW5kZWQtc20gb3ZlcmZsb3ctaGlkZGVuIHAtWzFweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLXdoaXRlLzIwIHRvLXRyYW5zcGFyZW50IHNocmluay0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9wYWdlLTAzLTJmNTYzMzM4LTM5ZmEtNDdlYS05NzYxLTY1OGQ0ZjNmODRkYi0xNjAwdy5qcGciIGFsdD0iTGVhZGVyc2hpcCBQb3J0cmFpdCIgY2xhc3M9InctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvdmVyIGZpbHRlciBncmF5c2NhbGUgZ3JvdXAtaG92ZXI6Z3JheXNjYWxlLTAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNTAwIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYWNraW5nLXRpZ2h0Ij5NYXJjdXMgVmFuY2U8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QgbXQtMC41IiBzdHlsZT0iZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTsiPkhlYWQgb2YgQ3J5cHRvZ3JhcGh5PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBCb3R0b20gRGlhZ25vc3RpYyBNYXJxdWVlIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItdCBib3JkZXItd2hpdGUvMTAgcC00IGJnLVsjMEEwQTBBXSBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgZmxleCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbmltYXRlLVtwdWxzZV8zc19lYXNlLWluLW91dF9pbmZpbml0ZV0gZmxleCBnYXAtNiB0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzMwIHVwcGVyY2FzZSB0cmFja2luZy13aWRlc3QiIHN0eWxlPSJmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlOyI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U1lTX1VQVElNRTogOTkuOTk5JTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj5MQVRFTkNZOiA0bXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Tk9ERVM6IDIsMDQxPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPkVOQ1JZUFQ6IEFFUy0yNTY8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvYXNpZGU+CgogICAgPC9tYWluPgoKICAgIDxzY3JpcHQ+CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsICgpID0+IHsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8qIC0tLSBHU0FQIFRleHQgUmV2ZWFsICYgRmFkZXMgLS0tICovCiAgICAgICAgICAgIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcik7CiAgICAgICAgICAgIAogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucmV2ZWFsLXRleHQnKS5mb3JFYWNoKGVsID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBlbC5pbm5lckhUTUw7CiAgICAgICAgICAgICAgICAvLyBTcGxpdCBieSA8YnI+IHRhZ3MgdG8gcHJlc2VydmUgZGVsaWJlcmF0ZSBicmVha3MsIHRoZW4gc3BsaXQgd29yZHMKICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgvPGJyXHMqXC8/Pi9pKTsKICAgICAgICAgICAgICAgIGVsLmlubmVySFRNTCA9ICcnOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBsaW5lcy5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbGluZS50cmltKCkuc3BsaXQoJyAnKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5lRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICAgICAgICAgICAgbGluZURpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICB3b3Jkcy5mb3JFYWNoKHdvcmQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIuc3R5bGUuY3NzVGV4dCA9ICdvdmVyZmxvdzogaGlkZGVuOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1hcmdpbi1yaWdodDogMC4yNWVtOyBwYWRkaW5nLWJvdHRvbTogMC4xZW07JzsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyLmNsYXNzTmFtZSA9ICd3b3JkLWlubmVyJzsKICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXIuc3R5bGUuY3NzVGV4dCA9ICdkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMTAlKTsgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7JzsKICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXIuaW5uZXJIVE1MID0gd29yZDsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOwogICAgICAgICAgICAgICAgICAgICAgICBsaW5lRGl2LmFwcGVuZENoaWxkKG91dGVyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChsaW5lRGl2KTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGdzYXAudG8oZWwucXVlcnlTZWxlY3RvckFsbCgnLndvcmQtaW5uZXInKSwgewogICAgICAgICAgICAgICAgICAgIHk6ICcwJScsCiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDEuNCwKICAgICAgICAgICAgICAgICAgICBzdGFnZ2VyOiAwLjA1LAogICAgICAgICAgICAgICAgICAgIGVhc2U6ICJwb3dlcjQub3V0IiwKICAgICAgICAgICAgICAgICAgICBzY3JvbGxUcmlnZ2VyOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6IGVsLAogICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogInRvcCA4NSUiCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgZ3NhcC5mcm9tKCcucmV2ZWFsLWZhZGUnLCB7CiAgICAgICAgICAgICAgICB5OiAzMCwKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsCiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMS4yLAogICAgICAgICAgICAgICAgc3RhZ2dlcjogMC4xNSwKICAgICAgICAgICAgICAgIGVhc2U6ICJwb3dlcjMub3V0IiwKICAgICAgICAgICAgICAgIGRlbGF5OiAwLjQKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvKiAtLS0gUHJvY2VkdXJhbCBEaXRoZXIgQmFja2dyb3VuZCAtLS0gKi8KICAgICAgICAgICAgY29uc3QgZGl0aGVyQ2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdGhlci1jYW52YXMnKTsKICAgICAgICAgICAgY29uc3QgZGN0eCA9IGRpdGhlckNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgICAgICAKICAgICAgICAgICAgZnVuY3Rpb24gcmVzaXplRGl0aGVyKCkgewogICAgICAgICAgICAgICAgZGl0aGVyQ2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgICAgICAgICAgICBkaXRoZXJDYW52YXMuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0OwogICAgICAgICAgICAgICAgZHJhd0RpdGhlcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBkcmF3RGl0aGVyKCkgewogICAgICAgICAgICAgICAgLy8gNHg0IEJheWVyIE1hdHJpeCBsYXlvdXQKICAgICAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IFsKICAgICAgICAgICAgICAgICAgICBbIDAsICA4LCAgMiwgMTBdLAogICAgICAgICAgICAgICAgICAgIFsxMiwgIDQsIDE0LCAgNl0sCiAgICAgICAgICAgICAgICAgICAgWyAzLCAxMSwgIDEsICA5XSwKICAgICAgICAgICAgICAgICAgICBbMTUsICA3LCAxMywgIDVdCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb25zdCBzaXplID0gNjsgLy8gRW5sYXJnZWQgcGl4ZWwgc2l6ZSBmb3IgdmlzaWJsZSBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgIGRjdHguY2xlYXJSZWN0KDAsIDAsIGRpdGhlckNhbnZhcy53aWR0aCwgZGl0aGVyQ2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvcihsZXQgeSA9IDA7IHkgPCBkaXRoZXJDYW52YXMuaGVpZ2h0OyB5ICs9IHNpemUpIHsKICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHggPSAwOyB4IDwgZGl0aGVyQ2FudmFzLndpZHRoOyB4ICs9IHNpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbVZhbCA9IG1hdHJpeFsoeS9zaXplKSAlIDRdWyh4L3NpemUpICUgNF07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1WYWwgPCA4IHx8IE1hdGgucmFuZG9tKCkgPiAwLjk4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LmZpbGxTdHlsZSA9IGByZ2JhKDI1NSwgMjU1LCAyNTUsICR7MC4wMTUgKyAobVZhbC8xNSkqMC4wMn0pYDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjdHguZmlsbFJlY3QoeCwgeSwgc2l6ZSwgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIFZpZ25ldHRlIGZhbGxvZmYKICAgICAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50ID0gZGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudCgKICAgICAgICAgICAgICAgICAgICBkaXRoZXJDYW52YXMud2lkdGgvMiwgZGl0aGVyQ2FudmFzLmhlaWdodC8yLCBkaXRoZXJDYW52YXMuaGVpZ2h0LzMsCiAgICAgICAgICAgICAgICAgICAgZGl0aGVyQ2FudmFzLndpZHRoLzIsIGRpdGhlckNhbnZhcy5oZWlnaHQvMiwgZGl0aGVyQ2FudmFzLmhlaWdodAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCAncmdiYSgzLDMsNSwwKScpOwogICAgICAgICAgICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDMsMyw1LDAuOTUpJyk7CiAgICAgICAgICAgICAgICBkY3R4LmZpbGxTdHlsZSA9IGdyYWRpZW50OwogICAgICAgICAgICAgICAgZGN0eC5maWxsUmVjdCgwLDAsZGl0aGVyQ2FudmFzLndpZHRoLCBkaXRoZXJDYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZURpdGhlcik7CiAgICAgICAgICAgIHJlc2l6ZURpdGhlcigpOwoKICAgICAgICAgICAgLyogLS0tIFRocmVlLmpzIEdsb2JlIFBhcnRpY2xlcyAoVGVjaG5pY2FsIERpYWdub3N0aWMgVmlldykgLS0tICovCiAgICAgICAgICAgIGNvbnN0IGdsb2JlQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JlLWNvbnRhaW5lcicpOwogICAgICAgICAgICBjb25zdCBzY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQXRtb3NwaGVyaWMgZm9nCiAgICAgICAgICAgIHNjZW5lLmZvZyA9IG5ldyBUSFJFRS5Gb2dFeHAyKDB4MDAwMDAwLCAwLjI1KTsKCiAgICAgICAgICAgIGNvbnN0IGNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSg1MCwgZ2xvYmVDb250YWluZXIuY2xpZW50V2lkdGggLyBnbG9iZUNvbnRhaW5lci5jbGllbnRIZWlnaHQsIDAuMSwgMTAwKTsKICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCA1KTsKCiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoeyBhbHBoYTogdHJ1ZSwgYW50aWFsaWFzOiB0cnVlIH0pOwogICAgICAgICAgICByZW5kZXJlci5zZXRTaXplKGdsb2JlQ29udGFpbmVyLmNsaWVudFdpZHRoLCBnbG9iZUNvbnRhaW5lci5jbGllbnRIZWlnaHQpOwogICAgICAgICAgICByZW5kZXJlci5zZXRQaXhlbFJhdGlvKE1hdGgubWluKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCAyKSk7CiAgICAgICAgICAgIGdsb2JlQ29udGFpbmVyLmFwcGVuZENoaWxkKHJlbmRlcmVyLmRvbUVsZW1lbnQpOwoKICAgICAgICAgICAgLy8gQ29yZSBEZW5zZSBTcGhlcmUKICAgICAgICAgICAgY29uc3QgY29yZUdlb21ldHJ5ID0gbmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KDEuNCwgNjQsIDY0KTsKICAgICAgICAgICAgY29uc3QgY29yZU1hdGVyaWFsID0gbmV3IFRIUkVFLlBvaW50c01hdGVyaWFsKHsKICAgICAgICAgICAgICAgIGNvbG9yOiAweGFhYWFhYSwgLy8gTmV1dHJhbCBjb3JlCiAgICAgICAgICAgICAgICBzaXplOiAwLjAxMiwKICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLAogICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsCiAgICAgICAgICAgICAgICBkZXB0aFdyaXRlOiBmYWxzZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc3QgY29yZVBhcnRpY2xlcyA9IG5ldyBUSFJFRS5Qb2ludHMoY29yZUdlb21ldHJ5LCBjb3JlTWF0ZXJpYWwpOwogICAgICAgICAgICBzY2VuZS5hZGQoY29yZVBhcnRpY2xlcyk7CgogICAgICAgICAgICAvLyBPdXRlciBPcmJpdGFsIFJpbmcgKEFjY2VudCBDb2xvciAjMDBGMEZGKQogICAgICAgICAgICBjb25zdCByaW5nR2VvbWV0cnkgPSBuZXcgVEhSRUUuVG9ydXNHZW9tZXRyeSgyLjIsIDAuNiwgMjQsIDE1MCk7CiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHJpbmdHZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5OwogICAgICAgICAgICAvLyBTY3JhbWJsZSB0b3J1cyBpbnRvIGEgcGFydGljbGUgY2xvdWQgZGlzYwogICAgICAgICAgICBmb3IobGV0IGk9MDsgaTxwb3NpdGlvbnMubGVuZ3RoOyBpKz0zKSB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbnNbaV0gKz0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC4zOwogICAgICAgICAgICAgICAgcG9zaXRpb25zW2krMV0gKz0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC4zOwogICAgICAgICAgICAgICAgcG9zaXRpb25zW2krMl0gKz0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogMC4zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBjb25zdCByaW5nTWF0ZXJpYWwgPSBuZXcgVEhSRUUuUG9pbnRzTWF0ZXJpYWwoewogICAgICAgICAgICAgICAgY29sb3I6IDB4MDBGMEZGLCAvLyBCcmFuZCBBY2NlbnQgQ3lhbgogICAgICAgICAgICAgICAgc2l6ZTogMC4wMTgsCiAgICAgICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSwKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNywKICAgICAgICAgICAgICAgIGJsZW5kaW5nOiBUSFJFRS5BZGRpdGl2ZUJsZW5kaW5nLAogICAgICAgICAgICAgICAgZGVwdGhXcml0ZTogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnN0IHJpbmdQYXJ0aWNsZXMgPSBuZXcgVEhSRUUuUG9pbnRzKHJpbmdHZW9tZXRyeSwgcmluZ01hdGVyaWFsKTsKICAgICAgICAgICAgcmluZ1BhcnRpY2xlcy5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDIuODsgLy8gVGVjaG5pY2FsIHRpbHQKICAgICAgICAgICAgc2NlbmUuYWRkKHJpbmdQYXJ0aWNsZXMpOwoKICAgICAgICAgICAgLy8gSW50ZXJhY3Rpb24gc3RhdGUKICAgICAgICAgICAgbGV0IG1YID0gMDsgbGV0IG1ZID0gMDsKICAgICAgICAgICAgbGV0IHRYID0gMDsgbGV0IHRZID0gMDsKCiAgICAgICAgICAgIGdsb2JlQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIChlKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gZ2xvYmVDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgICAgICBtWCA9ICgoZS5jbGllbnRYIC0gcmVjdC5sZWZ0KSAvIHJlY3Qud2lkdGgpICogMiAtIDE7CiAgICAgICAgICAgICAgICBtWSA9IC0oKGUuY2xpZW50WSAtIHJlY3QudG9wKSAvIHJlY3QuaGVpZ2h0KSAqIDIgKyAxOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGNvbnN0IGNsb2NrID0gbmV3IFRIUkVFLkNsb2NrKCk7CiAgICAgICAgICAgIGZ1bmN0aW9uIGFuaW1hdGVHbG9iZSgpIHsKICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlR2xvYmUpOwogICAgICAgICAgICAgICAgY29uc3QgdCA9IGNsb2NrLmdldEVsYXBzZWRUaW1lKCk7CgogICAgICAgICAgICAgICAgLy8gU3RydWN0dXJhbCBSb3RhdGlvbgogICAgICAgICAgICAgICAgY29yZVBhcnRpY2xlcy5yb3RhdGlvbi55ICs9IDAuMDAwODsKICAgICAgICAgICAgICAgIGNvcmVQYXJ0aWNsZXMucm90YXRpb24ueCArPSAwLjAwMDQ7CiAgICAgICAgICAgICAgICByaW5nUGFydGljbGVzLnJvdGF0aW9uLnogLT0gMC4wMDE1OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBUZWNoIEJyZWF0aGluZwogICAgICAgICAgICAgICAgY29uc3QgYnJlYXRoID0gMSArIE1hdGguc2luKHQgKiAwLjgpICogMC4wMTU7CiAgICAgICAgICAgICAgICBjb3JlUGFydGljbGVzLnNjYWxlLnNldChicmVhdGgsIGJyZWF0aCwgYnJlYXRoKTsKCiAgICAgICAgICAgICAgICAvLyBGbHVpZCBtb3VzZSByZXNwb25zZQogICAgICAgICAgICAgICAgdFggPSBtWCAqIDAuMjU7CiAgICAgICAgICAgICAgICB0WSA9IG1ZICogMC4yNTsKICAgICAgICAgICAgICAgIHNjZW5lLnJvdGF0aW9uLnkgKz0gKHRYIC0gc2NlbmUucm90YXRpb24ueSkgKiAwLjA0OwogICAgICAgICAgICAgICAgc2NlbmUucm90YXRpb24ueCArPSAoLXRZIC0gc2NlbmUucm90YXRpb24ueCkgKiAwLjA0OwoKICAgICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhbmltYXRlR2xvYmUoKTsKCiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcmVzaXplIGZvciBzcGxpdCBzY3JlZW4KICAgICAgICAgICAgICAgIGlmKGdsb2JlQ29udGFpbmVyLmNsaWVudFdpZHRoID4gMCkgewogICAgICAgICAgICAgICAgICAgIGNhbWVyYS5hc3BlY3QgPSBnbG9iZUNvbnRhaW5lci5jbGllbnRXaWR0aCAvIGdsb2JlQ29udGFpbmVyLmNsaWVudEhlaWdodDsKICAgICAgICAgICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpOwogICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldFNpemUoZ2xvYmVDb250YWluZXIuY2xpZW50V2lkdGgsIGdsb2JlQ29udGFpbmVyLmNsaWVudEhlaWdodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLyogLS0tIFdlYkdMIEJhY2tncm91bmQgTm9pc2UgKEJsdWUvUHVycGxlIEJlYW1zKSAtLS0gKi8KICAgICAgICAgICAgY29uc3QgYmdDYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmctY2FudmFzJyk7CiAgICAgICAgICAgIGNvbnN0IGdsID0gYmdDYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChnbCkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzaXplR2woKSB7CiAgICAgICAgICAgICAgICAgICAgYmdDYW52YXMud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgICAgICAgICAgICAgICAgICBiZ0NhbnZhcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgZ2wudmlld3BvcnQoMCwgMCwgYmdDYW52YXMud2lkdGgsIGJnQ2FudmFzLmhlaWdodCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplR2wpOwogICAgICAgICAgICAgICAgcmVzaXplR2woKTsKCiAgICAgICAgICAgICAgICBjb25zdCB2c1NvdXJjZSA9IGAKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICB2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICAgICAgICAgICAgIGA7CgogICAgICAgICAgICAgICAgLy8gU2ltcGxleCBub2lzZSBpbnNwaXJlZCBzd2VlcGluZyBiZWFtcwogICAgICAgICAgICAgICAgY29uc3QgZnNTb3VyY2UgPSBgCiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB0aW1lOwogICAgICAgICAgICAgICAgICAgIHVuaWZvcm0gdmVjMiByZXNvbHV0aW9uOwoKICAgICAgICAgICAgICAgICAgICB2ZWMzIG1vZDI4OSh2ZWMzIHgpIHsgcmV0dXJuIHggLSBmbG9vcih4ICogKDEuMCAvIDI4OS4wKSkgKiAyODkuMDsgfQogICAgICAgICAgICAgICAgICAgIHZlYzIgbW9kMjg5KHZlYzIgeCkgeyByZXR1cm4geCAtIGZsb29yKHggKiAoMS4wIC8gMjg5LjApKSAqIDI4OS4wOyB9CiAgICAgICAgICAgICAgICAgICAgdmVjMyBwZXJtdXRlKHZlYzMgeCkgeyByZXR1cm4gbW9kMjg5KCgoeCozNC4wKSsxLjApKngpOyB9CgogICAgICAgICAgICAgICAgICAgIGZsb2F0IHNub2lzZSh2ZWMyIHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjNCBDID0gdmVjNCgwLjIxMTMyNDg2NTQwNTE4NywgMC4zNjYwMjU0MDM3ODQ0MzksIC0wLjU3NzM1MDI2OTE4OTYyNiwgMC4wMjQzOTAyNDM5MDI0MzkpOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIGkgID0gZmxvb3IodiArIGRvdCh2LCBDLnl5KSApOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMyIHgwID0gdiAtICAgaSArIGRvdChpLCBDLnh4KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMiBpMTsKICAgICAgICAgICAgICAgICAgICAgICAgaTEgPSAoeDAueCA+IHgwLnkpID8gdmVjMigxLjAsIDAuMCkgOiB2ZWMyKDAuMCwgMS4wKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCB4MTIgPSB4MC54eXh5ICsgQy54eHp6OwogICAgICAgICAgICAgICAgICAgICAgICB4MTIueHkgLT0gaTE7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBtb2QyODkoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgcCA9IHBlcm11dGUoIHBlcm11dGUoIGkueSArIHZlYzMoMC4wLCBpMS55LCAxLjAgKSkgKyBpLnggKyB2ZWMzKDAuMCwgaTEueCwgMS4wICkpOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIG0gPSBtYXgoMC41IC0gdmVjMyhkb3QoeDAseDApLCBkb3QoeDEyLnh5LHgxMi54eSksIGRvdCh4MTIuencseDEyLnp3KSksIDAuMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtKm07CiAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBtKm07CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgeCA9IDIuMCAqIGZyYWN0KHAgKiBDLnd3dykgLSAxLjA7CiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgaCA9IGFicyh4KSAtIDAuNTsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBveCA9IGZsb29yKHggKyAwLjUpOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIGEwID0geCAtIG94OwogICAgICAgICAgICAgICAgICAgICAgICBtICo9IDEuNzkyODQyOTE0MDAxNTkgLSAwLjg1MzczNDcyMDk1MzE0ICogKCBhMCphMCArIGgqaCApOwogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIGc7CiAgICAgICAgICAgICAgICAgICAgICAgIGcueCAgPSBhMC54ICAqIHgwLnggICsgaC54ICAqIHgwLnk7CiAgICAgICAgICAgICAgICAgICAgICAgIGcueXogPSBhMC55eiAqIHgxMi54eiArIGgueXogKiB4MTIueXc7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMzAuMCAqIGRvdChtLCBnKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHJlc29sdXRpb24ueHk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgY29vcmRpbmF0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMiBwb3MgPSB2ZWMyKHV2LnggKiAyLjAgKyB0aW1lICogMC4wNSwgdXYueSAqIDIuMCAtIHRpbWUgKiAwLjAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbiA9IHNub2lzZShwb3MgKiAxLjUpICogMC41ICsgMC41OwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHN3ZWVwaW5nIGJhbmRzCiAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGJhbmQgPSBzaW4odXYueCAqIDMuMCArIHV2LnkgKiAyLjAgKyB0aW1lICogMC41KSAqIDAuNSArIDAuNTsKICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgaW50ZW5zaXR5ID0gc21vb3Roc3RlcCgwLjQsIDAuNiwgbiAqIGJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVlcCBzcGFjZSB0byBDeWFuL1B1cnBsZSBjb2xvcnMKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBjb2wxID0gdmVjMygwLjAxLCAwLjAxLCAwLjAzKTsgLy8gYmFzZSBkYXJrCiAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMgY29sMiA9IHZlYzMoMC4wLCAwLjk0LCAxLjApOyAgIC8vICMwMEYwRkYgQ3lhbgogICAgICAgICAgICAgICAgICAgICAgICB2ZWMzIGNvbDMgPSB2ZWMzKDAuMywgMC4xLCAwLjYpOyAgICAvLyBEZWVwIFB1cnBsZQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgdmVjMyBmaW5hbENvbG9yID0gbWl4KGNvbDEsIGNvbDIsIGludGVuc2l0eSAqIDAuMyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsQ29sb3IgPSBtaXgoZmluYWxDb2xvciwgY29sMywgc25vaXNlKHBvcyAqIDMuMCkgKiAwLjIpOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbG9mZiBlZGdlcwogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB2aWduZXR0ZSA9IHNtb290aHN0ZXAoMC4wLCAwLjUsIHV2LngpICogc21vb3Roc3RlcCgxLjAsIDAuNSwgdXYueCk7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZpbmFsQ29sb3IgKiB2aWduZXR0ZSwgMS4wKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBgOwoKICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVNoYWRlciA9ICh0eXBlLCBzcmMpID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gZ2wuY3JlYXRlU2hhZGVyKHR5cGUpOwogICAgICAgICAgICAgICAgICAgIGdsLnNoYWRlclNvdXJjZShzLCBzcmMpOwogICAgICAgICAgICAgICAgICAgIGdsLmNvbXBpbGVTaGFkZXIocyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGNvbnN0IHByb2cgPSBnbC5jcmVhdGVQcm9ncmFtKCk7CiAgICAgICAgICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIsIHZzU291cmNlKSk7CiAgICAgICAgICAgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgY3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUiwgZnNTb3VyY2UpKTsKICAgICAgICAgICAgICAgIGdsLmxpbmtQcm9ncmFtKHByb2cpOwogICAgICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShwcm9nKTsKCiAgICAgICAgICAgICAgICBjb25zdCBxdWFkID0gbmV3IEZsb2F0MzJBcnJheShbLTEsMSwgLTEsLTEsIDEsMSwgMSwtMV0pOwogICAgICAgICAgICAgICAgY29uc3QgYnVmID0gZ2wuY3JlYXRlQnVmZmVyKCk7CiAgICAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKICAgICAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBxdWFkLCBnbC5TVEFUSUNfRFJBVyk7CgogICAgICAgICAgICAgICAgY29uc3QgcG9zQXR0ciA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2csICJwb3NpdGlvbiIpOwogICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocG9zQXR0cik7CiAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc0F0dHIsIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CgogICAgICAgICAgICAgICAgY29uc3QgdGltZUxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9nLCAidGltZSIpOwogICAgICAgICAgICAgICAgY29uc3QgcmVzTG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2csICJyZXNvbHV0aW9uIik7CgogICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlckJnKCkgewogICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXJCZyk7CiAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFmKHRpbWVMb2MsIChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMC4wKTsKICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmYocmVzTG9jLCBiZ0NhbnZhcy53aWR0aCwgYmdDYW52YXMuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlbmRlckJnKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K";
    const assetFiles = ["assets/page-01-fa51902b-c2a4-4c33-a96e-a8f1ef67edc6-1600w.jpg","assets/page-02-4f5668c5-fc4a-44e0-bc5e-a664189d3c31-1600w.jpg","assets/page-03-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-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/editorial-tech · 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 editorial-tech.zip