{"id":881,"date":"2025-09-28T14:23:33","date_gmt":"2025-09-28T14:23:33","guid":{"rendered":"https:\/\/elitekutz.com\/?page_id=881"},"modified":"2026-04-23T03:35:39","modified_gmt":"2026-04-23T03:35:39","slug":"home-new","status":"publish","type":"page","link":"https:\/\/elitekutz.com\/","title":{"rendered":"Home (New)"},"content":{"rendered":"\n<style id=\"ek-fixed-nav\">\n  \/* page stays black *\/\n  html,body{background:#000 !important;color:#fff !important;}\n\n  \/* hide WP front-end edit link *\/\n  .post-edit-link{display:none !important;}\n\n  \/* fixed header shell *\/\n  :root{ --ek-header-h: 120px; } \/* height to reserve for 2 rows *\/\n  #ek-header{\n    position:fixed; top:0; left:0; right:0; z-index:9999;\n    background:rgba(0,0,0,.88);\n    -webkit-backdrop-filter:saturate(120%) blur(3px);\n    backdrop-filter:saturate(120%) blur(3px);\n    border-bottom:1px solid rgba(255,255,255,.06);\n  }\n  \/* reserve space so content doesn't slide under fixed header *\/\n  body{ padding-top: var(--ek-header-h) !important; }\n\n  \/* centering wrapper *\/\n  #ek-header .wrap{\n    max-width:1100px; margin:0 auto; padding:12px 16px;\n  }\n\n  \/* row styling *\/\n  #ek-header .nav-row{\n    display:flex; flex-wrap:wrap; justify-content:center;\n    gap:14px; margin:8px 0;\n  }\n\n  \/* pills *\/\n  #ek-header .btn{\n    display:inline-flex; align-items:center; justify-content:center;\n    padding:12px 18px; border-radius:9999px;\n    background:#111; border:1px solid #2a2a2a; color:#fff; text-decoration:none;\n    font-weight:700; white-space:nowrap; box-shadow:0 10px 22px rgba(0,0,0,.35);\n  }\n\n  \/* row 2 = two equal buttons *\/\n  #ek-header .row-two{\n    display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px;\n  }\n  #ek-header .row-two .btn{ width:100%; padding:14px 20px; }\n\n  \/* tighter on small phones; allow row-2 to stack if too narrow *\/\n  @media (max-width:640px){\n    :root{ --ek-header-h: 152px; }\n    #ek-header .btn{ padding:10px 14px; font-size:.95rem; }\n  }\n  @media (max-width:520px){\n    #ek-header .row-two{ grid-template-columns:1fr; }\n    :root{ --ek-header-h: 196px; } \/* extra room when row-2 stacks *\/\n  }\n<\/style>\n\n<header id=\"ek-header\" aria-label=\"Site\">\n  <div class=\"wrap\">\n    <!-- Row 1: four pills -->\n<nav aria-label=\"Main\">\n  <!-- Row 1 -->\n  <div class=\"nav-row row-one\">\n    <a class=\"btn\" href=\"https:\/\/elitekutzkiosk.com\/book\">Book Online<\/a>\n    <a class=\"btn\" href=\"#services\">Services<\/a>\n    <a class=\"btn\" href=\"https:\/\/elitekutzkiosk.com\/privacy\/\" target=\"_blank\" rel=\"noopener\">Privacy<\/a>\n    <a class=\"btn\" href=\"https:\/\/elitekutzkiosk.com\/terms\/\" target=\"_blank\" rel=\"noopener\">Terms<\/a>\n  <\/div>\n\n  <!-- Row 2 -->\n  <div class=\"nav-row row-two\">\n    <a class=\"btn\" href=\"https:\/\/elitekutzkiosk.com\/joinourteam\/\" target=\"_blank\" rel=\"noopener\">Join Our Team<\/a>\n    <a class=\"btn\" href=\"https:\/\/elitekutzkiosk.com\/elitedeals\/\" target=\"_blank\" rel=\"noopener\">Elite Deals<\/a>\n    <a class=\"btn\" href=\"https:\/\/elitekutzkiosk.com\/low-sensory\/index.html\">Low Sensory Sunday<\/a>\n  <\/div>\n<\/nav>\n  <\/div>\n<\/header>\n\n<main class=\"wrap\">\n  <section class=\"hero\">\n    <div class=\"logo-hero\">\n      <video class=\"logo-video\"\n             src=\"https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/elitekutz-logo.mp4\"\n             autoplay muted loop playsinline><\/video>\n    <\/div>\n<p class=\"intro intro-top\">Your neighborhood <strong>barbershop in Plano TX<\/strong> for sharp fades, tapers &#038; beard trims.<\/p>\n\n  <\/section>\n\n  <section id=\"hours\" class=\"section\">\n    <h2>Hours<\/h2>\n    <div class=\"card\">\n      <div class=\"hours\">\n        <span>Mon<\/span><span>10:00 AM \u2013 7:00 PM<\/span>\n        <span>Tue<\/span><span>10:00 AM \u2013 7:00 PM<\/span>\n        <span>Wed<\/span><span>10:00 AM \u2013 7:00 PM<\/span>\n        <span>Thu<\/span><span>10:00 AM \u2013 7:00 PM<\/span>\n        <span>Fri<\/span><span>9:00 AM \u2013 7:00 PM<\/span>\n        <span>Sat<\/span><span>8:00 AM \u2013 5:00 PM<\/span>\n        <span>Sun<\/span><span>12:00 PM \u2013 4:00 PM<\/span>\n      <\/div>\n      <p class=\"mini\" style=\"margin-top:8px\"><p class=\"mini\" style=\"margin-top:8px\">\n  All times Central. However, holiday hours may vary; therefore, follow us on Instagram for updates.\n<\/p>\n<\/p>\n<\/div>\n<\/section>  <!-- end HOURS -->\n\n<!-- === ELITE KUTZ \u2014 Autoplay Loop Video (mute toggle only) === -->\n<div class=\"ek-video-wrap\">\n  <video id=\"ek-hero-video\"\n         autoplay\n         loop\n         muted\n         playsinline\n         preload=\"metadata\">\n    <source src=\"https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/10\/Vn20251021-220146.mp4\" type=\"video\/mp4\">\n    Your browser doesn\u2019t support HTML5 video.\n  <\/video>\n\n  <div class=\"ek-controls\" role=\"group\" aria-label=\"Video controls\">\n    <button id=\"ek-mute\" class=\"ek-btn\" aria-label=\"Unmute video\">\ud83d\udd07<\/button>\n  <\/div>\n<\/div>\n\n<style>\n  :root { --ek-blue:#1E90FF; --ek-yellow:#FFD400; --ek-dark:#000; --ek-white:#fff; }\n  .ek-video-wrap{position:relative;width:100%;max-width:920px;margin:1.25rem auto;border-radius:18px;overflow:hidden;background:#000;box-shadow:0 12px 30px rgba(0,0,0,.35);}\n  .ek-video-wrap video{display:block;width:100%;height:auto;aspect-ratio:16\/9;background:#000;}\n  .ek-controls{position:absolute;right:12px;bottom:12px;display:flex;gap:10px;}\n  .ek-btn{border:0;border-radius:999px;padding:10px 12px;font-size:18px;color:var(--ek-white);background:linear-gradient(135deg, rgba(0,0,0,.65), rgba(0,0,0,.35));box-shadow:0 2px 8px rgba(0,0,0,.35);cursor:pointer;transition:transform .12s ease, box-shadow .12s ease;}\n  .ek-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.45);}\n  \/* removed #ek-play rule since there is no play button *\/\n  #ek-mute.is-muted{background:linear-gradient(135deg, var(--ek-yellow), #ffe15c);color:#111;}\n\n  \/* == EK 2-row nav (scoped) == *\/\n  #ek-header .nav-row{\n    display:flex;\n    flex-wrap:wrap;\n    gap:14px;\n    justify-content:center;\n    margin:12px 0;\n  }\n  #ek-header .nav-row .btn{\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n    padding:12px 18px;\n    border-radius:9999px;\n    background:#111;\n    border:1px solid #2a2a2a;\n    color:#fff;\n    text-decoration:none;\n    font-weight:700;\n    white-space:nowrap;\n    box-shadow:0 10px 22px rgba(0,0,0,.35);\n  }\n  #ek-header .nav-row.row-two{\n    display:grid;\n    grid-template-columns:repeat(2, minmax(0, 1fr));\n    gap:14px;\n  }\n  #ek-header .nav-row.row-two .btn{\n    width:100%;\n    padding:14px 20px;\n  }\n  @media (max-width:520px){\n    #ek-header .nav-row.row-two{ grid-template-columns:1fr; }\n  }\n<\/style>\n\n<script>\n  (function(){\n    const v = document.getElementById('ek-hero-video');\n    const muteBtn = document.getElementById('ek-mute');\n\n    \/\/ Autoplay (muted) and loop continuously\n    v.addEventListener('canplay', () => v.play().catch(()=>{}), { once:true });\n\n    function sync(){\n      muteBtn.textContent = v.muted ? '\ud83d\udd07' : '\ud83d\udd0a';\n      muteBtn.classList.toggle('is-muted', v.muted);\n    }\n\n    muteBtn.addEventListener('click', () => {\n      v.muted = !v.muted;\n      if (!v.muted) v.play().catch(()=>{}); \/\/ ensure playback after unmute\n      sync();\n    });\n\n    ['volumechange','ended'].forEach(ev => v.addEventListener(ev, sync));\n    sync();\n  })();\n<\/script>\n\n<section id=\"barbers\" class=\"section\">\n\n    <h2>Meet the Team<\/h2>\n    <div id=\"barbersGrid\" class=\"grid barbers\"><\/div>\n    <p class=\"mini\">Tap a barber to book or view Instagram. Videos are optional and may open in a new tab.<\/p>\n  <\/section>\n\n  <section id=\"services\" class=\"section\">\n    <h2>Services<\/h2>\n    <div class=\"grid services\">\n      <article class=\"card\"><h3>Adult Hairkutz<\/h3><p>Crisp fade, polished and professional.<\/p><p><strong>$35<\/strong> <span class=\"mini\">Add Razor Line +$5<\/span><\/p><\/article>\n      <article class=\"card\"><h3>Adult Hairkut &amp; Beard<\/h3><p>Fresh cut with a polished beard finish.<\/p><p><strong>$40<\/strong> <span class=\"mini\">Add Razor Line +$5<\/span><\/p><\/article>\n      <article class=\"card\"><h3>Young Adultz 16 &amp; Under<\/h3><p>Sharp looks for young trendsetters.<\/p><p><strong>$30<\/strong> <span class=\"mini\">Add Design $5+<\/span><\/p><\/article>\n      <article class=\"card\"><h3>Seniors 65+<\/h3><p>Classic cuts tailored for seniors.<\/p><p><strong>$25<\/strong> <span class=\"mini\">Add Razor Line +$5<\/span><\/p><\/article>\n      <article class=\"card\"><h3>Seniors 65+ &amp; Beard<\/h3><p>Sharp senior styles plus beard grooming.<\/p><p><strong>$30<\/strong> <span class=\"mini\">Add Razor Line +$5<\/span><\/p><\/article>\n      <article class=\"card\"><h3>Shampoo<\/h3><p>Invigorating wash leaving hair fresh, soft.<\/p><p><strong>$15<\/strong><\/p><\/article>\n      <article class=\"card\"><h3>Edge Up<\/h3><p>Line-up that keeps you looking fresh.<\/p><p><strong>$15<\/strong><\/p><\/article>\n      <article class=\"card\"><h3>Beard Trim<\/h3><p>Beard care tailored to your style.<\/p><p><strong>$15<\/strong><\/p><\/article>\n      <article class=\"card\"><h3>Hairline Enhancement<\/h3><p>Fuller, sharper, more defined hairline density.<\/p><p><strong>$10<\/strong><\/p><\/article>\n      <article class=\"card\"><h3>Edge Up &amp; Beard<\/h3><p>Precision trim for beard and hairline.<\/p><p><strong>$20<\/strong> <span class=\"mini\">Add Razor +$5<\/span><\/p><\/article>\n      <article class=\"card\"><h3>Razor Shave &amp; Hot Towel<\/h3><p>Classic shave with soothing hot towel.<\/p><p><strong>$45<\/strong><\/p><\/article>\n      <article class=\"card\"><h3>Razor Head Shave &amp; Beard<\/h3><p>Polished shave with tailored beard style.<\/p><p><strong>$55<\/strong><\/p><\/article>\n      <article class=\"card\"><h3>Afros, Layer Kutz<\/h3><p>Custom Hairkutz for hair with shape and volume.<\/p><p><strong>$5+<\/strong><\/p><\/article>\n    <\/div>\n  <\/section>\n\n<section id=\"location\" class=\"location-section\" style=\"text-align:center; max-width:920px; margin:0 auto;\">\n  <h2>Find Us \u2014 Barbershop in Plano TX<\/h2>\n\n  <p>\n    Elite Kutz is conveniently located at <strong>3131 Custer Rd., Suite 193, Plano, TX<\/strong>.\n    Look for the Elite Kutz sign, head inside, and check in. We\u2019re open daily (holiday hours may vary)\n    and post updates on Instagram. Our barbers deliver <strong>sharp fades<\/strong>, <strong>tapers<\/strong>,\n    and <strong>beard trims<\/strong> so you leave looking and feeling your best.\n  <\/p>\n\n  <p>\n    Booking is fast\u2014reserve online with a master barber in seconds or walk in when it\u2019s convenient.\n    We\u2019re just minutes from <strong>US-75<\/strong> near <strong>Parker Rd.<\/strong> If you\u2019re searching for a\n    trusted <strong>barbershop in Plano, TX<\/strong>, Elite Kutz makes it easy to get in the chair on time, every time.\n  <\/p>\n\n  <h3 style=\"margin-top:1.25rem;\">3131 Custer Rd. Suite 193, Plano, TX 75075<\/h3>\n\n  <p class=\"mini\" style=\"margin-top:.75rem;\">\n    <a href=\"https:\/\/www.google.com\/maps\/place\/3131+Custer+Rd+Suite+193,+Plano,+TX+75075\" target=\"_blank\" rel=\"noopener\">Open in Google Maps<\/a>\n    &nbsp;\u00b7&nbsp;\n    <a href=\"https:\/\/www.plano.gov\/\" target=\"_blank\" rel=\"noopener\">City of Plano<\/a>\n  <\/p>\n<\/section>\n\n    <iframe class=\"map\" loading=\"lazy\" allowfullscreen src=\"https:\/\/www.google.com\/maps?q=3131%20Custer%20Rd.%20Suite%20193%2C%20Plano%2C%20TX%2C%2075075&#038;output=embed\"><\/iframe>\n  <\/section>\n<\/main>\n\n<footer class=\"footer\">\n  <div class=\"wrap\" style=\"display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between\">\n    <div>\u00a9 <span id=\"yr\"><\/span> Elite Kutz. All rights reserved.<\/div>\n\n    <nav class=\"footer-links\" aria-label=\"Legal\">\n      <a href=\"https:\/\/elitekutzkiosk.com\/privacy\/\" target=\"_blank\" rel=\"noopener\">Privacy Policy<\/a> \u00b7\n      <a href=\"https:\/\/elitekutzkiosk.com\/terms\/\" target=\"_blank\" rel=\"noopener\">Terms of Service<\/a>\n    <\/nav>\n  <\/div>\n\n<div class=\"wrap\">\n  <div class=\"mini site-note\" style=\"text-align:center;margin-top:8px;\">\n    All times Central \u00b7 Plano, TX\n  <\/div>\n\n<\/footer>\n\n<script>\n\/\/ Footer year\ndocument.getElementById('yr').textContent = new Date().getFullYear();\n\n\/\/ ===== Barbers (same list you saw earlier) =====\nconst BARBERS = [\n{ name:'Taja', booking:'https:\/\/elitekutzkiosk.com\/go\/taja', instagram:'https:\/\/www.instagram.com\/trueblends_?utm_source=ig_web_button_share_sheet&igsh=ZDNlZDc0MzIxNw==', bio:`Its ya girl Tee! Delivering crispy cuts and fades, hair color and loc retwisting! Guaranteed to leave out feeling your best!`, order:70, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Taja_resized.jpg',\n    tiktok:'https:\/\/www.tiktok.com\/@_thatgrltee?_t=ZT-903MgdFzbaP&_r=1', video:'https:\/\/www.instagram.com\/reel\/DM7zKZ-uY9j\/?igsh=MTNydzU1aWRwd3Yxeg==' },\n  { name:'J Mike', booking:'https:\/\/elitekutzkiosk.com\/go\/mike',\n instagram:'https:\/\/www.instagram.com\/debonairgroomingclub?utm_source=ig_web_button_share_sheet&igsh=ZDNlZDc0MzIxNw==', bio:`20 years. DFW. Flawless cuts. Debonair Grooming\u2014expert barbering for every style, every hair type. Leave sharp. Feel confident.`, order:100, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/IMG_20250927_115332_600x600.jpg',\n    tiktok:'https:\/\/www.tiktok.com\/@debonairgroomer?_t=ZT-903Nl0DiXvC&_r=1', video:'https:\/\/www.instagram.com\/reel\/DNszl3qN6J7\/?igsh=YWpnZm94YmN6OHpw' },\n{ name:'Shelton', booking:'https:\/\/elitekutzkiosk.com\/go\/shelton', instagram:'https:\/\/www.instagram.com\/bellazer_kuts?utm_source=ig_web_button_share_sheet&igsh=ZDNlZDc0MzIxNw==', bio:`With 25+ years of experience, I blend old-school craft with modern technique. Book with me for a crisp, tailored cut that fits your style.`, order:3, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Shelton_resized.jpg', tiktok:'https:\/\/www.tiktok.com\/@barber_cuts05?_t=ZT-905GjFmxpep&_r=1', video:'https:\/\/www.instagram.com\/reel\/DOQ9llODa2O\/?igsh=MXNkZjNnenhrdnFscg==' },\n{ name:'Hollywood', booking:'https:\/\/elitekutzkiosk.com\/go\/hollywood', instagram:'https:\/\/www.instagram.com\/the.gemexperience?utm_source=ig_web_button_share_sheet&igsh=ZDNlZDc0MzIxNw==', bio:`For two decades, I\u2019ve been sharpening more than clippers\u2014I\u2019ve been sharpening confidence. My mission is to make every cut an experience that leaves you looking fresh and feeling unstoppable.`, order:0, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Hollywood_resized.jpg',\n    video:'https:\/\/www.instagram.com\/reel\/DNWFHXxAqSn\/?igsh=MTRzODhqYXp6bDBhaw==' },\n{ name:'Nesha', booking:'https:\/\/elitekutzkiosk.com\/go\/nesha', instagram:'https:\/\/www.instagram.com\/koolazzkutz?utm_source=ig_web_button_share_sheet&igsh=ZDNlZDc0MzIxNw==', bio:`I'm Nesha Licensed Barber in Plano & surrounding areas. Specializing in fading and quality Koolazzkutz!!`, order:90, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Nesha_resized.jpg',\n    tiktok:'https:\/\/www.tiktok.com\/@koolazznesha?_t=ZT-903Nglbdi5P&_r=1',tiktok_reel: 'https:\/\/www.tiktok.com\/t\/ZP8S35qac\/', video:'https:\/\/www.instagram.com\/reel\/DCt9bZvucgK\/?utm_source=ig_web_copy_link&igsh=MzRlODBiNWFlZA==' },\n  { name:'Uri', booking:'https:\/\/elitekutzkiosk.com\/go\/uri', instagram:'https:\/\/www.instagram.com\/uri0_d_barber\/', bio:`I am Uri the Barber...The humblest barber experience you will ever have. A crafty and precisely sharp experience that makes you feel and look good.`, order:80, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Uri_resized.jpg',\n    tiktok:'https:\/\/www.tiktok.com\/@el.marisquero?_t=ZT-903Nda94Hlu&_r=1', video:'https:\/\/www.instagram.com\/reel\/Cxiru4pOT1r\/?utm_source=ig_web_copy_link&igsh=MzRlODBiNWFlZA==' },\n{ \n  name:'Martice',\n  booking:'https:\/\/elitekutzkiosk.com\/go\/martice',\n  instagram:'https:\/\/www.instagram.com\/mr.classic_cutz\/',\n  bio:`I\u2019m Martice, a Master Barber with 13+ years of experience in the DFW area. I take pride in precision, artistry, and delivering clean, professional cuts for every hair type.`,\n  order:6,\n  photo:'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Martice1_resized.jpg',\n  tiktok:'https:\/\/www.tiktok.com\/@martice_mrclassic?_t=ZT-903NV2dYHQT&_r=1',\n  video:'https:\/\/www.instagram.com\/reel\/DMan6zxuV6Z\/?igsh=MWczYjBicTJoOTJ4OA=='\n},\n{\n  name:'Jamal',\n  booking:'https:\/\/elitekutzkiosk.com\/go\/jamal',\n  instagram:'https:\/\/www.instagram.com\/2xaznice_kutz?igsh=YjdqZmF3c3luN253',\n  bio:`I've been a barber in the DFW Metro Plex for 9 years. Mastery of modern and traditional barbering techniques, including fades, tapers, line-ups, and custom designs.`,\n  order:10,\n  photo:'https:\/\/elitekutz.com\/wp-content\/uploads\/2026\/04\/jamal.jpg',\n  video:'https:\/\/www.instagram.com\/reel\/DFOdw5JO-kb\/?igsh=bW12MGRmcmZhNGts'\n},\n{\n  name:'Riley',\n  booking:'https:\/\/elitekutzkiosk.com\/go\/riley',\n  instagram:'https:\/\/www.instagram.com\/rileythabarber\/',\n  bio:`Master Barber in Plano with over 7 years behind the chair. Known for clean fades, sharp razor lines and precise shear work. If you're looking for a fresh cut, with attention to detail, I got you!`,\n  order:60,\n  photo:'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Riley_resized.jpg',\n  video:'https:\/\/www.instagram.com\/reel\/Cw-Ws52uiPO\/?utm_source=ig_web_copy_link&igsh=MzRlODBiNWFlZA=='\n},\n{ name:'Pete', booking:'https:\/\/elitekutzkiosk.com\/go\/pete', instagram:'', bio:`I bring years of barbering expertise with quick, clean results. Family-friendly service and on-time turnarounds are my standard.`, order:8, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Pete_resized.jpg',\n    video:'https:\/\/www.instagram.com\/reel\/DNayBpmuiqO\/?igsh=MWR0MDZkY3JlM3BwMQ==' },\n  { name:'Lou', booking:'', instagram:'https:\/\/www.instagram.com\/louchiethebarber?utm_source=ig_web_button_share_sheet&igsh=ZDNlZDc0MzIxNw==', bio:`With over 13 years of barbering experience, I specialize in precision cuts tailored to each client. My detail-oriented approach ensures you leave looking sharp and feeling confident.`, order:9, photo: 'https:\/\/elitekutz.com\/wp-content\/uploads\/2025\/09\/Lou_resized.jpg',\n    video:'https:\/\/www.instagram.com\/reel\/DKaXqpguae3\/?igsh=MWxwODl6bDd4YjIxeQ==' },\n{\n  name:'Carter',\n  booking:'https:\/\/elitekutzkiosk.com\/go\/carter',\n  instagram:'https:\/\/www.instagram.com\/kutzbycartier?igsh=cWxib3M5ejUwNzV5',\n  bio:`KutzbyCartier \u2702\ufe0f Master Barber | 20+ years experience. Precision fades, beard sculpting & celebrity cuts. BET, MTV, TV One, Stellars & Grammys.`,\n  order:200,\n  photo:'https:\/\/elitekutz.com\/wp-content\/uploads\/2026\/03\/Carter.jpeg',\n  video:'https:\/\/www.instagram.com\/reel\/DQ4djqCCdi0\/?igsh=MW90eTgzemtueWsxMQ=='\n},\n\n];\n\n\/\/ ---- Helpers (must be defined BEFORE renderBarbers) ----\nfunction slugify(n){return n.toLowerCase().replace(\/[^a-z0-9]+\/g,'-').replace(\/(^-|-$)\/g,'');}\nfunction ensureHttps(url){if(!url) return '';return \/^https?:\\\/\\\/\/i.test(url)?url:('https:\/\/'+url);}\nfunction isYoutubeOrVimeo(u){return \/youtube|youtu\\.be|vimeo\/i.test(u);}\nfunction isMp4(u){return \/\\.mp4(\\?.*)?$\/i.test(u);}\nfunction isInstagramReel(u){return \/instagram\\.com\\\/reel\\\/\/i.test(u);}\n\nconst PLACEHOLDER='data:image\/svg+xml;utf8,<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"600\" height=\"600\"><rect width=\"100%\" height=\"100%\" fill=\"%23141414\"\/><text x=\"50%\" y=\"50%\" dominant-baseline=\"middle\" text-anchor=\"middle\" fill=\"%239f9f9f\" font-family=\"Inter, Arial\" font-size=\"24\">Elite Kutz<\/text><\/svg>';\nconst igSVG='<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\"><path d=\"M224 141c-63.6 0-115 51.4-115 115s51.4 115 115 115 115-51.4 115-115-51.4-115-115-115zm0 190c-41.4 0-75-33.6-75-75s33.6-75 75-75 75 33.6 75 75-33.6 75-75 75zm146.4-194.7c0 14.9-12.1 27-27 27-14.9 0-27-12.1-27-27s12.1-27 27-27c14.9 0 27 12.1 27 27zM398.8 80c-7.8-20.9-24.5-37.6-45.4-45.4C327.2 24 224 24 224 24s-103.2 0-129.4 10.6c-20.9 7.8-37.6 24.5-45.4 45.4C38.6 106.2 38.6 192 38.6 192s0 85.8 10.6 112c7.8 20.9 24.5 37.6 45.4 45.4C120.8 360 224 360 224 360s103.2 0 129.4-10.6c20.9-7.8 37.6-24.5 45.4-45.4 10.6-26.2 10.6-112 10.6-112s0-85.8-10.6-112zM224 338c-80 0-144.9-64.9-144.9-144.9S144 48.2 224 48.2 368.9 113.1 368.9 193.1 304 338 224 338z\"\/><\/svg>';\nconst ttSVG='<svg viewBox=\"0 0 448 512\" aria-hidden=\"true\"><path d=\"M448 209.9c-70.7-3.3-120.3-35.3-150.8-70.9v224c0 61.9-50.9 111.9-112.8 111.9S71.6 424.9 71.6 363s50.9-112 112.8-112c5.8 0 11.5.5 17 1.4v69.4c-5.4-1.4-11.1-2.1-17-2.1-27.5 0-49.8 22.3-49.8 49.8s22.3 49.8 49.8 49.8c27.5 0 49.8-22.3 49.8-49.8V0h85.4c2.4 46.4 27.3 85.8 66.5 108.4 17.8 10.2 38.2 16.3 59.9 17.9v83.6z\"\/><\/svg>';\n\n\/\/ ---- Renderer (updated) ----\nfunction renderBarbers(){\n  const grid = document.getElementById('barbersGrid');\n  if(!grid) return;\n\n  const sorted = [...BARBERS].sort((a,b)=> (b.order||0) - (a.order||0));\n\n  sorted.forEach(b=>{\n    const card = document.createElement('article');\n    card.className = 'barber-card';\n\n    const imgSrc = b.photo || `\/assets\/barbers\/${slugify(b.name)}.jpg`;\n    const img   = `<img decoding=\"async\" src=\"${imgSrc}\" alt=\"${b.name}\" onerror=\"this.onerror=null;this.src='${PLACEHOLDER}'\">`;\n    const h3    = `<h3>${b.name}<\/h3>`;\n    const p     = `<p>${b.bio||''}<\/p>`;\n\n    const book  = b.booking\n      ? `<a class=\"btn cta\" href=\"${ensureHttps(b.booking)}\" target=\"_blank\" rel=\"noopener\">Book ${b.name}<\/a>` : '';\n\n    const showIgText = (b.name && b.name.toLowerCase() === 'pete'); \/\/ only Pete shows text label on IG icon\n    const igIcon = b.instagram\n      ? `<a class=\"btn light ig\" href=\"${ensureHttps(b.instagram)}\" target=\"_blank\" rel=\"noopener\" aria-label=\"Instagram\">${igSVG}${showIgText?'<span>Instagram<\/span>':''}<\/a>` : '';\n\n    const ttIcon = b.tiktok\n      ? `<a class=\"btn light tt\" href=\"${ensureHttps(b.tiktok)}\" target=\"_blank\" rel=\"noopener\" aria-label=\"TikTok\">${ttSVG}<\/a>` : '';\n\n    const social  = (igIcon || ttIcon) ? `<div class=\"social\">${igIcon}${ttIcon}<\/div>` : '';\n    const actions = (book || social) ? `<div class=\"actions\">${book}${social}<\/div>` : '';\n\n    \/\/ Build media area: IG \"Watch Reel\" (from video) and TikTok \"Watch Reel\" (from tiktok_reel)\n    const mediaParts = [];\n\n    if (b.video) {\n      const v = ensureHttps(b.video);\n      if (isYoutubeOrVimeo(v)) {\n        mediaParts.push(`<div class=\"embed\"><iframe src=\"${v}\" loading=\"lazy\" allowfullscreen title=\"${b.name} video\"><\/iframe><\/div>`);\n      } else if (isMp4(v)) {\n        mediaParts.push(`<div class=\"embed\"><video src=\"${v}\" controls playsinline muted><\/video><\/div>`);\n      } else if (isInstagramReel(v)) {\n        mediaParts.push(`<div class=\"actions\"><a class=\"btn light ig\" href=\"${v}\" target=\"_blank\" rel=\"noopener\">${igSVG}<span>Watch Reel<\/span><\/a><\/div>`);\n      } else {\n        mediaParts.push(`<div class=\"actions\"><a class=\"btn light\" href=\"${v}\" target=\"_blank\" rel=\"noopener\">Video<\/a><\/div>`);\n      }\n    }\n\n    if (b.tiktok_reel) {\n      const tv = ensureHttps(b.tiktok_reel);\n      mediaParts.push(`<div class=\"actions\"><a class=\"btn light tt\" href=\"${tv}\" target=\"_blank\" rel=\"noopener\">${ttSVG}<span>Watch Reel<\/span><\/a><\/div>`);\n    }\n\n    const media = mediaParts.join('');\n\n    card.innerHTML = img + h3 + p + actions + media;\n    grid.appendChild(card);\n  });\n\n  \/\/ sanity test: card count == data length\n  console.assert(\n    document.querySelectorAll('#barbersGrid .barber-card').length === [...BARBERS].length,\n    'Card count should equal BARBERS length'\n  );\n}\n\n\/\/ Run it\nrenderBarbers();\n\n\/* Remove any stray text like: Elite Kutz'\"> or just '\"> (any quotes\/>) *\/\n(function purgeWeirdShards(){\n  const root = document.getElementById('barbersGrid') || document.body;\n  const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n  const trash = [];\n  let n;\n\n  \/\/ Matches the whole \"Elite Kutz\" shard OR any combo of just quotes\/angle-brackets\n  const RE = \/^(?:Elite\\s*Kutz)?\\s*['\"]?\\s*>?$|^[<>'\"\\s]+$\/i;\n\n  while ((n = walker.nextNode())) {\n    const t = n.textContent.replace(\/\\u200B\/g,'').trim(); \/\/ strip zero-width chars\n    if (t && RE.test(t)) trash.push(n);\n  }\n  trash.forEach(x => x.parentNode && x.parentNode.removeChild(x));\n})();\n\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Book Online Services Privacy Terms Join Our Team Elite Deals Low Sensory Sunday Your neighborhood barbershop in Plano TX for sharp fades, tapers &#038; beard trims. Hours Mon10:00 AM \u2013 7:00 PM Tue10:00 AM \u2013 7:00 PM Wed10:00 AM \u2013 7:00 PM Thu10:00 AM \u2013 7:00 PM Fri9:00 AM \u2013 7:00 PM Sat8:00 AM \u2013 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/elitekutz.com\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Home (New)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"{\"document\":\"AACeBLyJ\/sYXgJfAphH8if7GFwbAl8CmEQK8if7GF4CXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcEwJfAphEAvIn+xheAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEfyJ\/sYXAICXwKYR\/In+xhcAgJfAphH8if7GFwCAl8CmEc+4ucgOAICXwKYRj7i5yA6Al8CmEY+4ucgOgJfAphHPuLnIDgSAl8CmEY+4ucgOwJfAphEAj7i5yA7Al8CmEQCPuLnIDsCXwKYRAI+4ucgOwJfAphEAj7i5yA7Al8CmEQCPuLnIDsCXwKYRAI+4ucgOwJfAphEAj7i5yA7Al8CmEQCPuLnIDsCXwKYRAI+4ucgOwJfAphFrz7i5yA4R0wOAqgH+qQECAQIKSr6pAQLkqQFeHpoB2gG8AvwCnATcBLoF+gWWB9YHsAjwCIwKzAqqC+oLig3KDawO+A4CnBAC2AyUDNQMlBLUEqgU6BS6FvoWihnKGZgb2BukHeQdrh\/uH7Yh9iG8I\/wjgCbAJoIowiiCKsIqgCzALLwt\/C2YM9gztjj2OJI+0j6wQ\/BDjEnMSaZO5k6CVJSMA9LkA6IBmgKS6QOa5wHukQL4tgO4tgPkqwOkqwPWoAOWoAPKlQOKlQPAigOAigP4\/gK4\/gLy8wKy8wLu6AKu6ALs3QKs3QLo0gKo0gLixwLYe6CGAeCGAYKIAcKIAaKJAeKJAYCLAcCLAZyMAdyMAbaNAfaNAY6PAc6PAaSQAeSQAbiRAfiRAYqTAcqTAZqUAdqUAaiVAeiVAbSWAfSWAb6XAf6XAYaZAcaZAYyaAcyaAZCbAdCbAZKcAdKcAZKdAdKdAZCeAdCeAYyfAcyfAYagAcagAb6gAf6gAbShAfShAaiiAeiiAZqjAdqjAYqkAcqkAbikAfikAaSlAeSlAY6mAc6mAbamAfamAZynAdynAYCoAcCoAaKoAeKoAYKpAf6cAQLeDBa8wgOECpQXpAgYjAK45AEBB5oBpKkBzKkBpAGiAaABngGcAZoBnAGeAaABzgmcDLgFlAKSApACjgKMAooCiAKGAoQCggKAAr4BvAGcBZ4FnAWeBZwFmgWwkQMBAbwI1Cr0tgOQC44LjAuKC4gLhguEC4ILhAvScKCGAaIBoAGeAZwBmgGYAZYBlAGSAZABjgGMAYoBiAGGAYQBggGAAT48Ojg2NDIwLiwqKCYkIv8CKACnAAcAKAMnACgAJwChAcQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqADEAKgAoQGoAcQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqADEAKgAxACoAMQAqAAhAMQAwQDEAqEAIQHBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAxAChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDBAKEAwQChAMEAoQDEAKECIQAoAicABAAnAAQAgQCEAIEAhACBAIQAJwAoBCcAKAkhAADa0gHc0QFzdGF0ZXZlcnNpb25jbGllbnRJZGlzVmFsaWRvcmlnaW5hbENvbnRlbnRuYW1lYXR0cmlidXRlc2NvbnRlbnRpbm5lckJsb2NrcyAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vcmlsZXknLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3JpbGUnLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3JpbCcsCiAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vcmknLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3InLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvLycsCiAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vaicsCiAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vamEnLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL2phbScsCiAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vamFtYScsCiAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vamFtYWwnLAogIGJpbzpgSSd2ZSBiZWVuIGEgYmFyYmVyIGluIHRoZSBFdWxlc3MgRGZ3IE1ldHJvIFBsZXggQXJlYSBmb3IgOSB5ZWFyJ3MuCk1hc3Rlcnkgb2YgbW9kZXJuIGFuZCB0cmFkaXRpb25hbCBiYXJiZXJpbmcgdGVjaG5pcXVlcywgaW5jbHVkaW5nIGZhZGVzLCB0YXBlcnMsIGxpbmUtdXBzLCBhbmQgY3VzdG9tIGRlc2lnbnMuYCwKICBiaW86YEkndmUgYmVlbiBhIGJhcmJlciBpbiB0aGUgRXVsZXNzRGZ3IE1ldHJvIFBsZXggQXJlYSBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIEV1bGVzRGZ3IE1ldHJvIFBsZXggQXJlYSBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIEV1bGVEZncgTWV0cm8gUGxleCBBcmVhIGZvciA5IHllYXIncy4KICBiaW86YEkndmUgYmVlbiBhIGJhcmJlciBpbiB0aGUgRXVsRGZ3IE1ldHJvIFBsZXggQXJlYSBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIEV1RGZ3IE1ldHJvIFBsZXggQXJlYSBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIEVEZncgTWV0cm8gUGxleCBBcmVhIGZvciA5IHllYXIncy4KICBiaW86YEkndmUgYmVlbiBhIGJhcmJlciBpbiB0aGUgRGZ3IE1ldHJvIFBsZXggQXJlYSBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIERmdyBNZXRybyBQbGV4IEFyZSBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIERmdyBNZXRybyBQbGV4IEFyIGZvciA5IHllYXIncy4KICBiaW86YEkndmUgYmVlbiBhIGJhcmJlciBpbiB0aGUgRGZ3IE1ldHJvIFBsZXggQSBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIERmdyBNZXRybyBQbGV4ICBmb3IgOSB5ZWFyJ3MuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIERmdyBNZXRybyBQbGV4IGZvciA5IHllYXIncy4KICBiaW86YEkndmUgYmVlbiBhIGJhcmJlciBpbiB0aGUgRGZ3IE1ldHJvIFBsZXggZm9yIDkgeWVhcnMuCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIERmdyBNZXRybyBQbGV4IGZvciA5IHllYXJzLk1hc3Rlcnkgb2YgbW9kZXJuIGFuZCB0cmFkaXRpb25hbCBiYXJiZXJpbmcgdGVjaG5pcXVlcywgaW5jbHVkaW5nIGZhZGVzLCB0YXBlcnMsIGxpbmUtdXBzLCBhbmQgY3VzdG9tIGRlc2lnbnMuYCwKICBiaW86YEkndmUgYmVlbiBhIGJhcmJlciBpbiB0aGUgRGZ3IE1ldHJvIFBsZXggZm9yIDkgeWVhcnMuIE1hc3Rlcnkgb2YgbW9kZXJuIGFuZCB0cmFkaXRpb25hbCBiYXJiZXJpbmcgdGVjaG5pcXVlcywgaW5jbHVkaW5nIGZhZGVzLCB0YXBlcnMsIGxpbmUtdXBzLCBhbmQgY3VzdG9tIGRlc2lnbnMuYCwKICBiaW86YEkndmUgYmVlbiBhIGJhcmJlciBpbiB0aGUgRGZ3IE1ldHJvIFBsZXggZm9yIDkgeWVhcnMuIE1hc3Rlcnkgb2YgbW9kZXJuIGFuZCB0cmFkaXRpb25hbCBiYXJiZXJpbmcgdGVjaG5pcXVlcyxpbmNsdWRpbmcgZmFkZXMsIHRhcGVycywgbGluZS11cHMsIGFuZCBjdXN0b20gZGVzaWducy5gLAogIGJpbzpgSSd2ZSBiZWVuIGEgYmFyYmVyIGluIHRoZSBEZncgTWV0cm8gUGxleCBmb3IgOSB5ZWFycy4gTWFzdGVyeSBvZiBtb2Rlcm4gYW5kIHRyYWRpdGlvbmFsIGJhcmJlcmluZyB0ZWNobmlxdWVzLCBpbmNsdWRpbmcgZmFkZXMsIHRhcGVycywgbGluZS11cHMsIGFuZCBjdXN0b20gZGVzaWducy5gLAogIGJpbzpgSSd2ZSBiZWVuIGEgYmFyYmVyIGluIHRoZSBEZiBNZXRybyBQbGV4IGZvciA5IHllYXJzLiBNYXN0ZXJ5IG9mIG1vZGVybiBhbmQgdHJhZGl0aW9uYWwgYmFyYmVyaW5nIHRlY2huaXF1ZXMsIGluY2x1ZGluZyBmYWRlcywgdGFwZXJzLCBsaW5lLXVwcywgYW5kIGN1c3RvbSBkZXNpZ25zLmAsCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIEQgTWV0cm8gUGxleCBmb3IgOSB5ZWFycy4gTWFzdGVyeSBvZiBtb2Rlcm4gYW5kIHRyYWRpdGlvbmFsIGJhcmJlcmluZyB0ZWNobmlxdWVzLCBpbmNsdWRpbmcgZmFkZXMsIHRhcGVycywgbGluZS11cHMsIGFuZCBjdXN0b20gZGVzaWducy5gLAogIGJpbzpgSSd2ZSBiZWVuIGEgYmFyYmVyIGluIHRoZSBERiBNZXRybyBQbGV4IGZvciA5IHllYXJzLiBNYXN0ZXJ5IG9mIG1vZGVybiBhbmQgdHJhZGl0aW9uYWwgYmFyYmVyaW5nIHRlY2huaXF1ZXMsIGluY2x1ZGluZyBmYWRlcywgdGFwZXJzLCBsaW5lLXVwcywgYW5kIGN1c3RvbSBkZXNpZ25zLmAsCiAgYmlvOmBJJ3ZlIGJlZW4gYSBiYXJiZXIgaW4gdGhlIERGVyBNZXRybyBQbGV4IGZvciA5IHllYXJzLiBNYXN0ZXJ5IG9mIG1vZGVybiBhbmQgdHJhZGl0aW9uYWwgYmFyYmVyaW5nIHRlY2huaXF1ZXMsIGluY2x1ZGluZyBmYWRlcywgdGFwZXJzLCBsaW5lLXVwcywgYW5kIGN1c3RvbSBkZXNpZ25zLmAsCnN0YXRldmVyc2lvbiAgbmFtZTonSmFtYWwnLAogIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS8yeGF6bmljZV9rdXR6P2lnc2g9WWpkcVptRjNjM2x1TjI1MycsCiAgYmlvOmBDbGVhbiBjdXRzLCBzaGFycCBmYWRlcywgYW5kIGNvbnNpc3RlbnQgcmVzdWx0cyDigJQgZm9jdXNlZCBvbiBkZXRhaWwgYW5kIGtlZXBpbmcgeW91IGxvb2tpbmcgeW91ciBiZXN0LmAsCiAgcGhvdG86J2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNC9qYW1hbC5qcGcnLAogIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvREZPZHc1Sk8ta2IvP2lnc2g9YlcxMk1HUm1jbVpoTkd0cycKc3RhdGVzYXZlZEF0c3RhdGVzYXZlZEJ5ICB7IG5hbWU6J1VyaScsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3VyaScsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS91cmkwX2RfYmFyYmVyLycsIGJpbzpgSSBhbSBVcmkgdGhlIEJhcmJlci4uLlRoZSBodW1ibGVzdCBiYXJiZXIgZXhwZXJpZW5jZSB5b3Ugd2lsbCBldmVyIGhhdmUuIEEgY3JhZnR5IGFuZCBwcmVjaXNlbHkgc2hhcnAgZXhwZXJpZW5jZSB0aGF0IG1ha2VzIHlvdSBmZWVsIGFuZCBsb29rIGdvb2QuYCwgb3JkZXI6ODAsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L1VyaV9yZXNpemVkLmpwZycsCiAgYm9va2luZzonJywKc3RhdGV2ZXJzaW9uZG9jdW1lbnRkYXRlZG9jdW1lbnRzbHVnZG9jdW1lbnRzdGF0dXNkb2N1bWVudHRpdGxlSG9tZSAoTmV3KWRvY3VtZW50Y29udGVudDwhLS0gd3A6aHRtbCAtLT4KPHN0eWxlIGlkPSJlay1maXhlZC1uYXYiPgogIC8qIHBhZ2Ugc3RheXMgYmxhY2sgKi8KICBodG1sLGJvZHl7YmFja2dyb3VuZDojMDAwICFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiAhaW1wb3J0YW50O30KCiAgLyogaGlkZSBXUCBmcm9udC1lbmQgZWRpdCBsaW5rICovCiAgLnBvc3QtZWRpdC1saW5re2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O30KCiAgLyogZml4ZWQgaGVhZGVyIHNoZWxsICovCiAgOnJvb3R7IC0tZWstaGVhZGVyLWg6IDEyMHB4OyB9IC8qIGhlaWdodCB0byByZXNlcnZlIGZvciAyIHJvd3MgKi8KICAjZWstaGVhZGVyewogICAgcG9zaXRpb246Zml4ZWQ7IHRvcDowOyBsZWZ0OjA7IHJpZ2h0OjA7IHotaW5kZXg6OTk5OTsKICAgIGJhY2tncm91bmQ6cmdiYSgwLDAsMCwuODgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6c2F0dXJhdGUoMTIwJSkgYmx1cigzcHgpOwogICAgYmFja2Ryb3AtZmlsdGVyOnNhdHVyYXRlKDEyMCUpIGJsdXIoM3B4KTsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjA2KTsKICB9CiAgLyogcmVzZXJ2ZSBzcGFjZSBzbyBjb250ZW50IGRvZXNuJ3Qgc2xpZGUgdW5kZXIgZml4ZWQgaGVhZGVyICovCiAgYm9keXsgcGFkZGluZy10b3A6IHZhcigtLWVrLWhlYWRlci1oKSAhaW1wb3J0YW50OyB9CgogIC8qIGNlbnRlcmluZyB3cmFwcGVyICovCiAgI2VrLWhlYWRlciAud3JhcHsKICAgIG1heC13aWR0aDoxMTAwcHg7IG1hcmdpbjowIGF1dG87IHBhZGRpbmc6MTJweCAxNnB4OwogIH0KCiAgLyogcm93IHN0eWxpbmcgKi8KICAjZWstaGVhZGVyIC5uYXYtcm93ewogICAgZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgIGdhcDoxNHB4OyBtYXJnaW46OHB4IDA7CiAgfQoKICAvKiBwaWxscyAqLwogICNlay1oZWFkZXIgLmJ0bnsKICAgIGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgIHBhZGRpbmc6MTJweCAxOHB4OyBib3JkZXItcmFkaXVzOjk5OTlweDsKICAgIGJhY2tncm91bmQ6IzExMTsgYm9yZGVyOjFweCBzb2xpZCAjMmEyYTJhOyBjb2xvcjojZmZmOyB0ZXh0LWRlY29yYXRpb246bm9uZTsKICAgIGZvbnQtd2VpZ2h0OjcwMDsgd2hpdGUtc3BhY2U6bm93cmFwOyBib3gtc2hhZG93OjAgMTBweCAyMnB4IHJnYmEoMCwwLDAsLjM1KTsKICB9CgogIC8qIHJvdyAyID0gdHdvIGVxdWFsIGJ1dHRvbnMgKi8KICAjZWstaGVhZGVyIC5yb3ctdHdvewogICAgZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsbWlubWF4KDAsMWZyKSk7IGdhcDoxNHB4OwogIH0KICAjZWstaGVhZGVyIC5yb3ctdHdvIC5idG57IHdpZHRoOjEwMCU7IHBhZGRpbmc6MTRweCAyMHB4OyB9CgogIC8qIHRpZ2h0ZXIgb24gc21hbGwgcGhvbmVzOyBhbGxvdyByb3ctMiB0byBzdGFjayBpZiB0b28gbmFycm93ICovCiAgQG1lZGlhIChtYXgtd2lkdGg6NjQwcHgpewogICAgOnJvb3R7IC0tZWstaGVhZGVyLWg6IDE1MnB4OyB9CiAgICAjZWstaGVhZGVyIC5idG57IHBhZGRpbmc6MTBweCAxNHB4OyBmb250LXNpemU6Ljk1cmVtOyB9CiAgfQogIEBtZWRpYSAobWF4LXdpZHRoOjUyMHB4KXsKICAgICNlay1oZWFkZXIgLnJvdy10d297IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7IH0KICAgIDpyb290eyAtLWVrLWhlYWRlci1oOiAxOTZweDsgfSAvKiBleHRyYSByb29tIHdoZW4gcm93LTIgc3RhY2tzICovCiAgfQo8L3N0eWxlPgoKPGhlYWRlciBpZD0iZWstaGVhZGVyIiBhcmlhLWxhYmVsPSJTaXRlIj4KICA8ZGl2IGNsYXNzPSJ3cmFwIj4KICAgIDwhLS0gUm93IDE6IGZvdXIgcGlsbHMgLS0+CjxuYXYgYXJpYS1sYWJlbD0iTWFpbiI+CiAgPCEtLSBSb3cgMSAtLT4KICA8ZGl2IGNsYXNzPSJuYXYtcm93IHJvdy1vbmUiPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vYm9vayI+Qm9vayBPbmxpbmU8L2E+CiAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSIjc2VydmljZXMiPlNlcnZpY2VzPC9hPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vcHJpdmFjeS8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5Qcml2YWN5PC9hPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vdGVybXMvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+VGVybXM8L2E+CiAgPC9kaXY+CgogIDwhLS0gUm93IDIgLS0+CiAgPGRpdiBjbGFzcz0ibmF2LXJvdyByb3ctdHdvIj4KICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2pvaW5vdXJ0ZWFtLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPkpvaW4gT3VyIFRlYW08L2E+CiAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9lbGl0ZWRlYWxzLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPkVsaXRlIERlYWxzPC9hPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vbG93LXNlbnNvcnkvaW5kZXguaHRtbCI+TG93IFNlbnNvcnkgU3VuZGF5PC9hPgogIDwvZGl2Pgo8L25hdj4KICA8L2Rpdj4KPC9oZWFkZXI+Cgo8bWFpbiBjbGFzcz0id3JhcCI+CiAgPHNlY3Rpb24gY2xhc3M9Imhlcm8iPgogICAgPGRpdiBjbGFzcz0ibG9nby1oZXJvIj4KICAgICAgPHZpZGVvIGNsYXNzPSJsb2dvLXZpZGVvIgogICAgICAgICAgICAgc3JjPSJodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvZWxpdGVrdXR6LWxvZ28ubXA0IgogICAgICAgICAgICAgYXV0b3BsYXkgbXV0ZWQgbG9vcCBwbGF5c2lubGluZT48L3ZpZGVvPgogICAgPC9kaXY+CjxwIGNsYXNzPSJpbnRybyBpbnRyby10b3AiPllvdXIgbmVpZ2hib3Job29kIDxzdHJvbmc+YmFyYmVyc2hvcCBpbiBQbGFubyBUWDwvc3Ryb25nPiBmb3Igc2hhcnAgZmFkZXMsIHRhcGVycyAmIGJlYXJkIHRyaW1zLjwvcD4KCiAgPC9zZWN0aW9uPgoKICA8c2VjdGlvbiBpZD0iaG91cnMiIGNsYXNzPSJzZWN0aW9uIj4KICAgIDxoMj5Ib3VyczwvaDI+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgPGRpdiBjbGFzcz0iaG91cnMiPgogICAgICAgIDxzcGFuPk1vbjwvc3Bhbj48c3Bhbj4xMDowMCBBTSDigJMgNzowMCBQTTwvc3Bhbj4KICAgICAgICA8c3Bhbj5UdWU8L3NwYW4+PHNwYW4+MTA6MDAgQU0g4oCTIDc6MDAgUE08L3NwYW4+CiAgICAgICAgPHNwYW4+V2VkPC9zcGFuPjxzcGFuPjEwOjAwIEFNIOKAkyA3OjAwIFBNPC9zcGFuPgogICAgICAgIDxzcGFuPlRodTwvc3Bhbj48c3Bhbj4xMDowMCBBTSDigJMgNzowMCBQTTwvc3Bhbj4KICAgICAgICA8c3Bhbj5Gcmk8L3NwYW4+PHNwYW4+OTowMCBBTSDigJMgNzowMCBQTTwvc3Bhbj4KICAgICAgICA8c3Bhbj5TYXQ8L3NwYW4+PHNwYW4+ODowMCBBTSDigJMgNTowMCBQTTwvc3Bhbj4KICAgICAgICA8c3Bhbj5TdW48L3NwYW4+PHNwYW4+MTI6MDAgUE0g4oCTIDQ6MDAgUE08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8cCBjbGFzcz0ibWluaSIgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij48cCBjbGFzcz0ibWluaSIgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij4KICBBbGwgdGltZXMgQ2VudHJhbC4gSG93ZXZlciwgaG9saWRheSBob3VycyBtYXkgdmFyeTsgdGhlcmVmb3JlLCBmb2xsb3cgdXMgb24gSW5zdGFncmFtIGZvciB1cGRhdGVzLgo8L3A+CjwvcD4KPC9kaXY+Cjwvc2VjdGlvbj4gIDwhLS0gZW5kIEhPVVJTIC0tPgoKPCEtLSA9PT0gRUxJVEUgS1VUWiDigJQgQXV0b3BsYXkgTG9vcCBWaWRlbyAobXV0ZSB0b2dnbGUgb25seSkgPT09IC0tPgo8ZGl2IGNsYXNzPSJlay12aWRlby13cmFwIj4KICA8dmlkZW8gaWQ9ImVrLWhlcm8tdmlkZW8iCiAgICAgICAgIGF1dG9wbGF5CiAgICAgICAgIGxvb3AKICAgICAgICAgbXV0ZWQKICAgICAgICAgcGxheXNpbmxpbmUKICAgICAgICAgcHJlbG9hZD0ibWV0YWRhdGEiPgogICAgPHNvdXJjZSBzcmM9Imh0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8xMC9WbjIwMjUxMDIxLTIyMDE0Ni5tcDQiIHR5cGU9InZpZGVvL21wNCI+CiAgICBZb3VyIGJyb3dzZXIgZG9lc27igJl0IHN1cHBvcnQgSFRNTDUgdmlkZW8uCiAgPC92aWRlbz4KCiAgPGRpdiBjbGFzcz0iZWstY29udHJvbHMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJWaWRlbyBjb250cm9scyI+CiAgICA8YnV0dG9uIGlkPSJlay1tdXRlIiBjbGFzcz0iZWstYnRuIiBhcmlhLWxhYmVsPSJVbm11dGUgdmlkZW8iPvCflIc8L2J1dHRvbj4KICA8L2Rpdj4KPC9kaXY+Cgo8c3R5bGU+CiAgOnJvb3QgeyAtLWVrLWJsdWU6IzFFOTBGRjsgLS1lay15ZWxsb3c6I0ZGRDQwMDsgLS1lay1kYXJrOiMwMDA7IC0tZWstd2hpdGU6I2ZmZjsgfQogIC5lay12aWRlby13cmFwe3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjkyMHB4O21hcmdpbjoxLjI1cmVtIGF1dG87Ym9yZGVyLXJhZGl1czoxOHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOiMwMDA7Ym94LXNoYWRvdzowIDEycHggMzBweCByZ2JhKDAsMCwwLC4zNSk7fQogIC5lay12aWRlby13cmFwIHZpZGVve2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6YXV0bzthc3BlY3QtcmF0aW86MTYvOTtiYWNrZ3JvdW5kOiMwMDA7fQogIC5lay1jb250cm9sc3twb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMnB4O2JvdHRvbToxMnB4O2Rpc3BsYXk6ZmxleDtnYXA6MTBweDt9CiAgLmVrLWJ0bntib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MTBweCAxMnB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOnZhcigtLWVrLXdoaXRlKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMCwwLDAsLjY1KSwgcmdiYSgwLDAsMCwuMzUpKTtib3gtc2hhZG93OjAgMnB4IDhweCByZ2JhKDAsMCwwLC4zNSk7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjEycyBlYXNlLCBib3gtc2hhZG93IC4xMnMgZWFzZTt9CiAgLmVrLWJ0bjpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuNDUpO30KICAvKiByZW1vdmVkICNlay1wbGF5IHJ1bGUgc2luY2UgdGhlcmUgaXMgbm8gcGxheSBidXR0b24gKi8KICAjZWstbXV0ZS5pcy1tdXRlZHtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWVrLXllbGxvdyksICNmZmUxNWMpO2NvbG9yOiMxMTE7fQoKICAvKiA9PSBFSyAyLXJvdyBuYXYgKHNjb3BlZCkgPT0gKi8KICAjZWstaGVhZGVyIC5uYXYtcm93ewogICAgZGlzcGxheTpmbGV4OwogICAgZmxleC13cmFwOndyYXA7CiAgICBnYXA6MTRweDsKICAgIGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBtYXJnaW46MTJweCAwOwogIH0KICAjZWstaGVhZGVyIC5uYXYtcm93IC5idG57CiAgICBkaXNwbGF5OmlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6Y2VudGVyOwogICAganVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgIHBhZGRpbmc6MTJweCAxOHB4OwogICAgYm9yZGVyLXJhZGl1czo5OTk5cHg7CiAgICBiYWNrZ3JvdW5kOiMxMTE7CiAgICBib3JkZXI6MXB4IHNvbGlkICMyYTJhMmE7CiAgICBjb2xvcjojZmZmOwogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICBmb250LXdlaWdodDo3MDA7CiAgICB3aGl0ZS1zcGFjZTpub3dyYXA7CiAgICBib3gtc2hhZG93OjAgMTBweCAyMnB4IHJnYmEoMCwwLDAsLjM1KTsKICB9CiAgI2VrLWhlYWRlciAubmF2LXJvdy5yb3ctdHdvewogICAgZGlzcGxheTpncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6MTRweDsKICB9CiAgI2VrLWhlYWRlciAubmF2LXJvdy5yb3ctdHdvIC5idG57CiAgICB3aWR0aDoxMDAlOwogICAgcGFkZGluZzoxNHB4IDIwcHg7CiAgfQogIEBtZWRpYSAobWF4LXdpZHRoOjUyMHB4KXsKICAgICNlay1oZWFkZXIgLm5hdi1yb3cucm93LXR3b3sgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjsgfQogIH0KPC9zdHlsZT4KCjxzY3JpcHQ+CiAgKGZ1bmN0aW9uKCl7CiAgICBjb25zdCB2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VrLWhlcm8tdmlkZW8nKTsKICAgIGNvbnN0IG11dGVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWstbXV0ZScpOwoKICAgIC8vIEF1dG9wbGF5IChtdXRlZCkgYW5kIGxvb3AgY29udGludW91c2x5CiAgICB2LmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXknLCAoKSA9PiB2LnBsYXkoKS5jYXRjaCgoKT0+e30pLCB7IG9uY2U6dHJ1ZSB9KTsKCiAgICBmdW5jdGlvbiBzeW5jKCl7CiAgICAgIG11dGVCdG4udGV4dENvbnRlbnQgPSB2Lm11dGVkID8gJ\/CflIcnIDogJ\/CflIonOwogICAgICBtdXRlQnRuLmNsYXNzTGlzdC50b2dnbGUoJ2lzLW11dGVkJywgdi5tdXRlZCk7CiAgICB9CgogICAgbXV0ZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgdi5tdXRlZCA9ICF2Lm11dGVkOwogICAgICBpZiAoIXYubXV0ZWQpIHYucGxheSgpLmNhdGNoKCgpPT57fSk7IC8vIGVuc3VyZSBwbGF5YmFjayBhZnRlciB1bm11dGUKICAgICAgc3luYygpOwogICAgfSk7CgogICAgWyd2b2x1bWVjaGFuZ2UnLCdlbmRlZCddLmZvckVhY2goZXYgPT4gdi5hZGRFdmVudExpc3RlbmVyKGV2LCBzeW5jKSk7CiAgICBzeW5jKCk7CiAgfSkoKTsKPC9zY3JpcHQ+Cgo8c2VjdGlvbiBpZD0iYmFyYmVycyIgY2xhc3M9InNlY3Rpb24iPgoKICAgIDxoMj5NZWV0IHRoZSBUZWFtPC9oMj4KICAgIDxkaXYgaWQ9ImJhcmJlcnNHcmlkIiBjbGFzcz0iZ3JpZCBiYXJiZXJzIj48L2Rpdj4KICAgIDxwIGNsYXNzPSJtaW5pIj5UYXAgYSBiYXJiZXIgdG8gYm9vayBvciB2aWV3IEluc3RhZ3JhbS4gVmlkZW9zIGFyZSBvcHRpb25hbCBhbmQgbWF5IG9wZW4gaW4gYSBuZXcgdGFiLjwvcD4KICA8L3NlY3Rpb24+CgogIDxzZWN0aW9uIGlkPSJzZXJ2aWNlcyIgY2xhc3M9InNlY3Rpb24iPgogICAgPGgyPlNlcnZpY2VzPC9oMj4KICAgIDxkaXYgY2xhc3M9ImdyaWQgc2VydmljZXMiPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPkFkdWx0IEhhaXJrdXR6PC9oMz48cD5DcmlzcCBmYWRlLCBwb2xpc2hlZCBhbmQgcHJvZmVzc2lvbmFsLjwvcD48cD48c3Ryb25nPiQzNTwvc3Ryb25nPiA8c3BhbiBjbGFzcz0ibWluaSI+QWRkIFJhem9yIExpbmUgKyQ1PC9zcGFuPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+QWR1bHQgSGFpcmt1dCAmYW1wOyBCZWFyZDwvaDM+PHA+RnJlc2ggY3V0IHdpdGggYSBwb2xpc2hlZCBiZWFyZCBmaW5pc2guPC9wPjxwPjxzdHJvbmc+JDQwPC9zdHJvbmc+IDxzcGFuIGNsYXNzPSJtaW5pIj5BZGQgUmF6b3IgTGluZSArJDU8L3NwYW4+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5Zb3VuZyBBZHVsdHogMTYgJmFtcDsgVW5kZXI8L2gzPjxwPlNoYXJwIGxvb2tzIGZvciB5b3VuZyB0cmVuZHNldHRlcnMuPC9wPjxwPjxzdHJvbmc+JDMwPC9zdHJvbmc+IDxzcGFuIGNsYXNzPSJtaW5pIj5BZGQgRGVzaWduICQ1Kzwvc3Bhbj48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPlNlbmlvcnMgNjUrPC9oMz48cD5DbGFzc2ljIGN1dHMgdGFpbG9yZWQgZm9yIHNlbmlvcnMuPC9wPjxwPjxzdHJvbmc+JDI1PC9zdHJvbmc+IDxzcGFuIGNsYXNzPSJtaW5pIj5BZGQgUmF6b3IgTGluZSArJDU8L3NwYW4+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5TZW5pb3JzIDY1KyAmYW1wOyBCZWFyZDwvaDM+PHA+U2hhcnAgc2VuaW9yIHN0eWxlcyBwbHVzIGJlYXJkIGdyb29taW5nLjwvcD48cD48c3Ryb25nPiQzMDwvc3Ryb25nPiA8c3BhbiBjbGFzcz0ibWluaSI+QWRkIFJhem9yIExpbmUgKyQ1PC9zcGFuPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+U2hhbXBvbzwvaDM+PHA+SW52aWdvcmF0aW5nIHdhc2ggbGVhdmluZyBoYWlyIGZyZXNoLCBzb2Z0LjwvcD48cD48c3Ryb25nPiQxNTwvc3Ryb25nPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+RWRnZSBVcDwvaDM+PHA+TGluZS11cCB0aGF0IGtlZXBzIHlvdSBsb29raW5nIGZyZXNoLjwvcD48cD48c3Ryb25nPiQxNTwvc3Ryb25nPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+QmVhcmQgVHJpbTwvaDM+PHA+QmVhcmQgY2FyZSB0YWlsb3JlZCB0byB5b3VyIHN0eWxlLjwvcD48cD48c3Ryb25nPiQxNTwvc3Ryb25nPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+SGFpcmxpbmUgRW5oYW5jZW1lbnQ8L2gzPjxwPkZ1bGxlciwgc2hhcnBlciwgbW9yZSBkZWZpbmVkIGhhaXJsaW5lIGRlbnNpdHkuPC9wPjxwPjxzdHJvbmc+JDEwPC9zdHJvbmc+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5FZGdlIFVwICZhbXA7IEJlYXJkPC9oMz48cD5QcmVjaXNpb24gdHJpbSBmb3IgYmVhcmQgYW5kIGhhaXJsaW5lLjwvcD48cD48c3Ryb25nPiQyMDwvc3Ryb25nPiA8c3BhbiBjbGFzcz0ibWluaSI+QWRkIFJhem9yICskNTwvc3Bhbj48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPlJhem9yIFNoYXZlICZhbXA7IEhvdCBUb3dlbDwvaDM+PHA+Q2xhc3NpYyBzaGF2ZSB3aXRoIHNvb3RoaW5nIGhvdCB0b3dlbC48L3A+PHA+PHN0cm9uZz4kNDU8L3N0cm9uZz48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPlJhem9yIEhlYWQgU2hhdmUgJmFtcDsgQmVhcmQ8L2gzPjxwPlBvbGlzaGVkIHNoYXZlIHdpdGggdGFpbG9yZWQgYmVhcmQgc3R5bGUuPC9wPjxwPjxzdHJvbmc+JDU1PC9zdHJvbmc+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5BZnJvcywgTGF5ZXIgS3V0ejwvaDM+PHA+Q3VzdG9tIEhhaXJrdXR6IGZvciBoYWlyIHdpdGggc2hhcGUgYW5kIHZvbHVtZS48L3A+PHA+PHN0cm9uZz4kNSs8L3N0cm9uZz48L3A+PC9hcnRpY2xlPgogICAgPC9kaXY+CiAgPC9zZWN0aW9uPgoKPHNlY3Rpb24gaWQ9ImxvY2F0aW9uIiBjbGFzcz0ibG9jYXRpb24tc2VjdGlvbiIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBtYXgtd2lkdGg6OTIwcHg7IG1hcmdpbjowIGF1dG87Ij4KICA8aDI+RmluZCBVcyDigJQgQmFyYmVyc2hvcCBpbiBQbGFubyBUWDwvaDI+CgogIDxwPgogICAgRWxpdGUgS3V0eiBpcyBjb252ZW5pZW50bHkgbG9jYXRlZCBhdCA8c3Ryb25nPjMxMzEgQ3VzdGVyIFJkLiwgU3VpdGUgMTkzLCBQbGFubywgVFg8L3N0cm9uZz4uCiAgICBMb29rIGZvciB0aGUgRWxpdGUgS3V0eiBzaWduLCBoZWFkIGluc2lkZSwgYW5kIGNoZWNrIGluLiBXZeKAmXJlIG9wZW4gZGFpbHkgKGhvbGlkYXkgaG91cnMgbWF5IHZhcnkpCiAgICBhbmQgcG9zdCB1cGRhdGVzIG9uIEluc3RhZ3JhbS4gT3VyIGJhcmJlcnMgZGVsaXZlciA8c3Ryb25nPnNoYXJwIGZhZGVzPC9zdHJvbmc+LCA8c3Ryb25nPnRhcGVyczwvc3Ryb25nPiwKICAgIGFuZCA8c3Ryb25nPmJlYXJkIHRyaW1zPC9zdHJvbmc+IHNvIHlvdSBsZWF2ZSBsb29raW5nIGFuZCBmZWVsaW5nIHlvdXIgYmVzdC4KICA8L3A+CgogIDxwPgogICAgQm9va2luZyBpcyBmYXN04oCUcmVzZXJ2ZSBvbmxpbmUgd2l0aCBhIG1hc3RlciBiYXJiZXIgaW4gc2Vjb25kcyBvciB3YWxrIGluIHdoZW4gaXTigJlzIGNvbnZlbmllbnQuCiAgICBXZeKAmXJlIGp1c3QgbWludXRlcyBmcm9tIDxzdHJvbmc+VVMtNzU8L3N0cm9uZz4gbmVhciA8c3Ryb25nPlBhcmtlciBSZC48L3N0cm9uZz4gSWYgeW914oCZcmUgc2VhcmNoaW5nIGZvciBhCiAgICB0cnVzdGVkIDxzdHJvbmc+YmFyYmVyc2hvcCBpbiBQbGFubywgVFg8L3N0cm9uZz4sIEVsaXRlIEt1dHogbWFrZXMgaXQgZWFzeSB0byBnZXQgaW4gdGhlIGNoYWlyIG9uIHRpbWUsIGV2ZXJ5IHRpbWUuCiAgPC9wPgoKICA8aDMgc3R5bGU9Im1hcmdpbi10b3A6MS4yNXJlbTsiPjMxMzEgQ3VzdGVyIFJkLiBTdWl0ZSAxOTMsIFBsYW5vLCBUWCA3NTA3NTwvaDM+CgogIDxwIGNsYXNzPSJtaW5pIiBzdHlsZT0ibWFyZ2luLXRvcDouNzVyZW07Ij4KICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9wbGFjZS8zMTMxK0N1c3RlcitSZCtTdWl0ZSsxOTMsK1BsYW5vLCtUWCs3NTA3NSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPk9wZW4gaW4gR29vZ2xlIE1hcHM8L2E+CiAgICAmbmJzcDvCtyZuYnNwOwogICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cucGxhbm8uZ292LyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPkNpdHkgb2YgUGxhbm88L2E+CiAgPC9wPgo8L3NlY3Rpb24+CgogICAgPGlmcmFtZSBjbGFzcz0ibWFwIiBsb2FkaW5nPSJsYXp5IiBhbGxvd2Z1bGxzY3JlZW4gc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHM\/cT0zMTMxJTIwQ3VzdGVyJTIwUmQuJTIwU3VpdGUlMjAxOTMlMkMlMjBQbGFubyUyQyUyMFRYJTJDJTIwNzUwNzUmb3V0cHV0PWVtYmVkIj48L2lmcmFtZT4KICA8L3NlY3Rpb24+CjwvbWFpbj4KCjxmb290ZXIgY2xhc3M9ImZvb3RlciI+CiAgPGRpdiBjbGFzcz0id3JhcCIgc3R5bGU9ImRpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6MTJweDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4iPgogICAgPGRpdj7CqSA8c3BhbiBpZD0ieXIiPjwvc3Bhbj4gRWxpdGUgS3V0ei4gQWxsIHJpZ2h0cyByZXNlcnZlZC48L2Rpdj4KCiAgICA8bmF2IGNsYXNzPSJmb290ZXItbGlua3MiIGFyaWEtbGFiZWw9IkxlZ2FsIj4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vcHJpdmFjeS8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5Qcml2YWN5IFBvbGljeTwvYT4gwrcKICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vdGVybXMvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+VGVybXMgb2YgU2VydmljZTwvYT4KICAgIDwvbmF2PgogIDwvZGl2PgoKPGRpdiBjbGFzcz0id3JhcCI+CiAgPGRpdiBjbGFzcz0ibWluaSBzaXRlLW5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9wOjhweDsiPgogICAgQWxsIHRpbWVzIENlbnRyYWwgwrcgUGxhbm8sIFRYCiAgPC9kaXY+Cgo8L2Zvb3Rlcj4KCjxzY3JpcHQ+Ci8vIEZvb3RlciB5ZWFyCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5cicpLnRleHRDb250ZW50ID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpOwoKLy8gPT09PT0gQmFyYmVycyAoc2FtZSBsaXN0IHlvdSBzYXcgZWFybGllcikgPT09PT0KY29uc3QgQkFSQkVSUyA9IFsKeyBuYW1lOidUYWphJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vdGFqYScsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS90cnVlYmxlbmRzXz91dG1fc291cmNlPWlnX3dlYl9idXR0b25fc2hhcmVfc2hlZXQmaWdzaD1aRE5sWkRjME16SXhOdz09JywgYmlvOmBJdHMgeWEgZ2lybCBUZWUhIERlbGl2ZXJpbmcgY3Jpc3B5IGN1dHMgYW5kIGZhZGVzLCBoYWlyIGNvbG9yIGFuZCBsb2MgcmV0d2lzdGluZyEgR3VhcmFudGVlZCB0byBsZWF2ZSBvdXQgZmVlbGluZyB5b3VyIGJlc3QhYCwgb3JkZXI6NzAsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L1RhamFfcmVzaXplZC5qcGcnLAogICAgdGlrdG9rOidodHRwczovL3d3dy50aWt0b2suY29tL0BfdGhhdGdybHRlZT9fdD1aVC05MDNNZ2RGemJhUCZfcj0xJywgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ETTd6S1otdVk5ai8\/aWdzaD1NVE55ZHpVMWFXUndkM1l4ZWc9PScgfSwKICB7IG5hbWU6J0ogTWlrZScsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL21pa2UnLAogaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2RlYm9uYWlyZ3Jvb21pbmdjbHViP3V0bV9zb3VyY2U9aWdfd2ViX2J1dHRvbl9zaGFyZV9zaGVldCZpZ3NoPVpETmxaRGMwTXpJeE53PT0nLCBiaW86YDIwIHllYXJzLiBERlcuIEZsYXdsZXNzIGN1dHMuIERlYm9uYWlyIEdyb29taW5n4oCUZXhwZXJ0IGJhcmJlcmluZyBmb3IgZXZlcnkgc3R5bGUsIGV2ZXJ5IGhhaXIgdHlwZS4gTGVhdmUgc2hhcnAuIEZlZWwgY29uZmlkZW50LmAsIG9yZGVyOjEwMCwgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvSU1HXzIwMjUwOTI3XzExNTMzMl82MDB4NjAwLmpwZycsCiAgICB0aWt0b2s6J2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQGRlYm9uYWlyZ3Jvb21lcj9fdD1aVC05MDNObDBEaVh2QyZfcj0xJywgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ETnN6bDNxTjZKNy8\/aWdzaD1ZV3BuWm05NFltTjZPSHB3JyB9LAp7IG5hbWU6J1NoZWx0b24nLCBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby9zaGVsdG9uJywgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2JlbGxhemVyX2t1dHM\/dXRtX3NvdXJjZT1pZ193ZWJfYnV0dG9uX3NoYXJlX3NoZWV0Jmlnc2g9WkRObFpEYzBNekl4Tnc9PScsIGJpbzpgV2l0aCAyNSsgeWVhcnMgb2YgZXhwZXJpZW5jZSwgSSBibGVuZCBvbGQtc2Nob29sIGNyYWZ0IHdpdGggbW9kZXJuIHRlY2huaXF1ZS4gQm9vayB3aXRoIG1lIGZvciBhIGNyaXNwLCB0YWlsb3JlZCBjdXQgdGhhdCBmaXRzIHlvdXIgc3R5bGUuYCwgb3JkZXI6MywgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvU2hlbHRvbl9yZXNpemVkLmpwZycsIHRpa3RvazonaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AYmFyYmVyX2N1dHMwNT9fdD1aVC05MDVHakZteHBlcCZfcj0xJywgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ET1E5bGxPRGEyTy8\/aWdzaD1NWE5rWmpObmVuaHJkbkZzY2c9PScgfSwKeyBuYW1lOidIb2xseXdvb2QnLCBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby9ob2xseXdvb2QnLCBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vdGhlLmdlbWV4cGVyaWVuY2U\/dXRtX3NvdXJjZT1pZ193ZWJfYnV0dG9uX3NoYXJlX3NoZWV0Jmlnc2g9WkRObFpEYzBNekl4Tnc9PScsIGJpbzpgRm9yIHR3byBkZWNhZGVzLCBJ4oCZdmUgYmVlbiBzaGFycGVuaW5nIG1vcmUgdGhhbiBjbGlwcGVyc+KAlEnigJl2ZSBiZWVuIHNoYXJwZW5pbmcgY29uZmlkZW5jZS4gTXkgbWlzc2lvbiBpcyB0byBtYWtlIGV2ZXJ5IGN1dCBhbiBleHBlcmllbmNlIHRoYXQgbGVhdmVzIHlvdSBsb29raW5nIGZyZXNoIGFuZCBmZWVsaW5nIHVuc3RvcHBhYmxlLmAsIG9yZGVyOjAsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L0hvbGx5d29vZF9yZXNpemVkLmpwZycsCiAgICB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0ROV0ZIWHhBcVNuLz9pZ3NoPU1UUnpPRGhxWVhwNmJEQmhhdz09JyB9LAp7IG5hbWU6J05lc2hhJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vbmVzaGEnLCBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20va29vbGF6emt1dHo\/dXRtX3NvdXJjZT1pZ193ZWJfYnV0dG9uX3NoYXJlX3NoZWV0Jmlnc2g9WkRObFpEYzBNekl4Tnc9PScsIGJpbzpgSSdtIE5lc2hhIExpY2Vuc2VkIEJhcmJlciBpbiBQbGFubyAmIHN1cnJvdW5kaW5nIGFyZWFzLiBTcGVjaWFsaXppbmcgaW4gZmFkaW5nIGFuZCBxdWFsaXR5IEtvb2xhenprdXR6ISFgLCBvcmRlcjo5MCwgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvTmVzaGFfcmVzaXplZC5qcGcnLAogICAgdGlrdG9rOidodHRwczovL3d3dy50aWt0b2suY29tL0Brb29sYXp6bmVzaGE\/X3Q9WlQtOTAzTmdsYmRpNVAmX3I9MScsdGlrdG9rX3JlZWw6ICdodHRwczovL3d3dy50aWt0b2suY29tL3QvWlA4UzM1cWFjLycsIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvREN0OWJadnVjZ0svP3V0bV9zb3VyY2U9aWdfd2ViX2NvcHlfbGluayZpZ3NoPU16UmxPREJpTldGbFpBPT0nIH0sCiAgICB0aWt0b2s6J2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQGVsLm1hcmlzcXVlcm8\/X3Q9WlQtOTAzTmRhOTRIbHUmX3I9MScsIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvQ3hpcnU0cE9UMXIvP3V0bV9zb3VyY2U9aWdfd2ViX2NvcHlfbGluayZpZ3NoPU16UmxPREJpTldGbFpBPT0nIH0sCnsgCiAgbmFtZTonTWFydGljZScsCiAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vbWFydGljZScsCiAgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21yLmNsYXNzaWNfY3V0ei8nLAogIGJpbzpgSeKAmW0gTWFydGljZSwgYSBNYXN0ZXIgQmFyYmVyIHdpdGggMTMrIHllYXJzIG9mIGV4cGVyaWVuY2UgaW4gdGhlIERGVyBhcmVhLiBJIHRha2UgcHJpZGUgaW4gcHJlY2lzaW9uLCBhcnRpc3RyeSwgYW5kIGRlbGl2ZXJpbmcgY2xlYW4sIHByb2Zlc3Npb25hbCBjdXRzIGZvciBldmVyeSBoYWlyIHR5cGUuYCwKICBvcmRlcjo2LAogIHBob3RvOidodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvTWFydGljZTFfcmVzaXplZC5qcGcnLAogIHRpa3RvazonaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AbWFydGljZV9tcmNsYXNzaWM\/X3Q9WlQtOTAzTlYyZFlIUVQmX3I9MScsCiAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ETWFuNnp4dVY2Wi8\/aWdzaD1NV2N6WWpCaWNUSm9PVEo0T0E9PScKfSwKewogIG9yZGVyOjEwLAp9LAp7CiAgbmFtZTonUmlsZXknLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3JpbGV5JywKICBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmlsZXl0aGFiYXJiZXIvJywKICBiaW86YE1hc3RlciBCYXJiZXIgaW4gUGxhbm8gd2l0aCBvdmVyIDcgeWVhcnMgYmVoaW5kIHRoZSBjaGFpci4gS25vd24gZm9yIGNsZWFuIGZhZGVzLCBzaGFycCByYXpvciBsaW5lcyBhbmQgcHJlY2lzZSBzaGVhciB3b3JrLiBJZiB5b3UncmUgbG9va2luZyBmb3IgYSBmcmVzaCBjdXQsIHdpdGggYXR0ZW50aW9uIHRvIGRldGFpbCwgSSBnb3QgeW91IWAsCiAgb3JkZXI6NjAsCiAgcGhvdG86J2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9SaWxleV9yZXNpemVkLmpwZycsCiAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9Ddy1XczUydWlQTy8\/dXRtX3NvdXJjZT1pZ193ZWJfY29weV9saW5rJmlnc2g9TXpSbE9EQmlOV0ZsWkE9PScKfSwKeyBuYW1lOidQZXRlJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vcGV0ZScsIGluc3RhZ3JhbTonJywgYmlvOmBJIGJyaW5nIHllYXJzIG9mIGJhcmJlcmluZyBleHBlcnRpc2Ugd2l0aCBxdWljaywgY2xlYW4gcmVzdWx0cy4gRmFtaWx5LWZyaWVuZGx5IHNlcnZpY2UgYW5kIG9uLXRpbWUgdHVybmFyb3VuZHMgYXJlIG15IHN0YW5kYXJkLmAsIG9yZGVyOjgsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L1BldGVfcmVzaXplZC5qcGcnLAogICAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ETmF5QnBtdWlxTy8\/aWdzaD1NV1IwTURaa1kzSmxNM0J3TVE9PScgfSwKICB7IG5hbWU6J0xvdScsIGJvb2tpbmc6JycsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9sb3VjaGlldGhlYmFyYmVyP3V0bV9zb3VyY2U9aWdfd2ViX2J1dHRvbl9zaGFyZV9zaGVldCZpZ3NoPVpETmxaRGMwTXpJeE53PT0nLCBiaW86YFdpdGggb3ZlciAxMyB5ZWFycyBvZiBiYXJiZXJpbmcgZXhwZXJpZW5jZSwgSSBzcGVjaWFsaXplIGluIHByZWNpc2lvbiBjdXRzIHRhaWxvcmVkIHRvIGVhY2ggY2xpZW50LiBNeSBkZXRhaWwtb3JpZW50ZWQgYXBwcm9hY2ggZW5zdXJlcyB5b3UgbGVhdmUgbG9va2luZyBzaGFycCBhbmQgZmVlbGluZyBjb25maWRlbnQuYCwgb3JkZXI6OSwgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvTG91X3Jlc2l6ZWQuanBnJywKICAgIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvREthWHFwZ3VhZTMvP2lnc2g9TVd4d09EbDZiRGQ0WWpJeGVRPT0nIH0sCnsKICBuYW1lOidDYXJ0ZXInLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL2NhcnRlcicsCiAgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2t1dHpieWNhcnRpZXI\/aWdzaD1jV3hpYjNNNWVqVXdOelY1JywKICBiaW86YEt1dHpieUNhcnRpZXIg4pyC77iPIE1hc3RlciBCYXJiZXIgfCAyMCsgeWVhcnMgZXhwZXJpZW5jZS4gUHJlY2lzaW9uIGZhZGVzLCBiZWFyZCBzY3VscHRpbmcgJiBjZWxlYnJpdHkgY3V0cy4gQkVULCBNVFYsIFRWIE9uZSwgU3RlbGxhcnMgJiBHcmFtbXlzLmAsCiAgb3JkZXI6MjAwLAogIHBob3RvOidodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDMvQ2FydGVyLmpwZWcnLAogIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvRFE0ZGpxQ0NkaTAvP2lnc2g9TVc5MGVUZ3plbXR1ZVdzeE1RPT0nCn0sCgpdOwoKLy8gLS0tLSBIZWxwZXJzIChtdXN0IGJlIGRlZmluZWQgQkVGT1JFIHJlbmRlckJhcmJlcnMpIC0tLS0KZnVuY3Rpb24gc2x1Z2lmeShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XSsvZywnLScpLnJlcGxhY2UoLyheLXwtJCkvZywnJyk7fQpmdW5jdGlvbiBlbnN1cmVIdHRwcyh1cmwpe2lmKCF1cmwpIHJldHVybiAnJztyZXR1cm4gL15odHRwcz86XC9cLy9pLnRlc3QodXJsKT91cmw6KCdodHRwczovLycrdXJsKTt9CmZ1bmN0aW9uIGlzWW91dHViZU9yVmltZW8odSl7cmV0dXJuIC95b3V0dWJlfHlvdXR1XC5iZXx2aW1lby9pLnRlc3QodSk7fQpmdW5jdGlvbiBpc01wNCh1KXtyZXR1cm4gL1wubXA0KFw\/LiopPyQvaS50ZXN0KHUpO30KZnVuY3Rpb24gaXNJbnN0YWdyYW1SZWVsKHUpe3JldHVybiAvaW5zdGFncmFtXC5jb21cL3JlZWxcLy9pLnRlc3QodSk7fQoKY29uc3QgUExBQ0VIT0xERVI9J2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjYwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0iJTIzMTQxNDE0Ii8+PHRleHQgeD0iNTAlIiB5PSI1MCUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiUyMzlmOWY5ZiIgZm9udC1mYW1pbHk9IkludGVyLCBBcmlhbCIgZm9udC1zaXplPSIyNCI+RWxpdGUgS3V0ejwvdGV4dD48L3N2Zz4nOwpjb25zdCBpZ1NWRz0nPHN2ZyB2aWV3Qm94PSIwIDAgNDQ4IDUxMiIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0yMjQgMTQxYy02My42IDAtMTE1IDUxLjQtMTE1IDExNXM1MS40IDExNSAxMTUgMTE1IDExNS01MS40IDExNS0xMTUtNTEuNC0xMTUtMTE1LTExNXptMCAxOTBjLTQxLjQgMC03NS0zMy42LTc1LTc1czMzLjYtNzUgNzUtNzUgNzUgMzMuNiA3NSA3NS0zMy42IDc1LTc1IDc1em0xNDYuNC0xOTQuN2MwIDE0LjktMTIuMSAyNy0yNyAyNy0xNC45IDAtMjctMTIuMS0yNy0yN3MxMi4xLTI3IDI3LTI3YzE0LjkgMCAyNyAxMi4xIDI3IDI3ek0zOTguOCA4MGMtNy44LTIwLjktMjQuNS0zNy42LTQ1LjQtNDUuNEMzMjcuMiAyNCAyMjQgMjQgMjI0IDI0cy0xMDMuMiAwLTEyOS40IDEwLjZjLTIwLjkgNy44LTM3LjYgMjQuNS00NS40IDQ1LjRDMzguNiAxMDYuMiAzOC42IDE5MiAzOC42IDE5MnMwIDg1LjggMTAuNiAxMTJjNy44IDIwLjkgMjQuNSAzNy42IDQ1LjQgNDUuNEMxMjAuOCAzNjAgMjI0IDM2MCAyMjQgMzYwczEwMy4yIDAgMTI5LjQtMTAuNmMyMC45LTcuOCAzNy42LTI0LjUgNDUuNC00NS40IDEwLjYtMjYuMiAxMC42LTExMiAxMC42LTExMnMwLTg1LjgtMTAuNi0xMTJ6TTIyNCAzMzhjLTgwIDAtMTQ0LjktNjQuOS0xNDQuOS0xNDQuOVMxNDQgNDguMiAyMjQgNDguMiAzNjguOSAxMTMuMSAzNjguOSAxOTMuMSAzMDQgMzM4IDIyNCAzMzh6Ii8+PC9zdmc+JzsKY29uc3QgdHRTVkc9Jzxzdmcgdmlld0JveD0iMCAwIDQ0OCA1MTIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNNDQ4IDIwOS45Yy03MC43LTMuMy0xMjAuMy0zNS4zLTE1MC44LTcwLjl2MjI0YzAgNjEuOS01MC45IDExMS45LTExMi44IDExMS45UzcxLjYgNDI0LjkgNzEuNiAzNjNzNTAuOS0xMTIgMTEyLjgtMTEyYzUuOCAwIDExLjUuNSAxNyAxLjR2NjkuNGMtNS40LTEuNC0xMS4xLTIuMS0xNy0yLjEtMjcuNSAwLTQ5LjggMjIuMy00OS44IDQ5LjhzMjIuMyA0OS44IDQ5LjggNDkuOGMyNy41IDAgNDkuOC0yMi4zIDQ5LjgtNDkuOFYwaDg1LjRjMi40IDQ2LjQgMjcuMyA4NS44IDY2LjUgMTA4LjQgMTcuOCAxMC4yIDM4LjIgMTYuMyA1OS45IDE3Ljl2ODMuNnoiLz48L3N2Zz4nOwoKLy8gLS0tLSBSZW5kZXJlciAodXBkYXRlZCkgLS0tLQpmdW5jdGlvbiByZW5kZXJCYXJiZXJzKCl7CiAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXJiZXJzR3JpZCcpOwogIGlmKCFncmlkKSByZXR1cm47CgogIGNvbnN0IHNvcnRlZCA9IFsuLi5CQVJCRVJTXS5zb3J0KChhLGIpPT4gKGIub3JkZXJ8fDApIC0gKGEub3JkZXJ8fDApKTsKCiAgc29ydGVkLmZvckVhY2goYj0+ewogICAgY29uc3QgY2FyZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FydGljbGUnKTsKICAgIGNhcmQuY2xhc3NOYW1lID0gJ2JhcmJlci1jYXJkJzsKCiAgICBjb25zdCBpbWdTcmMgPSBiLnBob3RvIHx8IGAvYXNzZXRzL2JhcmJlcnMvJHtzbHVnaWZ5KGIubmFtZSl9LmpwZ2A7CiAgICBjb25zdCBpbWcgICA9IGA8aW1nIHNyYz0iJHtpbWdTcmN9IiBhbHQ9IiR7Yi5uYW1lfSIgb25lcnJvcj0idGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9JyR7UExBQ0VIT0xERVJ9JyI+YDsKICAgIGNvbnN0IGgzICAgID0gYDxoMz4ke2IubmFtZX08L2gzPmA7CiAgICBjb25zdCBwICAgICA9IGA8cD4ke2IuYmlvfHwnJ308L3A+YDsKCiAgICBjb25zdCBib29rICA9IGIuYm9va2luZwogICAgICA\/IGA8YSBjbGFzcz0iYnRuIGN0YSIgaHJlZj0iJHtlbnN1cmVIdHRwcyhiLmJvb2tpbmcpfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPkJvb2sgJHtiLm5hbWV9PC9hPmAgOiAnJzsKCiAgICBjb25zdCBzaG93SWdUZXh0ID0gKGIubmFtZSAmJiBiLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3BldGUnKTsgLy8gb25seSBQZXRlIHNob3dzIHRleHQgbGFiZWwgb24gSUcgaWNvbgogICAgY29uc3QgaWdJY29uID0gYi5pbnN0YWdyYW0KICAgICAgPyBgPGEgY2xhc3M9ImJ0biBsaWdodCBpZyIgaHJlZj0iJHtlbnN1cmVIdHRwcyhiLmluc3RhZ3JhbSl9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgYXJpYS1sYWJlbD0iSW5zdGFncmFtIj4ke2lnU1ZHfSR7c2hvd0lnVGV4dD8nPHNwYW4+SW5zdGFncmFtPC9zcGFuPic6Jyd9PC9hPmAgOiAnJzsKCiAgICBjb25zdCB0dEljb24gPSBiLnRpa3RvawogICAgICA\/IGA8YSBjbGFzcz0iYnRuIGxpZ2h0IHR0IiBocmVmPSIke2Vuc3VyZUh0dHBzKGIudGlrdG9rKX0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiBhcmlhLWxhYmVsPSJUaWtUb2siPiR7dHRTVkd9PC9hPmAgOiAnJzsKCiAgICBjb25zdCBzb2NpYWwgID0gKGlnSWNvbiB8fCB0dEljb24pID8gYDxkaXYgY2xhc3M9InNvY2lhbCI+JHtpZ0ljb259JHt0dEljb259PC9kaXY+YCA6ICcnOwogICAgY29uc3QgYWN0aW9ucyA9IChib29rIHx8IHNvY2lhbCkgPyBgPGRpdiBjbGFzcz0iYWN0aW9ucyI+JHtib29rfSR7c29jaWFsfTwvZGl2PmAgOiAnJzsKCiAgICAvLyBCdWlsZCBtZWRpYSBhcmVhOiBJRyAiV2F0Y2ggUmVlbCIgKGZyb20gdmlkZW8pIGFuZCBUaWtUb2sgIldhdGNoIFJlZWwiIChmcm9tIHRpa3Rva19yZWVsKQogICAgY29uc3QgbWVkaWFQYXJ0cyA9IFtdOwoKICAgIGlmIChiLnZpZGVvKSB7CiAgICAgIGNvbnN0IHYgPSBlbnN1cmVIdHRwcyhiLnZpZGVvKTsKICAgICAgaWYgKGlzWW91dHViZU9yVmltZW8odikpIHsKICAgICAgICBtZWRpYVBhcnRzLnB1c2goYDxkaXYgY2xhc3M9ImVtYmVkIj48aWZyYW1lIHNyYz0iJHt2fSIgbG9hZGluZz0ibGF6eSIgYWxsb3dmdWxsc2NyZWVuIHRpdGxlPSIke2IubmFtZX0gdmlkZW8iPjwvaWZyYW1lPjwvZGl2PmApOwogICAgICB9IGVsc2UgaWYgKGlzTXA0KHYpKSB7CiAgICAgICAgbWVkaWFQYXJ0cy5wdXNoKGA8ZGl2IGNsYXNzPSJlbWJlZCI+PHZpZGVvIHNyYz0iJHt2fSIgY29udHJvbHMgcGxheXNpbmxpbmUgbXV0ZWQ+PC92aWRlbz48L2Rpdj5gKTsKICAgICAgfSBlbHNlIGlmIChpc0luc3RhZ3JhbVJlZWwodikpIHsKICAgICAgICBtZWRpYVBhcnRzLnB1c2goYDxkaXYgY2xhc3M9ImFjdGlvbnMiPjxhIGNsYXNzPSJidG4gbGlnaHQgaWciIGhyZWY9IiR7dn0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4ke2lnU1ZHfTxzcGFuPldhdGNoIFJlZWw8L3NwYW4+PC9hPjwvZGl2PmApOwogICAgICB9IGVsc2UgewogICAgICAgIG1lZGlhUGFydHMucHVzaChgPGRpdiBjbGFzcz0iYWN0aW9ucyI+PGEgY2xhc3M9ImJ0biBsaWdodCIgaHJlZj0iJHt2fSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPlZpZGVvPC9hPjwvZGl2PmApOwogICAgICB9CiAgICB9CgogICAgaWYgKGIudGlrdG9rX3JlZWwpIHsKICAgICAgY29uc3QgdHYgPSBlbnN1cmVIdHRwcyhiLnRpa3Rva19yZWVsKTsKICAgICAgbWVkaWFQYXJ0cy5wdXNoKGA8ZGl2IGNsYXNzPSJhY3Rpb25zIj48YSBjbGFzcz0iYnRuIGxpZ2h0IHR0IiBocmVmPSIke3R2fSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPiR7dHRTVkd9PHNwYW4+V2F0Y2ggUmVlbDwvc3Bhbj48L2E+PC9kaXY+YCk7CiAgICB9CgogICAgY29uc3QgbWVkaWEgPSBtZWRpYVBhcnRzLmpvaW4oJycpOwoKICAgIGNhcmQuaW5uZXJIVE1MID0gaW1nICsgaDMgKyBwICsgYWN0aW9ucyArIG1lZGlhOwogICAgZ3JpZC5hcHBlbmRDaGlsZChjYXJkKTsKICB9KTsKCiAgLy8gc2FuaXR5IHRlc3Q6IGNhcmQgY291bnQgPT0gZGF0YSBsZW5ndGgKICBjb25zb2xlLmFzc2VydCgKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNiYXJiZXJzR3JpZCAuYmFyYmVyLWNhcmQnKS5sZW5ndGggPT09IFsuLi5CQVJCRVJTXS5sZW5ndGgsCiAgICAnQ2FyZCBjb3VudCBzaG91bGQgZXF1YWwgQkFSQkVSUyBsZW5ndGgnCiAgKTsKfQoKLy8gUnVuIGl0CnJlbmRlckJhcmJlcnMoKTsKCi8qIFJlbW92ZSBhbnkgc3RyYXkgdGV4dCBsaWtlOiBFbGl0ZSBLdXR6JyI+IG9yIGp1c3QgJyI+IChhbnkgcXVvdGVzLz4pICovCihmdW5jdGlvbiBwdXJnZVdlaXJkU2hhcmRzKCl7CiAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXJiZXJzR3JpZCcpIHx8IGRvY3VtZW50LmJvZHk7CiAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyb290LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgbnVsbCk7CiAgY29uc3QgdHJhc2ggPSBbXTsKICBsZXQgbjsKCiAgLy8gTWF0Y2hlcyB0aGUgd2hvbGUgIkVsaXRlIEt1dHoiIHNoYXJkIE9SIGFueSBjb21ibyBvZiBqdXN0IHF1b3Rlcy9hbmdsZS1icmFja2V0cwogIGNvbnN0IFJFID0gL14oPzpFbGl0ZVxzKkt1dHopP1xzKlsnIl0\/XHMqPj8kfF5bPD4nIlxzXSskL2k7CgogIHdoaWxlICgobiA9IHdhbGtlci5uZXh0Tm9kZSgpKSkgewogICAgY29uc3QgdCA9IG4udGV4dENvbnRlbnQucmVwbGFjZSgvXHUyMDBCL2csJycpLnRyaW0oKTsgLy8gc3RyaXAgemVyby13aWR0aCBjaGFycwogICAgaWYgKHQgJiYgUkUudGVzdCh0KSkgdHJhc2gucHVzaChuKTsKICB9CiAgdHJhc2guZm9yRWFjaCh4ID0+IHgucGFyZW50Tm9kZSAmJiB4LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoeCkpOwp9KSgpOwoKPC9zY3JpcHQ+CjwhLS0gL3dwOmh0bWwgLS0+ZG9jdW1lbnRleGNlcnB0ZG9jdW1lbnRhdXRob3Jkb2N1bWVudGZlYXR1cmVkX21lZGlhZG9jdW1lbnRjb21tZW50X3N0YXR1c2RvY3VtZW50cGluZ19zdGF0dXNkb2N1bWVudHRlbXBsYXRlZG9jdW1lbnRtZXRhb21fZGlzYWJsZV9hbGxfY2FtcGFpZ25zX2V4YWN0bWV0cmljc19za2lwX3RyYWNraW5nX2V4YWN0bWV0cmljc19zaXRlbm90ZV9hY3RpdmVfZXhhY3RtZXRyaWNzX3NpdGVub3RlX25vdGVfZXhhY3RtZXRyaWNzX3NpdGVub3RlX2NhdGVnb3J5X21vbnN0ZXJpbnNpZ2h0c19za2lwX3RyYWNraW5nX21vbnN0ZXJpbnNpZ2h0c19zaXRlbm90ZV9hY3RpdmVfbW9uc3Rlcmluc2lnaHRzX3NpdGVub3RlX25vdGVfbW9uc3Rlcmluc2lnaHRzX3NpdGVub3RlX2NhdGVnb3J5Zm9vdG5vdGVzZG9jdW1lbnRibG9ja3MFBwgHDwQKBwsxMC8uLSwtLi8wMbsCiQGIAYcBhgGFAYQBgwGCAYEBgAE\/Pj2tAq4CrQKuAq0CrAKtAq4CBQcQjQGwAZICBQcFB6MFDgUHCAQIBAgGCAUKCAee4QGqCwyVcggHCAYIDggOCAtIAQQYGx0bHx4gHiIJCAYRAQAABwEHAAABAAAAAQYACQEHAEEAAEIBAXJBLDFBAacFAaYFAaUFAaQFAaMFAaIFAaEFAaAFAaEFAaIFQQAwAS8BLgEtASwBKwEqASkBKAEnASYBJQEkASMBIgEhASABHwEeAR0BHAEbARoBGQEYARcBFgEVARQBEwESAREBEAEPQQaCBZIEhgFBDggDUgB9AXckZDdlYTQ3MjUtZjY0Ny00NGE3LTlhNzQtOWQ2OWZjYWEyOGNmeHfOtQE8c3R5bGUgaWQ9ImVrLWZpeGVkLW5hdiI+CiAgLyogcGFnZSBzdGF5cyBibGFjayAqLwogIGh0bWwsYm9keXtiYWNrZ3JvdW5kOiMwMDAgIWltcG9ydGFudDtjb2xvcjojZmZmICFpbXBvcnRhbnQ7fQoKICAvKiBoaWRlIFdQIGZyb250LWVuZCBlZGl0IGxpbmsgKi8KICAucG9zdC1lZGl0LWxpbmt7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fQoKICAvKiBmaXhlZCBoZWFkZXIgc2hlbGwgKi8KICA6cm9vdHsgLS1lay1oZWFkZXItaDogMTIwcHg7IH0gLyogaGVpZ2h0IHRvIHJlc2VydmUgZm9yIDIgcm93cyAqLwogICNlay1oZWFkZXJ7CiAgICBwb3NpdGlvbjpmaXhlZDsgdG9wOjA7IGxlZnQ6MDsgcmlnaHQ6MDsgei1pbmRleDo5OTk5OwogICAgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLC44OCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpzYXR1cmF0ZSgxMjAlKSBibHVyKDNweCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6c2F0dXJhdGUoMTIwJSkgYmx1cigzcHgpOwogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMDYpOwogIH0KICAvKiByZXNlcnZlIHNwYWNlIHNvIGNvbnRlbnQgZG9lc24ndCBzbGlkZSB1bmRlciBmaXhlZCBoZWFkZXIgKi8KICBib2R5eyBwYWRkaW5nLXRvcDogdmFyKC0tZWstaGVhZGVyLWgpICFpbXBvcnRhbnQ7IH0KCiAgLyogY2VudGVyaW5nIHdyYXBwZXIgKi8KICAjZWstaGVhZGVyIC53cmFwewogICAgbWF4LXdpZHRoOjExMDBweDsgbWFyZ2luOjAgYXV0bzsgcGFkZGluZzoxMnB4IDE2cHg7CiAgfQoKICAvKiByb3cgc3R5bGluZyAqLwogICNlay1oZWFkZXIgLm5hdi1yb3d7CiAgICBkaXNwbGF5OmZsZXg7IGZsZXgtd3JhcDp3cmFwOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgZ2FwOjE0cHg7IG1hcmdpbjo4cHggMDsKICB9CgogIC8qIHBpbGxzICovCiAgI2VrLWhlYWRlciAuYnRuewogICAgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgcGFkZGluZzoxMnB4IDE4cHg7IGJvcmRlci1yYWRpdXM6OTk5OXB4OwogICAgYmFja2dyb3VuZDojMTExOyBib3JkZXI6MXB4IHNvbGlkICMyYTJhMmE7IGNvbG9yOiNmZmY7IHRleHQtZGVjb3JhdGlvbjpub25lOwogICAgZm9udC13ZWlnaHQ6NzAwOyB3aGl0ZS1zcGFjZTpub3dyYXA7IGJveC1zaGFkb3c6MCAxMHB4IDIycHggcmdiYSgwLDAsMCwuMzUpOwogIH0KCiAgLyogcm93IDIgPSB0d28gZXF1YWwgYnV0dG9ucyAqLwogICNlay1oZWFkZXIgLnJvdy10d297CiAgICBkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKTsgZ2FwOjE0cHg7CiAgfQogICNlay1oZWFkZXIgLnJvdy10d28gLmJ0bnsgd2lkdGg6MTAwJTsgcGFkZGluZzoxNHB4IDIwcHg7IH0KCiAgLyogdGlnaHRlciBvbiBzbWFsbCBwaG9uZXM7IGFsbG93IHJvdy0yIHRvIHN0YWNrIGlmIHRvbyBuYXJyb3cgKi8KICBAbWVkaWEgKG1heC13aWR0aDo2NDBweCl7CiAgICA6cm9vdHsgLS1lay1oZWFkZXItaDogMTUycHg7IH0KICAgICNlay1oZWFkZXIgLmJ0bnsgcGFkZGluZzoxMHB4IDE0cHg7IGZvbnQtc2l6ZTouOTVyZW07IH0KICB9CiAgQG1lZGlhIChtYXgtd2lkdGg6NTIwcHgpewogICAgI2VrLWhlYWRlciAucm93LXR3b3sgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjsgfQogICAgOnJvb3R7IC0tZWstaGVhZGVyLWg6IDE5NnB4OyB9IC8qIGV4dHJhIHJvb20gd2hlbiByb3ctMiBzdGFja3MgKi8KICB9Cjwvc3R5bGU+Cgo8aGVhZGVyIGlkPSJlay1oZWFkZXIiIGFyaWEtbGFiZWw9IlNpdGUiPgogIDxkaXYgY2xhc3M9IndyYXAiPgogICAgPCEtLSBSb3cgMTogZm91ciBwaWxscyAtLT4KPG5hdiBhcmlhLWxhYmVsPSJNYWluIj4KICA8IS0tIFJvdyAxIC0tPgogIDxkaXYgY2xhc3M9Im5hdi1yb3cgcm93LW9uZSI+CiAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9ib29rIj5Cb29rIE9ubGluZTwvYT4KICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9IiNzZXJ2aWNlcyI+U2VydmljZXM8L2E+CiAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9wcml2YWN5LyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPlByaXZhY3k8L2E+CiAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS90ZXJtcy8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5UZXJtczwvYT4KICA8L2Rpdj4KCiAgPCEtLSBSb3cgMiAtLT4KICA8ZGl2IGNsYXNzPSJuYXYtcm93IHJvdy10d28iPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vam9pbm91cnRlYW0vIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+Sm9pbiBPdXIgVGVhbTwvYT4KICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2VsaXRlZGVhbHMvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+RWxpdGUgRGVhbHM8L2E+CiAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9sb3ctc2Vuc29yeS9pbmRleC5odG1sIj5Mb3cgU2Vuc29yeSBTdW5kYXk8L2E+CiAgPC9kaXY+CjwvbmF2PgogIDwvZGl2Pgo8L2hlYWRlcj4KCjxtYWluIGNsYXNzPSJ3cmFwIj4KICA8c2VjdGlvbiBjbGFzcz0iaGVybyI+CiAgICA8ZGl2IGNsYXNzPSJsb2dvLWhlcm8iPgogICAgICA8dmlkZW8gY2xhc3M9ImxvZ28tdmlkZW8iCiAgICAgICAgICAgICBzcmM9Imh0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9lbGl0ZWt1dHotbG9nby5tcDQiCiAgICAgICAgICAgICBhdXRvcGxheSBtdXRlZCBsb29wIHBsYXlzaW5saW5lPjwvdmlkZW8+CiAgICA8L2Rpdj4KPHAgY2xhc3M9ImludHJvIGludHJvLXRvcCI+WW91ciBuZWlnaGJvcmhvb2QgPHN0cm9uZz5iYXJiZXJzaG9wIGluIFBsYW5vIFRYPC9zdHJvbmc+IGZvciBzaGFycCBmYWRlcywgdGFwZXJzICYgYmVhcmQgdHJpbXMuPC9wPgoKICA8L3NlY3Rpb24+CgogIDxzZWN0aW9uIGlkPSJob3VycyIgY2xhc3M9InNlY3Rpb24iPgogICAgPGgyPkhvdXJzPC9oMj4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJob3VycyI+CiAgICAgICAgPHNwYW4+TW9uPC9zcGFuPjxzcGFuPjEwOjAwIEFNIOKAkyA3OjAwIFBNPC9zcGFuPgogICAgICAgIDxzcGFuPlR1ZTwvc3Bhbj48c3Bhbj4xMDowMCBBTSDigJMgNzowMCBQTTwvc3Bhbj4KICAgICAgICA8c3Bhbj5XZWQ8L3NwYW4+PHNwYW4+MTA6MDAgQU0g4oCTIDc6MDAgUE08L3NwYW4+CiAgICAgICAgPHNwYW4+VGh1PC9zcGFuPjxzcGFuPjEwOjAwIEFNIOKAkyA3OjAwIFBNPC9zcGFuPgogICAgICAgIDxzcGFuPkZyaTwvc3Bhbj48c3Bhbj45OjAwIEFNIOKAkyA3OjAwIFBNPC9zcGFuPgogICAgICAgIDxzcGFuPlNhdDwvc3Bhbj48c3Bhbj44OjAwIEFNIOKAkyA1OjAwIFBNPC9zcGFuPgogICAgICAgIDxzcGFuPlN1bjwvc3Bhbj48c3Bhbj4xMjowMCBQTSDigJMgNDowMCBQTTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICAgIDxwIGNsYXNzPSJtaW5pIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxwIGNsYXNzPSJtaW5pIiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPgogIEFsbCB0aW1lcyBDZW50cmFsLiBIb3dldmVyLCBob2xpZGF5IGhvdXJzIG1heSB2YXJ5OyB0aGVyZWZvcmUsIGZvbGxvdyB1cyBvbiBJbnN0YWdyYW0gZm9yIHVwZGF0ZXMuCjwvcD4KPC9wPgo8L2Rpdj4KPC9zZWN0aW9uPiAgPCEtLSBlbmQgSE9VUlMgLS0+Cgo8IS0tID09PSBFTElURSBLVVRaIOKAlCBBdXRvcGxheSBMb29wIFZpZGVvIChtdXRlIHRvZ2dsZSBvbmx5KSA9PT0gLS0+CjxkaXYgY2xhc3M9ImVrLXZpZGVvLXdyYXAiPgogIDx2aWRlbyBpZD0iZWstaGVyby12aWRlbyIKICAgICAgICAgYXV0b3BsYXkKICAgICAgICAgbG9vcAogICAgICAgICBtdXRlZAogICAgICAgICBwbGF5c2lubGluZQogICAgICAgICBwcmVsb2FkPSJtZXRhZGF0YSI+CiAgICA8c291cmNlIHNyYz0iaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzEwL1ZuMjAyNTEwMjEtMjIwMTQ2Lm1wNCIgdHlwZT0idmlkZW8vbXA0Ij4KICAgIFlvdXIgYnJvd3NlciBkb2VzbuKAmXQgc3VwcG9ydCBIVE1MNSB2aWRlby4KICA8L3ZpZGVvPgoKICA8ZGl2IGNsYXNzPSJlay1jb250cm9scyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlZpZGVvIGNvbnRyb2xzIj4KICAgIDxidXR0b24gaWQ9ImVrLW11dGUiIGNsYXNzPSJlay1idG4iIGFyaWEtbGFiZWw9IlVubXV0ZSB2aWRlbyI+8J+UhzwvYnV0dG9uPgogIDwvZGl2Pgo8L2Rpdj4KCjxzdHlsZT4KICA6cm9vdCB7IC0tZWstYmx1ZTojMUU5MEZGOyAtLWVrLXllbGxvdzojRkZENDAwOyAtLWVrLWRhcms6IzAwMDsgLS1lay13aGl0ZTojZmZmOyB9CiAgLmVrLXZpZGVvLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTttYXgtd2lkdGg6OTIwcHg7bWFyZ2luOjEuMjVyZW0gYXV0bztib3JkZXItcmFkaXVzOjE4cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6IzAwMDtib3gtc2hhZG93OjAgMTJweCAzMHB4IHJnYmEoMCwwLDAsLjM1KTt9CiAgLmVrLXZpZGVvLXdyYXAgdmlkZW97ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDphdXRvO2FzcGVjdC1yYXRpbzoxNi85O2JhY2tncm91bmQ6IzAwMDt9CiAgLmVrLWNvbnRyb2xze3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEycHg7Ym90dG9tOjEycHg7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O30KICAuZWstYnRue2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoxMHB4IDEycHg7Zm9udC1zaXplOjE4cHg7Y29sb3I6dmFyKC0tZWstd2hpdGUpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgwLDAsMCwuNjUpLCByZ2JhKDAsMCwwLC4zNSkpO2JveC1zaGFkb3c6MCAycHggOHB4IHJnYmEoMCwwLDAsLjM1KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTJzIGVhc2UsIGJveC1zaGFkb3cgLjEycyBlYXNlO30KICAuZWstYnRuOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC40NSk7fQogIC8qIHJlbW92ZWQgI2VrLXBsYXkgcnVsZSBzaW5jZSB0aGVyZSBpcyBubyBwbGF5IGJ1dHRvbiAqLwogICNlay1tdXRlLmlzLW11dGVke2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZWsteWVsbG93KSwgI2ZmZTE1Yyk7Y29sb3I6IzExMTt9CgogIC8qID09IEVLIDItcm93IG5hdiAoc2NvcGVkKSA9PSAqLwogICNlay1oZWFkZXIgLm5hdi1yb3d7CiAgICBkaXNwbGF5OmZsZXg7CiAgICBmbGV4LXdyYXA6d3JhcDsKICAgIGdhcDoxNHB4OwogICAganVzdGlmeS1jb250ZW50OmNlbnRlcjsKICAgIG1hcmdpbjoxMnB4IDA7CiAgfQogICNlay1oZWFkZXIgLm5hdi1yb3cgLmJ0bnsKICAgIGRpc3BsYXk6aW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczpjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgcGFkZGluZzoxMnB4IDE4cHg7CiAgICBib3JkZXItcmFkaXVzOjk5OTlweDsKICAgIGJhY2tncm91bmQ6IzExMTsKICAgIGJvcmRlcjoxcHggc29saWQgIzJhMmEyYTsKICAgIGNvbG9yOiNmZmY7CiAgICB0ZXh0LWRlY29yYXRpb246bm9uZTsKICAgIGZvbnQtd2VpZ2h0OjcwMDsKICAgIHdoaXRlLXNwYWNlOm5vd3JhcDsKICAgIGJveC1zaGFkb3c6MCAxMHB4IDIycHggcmdiYSgwLDAsMCwuMzUpOwogIH0KICAjZWstaGVhZGVyIC5uYXYtcm93LnJvdy10d297CiAgICBkaXNwbGF5OmdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDoxNHB4OwogIH0KICAjZWstaGVhZGVyIC5uYXYtcm93LnJvdy10d28gLmJ0bnsKICAgIHdpZHRoOjEwMCU7CiAgICBwYWRkaW5nOjE0cHggMjBweDsKICB9CiAgQG1lZGlhIChtYXgtd2lkdGg6NTIwcHgpewogICAgI2VrLWhlYWRlciAubmF2LXJvdy5yb3ctdHdveyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyOyB9CiAgfQo8L3N0eWxlPgoKPHNjcmlwdD4KICAoZnVuY3Rpb24oKXsKICAgIGNvbnN0IHYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWstaGVyby12aWRlbycpOwogICAgY29uc3QgbXV0ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlay1tdXRlJyk7CgogICAgLy8gQXV0b3BsYXkgKG11dGVkKSBhbmQgbG9vcCBjb250aW51b3VzbHkKICAgIHYuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheScsICgpID0+IHYucGxheSgpLmNhdGNoKCgpPT57fSksIHsgb25jZTp0cnVlIH0pOwoKICAgIGZ1bmN0aW9uIHN5bmMoKXsKICAgICAgbXV0ZUJ0bi50ZXh0Q29udGVudCA9IHYubXV0ZWQgPyAn8J+UhycgOiAn8J+Uiic7CiAgICAgIG11dGVCdG4uY2xhc3NMaXN0LnRvZ2dsZSgnaXMtbXV0ZWQnLCB2Lm11dGVkKTsKICAgIH0KCiAgICBtdXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgICB2Lm11dGVkID0gIXYubXV0ZWQ7CiAgICAgIGlmICghdi5tdXRlZCkgdi5wbGF5KCkuY2F0Y2goKCk9Pnt9KTsgLy8gZW5zdXJlIHBsYXliYWNrIGFmdGVyIHVubXV0ZQogICAgICBzeW5jKCk7CiAgICB9KTsKCiAgICBbJ3ZvbHVtZWNoYW5nZScsJ2VuZGVkJ10uZm9yRWFjaChldiA9PiB2LmFkZEV2ZW50TGlzdGVuZXIoZXYsIHN5bmMpKTsKICAgIHN5bmMoKTsKICB9KSgpOwo8L3NjcmlwdD4KCjxzZWN0aW9uIGlkPSJiYXJiZXJzIiBjbGFzcz0ic2VjdGlvbiI+CgogICAgPGgyPk1lZXQgdGhlIFRlYW08L2gyPgogICAgPGRpdiBpZD0iYmFyYmVyc0dyaWQiIGNsYXNzPSJncmlkIGJhcmJlcnMiPjwvZGl2PgogICAgPHAgY2xhc3M9Im1pbmkiPlRhcCBhIGJhcmJlciB0byBib29rIG9yIHZpZXcgSW5zdGFncmFtLiBWaWRlb3MgYXJlIG9wdGlvbmFsIGFuZCBtYXkgb3BlbiBpbiBhIG5ldyB0YWIuPC9wPgogIDwvc2VjdGlvbj4KCiAgPHNlY3Rpb24gaWQ9InNlcnZpY2VzIiBjbGFzcz0ic2VjdGlvbiI+CiAgICA8aDI+U2VydmljZXM8L2gyPgogICAgPGRpdiBjbGFzcz0iZ3JpZCBzZXJ2aWNlcyI+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+QWR1bHQgSGFpcmt1dHo8L2gzPjxwPkNyaXNwIGZhZGUsIHBvbGlzaGVkIGFuZCBwcm9mZXNzaW9uYWwuPC9wPjxwPjxzdHJvbmc+JDM1PC9zdHJvbmc+IDxzcGFuIGNsYXNzPSJtaW5pIj5BZGQgUmF6b3IgTGluZSArJDU8L3NwYW4+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5BZHVsdCBIYWlya3V0ICZhbXA7IEJlYXJkPC9oMz48cD5GcmVzaCBjdXQgd2l0aCBhIHBvbGlzaGVkIGJlYXJkIGZpbmlzaC48L3A+PHA+PHN0cm9uZz4kNDA8L3N0cm9uZz4gPHNwYW4gY2xhc3M9Im1pbmkiPkFkZCBSYXpvciBMaW5lICskNTwvc3Bhbj48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPllvdW5nIEFkdWx0eiAxNiAmYW1wOyBVbmRlcjwvaDM+PHA+U2hhcnAgbG9va3MgZm9yIHlvdW5nIHRyZW5kc2V0dGVycy48L3A+PHA+PHN0cm9uZz4kMzA8L3N0cm9uZz4gPHNwYW4gY2xhc3M9Im1pbmkiPkFkZCBEZXNpZ24gJDUrPC9zcGFuPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+U2VuaW9ycyA2NSs8L2gzPjxwPkNsYXNzaWMgY3V0cyB0YWlsb3JlZCBmb3Igc2VuaW9ycy48L3A+PHA+PHN0cm9uZz4kMjU8L3N0cm9uZz4gPHNwYW4gY2xhc3M9Im1pbmkiPkFkZCBSYXpvciBMaW5lICskNTwvc3Bhbj48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPlNlbmlvcnMgNjUrICZhbXA7IEJlYXJkPC9oMz48cD5TaGFycCBzZW5pb3Igc3R5bGVzIHBsdXMgYmVhcmQgZ3Jvb21pbmcuPC9wPjxwPjxzdHJvbmc+JDMwPC9zdHJvbmc+IDxzcGFuIGNsYXNzPSJtaW5pIj5BZGQgUmF6b3IgTGluZSArJDU8L3NwYW4+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5TaGFtcG9vPC9oMz48cD5JbnZpZ29yYXRpbmcgd2FzaCBsZWF2aW5nIGhhaXIgZnJlc2gsIHNvZnQuPC9wPjxwPjxzdHJvbmc+JDE1PC9zdHJvbmc+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5FZGdlIFVwPC9oMz48cD5MaW5lLXVwIHRoYXQga2VlcHMgeW91IGxvb2tpbmcgZnJlc2guPC9wPjxwPjxzdHJvbmc+JDE1PC9zdHJvbmc+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5CZWFyZCBUcmltPC9oMz48cD5CZWFyZCBjYXJlIHRhaWxvcmVkIHRvIHlvdXIgc3R5bGUuPC9wPjxwPjxzdHJvbmc+JDE1PC9zdHJvbmc+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5IYWlybGluZSBFbmhhbmNlbWVudDwvaDM+PHA+RnVsbGVyLCBzaGFycGVyLCBtb3JlIGRlZmluZWQgaGFpcmxpbmUgZGVuc2l0eS48L3A+PHA+PHN0cm9uZz4kMTA8L3N0cm9uZz48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPkVkZ2UgVXAgJmFtcDsgQmVhcmQ8L2gzPjxwPlByZWNpc2lvbiB0cmltIGZvciBiZWFyZCBhbmQgaGFpcmxpbmUuPC9wPjxwPjxzdHJvbmc+JDIwPC9zdHJvbmc+IDxzcGFuIGNsYXNzPSJtaW5pIj5BZGQgUmF6b3IgKyQ1PC9zcGFuPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+UmF6b3IgU2hhdmUgJmFtcDsgSG90IFRvd2VsPC9oMz48cD5DbGFzc2ljIHNoYXZlIHdpdGggc29vdGhpbmcgaG90IHRvd2VsLjwvcD48cD48c3Ryb25nPiQ0NTwvc3Ryb25nPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+UmF6b3IgSGVhZCBTaGF2ZSAmYW1wOyBCZWFyZDwvaDM+PHA+UG9saXNoZWQgc2hhdmUgd2l0aCB0YWlsb3JlZCBiZWFyZCBzdHlsZS48L3A+PHA+PHN0cm9uZz4kNTU8L3N0cm9uZz48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPkFmcm9zLCBMYXllciBLdXR6PC9oMz48cD5DdXN0b20gSGFpcmt1dHogZm9yIGhhaXIgd2l0aCBzaGFwZSBhbmQgdm9sdW1lLjwvcD48cD48c3Ryb25nPiQ1Kzwvc3Ryb25nPjwvcD48L2FydGljbGU+CiAgICA8L2Rpdj4KICA8L3NlY3Rpb24+Cgo8c2VjdGlvbiBpZD0ibG9jYXRpb24iIGNsYXNzPSJsb2NhdGlvbi1zZWN0aW9uIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7IG1heC13aWR0aDo5MjBweDsgbWFyZ2luOjAgYXV0bzsiPgogIDxoMj5GaW5kIFVzIOKAlCBCYXJiZXJzaG9wIGluIFBsYW5vIFRYPC9oMj4KCiAgPHA+CiAgICBFbGl0ZSBLdXR6IGlzIGNvbnZlbmllbnRseSBsb2NhdGVkIGF0IDxzdHJvbmc+MzEzMSBDdXN0ZXIgUmQuLCBTdWl0ZSAxOTMsIFBsYW5vLCBUWDwvc3Ryb25nPi4KICAgIExvb2sgZm9yIHRoZSBFbGl0ZSBLdXR6IHNpZ24sIGhlYWQgaW5zaWRlLCBhbmQgY2hlY2sgaW4uIFdl4oCZcmUgb3BlbiBkYWlseSAoaG9saWRheSBob3VycyBtYXkgdmFyeSkKICAgIGFuZCBwb3N0IHVwZGF0ZXMgb24gSW5zdGFncmFtLiBPdXIgYmFyYmVycyBkZWxpdmVyIDxzdHJvbmc+c2hhcnAgZmFkZXM8L3N0cm9uZz4sIDxzdHJvbmc+dGFwZXJzPC9zdHJvbmc+LAogICAgYW5kIDxzdHJvbmc+YmVhcmQgdHJpbXM8L3N0cm9uZz4gc28geW91IGxlYXZlIGxvb2tpbmcgYW5kIGZlZWxpbmcgeW91ciBiZXN0LgogIDwvcD4KCiAgPHA+CiAgICBCb29raW5nIGlzIGZhc3TigJRyZXNlcnZlIG9ubGluZSB3aXRoIGEgbWFzdGVyIGJhcmJlciBpbiBzZWNvbmRzIG9yIHdhbGsgaW4gd2hlbiBpdOKAmXMgY29udmVuaWVudC4KICAgIFdl4oCZcmUganVzdCBtaW51dGVzIGZyb20gPHN0cm9uZz5VUy03NTwvc3Ryb25nPiBuZWFyIDxzdHJvbmc+UGFya2VyIFJkLjwvc3Ryb25nPiBJZiB5b3XigJlyZSBzZWFyY2hpbmcgZm9yIGEKICAgIHRydXN0ZWQgPHN0cm9uZz5iYXJiZXJzaG9wIGluIFBsYW5vLCBUWDwvc3Ryb25nPiwgRWxpdGUgS3V0eiBtYWtlcyBpdCBlYXN5IHRvIGdldCBpbiB0aGUgY2hhaXIgb24gdGltZSwgZXZlcnkgdGltZS4KICA8L3A+CgogIDxoMyBzdHlsZT0ibWFyZ2luLXRvcDoxLjI1cmVtOyI+MzEzMSBDdXN0ZXIgUmQuIFN1aXRlIDE5MywgUGxhbm8sIFRYIDc1MDc1PC9oMz4KCiAgPHAgY2xhc3M9Im1pbmkiIHN0eWxlPSJtYXJnaW4tdG9wOi43NXJlbTsiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzL3BsYWNlLzMxMzErQ3VzdGVyK1JkK1N1aXRlKzE5MywrUGxhbm8sK1RYKzc1MDc1IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+T3BlbiBpbiBHb29nbGUgTWFwczwvYT4KICAgICZuYnNwO8K3Jm5ic3A7CiAgICA8YSBocmVmPSJodHRwczovL3d3dy5wbGFuby5nb3YvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+Q2l0eSBvZiBQbGFubzwvYT4KICA8L3A+Cjwvc2VjdGlvbj4KCiAgICA8aWZyYW1lIGNsYXNzPSJtYXAiIGxvYWRpbmc9ImxhenkiIGFsbG93ZnVsbHNjcmVlbiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcz9xPTMxMzElMjBDdXN0ZXIlMjBSZC4lMjBTdWl0ZSUyMDE5MyUyQyUyMFBsYW5vJTJDJTIwVFglMkMlMjA3NTA3NSZvdXRwdXQ9ZW1iZWQiPjwvaWZyYW1lPgogIDwvc2VjdGlvbj4KPC9tYWluPgoKPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KICA8ZGl2IGNsYXNzPSJ3cmFwIiBzdHlsZT0iZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDoxMnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiI+CiAgICA8ZGl2PsKpIDxzcGFuIGlkPSJ5ciI+PC9zcGFuPiBFbGl0ZSBLdXR6LiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvZGl2PgoKICAgIDxuYXYgY2xhc3M9ImZvb3Rlci1saW5rcyIgYXJpYS1sYWJlbD0iTGVnYWwiPgogICAgICA8YSBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9wcml2YWN5LyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPlByaXZhY3kgUG9saWN5PC9hPiDCtwogICAgICA8YSBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS90ZXJtcy8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5UZXJtcyBvZiBTZXJ2aWNlPC9hPgogICAgPC9uYXY+CiAgPC9kaXY+Cgo8ZGl2IGNsYXNzPSJ3cmFwIj4KICA8ZGl2IGNsYXNzPSJtaW5pIHNpdGUtbm90ZSIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6OHB4OyI+CiAgICBBbGwgdGltZXMgQ2VudHJhbCDCtyBQbGFubywgVFgKICA8L2Rpdj4KCjwvZm9vdGVyPgoKPHNjcmlwdD4KLy8gRm9vdGVyIHllYXIKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lyJykudGV4dENvbnRlbnQgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7CgovLyA9PT09PSBCYXJiZXJzIChzYW1lIGxpc3QgeW91IHNhdyBlYXJsaWVyKSA9PT09PQpjb25zdCBCQVJCRVJTID0gWwp7IG5hbWU6J1RhamEnLCBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby90YWphJywgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3RydWVibGVuZHNfP3V0bV9zb3VyY2U9aWdfd2ViX2J1dHRvbl9zaGFyZV9zaGVldCZpZ3NoPVpETmxaRGMwTXpJeE53PT0nLCBiaW86YEl0cyB5YSBnaXJsIFRlZSEgRGVsaXZlcmluZyBjcmlzcHkgY3V0cyBhbmQgZmFkZXMsIGhhaXIgY29sb3IgYW5kIGxvYyByZXR3aXN0aW5nISBHdWFyYW50ZWVkIHRvIGxlYXZlIG91dCBmZWVsaW5nIHlvdXIgYmVzdCFgLCBvcmRlcjo3MCwgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvVGFqYV9yZXNpemVkLmpwZycsCiAgICB0aWt0b2s6J2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQF90aGF0Z3JsdGVlP190PVpULTkwM01nZEZ6YmFQJl9yPTEnLCB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0RNN3pLWi11WTlqLz9pZ3NoPU1UTnlkelUxYVdSd2QzWXhlZz09JyB9LAogIHsgbmFtZTonSiBNaWtlJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vbWlrZScsCiBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vZGVib25haXJncm9vbWluZ2NsdWI\/dXRtX3NvdXJjZT1pZ193ZWJfYnV0dG9uX3NoYXJlX3NoZWV0Jmlnc2g9WkRObFpEYzBNekl4Tnc9PScsIGJpbzpgMjAgeWVhcnMuIERGVy4gRmxhd2xlc3MgY3V0cy4gRGVib25haXIgR3Jvb21pbmfigJRleHBlcnQgYmFyYmVyaW5nIGZvciBldmVyeSBzdHlsZSwgZXZlcnkgaGFpciB0eXBlLiBMZWF2ZSBzaGFycC4gRmVlbCBjb25maWRlbnQuYCwgb3JkZXI6MTAwLCBwaG90bzogJ2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9JTUdfMjAyNTA5MjdfMTE1MzMyXzYwMHg2MDAuanBnJywKICAgIHRpa3RvazonaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AZGVib25haXJncm9vbWVyP190PVpULTkwM05sMERpWHZDJl9yPTEnLCB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0ROc3psM3FONko3Lz9pZ3NoPVlXcG5abTk0WW1ONk9IcHcnIH0sCnsgbmFtZTonU2hlbHRvbicsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3NoZWx0b24nLCBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vYmVsbGF6ZXJfa3V0cz91dG1fc291cmNlPWlnX3dlYl9idXR0b25fc2hhcmVfc2hlZXQmaWdzaD1aRE5sWkRjME16SXhOdz09JywgYmlvOmBXaXRoIDI1KyB5ZWFycyBvZiBleHBlcmllbmNlLCBJIGJsZW5kIG9sZC1zY2hvb2wgY3JhZnQgd2l0aCBtb2Rlcm4gdGVjaG5pcXVlLiBCb29rIHdpdGggbWUgZm9yIGEgY3Jpc3AsIHRhaWxvcmVkIGN1dCB0aGF0IGZpdHMgeW91ciBzdHlsZS5gLCBvcmRlcjozLCBwaG90bzogJ2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9TaGVsdG9uX3Jlc2l6ZWQuanBnJywgdGlrdG9rOidodHRwczovL3d3dy50aWt0b2suY29tL0BiYXJiZXJfY3V0czA1P190PVpULTkwNUdqRm14cGVwJl9yPTEnLCB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0RPUTlsbE9EYTJPLz9pZ3NoPU1YTmtaak5uZW5ocmRuRnNjZz09JyB9LAp7IG5hbWU6J0hvbGx5d29vZCcsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL2hvbGx5d29vZCcsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS90aGUuZ2VtZXhwZXJpZW5jZT91dG1fc291cmNlPWlnX3dlYl9idXR0b25fc2hhcmVfc2hlZXQmaWdzaD1aRE5sWkRjME16SXhOdz09JywgYmlvOmBGb3IgdHdvIGRlY2FkZXMsIEnigJl2ZSBiZWVuIHNoYXJwZW5pbmcgbW9yZSB0aGFuIGNsaXBwZXJz4oCUSeKAmXZlIGJlZW4gc2hhcnBlbmluZyBjb25maWRlbmNlLiBNeSBtaXNzaW9uIGlzIHRvIG1ha2UgZXZlcnkgY3V0IGFuIGV4cGVyaWVuY2UgdGhhdCBsZWF2ZXMgeW91IGxvb2tpbmcgZnJlc2ggYW5kIGZlZWxpbmcgdW5zdG9wcGFibGUuYCwgb3JkZXI6MCwgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvSG9sbHl3b29kX3Jlc2l6ZWQuanBnJywKICAgIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvRE5XRkhYeEFxU24vP2lnc2g9TVRSek9EaHFZWHA2YkRCaGF3PT0nIH0sCnsgbmFtZTonTmVzaGEnLCBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby9uZXNoYScsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9rb29sYXp6a3V0ej91dG1fc291cmNlPWlnX3dlYl9idXR0b25fc2hhcmVfc2hlZXQmaWdzaD1aRE5sWkRjME16SXhOdz09JywgYmlvOmBJJ20gTmVzaGEgTGljZW5zZWQgQmFyYmVyIGluIFBsYW5vICYgc3Vycm91bmRpbmcgYXJlYXMuIFNwZWNpYWxpemluZyBpbiBmYWRpbmcgYW5kIHF1YWxpdHkgS29vbGF6emt1dHohIWAsIG9yZGVyOjkwLCBwaG90bzogJ2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9OZXNoYV9yZXNpemVkLmpwZycsCiAgICB0aWt0b2s6J2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQGtvb2xhenpuZXNoYT9fdD1aVC05MDNOZ2xiZGk1UCZfcj0xJyx0aWt0b2tfcmVlbDogJ2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vdC9aUDhTMzVxYWMvJywgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9EQ3Q5Ylp2dWNnSy8\/dXRtX3NvdXJjZT1pZ193ZWJfY29weV9saW5rJmlnc2g9TXpSbE9EQmlOV0ZsWkE9PScgfSwKICB7IG5hbWU6J1VyaScsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3VyaScsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS91cmkwX2RfYmFyYmVyLycsIGJpbzpgSSBhbSBVcmkgdGhlIEJhcmJlci4uLlRoZSBodW1ibGVzdCBiYXJiZXIgZXhwZXJpZW5jZSB5b3Ugd2lsbCBldmVyIGhhdmUuIEEgY3JhZnR5IGFuZCBwcmVjaXNlbHkgc2hhcnAgZXhwZXJpZW5jZSB0aGF0IG1ha2VzIHlvdSBmZWVsIGFuZCBsb29rIGdvb2QuYCwgb3JkZXI6ODAsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L1VyaV9yZXNpemVkLmpwZycsCiAgICB0aWt0b2s6J2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQGVsLm1hcmlzcXVlcm8\/X3Q9WlQtOTAzTmRhOTRIbHUmX3I9MScsIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvQ3hpcnU0cE9UMXIvP3V0bV9zb3VyY2U9aWdfd2ViX2NvcHlfbGluayZpZ3NoPU16UmxPREJpTldGbFpBPT0nIH0sCnsgCiAgbmFtZTonTWFydGljZScsCiAgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vbWFydGljZScsCiAgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL21yLmNsYXNzaWNfY3V0ei8nLAogIGJpbzpgSeKAmW0gTWFydGljZSwgYSBNYXN0ZXIgQmFyYmVyIHdpdGggMTMrIHllYXJzIG9mIGV4cGVyaWVuY2UgaW4gdGhlIERGVyBhcmVhLiBJIHRha2UgcHJpZGUgaW4gcHJlY2lzaW9uLCBhcnRpc3RyeSwgYW5kIGRlbGl2ZXJpbmcgY2xlYW4sIHByb2Zlc3Npb25hbCBjdXRzIGZvciBldmVyeSBoYWlyIHR5cGUuYCwKICBvcmRlcjo2LAogIHBob3RvOidodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvTWFydGljZTFfcmVzaXplZC5qcGcnLAogIHRpa3RvazonaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AbWFydGljZV9tcmNsYXNzaWM\/X3Q9WlQtOTAzTlYyZFlIUVQmX3I9MScsCiAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ETWFuNnp4dVY2Wi8\/aWdzaD1NV2N6WWpCaWNUSm9PVEo0T0E9PScKfSwKewogIG5hbWU6J0phbWFsJywKICBib29raW5nOicnLAogIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS8yeGF6bmljZV9rdXR6P2lnc2g9WWpkcVptRjNjM2x1TjI1MycsCiAgYmlvOmBDbGVhbiBjdXRzLCBzaGFycCBmYWRlcywgYW5kIGNvbnNpc3RlbnQgcmVzdWx0cyDigJQgZm9jdXNlZCBvbiBkZXRhaWwgYW5kIGtlZXBpbmcgeW91IGxvb2tpbmcgeW91ciBiZXN0LmAsCiAgb3JkZXI6MTAsCiAgcGhvdG86J2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNC9qYW1hbC5qcGcnLAogIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvREZPZHc1Sk8ta2IvP2lnc2g9YlcxMk1HUm1jbVpoTkd0cycKfSwKewogIG5hbWU6J1JpbGV5JywKICBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby9yaWxleScsCiAgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JpbGV5dGhhYmFyYmVyLycsCiAgYmlvOmBNYXN0ZXIgQmFyYmVyIGluIFBsYW5vIHdpdGggb3ZlciA3IHllYXJzIGJlaGluZCB0aGUgY2hhaXIuIEtub3duIGZvciBjbGVhbiBmYWRlcywgc2hhcnAgcmF6b3IgbGluZXMgYW5kIHByZWNpc2Ugc2hlYXIgd29yay4gSWYgeW91J3JlIGxvb2tpbmcgZm9yIGEgZnJlc2ggY3V0LCB3aXRoIGF0dGVudGlvbiB0byBkZXRhaWwsIEkgZ290IHlvdSFgLAogIG9yZGVyOjYwLAogIHBob3RvOidodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvUmlsZXlfcmVzaXplZC5qcGcnLAogIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvQ3ctV3M1MnVpUE8vP3V0bV9zb3VyY2U9aWdfd2ViX2NvcHlfbGluayZpZ3NoPU16UmxPREJpTldGbFpBPT0nCn0sCnsgbmFtZTonUGV0ZScsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3BldGUnLCBpbnN0YWdyYW06JycsIGJpbzpgSSBicmluZyB5ZWFycyBvZiBiYXJiZXJpbmcgZXhwZXJ0aXNlIHdpdGggcXVpY2ssIGNsZWFuIHJlc3VsdHMuIEZhbWlseS1mcmllbmRseSBzZXJ2aWNlIGFuZCBvbi10aW1lIHR1cm5hcm91bmRzIGFyZSBteSBzdGFuZGFyZC5gLCBvcmRlcjo4LCBwaG90bzogJ2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9QZXRlX3Jlc2l6ZWQuanBnJywKICAgIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvRE5heUJwbXVpcU8vP2lnc2g9TVdSME1EWmtZM0psTTNCd01RPT0nIH0sCiAgeyBuYW1lOidMb3UnLCBib29raW5nOicnLCBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vbG91Y2hpZXRoZWJhcmJlcj91dG1fc291cmNlPWlnX3dlYl9idXR0b25fc2hhcmVfc2hlZXQmaWdzaD1aRE5sWkRjME16SXhOdz09JywgYmlvOmBXaXRoIG92ZXIgMTMgeWVhcnMgb2YgYmFyYmVyaW5nIGV4cGVyaWVuY2UsIEkgc3BlY2lhbGl6ZSBpbiBwcmVjaXNpb24gY3V0cyB0YWlsb3JlZCB0byBlYWNoIGNsaWVudC4gTXkgZGV0YWlsLW9yaWVudGVkIGFwcHJvYWNoIGVuc3VyZXMgeW91IGxlYXZlIGxvb2tpbmcgc2hhcnAgYW5kIGZlZWxpbmcgY29uZmlkZW50LmAsIG9yZGVyOjksIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L0xvdV9yZXNpemVkLmpwZycsCiAgICB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0RLYVhxcGd1YWUzLz9pZ3NoPU1XeHdPRGw2YkRkNFlqSXhlUT09JyB9LAp7CiAgbmFtZTonQ2FydGVyJywKICBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby9jYXJ0ZXInLAogIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9rdXR6YnljYXJ0aWVyP2lnc2g9Y1d4aWIzTTVlalV3TnpWNScsCiAgYmlvOmBLdXR6YnlDYXJ0aWVyIOKcgu+4jyBNYXN0ZXIgQmFyYmVyIHwgMjArIHllYXJzIGV4cGVyaWVuY2UuIFByZWNpc2lvbiBmYWRlcywgYmVhcmQgc2N1bHB0aW5nICYgY2VsZWJyaXR5IGN1dHMuIEJFVCwgTVRWLCBUViBPbmUsIFN0ZWxsYXJzICYgR3JhbW15cy5gLAogIG9yZGVyOjIwMCwKICBwaG90bzonaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAzL0NhcnRlci5qcGVnJywKICB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0RRNGRqcUNDZGkwLz9pZ3NoPU1XOTBlVGd6ZW10dWVXc3hNUT09Jwp9LAoKXTsKCi8vIC0tLS0gSGVscGVycyAobXVzdCBiZSBkZWZpbmVkIEJFRk9SRSByZW5kZXJCYXJiZXJzKSAtLS0tCmZ1bmN0aW9uIHNsdWdpZnkobil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csJy0nKS5yZXBsYWNlKC8oXi18LSQpL2csJycpO30KZnVuY3Rpb24gZW5zdXJlSHR0cHModXJsKXtpZighdXJsKSByZXR1cm4gJyc7cmV0dXJuIC9eaHR0cHM\/OlwvXC8vaS50ZXN0KHVybCk\/dXJsOignaHR0cHM6Ly8nK3VybCk7fQpmdW5jdGlvbiBpc1lvdXR1YmVPclZpbWVvKHUpe3JldHVybiAveW91dHViZXx5b3V0dVwuYmV8dmltZW8vaS50ZXN0KHUpO30KZnVuY3Rpb24gaXNNcDQodSl7cmV0dXJuIC9cLm1wNChcPy4qKT8kL2kudGVzdCh1KTt9CmZ1bmN0aW9uIGlzSW5zdGFncmFtUmVlbCh1KXtyZXR1cm4gL2luc3RhZ3JhbVwuY29tXC9yZWVsXC8vaS50ZXN0KHUpO30KCmNvbnN0IFBMQUNFSE9MREVSPSdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjYwMCIgaGVpZ2h0PSI2MDAiPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9IiUyMzE0MTQxNCIvPjx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIlMjM5ZjlmOWYiIGZvbnQtZmFtaWx5PSJJbnRlciwgQXJpYWwiIGZvbnQtc2l6ZT0iMjQiPkVsaXRlIEt1dHo8L3RleHQ+PC9zdmc+JzsKY29uc3QgaWdTVkc9Jzxzdmcgdmlld0JveD0iMCAwIDQ0OCA1MTIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMjI0IDE0MWMtNjMuNiAwLTExNSA1MS40LTExNSAxMTVzNTEuNCAxMTUgMTE1IDExNSAxMTUtNTEuNCAxMTUtMTE1LTUxLjQtMTE1LTExNS0xMTV6bTAgMTkwYy00MS40IDAtNzUtMzMuNi03NS03NXMzMy42LTc1IDc1LTc1IDc1IDMzLjYgNzUgNzUtMzMuNiA3NS03NSA3NXptMTQ2LjQtMTk0LjdjMCAxNC45LTEyLjEgMjctMjcgMjctMTQuOSAwLTI3LTEyLjEtMjctMjdzMTIuMS0yNyAyNy0yN2MxNC45IDAgMjcgMTIuMSAyNyAyN3pNMzk4LjggODBjLTcuOC0yMC45LTI0LjUtMzcuNi00NS40LTQ1LjRDMzI3LjIgMjQgMjI0IDI0IDIyNCAyNHMtMTAzLjIgMC0xMjkuNCAxMC42Yy0yMC45IDcuOC0zNy42IDI0LjUtNDUuNCA0NS40QzM4LjYgMTA2LjIgMzguNiAxOTIgMzguNiAxOTJzMCA4NS44IDEwLjYgMTEyYzcuOCAyMC45IDI0LjUgMzcuNiA0NS40IDQ1LjRDMTIwLjggMzYwIDIyNCAzNjAgMjI0IDM2MHMxMDMuMiAwIDEyOS40LTEwLjZjMjAuOS03LjggMzcuNi0yNC41IDQ1LjQtNDUuNCAxMC42LTI2LjIgMTAuNi0xMTIgMTAuNi0xMTJzMC04NS44LTEwLjYtMTEyek0yMjQgMzM4Yy04MCAwLTE0NC45LTY0LjktMTQ0LjktMTQ0LjlTMTQ0IDQ4LjIgMjI0IDQ4LjIgMzY4LjkgMTEzLjEgMzY4LjkgMTkzLjEgMzA0IDMzOCAyMjQgMzM4eiIvPjwvc3ZnPic7CmNvbnN0IHR0U1ZHPSc8c3ZnIHZpZXdCb3g9IjAgMCA0NDggNTEyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTQ0OCAyMDkuOWMtNzAuNy0zLjMtMTIwLjMtMzUuMy0xNTAuOC03MC45djIyNGMwIDYxLjktNTAuOSAxMTEuOS0xMTIuOCAxMTEuOVM3MS42IDQyNC45IDcxLjYgMzYzczUwLjktMTEyIDExMi44LTExMmM1LjggMCAxMS41LjUgMTcgMS40djY5LjRjLTUuNC0xLjQtMTEuMS0yLjEtMTctMi4xLTI3LjUgMC00OS44IDIyLjMtNDkuOCA0OS44czIyLjMgNDkuOCA0OS44IDQ5LjhjMjcuNSAwIDQ5LjgtMjIuMyA0OS44LTQ5LjhWMGg4NS40YzIuNCA0Ni40IDI3LjMgODUuOCA2Ni41IDEwOC40IDE3LjggMTAuMiAzOC4yIDE2LjMgNTkuOSAxNy45djgzLjZ6Ii8+PC9zdmc+JzsKCi8vIC0tLS0gUmVuZGVyZXIgKHVwZGF0ZWQpIC0tLS0KZnVuY3Rpb24gcmVuZGVyQmFyYmVycygpewogIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFyYmVyc0dyaWQnKTsKICBpZighZ3JpZCkgcmV0dXJuOwoKICBjb25zdCBzb3J0ZWQgPSBbLi4uQkFSQkVSU10uc29ydCgoYSxiKT0+IChiLm9yZGVyfHwwKSAtIChhLm9yZGVyfHwwKSk7CgogIHNvcnRlZC5mb3JFYWNoKGI9PnsKICAgIGNvbnN0IGNhcmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhcnRpY2xlJyk7CiAgICBjYXJkLmNsYXNzTmFtZSA9ICdiYXJiZXItY2FyZCc7CgogICAgY29uc3QgaW1nU3JjID0gYi5waG90byB8fCBgL2Fzc2V0cy9iYXJiZXJzLyR7c2x1Z2lmeShiLm5hbWUpfS5qcGdgOwogICAgY29uc3QgaW1nICAgPSBgPGltZyBzcmM9IiR7aW1nU3JjfSIgYWx0PSIke2IubmFtZX0iIG9uZXJyb3I9InRoaXMub25lcnJvcj1udWxsO3RoaXMuc3JjPScke1BMQUNFSE9MREVSfSciPmA7CiAgICBjb25zdCBoMyAgICA9IGA8aDM+JHtiLm5hbWV9PC9oMz5gOwogICAgY29uc3QgcCAgICAgPSBgPHA+JHtiLmJpb3x8Jyd9PC9wPmA7CgogICAgY29uc3QgYm9vayAgPSBiLmJvb2tpbmcKICAgICAgPyBgPGEgY2xhc3M9ImJ0biBjdGEiIGhyZWY9IiR7ZW5zdXJlSHR0cHMoYi5ib29raW5nKX0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5Cb29rICR7Yi5uYW1lfTwvYT5gIDogJyc7CgogICAgY29uc3Qgc2hvd0lnVGV4dCA9IChiLm5hbWUgJiYgYi5uYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdwZXRlJyk7IC8vIG9ubHkgUGV0ZSBzaG93cyB0ZXh0IGxhYmVsIG9uIElHIGljb24KICAgIGNvbnN0IGlnSWNvbiA9IGIuaW5zdGFncmFtCiAgICAgID8gYDxhIGNsYXNzPSJidG4gbGlnaHQgaWciIGhyZWY9IiR7ZW5zdXJlSHR0cHMoYi5pbnN0YWdyYW0pfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIGFyaWEtbGFiZWw9Ikluc3RhZ3JhbSI+JHtpZ1NWR30ke3Nob3dJZ1RleHQ\/JzxzcGFuPkluc3RhZ3JhbTwvc3Bhbj4nOicnfTwvYT5gIDogJyc7CgogICAgY29uc3QgdHRJY29uID0gYi50aWt0b2sKICAgICAgPyBgPGEgY2xhc3M9ImJ0biBsaWdodCB0dCIgaHJlZj0iJHtlbnN1cmVIdHRwcyhiLnRpa3Rvayl9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgYXJpYS1sYWJlbD0iVGlrVG9rIj4ke3R0U1ZHfTwvYT5gIDogJyc7CgogICAgY29uc3Qgc29jaWFsICA9IChpZ0ljb24gfHwgdHRJY29uKSA\/IGA8ZGl2IGNsYXNzPSJzb2NpYWwiPiR7aWdJY29ufSR7dHRJY29ufTwvZGl2PmAgOiAnJzsKICAgIGNvbnN0IGFjdGlvbnMgPSAoYm9vayB8fCBzb2NpYWwpID8gYDxkaXYgY2xhc3M9ImFjdGlvbnMiPiR7Ym9va30ke3NvY2lhbH08L2Rpdj5gIDogJyc7CgogICAgLy8gQnVpbGQgbWVkaWEgYXJlYTogSUcgIldhdGNoIFJlZWwiIChmcm9tIHZpZGVvKSBhbmQgVGlrVG9rICJXYXRjaCBSZWVsIiAoZnJvbSB0aWt0b2tfcmVlbCkKICAgIGNvbnN0IG1lZGlhUGFydHMgPSBbXTsKCiAgICBpZiAoYi52aWRlbykgewogICAgICBjb25zdCB2ID0gZW5zdXJlSHR0cHMoYi52aWRlbyk7CiAgICAgIGlmIChpc1lvdXR1YmVPclZpbWVvKHYpKSB7CiAgICAgICAgbWVkaWFQYXJ0cy5wdXNoKGA8ZGl2IGNsYXNzPSJlbWJlZCI+PGlmcmFtZSBzcmM9IiR7dn0iIGxvYWRpbmc9ImxhenkiIGFsbG93ZnVsbHNjcmVlbiB0aXRsZT0iJHtiLm5hbWV9IHZpZGVvIj48L2lmcmFtZT48L2Rpdj5gKTsKICAgICAgfSBlbHNlIGlmIChpc01wNCh2KSkgewogICAgICAgIG1lZGlhUGFydHMucHVzaChgPGRpdiBjbGFzcz0iZW1iZWQiPjx2aWRlbyBzcmM9IiR7dn0iIGNvbnRyb2xzIHBsYXlzaW5saW5lIG11dGVkPjwvdmlkZW8+PC9kaXY+YCk7CiAgICAgIH0gZWxzZSBpZiAoaXNJbnN0YWdyYW1SZWVsKHYpKSB7CiAgICAgICAgbWVkaWFQYXJ0cy5wdXNoKGA8ZGl2IGNsYXNzPSJhY3Rpb25zIj48YSBjbGFzcz0iYnRuIGxpZ2h0IGlnIiBocmVmPSIke3Z9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+JHtpZ1NWR308c3Bhbj5XYXRjaCBSZWVsPC9zcGFuPjwvYT48L2Rpdj5gKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtZWRpYVBhcnRzLnB1c2goYDxkaXYgY2xhc3M9ImFjdGlvbnMiPjxhIGNsYXNzPSJidG4gbGlnaHQiIGhyZWY9IiR7dn0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5WaWRlbzwvYT48L2Rpdj5gKTsKICAgICAgfQogICAgfQoKICAgIGlmIChiLnRpa3Rva19yZWVsKSB7CiAgICAgIGNvbnN0IHR2ID0gZW5zdXJlSHR0cHMoYi50aWt0b2tfcmVlbCk7CiAgICAgIG1lZGlhUGFydHMucHVzaChgPGRpdiBjbGFzcz0iYWN0aW9ucyI+PGEgY2xhc3M9ImJ0biBsaWdodCB0dCIgaHJlZj0iJHt0dn0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4ke3R0U1ZHfTxzcGFuPldhdGNoIFJlZWw8L3NwYW4+PC9hPjwvZGl2PmApOwogICAgfQoKICAgIGNvbnN0IG1lZGlhID0gbWVkaWFQYXJ0cy5qb2luKCcnKTsKCiAgICBjYXJkLmlubmVySFRNTCA9IGltZyArIGgzICsgcCArIGFjdGlvbnMgKyBtZWRpYTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgfSk7CgogIC8vIHNhbml0eSB0ZXN0OiBjYXJkIGNvdW50ID09IGRhdGEgbGVuZ3RoCiAgY29uc29sZS5hc3NlcnQoCiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjYmFyYmVyc0dyaWQgLmJhcmJlci1jYXJkJykubGVuZ3RoID09PSBbLi4uQkFSQkVSU10ubGVuZ3RoLAogICAgJ0NhcmQgY291bnQgc2hvdWxkIGVxdWFsIEJBUkJFUlMgbGVuZ3RoJwogICk7Cn0KCi8vIFJ1biBpdApyZW5kZXJCYXJiZXJzKCk7CgovKiBSZW1vdmUgYW55IHN0cmF5IHRleHQgbGlrZTogRWxpdGUgS3V0eiciPiBvciBqdXN0ICciPiAoYW55IHF1b3Rlcy8+KSAqLwooZnVuY3Rpb24gcHVyZ2VXZWlyZFNoYXJkcygpewogIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFyYmVyc0dyaWQnKSB8fCBkb2N1bWVudC5ib2R5OwogIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIG51bGwpOwogIGNvbnN0IHRyYXNoID0gW107CiAgbGV0IG47CgogIC8vIE1hdGNoZXMgdGhlIHdob2xlICJFbGl0ZSBLdXR6IiBzaGFyZCBPUiBhbnkgY29tYm8gb2YganVzdCBxdW90ZXMvYW5nbGUtYnJhY2tldHMKICBjb25zdCBSRSA9IC9eKD86RWxpdGVccypLdXR6KT9ccypbJyJdP1xzKj4\/JHxeWzw+JyJcc10rJC9pOwoKICB3aGlsZSAoKG4gPSB3YWxrZXIubmV4dE5vZGUoKSkpIHsKICAgIGNvbnN0IHQgPSBuLnRleHRDb250ZW50LnJlcGxhY2UoL1x1MjAwQi9nLCcnKS50cmltKCk7IC8vIHN0cmlwIHplcm8td2lkdGggY2hhcnMKICAgIGlmICh0ICYmIFJFLnRlc3QodCkpIHRyYXNoLnB1c2gobik7CiAgfQogIHRyYXNoLmZvckVhY2goeCA9PiB4LnBhcmVudE5vZGUgJiYgeC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHgpKTsKfSkoKTsKCjwvc2NyaXB0PncJY29yZS9odG1sd861ATxzdHlsZSBpZD0iZWstZml4ZWQtbmF2Ij4KICAvKiBwYWdlIHN0YXlzIGJsYWNrICovCiAgaHRtbCxib2R5e2JhY2tncm91bmQ6IzAwMCAhaW1wb3J0YW50O2NvbG9yOiNmZmYgIWltcG9ydGFudDt9CgogIC8qIGhpZGUgV1AgZnJvbnQtZW5kIGVkaXQgbGluayAqLwogIC5wb3N0LWVkaXQtbGlua3tkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9CgogIC8qIGZpeGVkIGhlYWRlciBzaGVsbCAqLwogIDpyb290eyAtLWVrLWhlYWRlci1oOiAxMjBweDsgfSAvKiBoZWlnaHQgdG8gcmVzZXJ2ZSBmb3IgMiByb3dzICovCiAgI2VrLWhlYWRlcnsKICAgIHBvc2l0aW9uOmZpeGVkOyB0b3A6MDsgbGVmdDowOyByaWdodDowOyB6LWluZGV4Ojk5OTk7CiAgICBiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjg4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnNhdHVyYXRlKDEyMCUpIGJsdXIoM3B4KTsKICAgIGJhY2tkcm9wLWZpbHRlcjpzYXR1cmF0ZSgxMjAlKSBibHVyKDNweCk7CiAgICBib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wNik7CiAgfQogIC8qIHJlc2VydmUgc3BhY2Ugc28gY29udGVudCBkb2Vzbid0IHNsaWRlIHVuZGVyIGZpeGVkIGhlYWRlciAqLwogIGJvZHl7IHBhZGRpbmctdG9wOiB2YXIoLS1lay1oZWFkZXItaCkgIWltcG9ydGFudDsgfQoKICAvKiBjZW50ZXJpbmcgd3JhcHBlciAqLwogICNlay1oZWFkZXIgLndyYXB7CiAgICBtYXgtd2lkdGg6MTEwMHB4OyBtYXJnaW46MCBhdXRvOyBwYWRkaW5nOjEycHggMTZweDsKICB9CgogIC8qIHJvdyBzdHlsaW5nICovCiAgI2VrLWhlYWRlciAubmF2LXJvd3sKICAgIGRpc3BsYXk6ZmxleDsgZmxleC13cmFwOndyYXA7IGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBnYXA6MTRweDsgbWFyZ2luOjhweCAwOwogIH0KCiAgLyogcGlsbHMgKi8KICAjZWstaGVhZGVyIC5idG57CiAgICBkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBwYWRkaW5nOjEycHggMThweDsgYm9yZGVyLXJhZGl1czo5OTk5cHg7CiAgICBiYWNrZ3JvdW5kOiMxMTE7IGJvcmRlcjoxcHggc29saWQgIzJhMmEyYTsgY29sb3I6I2ZmZjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICBmb250LXdlaWdodDo3MDA7IHdoaXRlLXNwYWNlOm5vd3JhcDsgYm94LXNoYWRvdzowIDEwcHggMjJweCByZ2JhKDAsMCwwLC4zNSk7CiAgfQoKICAvKiByb3cgMiA9IHR3byBlcXVhbCBidXR0b25zICovCiAgI2VrLWhlYWRlciAucm93LXR3b3sKICAgIGRpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgyLG1pbm1heCgwLDFmcikpOyBnYXA6MTRweDsKICB9CiAgI2VrLWhlYWRlciAucm93LXR3byAuYnRueyB3aWR0aDoxMDAlOyBwYWRkaW5nOjE0cHggMjBweDsgfQoKICAvKiB0aWdodGVyIG9uIHNtYWxsIHBob25lczsgYWxsb3cgcm93LTIgdG8gc3RhY2sgaWYgdG9vIG5hcnJvdyAqLwogIEBtZWRpYSAobWF4LXdpZHRoOjY0MHB4KXsKICAgIDpyb290eyAtLWVrLWhlYWRlci1oOiAxNTJweDsgfQogICAgI2VrLWhlYWRlciAuYnRueyBwYWRkaW5nOjEwcHggMTRweDsgZm9udC1zaXplOi45NXJlbTsgfQogIH0KICBAbWVkaWEgKG1heC13aWR0aDo1MjBweCl7CiAgICAjZWstaGVhZGVyIC5yb3ctdHdveyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyOyB9CiAgICA6cm9vdHsgLS1lay1oZWFkZXItaDogMTk2cHg7IH0gLyogZXh0cmEgcm9vbSB3aGVuIHJvdy0yIHN0YWNrcyAqLwogIH0KPC9zdHlsZT4KCjxoZWFkZXIgaWQ9ImVrLWhlYWRlciIgYXJpYS1sYWJlbD0iU2l0ZSI+CiAgPGRpdiBjbGFzcz0id3JhcCI+CiAgICA8IS0tIFJvdyAxOiBmb3VyIHBpbGxzIC0tPgo8bmF2IGFyaWEtbGFiZWw9Ik1haW4iPgogIDwhLS0gUm93IDEgLS0+CiAgPGRpdiBjbGFzcz0ibmF2LXJvdyByb3ctb25lIj4KICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2Jvb2siPkJvb2sgT25saW5lPC9hPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iI3NlcnZpY2VzIj5TZXJ2aWNlczwvYT4KICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL3ByaXZhY3kvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+UHJpdmFjeTwvYT4KICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL3Rlcm1zLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPlRlcm1zPC9hPgogIDwvZGl2PgoKICA8IS0tIFJvdyAyIC0tPgogIDxkaXYgY2xhc3M9Im5hdi1yb3cgcm93LXR3byI+CiAgICA8YSBjbGFzcz0iYnRuIiBocmVmPSJodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9qb2lub3VydGVhbS8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5Kb2luIE91ciBUZWFtPC9hPgogICAgPGEgY2xhc3M9ImJ0biIgaHJlZj0iaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZWxpdGVkZWFscy8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5FbGl0ZSBEZWFsczwvYT4KICAgIDxhIGNsYXNzPSJidG4iIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2xvdy1zZW5zb3J5L2luZGV4Lmh0bWwiPkxvdyBTZW5zb3J5IFN1bmRheTwvYT4KICA8L2Rpdj4KPC9uYXY+CiAgPC9kaXY+CjwvaGVhZGVyPgoKPG1haW4gY2xhc3M9IndyYXAiPgogIDxzZWN0aW9uIGNsYXNzPSJoZXJvIj4KICAgIDxkaXYgY2xhc3M9ImxvZ28taGVybyI+CiAgICAgIDx2aWRlbyBjbGFzcz0ibG9nby12aWRlbyIKICAgICAgICAgICAgIHNyYz0iaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L2VsaXRla3V0ei1sb2dvLm1wNCIKICAgICAgICAgICAgIGF1dG9wbGF5IG11dGVkIGxvb3AgcGxheXNpbmxpbmU+PC92aWRlbz4KICAgIDwvZGl2Pgo8cCBjbGFzcz0iaW50cm8gaW50cm8tdG9wIj5Zb3VyIG5laWdoYm9yaG9vZCA8c3Ryb25nPmJhcmJlcnNob3AgaW4gUGxhbm8gVFg8L3N0cm9uZz4gZm9yIHNoYXJwIGZhZGVzLCB0YXBlcnMgJiBiZWFyZCB0cmltcy48L3A+CgogIDwvc2VjdGlvbj4KCiAgPHNlY3Rpb24gaWQ9ImhvdXJzIiBjbGFzcz0ic2VjdGlvbiI+CiAgICA8aDI+SG91cnM8L2gyPgogICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImhvdXJzIj4KICAgICAgICA8c3Bhbj5Nb248L3NwYW4+PHNwYW4+MTA6MDAgQU0g4oCTIDc6MDAgUE08L3NwYW4+CiAgICAgICAgPHNwYW4+VHVlPC9zcGFuPjxzcGFuPjEwOjAwIEFNIOKAkyA3OjAwIFBNPC9zcGFuPgogICAgICAgIDxzcGFuPldlZDwvc3Bhbj48c3Bhbj4xMDowMCBBTSDigJMgNzowMCBQTTwvc3Bhbj4KICAgICAgICA8c3Bhbj5UaHU8L3NwYW4+PHNwYW4+MTA6MDAgQU0g4oCTIDc6MDAgUE08L3NwYW4+CiAgICAgICAgPHNwYW4+RnJpPC9zcGFuPjxzcGFuPjk6MDAgQU0g4oCTIDc6MDAgUE08L3NwYW4+CiAgICAgICAgPHNwYW4+U2F0PC9zcGFuPjxzcGFuPjg6MDAgQU0g4oCTIDU6MDAgUE08L3NwYW4+CiAgICAgICAgPHNwYW4+U3VuPC9zcGFuPjxzcGFuPjEyOjAwIFBNIOKAkyA0OjAwIFBNPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHAgY2xhc3M9Im1pbmkiIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+PHAgY2xhc3M9Im1pbmkiIHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+CiAgQWxsIHRpbWVzIENlbnRyYWwuIEhvd2V2ZXIsIGhvbGlkYXkgaG91cnMgbWF5IHZhcnk7IHRoZXJlZm9yZSwgZm9sbG93IHVzIG9uIEluc3RhZ3JhbSBmb3IgdXBkYXRlcy4KPC9wPgo8L3A+CjwvZGl2Pgo8L3NlY3Rpb24+ICA8IS0tIGVuZCBIT1VSUyAtLT4KCjwhLS0gPT09IEVMSVRFIEtVVFog4oCUIEF1dG9wbGF5IExvb3AgVmlkZW8gKG11dGUgdG9nZ2xlIG9ubHkpID09PSAtLT4KPGRpdiBjbGFzcz0iZWstdmlkZW8td3JhcCI+CiAgPHZpZGVvIGlkPSJlay1oZXJvLXZpZGVvIgogICAgICAgICBhdXRvcGxheQogICAgICAgICBsb29wCiAgICAgICAgIG11dGVkCiAgICAgICAgIHBsYXlzaW5saW5lCiAgICAgICAgIHByZWxvYWQ9Im1ldGFkYXRhIj4KICAgIDxzb3VyY2Ugc3JjPSJodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMTAvVm4yMDI1MTAyMS0yMjAxNDYubXA0IiB0eXBlPSJ2aWRlby9tcDQiPgogICAgWW91ciBicm93c2VyIGRvZXNu4oCZdCBzdXBwb3J0IEhUTUw1IHZpZGVvLgogIDwvdmlkZW8+CgogIDxkaXYgY2xhc3M9ImVrLWNvbnRyb2xzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iVmlkZW8gY29udHJvbHMiPgogICAgPGJ1dHRvbiBpZD0iZWstbXV0ZSIgY2xhc3M9ImVrLWJ0biIgYXJpYS1sYWJlbD0iVW5tdXRlIHZpZGVvIj7wn5SHPC9idXR0b24+CiAgPC9kaXY+CjwvZGl2PgoKPHN0eWxlPgogIDpyb290IHsgLS1lay1ibHVlOiMxRTkwRkY7IC0tZWsteWVsbG93OiNGRkQ0MDA7IC0tZWstZGFyazojMDAwOyAtLWVrLXdoaXRlOiNmZmY7IH0KICAuZWstdmlkZW8td3JhcHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO21heC13aWR0aDo5MjBweDttYXJnaW46MS4yNXJlbSBhdXRvO2JvcmRlci1yYWRpdXM6MThweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDojMDAwO2JveC1zaGFkb3c6MCAxMnB4IDMwcHggcmdiYSgwLDAsMCwuMzUpO30KICAuZWstdmlkZW8td3JhcCB2aWRlb3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OmF1dG87YXNwZWN0LXJhdGlvOjE2Lzk7YmFja2dyb3VuZDojMDAwO30KICAuZWstY29udHJvbHN7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTJweDtib3R0b206MTJweDtkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7fQogIC5lay1idG57Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjEwcHggMTJweDtmb250LXNpemU6MThweDtjb2xvcjp2YXIoLS1lay13aGl0ZSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDAsMCwwLC42NSksIHJnYmEoMCwwLDAsLjM1KSk7Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSgwLDAsMCwuMzUpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xMnMgZWFzZSwgYm94LXNoYWRvdyAuMTJzIGVhc2U7fQogIC5lay1idG46aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCk7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjQ1KTt9CiAgLyogcmVtb3ZlZCAjZWstcGxheSBydWxlIHNpbmNlIHRoZXJlIGlzIG5vIHBsYXkgYnV0dG9uICovCiAgI2VrLW11dGUuaXMtbXV0ZWR7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1lay15ZWxsb3cpLCAjZmZlMTVjKTtjb2xvcjojMTExO30KCiAgLyogPT0gRUsgMi1yb3cgbmF2IChzY29wZWQpID09ICovCiAgI2VrLWhlYWRlciAubmF2LXJvd3sKICAgIGRpc3BsYXk6ZmxleDsKICAgIGZsZXgtd3JhcDp3cmFwOwogICAgZ2FwOjE0cHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOwogICAgbWFyZ2luOjEycHggMDsKICB9CiAgI2VrLWhlYWRlciAubmF2LXJvdyAuYnRuewogICAgZGlzcGxheTppbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOmNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDpjZW50ZXI7CiAgICBwYWRkaW5nOjEycHggMThweDsKICAgIGJvcmRlci1yYWRpdXM6OTk5OXB4OwogICAgYmFja2dyb3VuZDojMTExOwogICAgYm9yZGVyOjFweCBzb2xpZCAjMmEyYTJhOwogICAgY29sb3I6I2ZmZjsKICAgIHRleHQtZGVjb3JhdGlvbjpub25lOwogICAgZm9udC13ZWlnaHQ6NzAwOwogICAgd2hpdGUtc3BhY2U6bm93cmFwOwogICAgYm94LXNoYWRvdzowIDEwcHggMjJweCByZ2JhKDAsMCwwLC4zNSk7CiAgfQogICNlay1oZWFkZXIgLm5hdi1yb3cucm93LXR3b3sKICAgIGRpc3BsYXk6Z3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpOwogICAgZ2FwOjE0cHg7CiAgfQogICNlay1oZWFkZXIgLm5hdi1yb3cucm93LXR3byAuYnRuewogICAgd2lkdGg6MTAwJTsKICAgIHBhZGRpbmc6MTRweCAyMHB4OwogIH0KICBAbWVkaWEgKG1heC13aWR0aDo1MjBweCl7CiAgICAjZWstaGVhZGVyIC5uYXYtcm93LnJvdy10d297IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnI7IH0KICB9Cjwvc3R5bGU+Cgo8c2NyaXB0PgogIChmdW5jdGlvbigpewogICAgY29uc3QgdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlay1oZXJvLXZpZGVvJyk7CiAgICBjb25zdCBtdXRlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VrLW11dGUnKTsKCiAgICAvLyBBdXRvcGxheSAobXV0ZWQpIGFuZCBsb29wIGNvbnRpbnVvdXNseQogICAgdi5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgKCkgPT4gdi5wbGF5KCkuY2F0Y2goKCk9Pnt9KSwgeyBvbmNlOnRydWUgfSk7CgogICAgZnVuY3Rpb24gc3luYygpewogICAgICBtdXRlQnRuLnRleHRDb250ZW50ID0gdi5tdXRlZCA\/ICfwn5SHJyA6ICfwn5SKJzsKICAgICAgbXV0ZUJ0bi5jbGFzc0xpc3QudG9nZ2xlKCdpcy1tdXRlZCcsIHYubXV0ZWQpOwogICAgfQoKICAgIG11dGVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgIHYubXV0ZWQgPSAhdi5tdXRlZDsKICAgICAgaWYgKCF2Lm11dGVkKSB2LnBsYXkoKS5jYXRjaCgoKT0+e30pOyAvLyBlbnN1cmUgcGxheWJhY2sgYWZ0ZXIgdW5tdXRlCiAgICAgIHN5bmMoKTsKICAgIH0pOwoKICAgIFsndm9sdW1lY2hhbmdlJywnZW5kZWQnXS5mb3JFYWNoKGV2ID0+IHYuYWRkRXZlbnRMaXN0ZW5lcihldiwgc3luYykpOwogICAgc3luYygpOwogIH0pKCk7Cjwvc2NyaXB0PgoKPHNlY3Rpb24gaWQ9ImJhcmJlcnMiIGNsYXNzPSJzZWN0aW9uIj4KCiAgICA8aDI+TWVldCB0aGUgVGVhbTwvaDI+CiAgICA8ZGl2IGlkPSJiYXJiZXJzR3JpZCIgY2xhc3M9ImdyaWQgYmFyYmVycyI+PC9kaXY+CiAgICA8cCBjbGFzcz0ibWluaSI+VGFwIGEgYmFyYmVyIHRvIGJvb2sgb3IgdmlldyBJbnN0YWdyYW0uIFZpZGVvcyBhcmUgb3B0aW9uYWwgYW5kIG1heSBvcGVuIGluIGEgbmV3IHRhYi48L3A+CiAgPC9zZWN0aW9uPgoKICA8c2VjdGlvbiBpZD0ic2VydmljZXMiIGNsYXNzPSJzZWN0aW9uIj4KICAgIDxoMj5TZXJ2aWNlczwvaDI+CiAgICA8ZGl2IGNsYXNzPSJncmlkIHNlcnZpY2VzIj4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5BZHVsdCBIYWlya3V0ejwvaDM+PHA+Q3Jpc3AgZmFkZSwgcG9saXNoZWQgYW5kIHByb2Zlc3Npb25hbC48L3A+PHA+PHN0cm9uZz4kMzU8L3N0cm9uZz4gPHNwYW4gY2xhc3M9Im1pbmkiPkFkZCBSYXpvciBMaW5lICskNTwvc3Bhbj48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPkFkdWx0IEhhaXJrdXQgJmFtcDsgQmVhcmQ8L2gzPjxwPkZyZXNoIGN1dCB3aXRoIGEgcG9saXNoZWQgYmVhcmQgZmluaXNoLjwvcD48cD48c3Ryb25nPiQ0MDwvc3Ryb25nPiA8c3BhbiBjbGFzcz0ibWluaSI+QWRkIFJhem9yIExpbmUgKyQ1PC9zcGFuPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+WW91bmcgQWR1bHR6IDE2ICZhbXA7IFVuZGVyPC9oMz48cD5TaGFycCBsb29rcyBmb3IgeW91bmcgdHJlbmRzZXR0ZXJzLjwvcD48cD48c3Ryb25nPiQzMDwvc3Ryb25nPiA8c3BhbiBjbGFzcz0ibWluaSI+QWRkIERlc2lnbiAkNSs8L3NwYW4+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5TZW5pb3JzIDY1KzwvaDM+PHA+Q2xhc3NpYyBjdXRzIHRhaWxvcmVkIGZvciBzZW5pb3JzLjwvcD48cD48c3Ryb25nPiQyNTwvc3Ryb25nPiA8c3BhbiBjbGFzcz0ibWluaSI+QWRkIFJhem9yIExpbmUgKyQ1PC9zcGFuPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+U2VuaW9ycyA2NSsgJmFtcDsgQmVhcmQ8L2gzPjxwPlNoYXJwIHNlbmlvciBzdHlsZXMgcGx1cyBiZWFyZCBncm9vbWluZy48L3A+PHA+PHN0cm9uZz4kMzA8L3N0cm9uZz4gPHNwYW4gY2xhc3M9Im1pbmkiPkFkZCBSYXpvciBMaW5lICskNTwvc3Bhbj48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPlNoYW1wb288L2gzPjxwPkludmlnb3JhdGluZyB3YXNoIGxlYXZpbmcgaGFpciBmcmVzaCwgc29mdC48L3A+PHA+PHN0cm9uZz4kMTU8L3N0cm9uZz48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPkVkZ2UgVXA8L2gzPjxwPkxpbmUtdXAgdGhhdCBrZWVwcyB5b3UgbG9va2luZyBmcmVzaC48L3A+PHA+PHN0cm9uZz4kMTU8L3N0cm9uZz48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPkJlYXJkIFRyaW08L2gzPjxwPkJlYXJkIGNhcmUgdGFpbG9yZWQgdG8geW91ciBzdHlsZS48L3A+PHA+PHN0cm9uZz4kMTU8L3N0cm9uZz48L3A+PC9hcnRpY2xlPgogICAgICA8YXJ0aWNsZSBjbGFzcz0iY2FyZCI+PGgzPkhhaXJsaW5lIEVuaGFuY2VtZW50PC9oMz48cD5GdWxsZXIsIHNoYXJwZXIsIG1vcmUgZGVmaW5lZCBoYWlybGluZSBkZW5zaXR5LjwvcD48cD48c3Ryb25nPiQxMDwvc3Ryb25nPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+RWRnZSBVcCAmYW1wOyBCZWFyZDwvaDM+PHA+UHJlY2lzaW9uIHRyaW0gZm9yIGJlYXJkIGFuZCBoYWlybGluZS48L3A+PHA+PHN0cm9uZz4kMjA8L3N0cm9uZz4gPHNwYW4gY2xhc3M9Im1pbmkiPkFkZCBSYXpvciArJDU8L3NwYW4+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5SYXpvciBTaGF2ZSAmYW1wOyBIb3QgVG93ZWw8L2gzPjxwPkNsYXNzaWMgc2hhdmUgd2l0aCBzb290aGluZyBob3QgdG93ZWwuPC9wPjxwPjxzdHJvbmc+JDQ1PC9zdHJvbmc+PC9wPjwvYXJ0aWNsZT4KICAgICAgPGFydGljbGUgY2xhc3M9ImNhcmQiPjxoMz5SYXpvciBIZWFkIFNoYXZlICZhbXA7IEJlYXJkPC9oMz48cD5Qb2xpc2hlZCBzaGF2ZSB3aXRoIHRhaWxvcmVkIGJlYXJkIHN0eWxlLjwvcD48cD48c3Ryb25nPiQ1NTwvc3Ryb25nPjwvcD48L2FydGljbGU+CiAgICAgIDxhcnRpY2xlIGNsYXNzPSJjYXJkIj48aDM+QWZyb3MsIExheWVyIEt1dHo8L2gzPjxwPkN1c3RvbSBIYWlya3V0eiBmb3IgaGFpciB3aXRoIHNoYXBlIGFuZCB2b2x1bWUuPC9wPjxwPjxzdHJvbmc+JDUrPC9zdHJvbmc+PC9wPjwvYXJ0aWNsZT4KICAgIDwvZGl2PgogIDwvc2VjdGlvbj4KCjxzZWN0aW9uIGlkPSJsb2NhdGlvbiIgY2xhc3M9ImxvY2F0aW9uLXNlY3Rpb24iIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgbWF4LXdpZHRoOjkyMHB4OyBtYXJnaW46MCBhdXRvOyI+CiAgPGgyPkZpbmQgVXMg4oCUIEJhcmJlcnNob3AgaW4gUGxhbm8gVFg8L2gyPgoKICA8cD4KICAgIEVsaXRlIEt1dHogaXMgY29udmVuaWVudGx5IGxvY2F0ZWQgYXQgPHN0cm9uZz4zMTMxIEN1c3RlciBSZC4sIFN1aXRlIDE5MywgUGxhbm8sIFRYPC9zdHJvbmc+LgogICAgTG9vayBmb3IgdGhlIEVsaXRlIEt1dHogc2lnbiwgaGVhZCBpbnNpZGUsIGFuZCBjaGVjayBpbi4gV2XigJlyZSBvcGVuIGRhaWx5IChob2xpZGF5IGhvdXJzIG1heSB2YXJ5KQogICAgYW5kIHBvc3QgdXBkYXRlcyBvbiBJbnN0YWdyYW0uIE91ciBiYXJiZXJzIGRlbGl2ZXIgPHN0cm9uZz5zaGFycCBmYWRlczwvc3Ryb25nPiwgPHN0cm9uZz50YXBlcnM8L3N0cm9uZz4sCiAgICBhbmQgPHN0cm9uZz5iZWFyZCB0cmltczwvc3Ryb25nPiBzbyB5b3UgbGVhdmUgbG9va2luZyBhbmQgZmVlbGluZyB5b3VyIGJlc3QuCiAgPC9wPgoKICA8cD4KICAgIEJvb2tpbmcgaXMgZmFzdOKAlHJlc2VydmUgb25saW5lIHdpdGggYSBtYXN0ZXIgYmFyYmVyIGluIHNlY29uZHMgb3Igd2FsayBpbiB3aGVuIGl04oCZcyBjb252ZW5pZW50LgogICAgV2XigJlyZSBqdXN0IG1pbnV0ZXMgZnJvbSA8c3Ryb25nPlVTLTc1PC9zdHJvbmc+IG5lYXIgPHN0cm9uZz5QYXJrZXIgUmQuPC9zdHJvbmc+IElmIHlvdeKAmXJlIHNlYXJjaGluZyBmb3IgYQogICAgdHJ1c3RlZCA8c3Ryb25nPmJhcmJlcnNob3AgaW4gUGxhbm8sIFRYPC9zdHJvbmc+LCBFbGl0ZSBLdXR6IG1ha2VzIGl0IGVhc3kgdG8gZ2V0IGluIHRoZSBjaGFpciBvbiB0aW1lLCBldmVyeSB0aW1lLgogIDwvcD4KCiAgPGgzIHN0eWxlPSJtYXJnaW4tdG9wOjEuMjVyZW07Ij4zMTMxIEN1c3RlciBSZC4gU3VpdGUgMTkzLCBQbGFubywgVFggNzUwNzU8L2gzPgoKICA8cCBjbGFzcz0ibWluaSIgc3R5bGU9Im1hcmdpbi10b3A6Ljc1cmVtOyI+CiAgICA8YSBocmVmPSJodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvcGxhY2UvMzEzMStDdXN0ZXIrUmQrU3VpdGUrMTkzLCtQbGFubywrVFgrNzUwNzUiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5PcGVuIGluIEdvb2dsZSBNYXBzPC9hPgogICAgJm5ic3A7wrcmbmJzcDsKICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnBsYW5vLmdvdi8iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5DaXR5IG9mIFBsYW5vPC9hPgogIDwvcD4KPC9zZWN0aW9uPgoKICAgIDxpZnJhbWUgY2xhc3M9Im1hcCIgbG9hZGluZz0ibGF6eSIgYWxsb3dmdWxsc2NyZWVuIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9tYXBzP3E9MzEzMSUyMEN1c3RlciUyMFJkLiUyMFN1aXRlJTIwMTkzJTJDJTIwUGxhbm8lMkMlMjBUWCUyQyUyMDc1MDc1Jm91dHB1dD1lbWJlZCI+PC9pZnJhbWU+CiAgPC9zZWN0aW9uPgo8L21haW4+Cgo8Zm9vdGVyIGNsYXNzPSJmb290ZXIiPgogIDxkaXYgY2xhc3M9IndyYXAiIHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjEycHg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIj4KICAgIDxkaXY+wqkgPHNwYW4gaWQ9InlyIj48L3NwYW4+IEVsaXRlIEt1dHouIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9kaXY+CgogICAgPG5hdiBjbGFzcz0iZm9vdGVyLWxpbmtzIiBhcmlhLWxhYmVsPSJMZWdhbCI+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL3ByaXZhY3kvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+UHJpdmFjeSBQb2xpY3k8L2E+IMK3CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL3Rlcm1zLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPlRlcm1zIG9mIFNlcnZpY2U8L2E+CiAgICA8L25hdj4KICA8L2Rpdj4KCjxkaXYgY2xhc3M9IndyYXAiPgogIDxkaXYgY2xhc3M9Im1pbmkgc2l0ZS1ub3RlIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXRvcDo4cHg7Ij4KICAgIEFsbCB0aW1lcyBDZW50cmFsIMK3IFBsYW5vLCBUWAogIDwvZGl2PgoKPC9mb290ZXI+Cgo8c2NyaXB0PgovLyBGb290ZXIgeWVhcgpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneXInKS50ZXh0Q29udGVudCA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTsKCi8vID09PT09IEJhcmJlcnMgKHNhbWUgbGlzdCB5b3Ugc2F3IGVhcmxpZXIpID09PT09CmNvbnN0IEJBUkJFUlMgPSBbCnsgbmFtZTonVGFqYScsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3RhamEnLCBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vdHJ1ZWJsZW5kc18\/dXRtX3NvdXJjZT1pZ193ZWJfYnV0dG9uX3NoYXJlX3NoZWV0Jmlnc2g9WkRObFpEYzBNekl4Tnc9PScsIGJpbzpgSXRzIHlhIGdpcmwgVGVlISBEZWxpdmVyaW5nIGNyaXNweSBjdXRzIGFuZCBmYWRlcywgaGFpciBjb2xvciBhbmQgbG9jIHJldHdpc3RpbmchIEd1YXJhbnRlZWQgdG8gbGVhdmUgb3V0IGZlZWxpbmcgeW91ciBiZXN0IWAsIG9yZGVyOjcwLCBwaG90bzogJ2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9UYWphX3Jlc2l6ZWQuanBnJywKICAgIHRpa3RvazonaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AX3RoYXRncmx0ZWU\/X3Q9WlQtOTAzTWdkRnpiYVAmX3I9MScsIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvRE03ektaLXVZOWovP2lnc2g9TVROeWR6VTFhV1J3ZDNZeGVnPT0nIH0sCiAgeyBuYW1lOidKIE1pa2UnLCBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby9taWtlJywKIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9kZWJvbmFpcmdyb29taW5nY2x1Yj91dG1fc291cmNlPWlnX3dlYl9idXR0b25fc2hhcmVfc2hlZXQmaWdzaD1aRE5sWkRjME16SXhOdz09JywgYmlvOmAyMCB5ZWFycy4gREZXLiBGbGF3bGVzcyBjdXRzLiBEZWJvbmFpciBHcm9vbWluZ+KAlGV4cGVydCBiYXJiZXJpbmcgZm9yIGV2ZXJ5IHN0eWxlLCBldmVyeSBoYWlyIHR5cGUuIExlYXZlIHNoYXJwLiBGZWVsIGNvbmZpZGVudC5gLCBvcmRlcjoxMDAsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L0lNR18yMDI1MDkyN18xMTUzMzJfNjAweDYwMC5qcGcnLAogICAgdGlrdG9rOidodHRwczovL3d3dy50aWt0b2suY29tL0BkZWJvbmFpcmdyb29tZXI\/X3Q9WlQtOTAzTmwwRGlYdkMmX3I9MScsIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvRE5zemwzcU42SjcvP2lnc2g9WVdwblptOTRZbU42T0hwdycgfSwKeyBuYW1lOidTaGVsdG9uJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vc2hlbHRvbicsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9iZWxsYXplcl9rdXRzP3V0bV9zb3VyY2U9aWdfd2ViX2J1dHRvbl9zaGFyZV9zaGVldCZpZ3NoPVpETmxaRGMwTXpJeE53PT0nLCBiaW86YFdpdGggMjUrIHllYXJzIG9mIGV4cGVyaWVuY2UsIEkgYmxlbmQgb2xkLXNjaG9vbCBjcmFmdCB3aXRoIG1vZGVybiB0ZWNobmlxdWUuIEJvb2sgd2l0aCBtZSBmb3IgYSBjcmlzcCwgdGFpbG9yZWQgY3V0IHRoYXQgZml0cyB5b3VyIHN0eWxlLmAsIG9yZGVyOjMsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L1NoZWx0b25fcmVzaXplZC5qcGcnLCB0aWt0b2s6J2h0dHBzOi8vd3d3LnRpa3Rvay5jb20vQGJhcmJlcl9jdXRzMDU\/X3Q9WlQtOTA1R2pGbXhwZXAmX3I9MScsIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvRE9ROWxsT0RhMk8vP2lnc2g9TVhOa1pqTm5lbmhyZG5Gc2NnPT0nIH0sCnsgbmFtZTonSG9sbHl3b29kJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vaG9sbHl3b29kJywgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3RoZS5nZW1leHBlcmllbmNlP3V0bV9zb3VyY2U9aWdfd2ViX2J1dHRvbl9zaGFyZV9zaGVldCZpZ3NoPVpETmxaRGMwTXpJeE53PT0nLCBiaW86YEZvciB0d28gZGVjYWRlcywgSeKAmXZlIGJlZW4gc2hhcnBlbmluZyBtb3JlIHRoYW4gY2xpcHBlcnPigJRJ4oCZdmUgYmVlbiBzaGFycGVuaW5nIGNvbmZpZGVuY2UuIE15IG1pc3Npb24gaXMgdG8gbWFrZSBldmVyeSBjdXQgYW4gZXhwZXJpZW5jZSB0aGF0IGxlYXZlcyB5b3UgbG9va2luZyBmcmVzaCBhbmQgZmVlbGluZyB1bnN0b3BwYWJsZS5gLCBvcmRlcjowLCBwaG90bzogJ2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9Ib2xseXdvb2RfcmVzaXplZC5qcGcnLAogICAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ETldGSFh4QXFTbi8\/aWdzaD1NVFJ6T0RocVlYcDZiREJoYXc9PScgfSwKeyBuYW1lOidOZXNoYScsIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL25lc2hhJywgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2tvb2xhenprdXR6P3V0bV9zb3VyY2U9aWdfd2ViX2J1dHRvbl9zaGFyZV9zaGVldCZpZ3NoPVpETmxaRGMwTXpJeE53PT0nLCBiaW86YEknbSBOZXNoYSBMaWNlbnNlZCBCYXJiZXIgaW4gUGxhbm8gJiBzdXJyb3VuZGluZyBhcmVhcy4gU3BlY2lhbGl6aW5nIGluIGZhZGluZyBhbmQgcXVhbGl0eSBLb29sYXp6a3V0eiEhYCwgb3JkZXI6OTAsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L05lc2hhX3Jlc2l6ZWQuanBnJywKICAgIHRpa3RvazonaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9Aa29vbGF6em5lc2hhP190PVpULTkwM05nbGJkaTVQJl9yPTEnLHRpa3Rva19yZWVsOiAnaHR0cHM6Ly93d3cudGlrdG9rLmNvbS90L1pQOFMzNXFhYy8nLCB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0RDdDliWnZ1Y2dLLz91dG1fc291cmNlPWlnX3dlYl9jb3B5X2xpbmsmaWdzaD1NelJsT0RCaU5XRmxaQT09JyB9LAogIHsgbmFtZTonVXJpJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vdXJpJywgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3VyaTBfZF9iYXJiZXIvJywgYmlvOmBJIGFtIFVyaSB0aGUgQmFyYmVyLi4uVGhlIGh1bWJsZXN0IGJhcmJlciBleHBlcmllbmNlIHlvdSB3aWxsIGV2ZXIgaGF2ZS4gQSBjcmFmdHkgYW5kIHByZWNpc2VseSBzaGFycCBleHBlcmllbmNlIHRoYXQgbWFrZXMgeW91IGZlZWwgYW5kIGxvb2sgZ29vZC5gLCBvcmRlcjo4MCwgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvVXJpX3Jlc2l6ZWQuanBnJywKICAgIHRpa3RvazonaHR0cHM6Ly93d3cudGlrdG9rLmNvbS9AZWwubWFyaXNxdWVybz9fdD1aVC05MDNOZGE5NEhsdSZfcj0xJywgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9DeGlydTRwT1Qxci8\/dXRtX3NvdXJjZT1pZ193ZWJfY29weV9saW5rJmlnc2g9TXpSbE9EQmlOV0ZsWkE9PScgfSwKeyAKICBuYW1lOidNYXJ0aWNlJywKICBib29raW5nOidodHRwczovL2VsaXRla3V0emtpb3NrLmNvbS9nby9tYXJ0aWNlJywKICBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vbXIuY2xhc3NpY19jdXR6LycsCiAgYmlvOmBJ4oCZbSBNYXJ0aWNlLCBhIE1hc3RlciBCYXJiZXIgd2l0aCAxMysgeWVhcnMgb2YgZXhwZXJpZW5jZSBpbiB0aGUgREZXIGFyZWEuIEkgdGFrZSBwcmlkZSBpbiBwcmVjaXNpb24sIGFydGlzdHJ5LCBhbmQgZGVsaXZlcmluZyBjbGVhbiwgcHJvZmVzc2lvbmFsIGN1dHMgZm9yIGV2ZXJ5IGhhaXIgdHlwZS5gLAogIG9yZGVyOjYsCiAgcGhvdG86J2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9NYXJ0aWNlMV9yZXNpemVkLmpwZycsCiAgdGlrdG9rOidodHRwczovL3d3dy50aWt0b2suY29tL0BtYXJ0aWNlX21yY2xhc3NpYz9fdD1aVC05MDNOVjJkWUhRVCZfcj0xJywKICB2aWRlbzonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9yZWVsL0RNYW42enh1VjZaLz9pZ3NoPU1XY3pZakJpY1RKb09USjRPQT09Jwp9LAp7CiAgbmFtZTonSmFtYWwnLAogIGJvb2tpbmc6JycsCiAgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tLzJ4YXpuaWNlX2t1dHo\/aWdzaD1ZamRxWm1GM2MzbHVOMjUzJywKICBiaW86YENsZWFuIGN1dHMsIHNoYXJwIGZhZGVzLCBhbmQgY29uc2lzdGVudCByZXN1bHRzIOKAlCBmb2N1c2VkIG9uIGRldGFpbCBhbmQga2VlcGluZyB5b3UgbG9va2luZyB5b3VyIGJlc3QuYCwKICBvcmRlcjoxMCwKICBwaG90bzonaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA0L2phbWFsLmpwZycsCiAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ERk9kdzVKTy1rYi8\/aWdzaD1iVzEyTUdSbWNtWmhOR3RzJwp9LAp7CiAgbmFtZTonUmlsZXknLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL3JpbGV5JywKICBpbnN0YWdyYW06J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmlsZXl0aGFiYXJiZXIvJywKICBiaW86YE1hc3RlciBCYXJiZXIgaW4gUGxhbm8gd2l0aCBvdmVyIDcgeWVhcnMgYmVoaW5kIHRoZSBjaGFpci4gS25vd24gZm9yIGNsZWFuIGZhZGVzLCBzaGFycCByYXpvciBsaW5lcyBhbmQgcHJlY2lzZSBzaGVhciB3b3JrLiBJZiB5b3UncmUgbG9va2luZyBmb3IgYSBmcmVzaCBjdXQsIHdpdGggYXR0ZW50aW9uIHRvIGRldGFpbCwgSSBnb3QgeW91IWAsCiAgb3JkZXI6NjAsCiAgcGhvdG86J2h0dHBzOi8vZWxpdGVrdXR6LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNS8wOS9SaWxleV9yZXNpemVkLmpwZycsCiAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9Ddy1XczUydWlQTy8\/dXRtX3NvdXJjZT1pZ193ZWJfY29weV9saW5rJmlnc2g9TXpSbE9EQmlOV0ZsWkE9PScKfSwKeyBuYW1lOidQZXRlJywgYm9va2luZzonaHR0cHM6Ly9lbGl0ZWt1dHpraW9zay5jb20vZ28vcGV0ZScsIGluc3RhZ3JhbTonJywgYmlvOmBJIGJyaW5nIHllYXJzIG9mIGJhcmJlcmluZyBleHBlcnRpc2Ugd2l0aCBxdWljaywgY2xlYW4gcmVzdWx0cy4gRmFtaWx5LWZyaWVuZGx5IHNlcnZpY2UgYW5kIG9uLXRpbWUgdHVybmFyb3VuZHMgYXJlIG15IHN0YW5kYXJkLmAsIG9yZGVyOjgsIHBob3RvOiAnaHR0cHM6Ly9lbGl0ZWt1dHouY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI1LzA5L1BldGVfcmVzaXplZC5qcGcnLAogICAgdmlkZW86J2h0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vcmVlbC9ETmF5QnBtdWlxTy8\/aWdzaD1NV1IwTURaa1kzSmxNM0J3TVE9PScgfSwKICB7IG5hbWU6J0xvdScsIGJvb2tpbmc6JycsIGluc3RhZ3JhbTonaHR0cHM6Ly93d3cuaW5zdGFncmFtLmNvbS9sb3VjaGlldGhlYmFyYmVyP3V0bV9zb3VyY2U9aWdfd2ViX2J1dHRvbl9zaGFyZV9zaGVldCZpZ3NoPVpETmxaRGMwTXpJeE53PT0nLCBiaW86YFdpdGggb3ZlciAxMyB5ZWFycyBvZiBiYXJiZXJpbmcgZXhwZXJpZW5jZSwgSSBzcGVjaWFsaXplIGluIHByZWNpc2lvbiBjdXRzIHRhaWxvcmVkIHRvIGVhY2ggY2xpZW50LiBNeSBkZXRhaWwtb3JpZW50ZWQgYXBwcm9hY2ggZW5zdXJlcyB5b3UgbGVhdmUgbG9va2luZyBzaGFycCBhbmQgZmVlbGluZyBjb25maWRlbnQuYCwgb3JkZXI6OSwgcGhvdG86ICdodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjUvMDkvTG91X3Jlc2l6ZWQuanBnJywKICAgIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvREthWHFwZ3VhZTMvP2lnc2g9TVd4d09EbDZiRGQ0WWpJeGVRPT0nIH0sCnsKICBuYW1lOidDYXJ0ZXInLAogIGJvb2tpbmc6J2h0dHBzOi8vZWxpdGVrdXR6a2lvc2suY29tL2dvL2NhcnRlcicsCiAgaW5zdGFncmFtOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2t1dHpieWNhcnRpZXI\/aWdzaD1jV3hpYjNNNWVqVXdOelY1JywKICBiaW86YEt1dHpieUNhcnRpZXIg4pyC77iPIE1hc3RlciBCYXJiZXIgfCAyMCsgeWVhcnMgZXhwZXJpZW5jZS4gUHJlY2lzaW9uIGZhZGVzLCBiZWFyZCBzY3VscHRpbmcgJiBjZWxlYnJpdHkgY3V0cy4gQkVULCBNVFYsIFRWIE9uZSwgU3RlbGxhcnMgJiBHcmFtbXlzLmAsCiAgb3JkZXI6MjAwLAogIHBob3RvOidodHRwczovL2VsaXRla3V0ei5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDMvQ2FydGVyLmpwZWcnLAogIHZpZGVvOidodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZWwvRFE0ZGpxQ0NkaTAvP2lnc2g9TVc5MGVUZ3plbXR1ZVdzeE1RPT0nCn0sCgpdOwoKLy8gLS0tLSBIZWxwZXJzIChtdXN0IGJlIGRlZmluZWQgQkVGT1JFIHJlbmRlckJhcmJlcnMpIC0tLS0KZnVuY3Rpb24gc2x1Z2lmeShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XSsvZywnLScpLnJlcGxhY2UoLyheLXwtJCkvZywnJyk7fQpmdW5jdGlvbiBlbnN1cmVIdHRwcyh1cmwpe2lmKCF1cmwpIHJldHVybiAnJztyZXR1cm4gL15odHRwcz86XC9cLy9pLnRlc3QodXJsKT91cmw6KCdodHRwczovLycrdXJsKTt9CmZ1bmN0aW9uIGlzWW91dHViZU9yVmltZW8odSl7cmV0dXJuIC95b3V0dWJlfHlvdXR1XC5iZXx2aW1lby9pLnRlc3QodSk7fQpmdW5jdGlvbiBpc01wNCh1KXtyZXR1cm4gL1wubXA0KFw\/LiopPyQvaS50ZXN0KHUpO30KZnVuY3Rpb24gaXNJbnN0YWdyYW1SZWVsKHUpe3JldHVybiAvaW5zdGFncmFtXC5jb21cL3JlZWxcLy9pLnRlc3QodSk7fQoKY29uc3QgUExBQ0VIT0xERVI9J2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjYwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0iJTIzMTQxNDE0Ii8+PHRleHQgeD0iNTAlIiB5PSI1MCUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiUyMzlmOWY5ZiIgZm9udC1mYW1pbHk9IkludGVyLCBBcmlhbCIgZm9udC1zaXplPSIyNCI+RWxpdGUgS3V0ejwvdGV4dD48L3N2Zz4nOwpjb25zdCBpZ1NWRz0nPHN2ZyB2aWV3Qm94PSIwIDAgNDQ4IDUxMiIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0yMjQgMTQxYy02My42IDAtMTE1IDUxLjQtMTE1IDExNXM1MS40IDExNSAxMTUgMTE1IDExNS01MS40IDExNS0xMTUtNTEuNC0xMTUtMTE1LTExNXptMCAxOTBjLTQxLjQgMC03NS0zMy42LTc1LTc1czMzLjYtNzUgNzUtNzUgNzUgMzMuNiA3NSA3NS0zMy42IDc1LTc1IDc1em0xNDYuNC0xOTQuN2MwIDE0LjktMTIuMSAyNy0yNyAyNy0xNC45IDAtMjctMTIuMS0yNy0yN3MxMi4xLTI3IDI3LTI3YzE0LjkgMCAyNyAxMi4xIDI3IDI3ek0zOTguOCA4MGMtNy44LTIwLjktMjQuNS0zNy42LTQ1LjQtNDUuNEMzMjcuMiAyNCAyMjQgMjQgMjI0IDI0cy0xMDMuMiAwLTEyOS40IDEwLjZjLTIwLjkgNy44LTM3LjYgMjQuNS00NS40IDQ1LjRDMzguNiAxMDYuMiAzOC42IDE5MiAzOC42IDE5MnMwIDg1LjggMTAuNiAxMTJjNy44IDIwLjkgMjQuNSAzNy42IDQ1LjQgNDUuNEMxMjAuOCAzNjAgMjI0IDM2MCAyMjQgMzYwczEwMy4yIDAgMTI5LjQtMTAuNmMyMC45LTcuOCAzNy42LTI0LjUgNDUuNC00NS40IDEwLjYtMjYuMiAxMC42LTExMiAxMC42LTExMnMwLTg1LjgtMTAuNi0xMTJ6TTIyNCAzMzhjLTgwIDAtMTQ0LjktNjQuOS0xNDQuOS0xNDQuOVMxNDQgNDguMiAyMjQgNDguMiAzNjguOSAxMTMuMSAzNjguOSAxOTMuMSAzMDQgMzM4IDIyNCAzMzh6Ii8+PC9zdmc+JzsKY29uc3QgdHRTVkc9Jzxzdmcgdmlld0JveD0iMCAwIDQ0OCA1MTIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNNDQ4IDIwOS45Yy03MC43LTMuMy0xMjAuMy0zNS4zLTE1MC44LTcwLjl2MjI0YzAgNjEuOS01MC45IDExMS45LTExMi44IDExMS45UzcxLjYgNDI0LjkgNzEuNiAzNjNzNTAuOS0xMTIgMTEyLjgtMTEyYzUuOCAwIDExLjUuNSAxNyAxLjR2NjkuNGMtNS40LTEuNC0xMS4xLTIuMS0xNy0yLjEtMjcuNSAwLTQ5LjggMjIuMy00OS44IDQ5LjhzMjIuMyA0OS44IDQ5LjggNDkuOGMyNy41IDAgNDkuOC0yMi4zIDQ5LjgtNDkuOFYwaDg1LjRjMi40IDQ2LjQgMjcuMyA4NS44IDY2LjUgMTA4LjQgMTcuOCAxMC4yIDM4LjIgMTYuMyA1OS45IDE3Ljl2ODMuNnoiLz48L3N2Zz4nOwoKLy8gLS0tLSBSZW5kZXJlciAodXBkYXRlZCkgLS0tLQpmdW5jdGlvbiByZW5kZXJCYXJiZXJzKCl7CiAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXJiZXJzR3JpZCcpOwogIGlmKCFncmlkKSByZXR1cm47CgogIGNvbnN0IHNvcnRlZCA9IFsuLi5CQVJCRVJTXS5zb3J0KChhLGIpPT4gKGIub3JkZXJ8fDApIC0gKGEub3JkZXJ8fDApKTsKCiAgc29ydGVkLmZvckVhY2goYj0+ewogICAgY29uc3QgY2FyZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2FydGljbGUnKTsKICAgIGNhcmQuY2xhc3NOYW1lID0gJ2JhcmJlci1jYXJkJzsKCiAgICBjb25zdCBpbWdTcmMgPSBiLnBob3RvIHx8IGAvYXNzZXRzL2JhcmJlcnMvJHtzbHVnaWZ5KGIubmFtZSl9LmpwZ2A7CiAgICBjb25zdCBpbWcgICA9IGA8aW1nIHNyYz0iJHtpbWdTcmN9IiBhbHQ9IiR7Yi5uYW1lfSIgb25lcnJvcj0idGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9JyR7UExBQ0VIT0xERVJ9JyI+YDsKICAgIGNvbnN0IGgzICAgID0gYDxoMz4ke2IubmFtZX08L2gzPmA7CiAgICBjb25zdCBwICAgICA9IGA8cD4ke2IuYmlvfHwnJ308L3A+YDsKCiAgICBjb25zdCBib29rICA9IGIuYm9va2luZwogICAgICA\/IGA8YSBjbGFzcz0iYnRuIGN0YSIgaHJlZj0iJHtlbnN1cmVIdHRwcyhiLmJvb2tpbmcpfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPkJvb2sgJHtiLm5hbWV9PC9hPmAgOiAnJzsKCiAgICBjb25zdCBzaG93SWdUZXh0ID0gKGIubmFtZSAmJiBiLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3BldGUnKTsgLy8gb25seSBQZXRlIHNob3dzIHRleHQgbGFiZWwgb24gSUcgaWNvbgogICAgY29uc3QgaWdJY29uID0gYi5pbnN0YWdyYW0KICAgICAgPyBgPGEgY2xhc3M9ImJ0biBsaWdodCBpZyIgaHJlZj0iJHtlbnN1cmVIdHRwcyhiLmluc3RhZ3JhbSl9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgYXJpYS1sYWJlbD0iSW5zdGFncmFtIj4ke2lnU1ZHfSR7c2hvd0lnVGV4dD8nPHNwYW4+SW5zdGFncmFtPC9zcGFuPic6Jyd9PC9hPmAgOiAnJzsKCiAgICBjb25zdCB0dEljb24gPSBiLnRpa3RvawogICAgICA\/IGA8YSBjbGFzcz0iYnRuIGxpZ2h0IHR0IiBocmVmPSIke2Vuc3VyZUh0dHBzKGIudGlrdG9rKX0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiBhcmlhLWxhYmVsPSJUaWtUb2siPiR7dHRTVkd9PC9hPmAgOiAnJzsKCiAgICBjb25zdCBzb2NpYWwgID0gKGlnSWNvbiB8fCB0dEljb24pID8gYDxkaXYgY2xhc3M9InNvY2lhbCI+JHtpZ0ljb259JHt0dEljb259PC9kaXY+YCA6ICcnOwogICAgY29uc3QgYWN0aW9ucyA9IChib29rIHx8IHNvY2lhbCkgPyBgPGRpdiBjbGFzcz0iYWN0aW9ucyI+JHtib29rfSR7c29jaWFsfTwvZGl2PmAgOiAnJzsKCiAgICAvLyBCdWlsZCBtZWRpYSBhcmVhOiBJRyAiV2F0Y2ggUmVlbCIgKGZyb20gdmlkZW8pIGFuZCBUaWtUb2sgIldhdGNoIFJlZWwiIChmcm9tIHRpa3Rva19yZWVsKQogICAgY29uc3QgbWVkaWFQYXJ0cyA9IFtdOwoKICAgIGlmIChiLnZpZGVvKSB7CiAgICAgIGNvbnN0IHYgPSBlbnN1cmVIdHRwcyhiLnZpZGVvKTsKICAgICAgaWYgKGlzWW91dHViZU9yVmltZW8odikpIHsKICAgICAgICBtZWRpYVBhcnRzLnB1c2goYDxkaXYgY2xhc3M9ImVtYmVkIj48aWZyYW1lIHNyYz0iJHt2fSIgbG9hZGluZz0ibGF6eSIgYWxsb3dmdWxsc2NyZWVuIHRpdGxlPSIke2IubmFtZX0gdmlkZW8iPjwvaWZyYW1lPjwvZGl2PmApOwogICAgICB9IGVsc2UgaWYgKGlzTXA0KHYpKSB7CiAgICAgICAgbWVkaWFQYXJ0cy5wdXNoKGA8ZGl2IGNsYXNzPSJlbWJlZCI+PHZpZGVvIHNyYz0iJHt2fSIgY29udHJvbHMgcGxheXNpbmxpbmUgbXV0ZWQ+PC92aWRlbz48L2Rpdj5gKTsKICAgICAgfSBlbHNlIGlmIChpc0luc3RhZ3JhbVJlZWwodikpIHsKICAgICAgICBtZWRpYVBhcnRzLnB1c2goYDxkaXYgY2xhc3M9ImFjdGlvbnMiPjxhIGNsYXNzPSJidG4gbGlnaHQgaWciIGhyZWY9IiR7dn0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4ke2lnU1ZHfTxzcGFuPldhdGNoIFJlZWw8L3NwYW4+PC9hPjwvZGl2PmApOwogICAgICB9IGVsc2UgewogICAgICAgIG1lZGlhUGFydHMucHVzaChgPGRpdiBjbGFzcz0iYWN0aW9ucyI+PGEgY2xhc3M9ImJ0biBsaWdodCIgaHJlZj0iJHt2fSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPlZpZGVvPC9hPjwvZGl2PmApOwogICAgICB9CiAgICB9CgogICAgaWYgKGIudGlrdG9rX3JlZWwpIHsKICAgICAgY29uc3QgdHYgPSBlbnN1cmVIdHRwcyhiLnRpa3Rva19yZWVsKTsKICAgICAgbWVkaWFQYXJ0cy5wdXNoKGA8ZGl2IGNsYXNzPSJhY3Rpb25zIj48YSBjbGFzcz0iYnRuIGxpZ2h0IHR0IiBocmVmPSIke3R2fSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPiR7dHRTVkd9PHNwYW4+V2F0Y2ggUmVlbDwvc3Bhbj48L2E+PC9kaXY+YCk7CiAgICB9CgogICAgY29uc3QgbWVkaWEgPSBtZWRpYVBhcnRzLmpvaW4oJycpOwoKICAgIGNhcmQuaW5uZXJIVE1MID0gaW1nICsgaDMgKyBwICsgYWN0aW9ucyArIG1lZGlhOwogICAgZ3JpZC5hcHBlbmRDaGlsZChjYXJkKTsKICB9KTsKCiAgLy8gc2FuaXR5IHRlc3Q6IGNhcmQgY291bnQgPT0gZGF0YSBsZW5ndGgKICBjb25zb2xlLmFzc2VydCgKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNiYXJiZXJzR3JpZCAuYmFyYmVyLWNhcmQnKS5sZW5ndGggPT09IFsuLi5CQVJCRVJTXS5sZW5ndGgsCiAgICAnQ2FyZCBjb3VudCBzaG91bGQgZXF1YWwgQkFSQkVSUyBsZW5ndGgnCiAgKTsKfQoKLy8gUnVuIGl0CnJlbmRlckJhcmJlcnMoKTsKCi8qIFJlbW92ZSBhbnkgc3RyYXkgdGV4dCBsaWtlOiBFbGl0ZSBLdXR6JyI+IG9yIGp1c3QgJyI+IChhbnkgcXVvdGVzLz4pICovCihmdW5jdGlvbiBwdXJnZVdlaXJkU2hhcmRzKCl7CiAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYXJiZXJzR3JpZCcpIHx8IGRvY3VtZW50LmJvZHk7CiAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyb290LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgbnVsbCk7CiAgY29uc3QgdHJhc2ggPSBbXTsKICBsZXQgbjsKCiAgLy8gTWF0Y2hlcyB0aGUgd2hvbGUgIkVsaXRlIEt1dHoiIHNoYXJkIE9SIGFueSBjb21ibyBvZiBqdXN0IHF1b3Rlcy9hbmdsZS1icmFja2V0cwogIGNvbnN0IFJFID0gL14oPzpFbGl0ZVxzKkt1dHopP1xzKlsnIl0\/XHMqPj8kfF5bPD4nIlxzXSskL2k7CgogIHdoaWxlICgobiA9IHdhbGtlci5uZXh0Tm9kZSgpKSkgewogICAgY29uc3QgdCA9IG4udGV4dENvbnRlbnQucmVwbGFjZSgvXHUyMDBCL2csJycpLnRyaW0oKTsgLy8gc3RyaXAgemVyby13aWR0aCBjaGFycwogICAgaWYgKHQgJiYgUkUudGVzdCh0KSkgdHJhc2gucHVzaChuKTsKICB9CiAgdHJhc2guZm9yRWFjaCh4ID0+IHgucGFyZW50Tm9kZSAmJiB4LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoeCkpOwp9KSgpOwoKPC9zY3JpcHQ+f39\/f39\/f39\/f397QnnbhJLTYAB7QeeN+E+AAAB\/f39\/f39\/f39\/f39\/f39\/f39\/f39\/ZwAhAHcTMjAyNS0wOS0yOFQxNDoyMzozM3cIaG9tZS1uZXd3B3B1Ymxpc2h9AX0AdwZjbG9zZWR3BmNsb3NlZHcAeXl5dwB9AHl5dwB9AHcAA\/yEv+MLAwHlAzECAvIRwIug0wgFAAAQME1vkgHrG+MC4giP3JykBwUAAO1wwQLqBZECDEWmOQg=\",\"updateId\":974886600}","om_disable_all_campaigns":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-881","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/elitekutz.com\/index.php?rest_route=\/wp\/v2\/pages\/881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elitekutz.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elitekutz.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elitekutz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elitekutz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=881"}],"version-history":[{"count":95,"href":"https:\/\/elitekutz.com\/index.php?rest_route=\/wp\/v2\/pages\/881\/revisions"}],"predecessor-version":[{"id":1240,"href":"https:\/\/elitekutz.com\/index.php?rest_route=\/wp\/v2\/pages\/881\/revisions\/1240"}],"wp:attachment":[{"href":"https:\/\/elitekutz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}