:root{ –red:#D8102C; –red-dark:#A90C22; –red-tint:#FDF1F3; –navy:#101A2E; –navy-2:#1A2742; –ink:#131722; –mut:#66707F; –line:#E8EBF0; –soft:#F6F7FA; –gold:#F5A623; –green:#188144; –disp:’Inter Tight’,sans-serif; –body:’Inter’,sans-serif; } *{box-sizing:border-box;margin:0} html{scroll-behavior:smooth} body{font-family:var(–body);color:var(–ink);background:#fff;line-height:1.65;-webkit-font-smoothing:antialiased} img{max-width:100%;display:block} a{text-decoration:none;color:inherit} .wrap{max-width:1320px;margin:0 auto;padding:0 28px} h2{font-family:var(–disp);font-weight:800;font-size:clamp(26px,3.2vw,34px);letter-spacing:-.02em} .k{font-weight:800;font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:var(–red)} .mut{color:var(–mut)} .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(–red);color:#fff;font-weight:800;font-size:15px;padding:14px 26px;border-radius:12px;border:0;cursor:pointer;transition:.15s} .btn:hover{background:var(–red-dark)} .btn.line{background:#fff;color:var(–ink);border:1px solid #D6DBE2}.btn.line:hover{border-color:var(–ink)} .btn.navy{background:var(–navy)}.btn.navy:hover{background:var(–navy-2)} /* top + header */ .note{background:var(–navy);color:#C9D2E2;font-size:13px;font-weight:700} .note .wrap{display:flex;justify-content:space-between;gap:12px;padding:8px 24px;flex-wrap:wrap} .note b{color:var(–gold)} header{position:sticky;top:0;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);z-index:50;border-bottom:1px solid var(–line)} .nav{display:flex;align-items:center;gap:26px;padding:15px 28px;max-width:1320px;margin:0 auto} .logo{font-family:var(–disp);font-weight:800;font-size:21px;letter-spacing:-.02em} .logo i{font-style:normal;color:var(–red)} .links{display:flex;gap:22px;font-weight:600;font-size:14.5px;color:var(–mut)} .links a:hover{color:var(–ink)} .nav .right{margin-left:auto;display:flex;gap:16px;align-items:center} .tel{font-weight:800;font-size:15px} .cartlink{font-size:20px;position:relative;top:1px} /* HERO β€” split: message left, FORM right, colored canvas */ .hero{background:linear-gradient(180deg,var(–red-tint) 0%,#fff 86%);padding:60px 0 38px;border-bottom:1px solid var(–line)} .hero .hgrid{display:grid;grid-template-columns:1.08fr .92fr;gap:60px;align-items:center} .hero .stars{color:var(–gold);letter-spacing:1.5px} .hero .trust{font-size:14px;font-weight:700;color:var(–mut)} .hero h1{font-family:var(–disp);font-weight:800;font-size:clamp(34px,4.6vw,52px);letter-spacing:-.03em;line-height:1.05;margin:14px 0 14px} .hero h1 em{font-style:normal;color:var(–red)} .hero .sub{font-size:17.5px;color:var(–mut);max-width:50ch;margin-bottom:22px} .assure{display:flex;gap:20px;flex-wrap:wrap;font-size:13.5px;font-weight:700;color:var(–mut)} .assure span::before{content:’βœ“ ‘;color:var(–green);font-weight:800} /* the form card β€” visible without scrolling */ .formcard{background:var(–navy);border-radius:20px;padding:26px;color:#fff;box-shadow:0 40px 80px -34px rgba(16,26,46,.55)} .formcard h3{font-family:var(–disp);font-size:19px;font-weight:800} .formcard .fc-sub{font-size:13.5px;color:#AAB6CE;margin:4px 0 16px;font-weight:600} .formcard label{display:block;font-size:12px;font-weight:800;letter-spacing:.06em;color:#8FA0BC;margin:12px 0 5px;text-transform:uppercase} .formcard select,.formcard input{width:100%;font:inherit;font-weight:600;padding:12px 13px;border:1px solid #2B3A5C;border-radius:10px;background:#18233C;color:#fff} .formcard .two{display:grid;grid-template-columns:1fr 1fr;gap:10px} .formcard .btn{width:100%;margin-top:16px;padding:15px;font-size:15.5px} .formcard .alt{text-align:center;font-size:13px;color:#8FA0BC;margin-top:12px;font-weight:600} .formcard .alt a{color:var(–gold);font-weight:800} .formcard .est{background:#18233C;border:1px solid #2B3A5C;border-radius:10px;padding:10px 13px;margin-top:12px;font-size:13.5px;color:#C9D2E2;font-weight:600} .formcard .est b{color:var(–gold);font-size:16px} /* photo band */ .band{padding:44px 0 10px} .band .row{display:grid;grid-template-columns:1.6fr 1fr 1fr;gap:18px} .shot{position:relative;border-radius:18px;overflow:hidden;background:var(–soft)} .shot img{width:100%;height:100%;object-fit:cover;min-height:320px} .shot .cap{position:absolute;left:12px;bottom:12px;background:#fff;border-radius:10px;padding:8px 13px;font-size:13px;font-weight:700;box-shadow:0 8px 24px -8px rgba(0,0,0,.28)} .shot .cap small{display:block;color:var(–red);font-weight:800} .band .n2{font-size:12.5px;color:#9AA3B2;text-align:center;margin-top:12px} /* services β€” icon cards, right after the hero (owner ask 2026-08-12) */ .svgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px} .svc2{display:block;background:#fff;border:1px solid #F3D9DD;border-radius:16px;padding:24px 22px;transition:.15s} .svc2:hover{border-color:var(–red);box-shadow:0 22px 44px -26px rgba(16,26,46,.25);transform:translateY(-2px)} .svc2 .ico{width:54px;height:54px;border-radius:14px;display:grid;place-items:center;font-size:25px;margin-bottom:12px} .svc2 h3{font-family:var(–disp);font-size:17.5px;font-weight:700} .svc2 p{color:var(–mut);font-size:14px;margin:6px 0 10px} .svc2 .more{color:var(–red);font-weight:800;font-size:13.5px} @media(max-width:960px){.svgrid{grid-template-columns:1fr 1fr}} @media(max-width:640px){.svgrid{grid-template-columns:1fr}} /* store */ section{padding:92px 0} .sec-head{display:flex;justify-content:space-between;align-items:end;gap:18px;margin-bottom:34px;flex-wrap:wrap} .sec-head p{color:var(–mut);margin-top:6px;max-width:56ch} .grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px} .card{display:block;background:#fff;border:1px solid var(–line);border-radius:16px;overflow:hidden;transition:.16s} .card:hover{box-shadow:0 26px 48px -26px rgba(16,26,46,.3);transform:translateY(-3px)} .card .ph{position:relative;background:var(–soft)} .card .ph img{height:260px;width:100%;object-fit:cover} .card .flag{position:absolute;top:12px;left:12px;background:var(–red);color:#fff;font-size:11px;font-weight:800;padding:6px 11px;border-radius:8px;letter-spacing:.04em} .card .flag.navy{background:var(–navy)} .card .pad{padding:16px 18px 18px} .card h3{font-family:var(–disp);font-weight:700;font-size:17.5px} .card .meta{display:flex;justify-content:space-between;align-items:center;margin:3px 0 10px} .card .meta span{color:var(–mut);font-size:13.5px} .card .meta b{color:var(–red);font-size:16.5px;font-weight:800} .card .btn{width:100%;padding:11px;font-size:14px} .live-note{display:flex;align-items:center;gap:8px;font-size:13px;color:var(–mut);font-weight:600;margin-top:24px;justify-content:center} .live-note i{width:8px;height:8px;border-radius:50%;background:var(–green)} /* services on tint */ .sect-tint{background:var(–red-tint)} .sv{display:grid;grid-template-columns:1fr 1fr;gap:22px} .svc{display:grid;grid-template-columns:150px 1fr;gap:18px;align-items:center;background:#fff;border:1px solid #F3D9DD;border-radius:16px;padding:14px;transition:.15s} .svc:hover{border-color:var(–red)} .svc img{width:170px;height:132px;object-fit:cover;border-radius:12px} .svc h3{font-family:var(–disp);font-size:17px;font-weight:700} .svc p{color:var(–mut);font-size:14px;margin:4px 0 6px} .svc a{color:var(–red);font-weight:800;font-size:13.5px} /* how β€” navy band */ .sect-navy{background:var(–navy);color:#fff} .sect-navy h2{color:#fff} .how{display:grid;grid-template-columns:repeat(3,1fr);gap:34px;text-align:center;max-width:980px;margin:34px auto 0} .how .n{width:46px;height:46px;border-radius:50%;background:var(–red);display:grid;place-items:center;font-family:var(–disp);font-weight:800;color:#fff;margin:0 auto 14px} .how h3{font-family:var(–disp);font-size:17px;font-weight:700;margin-bottom:6px} .how p{color:#AAB6CE;font-size:14.5px} .guar{max-width:640px;margin:34px auto 0;text-align:center;background:#18233C;border:1px solid #2B3A5C;border-radius:14px;padding:16px 22px;font-size:15px;font-weight:700} .guar b{color:var(–gold)} .stats{display:flex;justify-content:center;margin-top:38px;flex-wrap:wrap;border-top:1px solid #24314F;padding-top:34px} .st{padding:0 36px;text-align:center;border-right:1px solid #24314F} .st:last-child{border-right:0} .st b{font-family:var(–disp);font-size:30px;font-weight:800;display:block;color:var(–gold)} .st span{color:#AAB6CE;font-size:13px;font-weight:600} /* reviews */ .revs{display:grid;grid-template-columns:repeat(3,1fr);gap:20px} .rv{background:#fff;border:1px solid var(–line);border-left:4px solid var(–red);border-radius:14px;padding:22px} .rv .stars{color:var(–gold);letter-spacing:2px;font-size:14px} .rv p{margin:11px 0 13px;font-size:15px} .rv b{font-size:14px}.rv small{color:#9AA3B2;display:block;font-size:12px} /* areas */ .cities{display:flex;flex-wrap:wrap;gap:9px;margin-top:24px} .city{border:1px solid var(–line);background:#fff;border-radius:99px;padding:9px 17px;font-size:13.5px;font-weight:700;color:var(–mut);transition:.15s} .city:hover{border-color:var(–red);color:var(–red);background:var(–red-tint)} .locbar{display:flex;gap:30px;align-items:center;flex-wrap:wrap;margin-top:28px;padding:22px 26px;background:var(–navy);color:#fff;border-radius:16px;font-size:14.5px} .locbar .mut{color:#AAB6CE;font-size:13.5px} .locbar b{font-family:var(–disp)} /* faq */ .faq{max-width:780px;margin:30px auto 0} details{border:1px solid var(–line);border-radius:13px;padding:18px 22px;margin-bottom:10px;background:#fff} details[open]{border-color:var(–red);background:var(–red-tint)} summary{font-weight:800;font-size:16px;cursor:pointer;font-family:var(–disp);list-style:none;display:flex;justify-content:space-between} summary::after{content:’+’;color:var(–red);font-size:20px} details[open] summary::after{content:’3 ‘} details p{color:var(–mut);margin-top:9px;font-size:15px} /* final β€” red band */ .final{background:linear-gradient(120deg,var(–red-dark),var(–red));color:#fff;text-align:center;padding:70px 24px} .final h2{color:#fff;font-size:clamp(28px,4vw,40px);max-width:26ch;margin:0 auto 12px} .final p{opacity:.92;margin-bottom:26px;font-weight:600} .final .btn{background:#fff;color:var(–red)} .final .btn:hover{background:#FFEDEF} /* footer navy */ footer{background:var(–navy);color:#93A0B8;padding:52px 0 96px;font-size:14.5px} footer .cols{display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1.3fr;gap:26px} footer h4{color:#fff;font-family:var(–disp);font-size:13.5px;margin-bottom:12px} footer a{display:block;margin:7px 0} footer a:hover{color:#fff} .fnote{margin-top:32px;padding-top:18px;border-top:1px solid #24314F;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:12.5px;color:#7B889F} /* mobile bar */ .mbar{position:fixed;left:0;right:0;bottom:0;z-index:80;display:none;grid-template-columns:1fr 1fr 1.4fr;gap:1px;background:var(–line);border-top:1px solid var(–line)} .mbar a{display:flex;align-items:center;justify-content:center;gap:7px;padding:15px 4px;background:#fff;font-size:13px;font-weight:800} .mbar .call{color:var(–green)} .mbar .price{background:var(–red);color:#fff} @media(max-width:960px){ .hero .hgrid{grid-template-columns:1fr;gap:30px} .band .row{grid-template-columns:1fr 1fr} .band .row .shot:first-child{grid-column:1/-1} .grid{grid-template-columns:1fr 1fr} .sv{grid-template-columns:1fr} .how{grid-template-columns:1fr;gap:26px} .revs{grid-template-columns:1fr} footer .cols{grid-template-columns:1fr 1fr} .links{display:none} .mbar{display:grid} body{padding-bottom:56px} } @media(max-width:640px){.grid{grid-template-columns:1fr}.st{border-right:0;padding:0 18px 14px}} .pagehero{background:linear-gradient(180deg,#FFF5F5,#fff);padding:52px 0 34px} .pagehero h1{font-family:var(–disp);font-size:clamp(30px,4.4vw,46px);font-weight:800;letter-spacing:-.02em;margin:0 0 10px} .pagehero p{color:var(–mut);font-size:16.5px;max-width:640px;line-height:1.6;margin:0} .pgrid{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin:34px 0} .pcard{background:#fff;border:1.5px solid #E6E9EF;border-radius:16px;padding:26px;box-shadow:0 1px 6px rgba(10,22,40,.05)} .pcard h3{font-family:var(–disp);font-size:19px;font-weight:800;margin:0 0 8px} .pcard p,.pcard li{color:var(–mut);font-size:14.5px;line-height:1.65} .faq-item{background:#fff;border:1.5px solid #E6E9EF;border-radius:12px;margin-bottom:12px;overflow:hidden} .faq-item summary{cursor:pointer;font-weight:800;font-size:15.5px;padding:16px 20px;list-style:none;display:flex;justify-content:space-between;align-items:center} .faq-item summary::after{content:’+’;color:var(–red);font-size:22px;font-weight:800} .faq-item[open] summary::after{content:’-‘} .faq-item .fa{padding:0 20px 16px;color:var(–mut);font-size:14.5px;line-height:1.65} .ptable{width:100%;border-collapse:collapse;font-size:14.5px} .ptable th{text-align:left;background:var(–navy);color:#fff;padding:12px 14px;font-size:13px;letter-spacing:.04em;text-transform:uppercase} .ptable td{padding:12px 14px;border-bottom:1px solid #EDF0F4} .ptable tr:nth-child(even) td{background:#FAFBFC} .cta-band{background:var(–navy);border-radius:18px;padding:34px;display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;margin:40px 0} .cta-band .t{color:#fff!important;font-family:var(–disp);font-size:22px;font-weight:800} .cta-band p{color:#AAB6CE!important;margin:6px 0 0;font-size:14.5px} .stat-row{display:flex;gap:34px;flex-wrap:wrap;margin:26px 0} .stat-row .st b{display:block;font-family:var(–disp);font-size:30px;color:var(–red)} .stat-row .st span{color:var(–mut);font-size:13px;font-weight:700} .formwrap input[type=text],.formwrap input[type=email],.formwrap input[type=tel],.formwrap textarea,.formwrap select{width:100%;padding:12px;border:1.5px solid #CBD2DB;border-radius:10px;font:inherit} .formwrap .ff-btn-submit,.formwrap button[type=submit]{background:var(–red)!important;color:#fff!important;font-weight:800;padding:13px 26px;border:none;border-radius:10px;cursor:pointer} .formwrap .ff-el-group{margin-bottom:14px} @media(max-width:860px){.pgrid{grid-template-columns:1fr}.cta-band{justify-content:center;text-align:center}} .pagemain h2{font-family:var(–disp);font-size:clamp(22px,3vw,30px);font-weight:800;letter-spacing:-.02em;margin:38px 0 14px} .nav .links a{font-size:16.5px!important;font-weight:800!important} .pagehero h1,.pagemain h2{color:var(–ink)!important}

Channel Letters Chicago

The Chicago sign shop that shows you the price, proves the design, and prints it same-day.

.seo-body .grid,.seo-body .services-grid,.seo-body .cards{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}.seo-body img{max-width:100%;height:auto}.seo-body a{color:#C8102E}
SIGN AMERICA • NILES, IL

Channel Letters Chicago

Illuminated 3D Letter Signs for Storefronts · Retail · Restaurants · Corporate

Get a quote📞 (773) 262-7800Order online
Get a Free Quote 📞 Call 773-262-7800

4.9 Stars · 88 Google Reviews · Same-Day Available · Serving Chicago & Suburbs

Channel Letter Signs for Chicago Businesses

Channel letters are the gold standard for commercial storefront signage in Chicago. They are three-dimensional, individually fabricated letters that mount directly to your building facade or a raceway and are illuminated for 24/7 brand visibility. Sign America designs, fabricates, and installs custom channel letters for restaurants, retail stores, medical offices, auto dealerships, and franchise locations across Chicago and the suburbs.

Front-Lit Channel Letters

The most popular style. LED lighting shines through a translucent face, projecting your brand color forward. Visible day and night, rain or shine.

Halo-Lit (Backlit) Letters

Light projects behind the letter body to create a glowing halo effect on the wall. A premium, upscale look for high-end retail, spas, and corporate buildings.

Open-Face Neon & LED Letters

Exposed LED or neon tubes inside the letter channel for a retro-inspired, attention-grabbing effect. Popular for bars, entertainment venues, and restaurants.

Raceway-Mounted Letters

Letters are mounted to a raceway box that hides the wiring and makes installation faster and cleaner β€” ideal when direct building penetration is restricted.

Flush-Mounted Letters

Letters mount directly to the building face for a seamless, integrated look. Requires individual electrical connections but creates the cleanest visual result.

Cabinet & Pan-Face Signs

Illuminated cabinet signs with your brand face for maximum visibility. Common for gas stations, pharmacies, and franchise locations requiring standardized signage.

Front-Lit vs. Halo-Lit Channel Letters β€” Which Is Right for You?

FeatureFront-LitHalo-Lit
LookBold, bright, directSubtle, premium glow
VisibilityExcellent day and nightBest at dusk and night
Best ForRetail, restaurants, medicalLuxury retail, spas, corporate
CostStandardSlightly higher
EnergyLED standardLED standard

Our Channel Letter Fabrication & Installation Process

Every channel letter project at Sign America goes through a structured process to make sure the final product looks exactly right on your building β€” and passes city inspection.

1

On-Site Survey

We visit your location, measure the facade, check the surface material, assess electrical access, and photograph the building. This is where we catch any permit or installation constraints early.

2

Design & Engineering

Our design team creates scaled renderings of the channel letters on your building for approval. We engineer the letter depth, illumination type, and mounting method at this stage.

3

Permit Handling

We prepare and submit the necessary sign permits to the City of Chicago or the appropriate suburban municipality. We track the permit and handle revisions if required.

4

Fabrication

Our shop fabricates each letter individually β€” cutting aluminum returns, forming faces, wiring LED modules, and assembling each letter to tight tolerances. We build for Chicago winters and summers.

5

Installation

Our certified installation crew mounts your channel letters to the building, connects electrical, and tests every LED. We clean up completely and walk you through the final product.

Channel Letter Sign FAQ β€” Chicago

How long do channel letter signs last?

Quality channel letters fabricated with aluminum returns and LED illumination typically last 10 to 15 years with minimal maintenance. LED modules occasionally need replacement after 7 to 10 years of continuous use.

Do I need a permit for channel letters in Chicago?

Yes. The City of Chicago and most suburbs require a sign permit for illuminated exterior signage. We handle the permit application and submission as part of every channel letter project. Permit fees are billed separately at cost.

How long does the whole channel letter project take?

From signed approval to completed installation, most channel letter projects take 4 to 8 weeks. The permit process is the variable β€” Chicago permits typically take 2 to 4 weeks. Rush fabrication is possible with advance notice.

Can you match my exact franchise or brand specifications?

Absolutely. We work with franchise brands regularly and follow brand identity guidelines precisely. Send us your brand standards manual and we will quote to spec.

What does channel letter signage cost in Chicago?

Channel letter sets typically start around $2,500 for simpler front-lit sets and can run $8,000 or higher for large or complex installations. The best way to get an accurate number is to call us β€” we offer free quotes and site surveys.

Serving Chicago and the Suburbs

We fabricate and install channel letters at locations across the Chicago metro area. Our service area includes:

ChicagoNilesSkokie EvanstonDes PlainesSchaumburg RosemontPark RidgeLincolnwood Harwood HeightsGlenviewNorthbrook Arlington HeightsElk Grove VillagePalatine

Not on the list? Call us β€” we cover most of Chicagoland for sign installation.

Get a Free Channel Letter Quote

Free on-site survey available. We handle design, permitting, fabrication, and installation.

Explore More Printing & Sign Services

Chicago’s full-service sign & print shop – fast turnaround, free design help, same-day available.

Window Graphics ChicagoStorefront Signs & InstallationLarge Format PrintingReal Estate SignsAreas We Serve
Same-day printing. Free design help. Free proof.
15% off everything with code SAVE15 through September 15.
Get a quoteCall (773) 262-7800
#saBurger{display:none;background:none;border:1.5px solid #CBD5E1;border-radius:8px;padding:7px 11px;font-size:20px;line-height:1;cursor:pointer;color:#0F172A;margin-left:auto}@media(max-width:900px){#saBurger{display:block}.nav .right .btn{display:none}}#saMobileMenu{display:none;position:fixed;top:0;right:0;bottom:0;width:78vw;max-width:320px;background:#fff;z-index:999999;box-shadow:-20px 0 60px rgba(10,22,40,.35);padding:22px;overflow:auto}#saMobileMenu.open{display:block}#saMobileMenu a{display:block;padding:14px 6px;font-size:17px;font-weight:800;color:#0A1628;text-decoration:none;border-bottom:1px solid #EDF0F4}#saMobileMenu .close{font-size:26px;background:none;border:0;cursor:pointer;float:right;color:#64748B}@media(max-width:640px){#saPromoBar{font-size:12.5px!important;padding:7px 10px!important}}eval(decodeURIComponent(escape(atob(“KGZ1bmN0aW9uKCl7CmlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYUJ1cmdlcicpKXJldHVybjsKdmFyIG5hdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubmF2Jyk7CnZhciBsaW5rcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubmF2IC5saW5rcycpOwppZighbmF2fHwhbGlua3MpcmV0dXJuOwp2YXIgYnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwpidG4uaWQ9J3NhQnVyZ2VyJztidG4uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywnTWVudScpO2J0bi5pbm5lckhUTUw9J1x1MjYzMCc7CnZhciByaWdodD1uYXYucXVlcnlTZWxlY3RvcignLnJpZ2h0Jyk7CmlmKHJpZ2h0KXtuYXYuaW5zZXJ0QmVmb3JlKGJ0bixyaWdodCk7fWVsc2V7bmF2LmFwcGVuZENoaWxkKGJ0bik7fQp2YXIgbWVudT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKbWVudS5pZD0nc2FNb2JpbGVNZW51JzsKdmFyIGNsb3NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwpjbG9zZS5jbGFzc05hbWU9J2Nsb3NlJztjbG9zZS5pbm5lckhUTUw9J1x1MDBkNyc7Cm1lbnUuYXBwZW5kQ2hpbGQoY2xvc2UpOwp2YXIgYW5jaG9ycz1saW5rcy5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7CmZvcih2YXIgaT0wO2k8YW5jaG9ycy5sZW5ndGg7aSsrKXsKICB2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgYS5ocmVmPWFuY2hvcnNbaV0uZ2V0QXR0cmlidXRlKCdocmVmJyk7YS50ZXh0Q29udGVudD1hbmNob3JzW2ldLnRleHRDb250ZW50OwogIG1lbnUuYXBwZW5kQ2hpbGQoYSk7Cn0KdmFyIGV4dHJhPVtbJy9jYXJ0LycsJ1x1ZDgzZFx1ZGVkMiBDYXJ0J10sWyd0ZWw6NzczMjYyNzgwMCcsJ1x1ZDgzZFx1ZGNkZSAoNzczKSAyNjItNzgwMCddXTsKZm9yKHZhciBrPTA7azxleHRyYS5sZW5ndGg7aysrKXsKICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7ZS5ocmVmPWV4dHJhW2tdWzBdO2UudGV4dENvbnRlbnQ9ZXh0cmFba11bMV07bWVudS5hcHBlbmRDaGlsZChlKTsKfQpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1lbnUpOwpidG4ub25jbGljaz1mdW5jdGlvbigpe21lbnUuY2xhc3NMaXN0LmFkZCgnb3BlbicpO307CmNsb3NlLm9uY2xpY2s9ZnVuY3Rpb24oKXttZW51LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTt9OwptZW51LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihldil7aWYoZXYudGFyZ2V0LnRhZ05hbWU9PT0nQScpbWVudS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7fSk7Cn0pKCk7”))));