Want to save with Paschal? Don’t miss our current offers and specials
Want to save with Paschal? Don’t miss our current offers and specials
Not yet available in all markets. Outdoor lighting is now offered in all markets except for Texas and St. Joseph, Missouri. See Paschal service locations
Permanent outdoor lighting is a slim aluminum track mounted along your roofline, with a small LED bulb set every few inches and the wiring hidden behind your trim. The track comes in more than 100 color finishes, so it’s matched to your fascia, soffit, or siding and all but disappears in daylight. After dark, every bulb can show any of 16 million colors, and you control the whole system from an app on your phone.
It’s installed once, and it’s done. You never climb a ladder in December again, you never pay a crew to hang and take down string lights, and you’re not stuck with one look. Warm white on an ordinary Tuesday, red and green in December, orange in October, and your team’s colors on game day are all a tap away.
If you already pay someone to hang holiday lights every year, this is the same finished look with the installation paid for once instead of every season. The lights also keep working the other eleven months of the year.
Aluminum track in over 100 color finishes is matched to your fascia, soffit, or siding, and the wiring runs out of sight, so the daytime look stays clean.

Compact frosted bulbs with a dedicated warm-white LED make holiday colors look vivid and everyday white look like true architectural lighting.

Most of the year it runs as a soft warm white that comes on at sunset and lights the walk to your door, and when a holiday or game day comes around, you tap a saved scene.

Start with the front roofline or just the porch and add on later. Track can extend to pergolas, decks, fences, and pathways, and each zone is controlled on its own.

Sealed, UV-rated bulbs and low-voltage 24V wiring are made for summer heat, ice storms, and spring wind, and they meet UL and CSA safety standards.

Every system comes with a 10-year parts warranty and a 3-year labor warranty, and Paschal pros are here for any needed repairs.
The permanent light kits sold online can look similar in a product photo, and it’s fair to ask what you get for having a system professionally installed. The differences show up on the house, not in the box.
Call or request an estimate online and tell us which parts of the home you’re thinking about. We’ll give you a free estimate over the phone, often using satellite imagery of your roofline.
Next we come out, measure the sections you want lit, and match a track color to your trim, so the price you approve is exact.
A professionally trained crew mounts the track along the roofline, places the control box in the garage or attic, and runs the wiring out of sight. It’s installed once and set for every season.
Before the crew leaves, the app is on your phone, your first scenes are saved, and your sunset schedule is set. Your system is covered by a 10-year parts warranty and a 3-year labor warranty, and Paschal pros are here for any needed repairs.
You run the whole system from an app on your phone, where you can pick a color from the wheel, adjust the brightness, or tap a saved scene for Christmas, game day, or an everyday warm white. Schedules can follow sunset and sunrise at your address, so the lights come on by themselves every evening. Each zone runs on its own, so the front roofline can be red and green while the back patio stays warm white. The system also works with Amazon Alexa and Google Home, and you can make changes from anywhere with an internet connection.
The biggest differences are the track, the installation, and who stands behind it. A professionally installed system uses a rigid aluminum track that’s color-matched to your trim and fastened to the fascia. The wiring and power supply are hidden in the attic or behind the soffit, so the daytime look is clean from the street. Do-it-yourself kits vary a lot by brand, but most mount with clips or adhesive and leave the wire and power supply in view. The ladder work, the weatherproofing, and any troubleshooting are on you. Paschal’s system is also covered by a 10-year parts warranty and a 3-year labor warranty, and Paschal pros are here for any needed repairs.
The bulbs are rated for 50,000 hours, which works out to about 20 years at six to eight hours a night, and the system is designed for a 20-plus-year life. Every bulb, connector, and control box is sealed against water and corrosion, and the lenses are UV-rated so they don’t yellow or crack in the sun. The low-voltage design also keeps the electronics under far less stress than line-voltage lighting. If a bulb ever does fail, it’s replaced on its own without touching the rest of the run, and parts are covered for 10 years.
Not from the street. The track is a slim aluminum channel that sits up under the fascia or along the soffit. It comes in more than 100 color finishes, so it’s matched to your trim or siding instead of standing out against it. The bulbs are small frosted lenses about the size of a nickel, and the wiring runs inside the attic or behind the trim. In daylight, most people never notice the system is there.
No. Many homeowners start with the front roofline or only the porch and add on later. The system runs in zones, so a section you add next year is controlled on its own, and track can be extended to pergolas, decks, fences, stair rails, pathways, and landscape beds.
From an app on your phone or from a web browser, wherever you happen to be. You choose colors, patterns, and brightness, save them as scenes, and schedule scenes by date so Halloween, Christmas, and the Fourth of July run themselves. Schedules can follow sunset and sunrise for your location, and the system works with Amazon Alexa and Google Home.
Very little. The system runs on 24 volts, and a hundred bulbs draw less power than a single 40-watt bulb. A warm white glow every evening costs a small fraction of what the same run of incandescent string lights would.
Yes. The bulbs are sealed and rated IP68, the connections are waterproof, and the whole system is low voltage, so it’s built for ice storms, spring wind, and 100-degree August afternoons. The products are ETL listed and conform to UL 2108 and CSA C22.2 safety standards.
It depends on the size of the roofline and the sections you choose. Rooflines with a lot of dormers and gables take longer than a simple front elevation, and you’ll have a timeline before installation is scheduled.
Price is based mostly on the linear footage of track, along with the shape of the roofline and the number of zones. We’ll give you a free estimate over the phone, then measure in person so the price you approve is exact.
You replace single bulbs instead of the whole strand, and parts are covered by the 10-year warranty. Labor is covered for the first three years, and Paschal pros are here for any needed repairs.
Yes. Additional roofline, a backyard pergola, or a lit pathway can be added to the same system as new zones, and the app controls all of it together.
Not yet available in all markets. Outdoor lighting is now offered in all markets except for Texas and St. Joseph, Missouri. See Paschal service locations, or call and we’ll confirm availability for your address.
How the system works, how it goes on your home, and ideas for using it the other eleven months of the year.
Not yet available in all markets. Outdoor lighting is now offered in all markets except for Texas and St. Joseph, Missouri. See Paschal service locations. 10-year parts warranty and 3-year labor warranty; see your estimate for details.
LyogUGFzY2hhbCB8IFBlcm1hbmVudCBPdXRkb29yIExpZ2h0aW5nIHwgc2NvcGVkIHRvICNwb2wtcGFnZQogICBUb2tlbnMgcmVhZCBvZmYgZ29wYXNjaGFsLmNvbSAoQ29vbGluZyAvIEVsZWN0cmljYWwgcGFnZXMpOgogICBDYW5hcm87IGJvZHkgMTZweC8xLjYgIzNCM0QzRDsgSDIgNDhweCA3MDAgIzE1MzI1NzsgY2FyZCB0aXRsZSAyOHB4IDYwMDsgRkFRIHEgMTlweCA2MDAgIzFBM0U2RAogICBiYW5kczogI0ZGRiAvICNGNkY3RjcgLyAjRUJGNUZBIC8gbmF2eSAjMTUzMjU3OyBwaWxscyByYWRpdXMgMjVweCAxOHB4IDYwMCB1cHBlcmNhc2UgMTJweCAzMHB4CiAgIGNhcmRzIHJhZGl1cyAxMnB4IHNoYWRvdyByZ2JhKDUxLDUwLDQ4LC4xNCkgMCAxcHggOHB4OyBiYW5uZXIgcmFkaXVzIDY0cHggKi8KI3BvbC1wYWdlLCAjcG9sLXBhZ2UgKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsgZm9udC1mYW1pbHk6ICJDYW5hcm8iLCAiUG9wcGlucyIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBtYXJnaW46IC00MHB4IDAgMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IGNvbG9yOiAjM0IzRDNEICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAxLjYgIWltcG9ydGFudDsgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsgfQovKiBeIG1hcmdpbi10b3AgLTQwcHggcHVsbHMgdGhlIGJsb2NrIHVwIG92ZXIgdGhlIHRoZW1lJ3MgY29udGVudCBwYWRkaW5nIHNvIHRoZSBub3RpY2UgYmFyIHRvdWNoZXMgdGhlIGhlcm8uCiAgIElmIGEgc2xpdmVyIG9mIHdoaXRlIHN0aWxsIHNob3dzLCBtYWtlIGl0IG1vcmUgbmVnYXRpdmUgKGUuZy4gLTQ4cHgpOyBpZiB0aGUgYmFyIGN1dHMgaW50byB0aGUgaGVybywgbGVzcy4gKi8KCi8qIEZ1bGwtd2lkdGggYmFuZHMuIElmIHRoZSBwYWdlIHNob3dzIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIsIHJlbW92ZSB0aGUgY2xhc3MgInBvbC1ibGVlZCIgZnJvbSB0aGUgZmlyc3QgZGl2LiAqLwovKiAtLXBvbC12dyBhbmQgLS1wb2wtc2hpZnQgYXJlIG1lYXN1cmVkIGJ5IHRoZSBsb2FkZXIgc2NyaXB0IChwYWdlIHdpZHRoIHdpdGhvdXQgdGhlIHNjcm9sbGJhciwgYW5kIHRoZSBibG9jaydzCiAgIG9mZnNldCBmcm9tIHRoZSBsZWZ0IGVkZ2UpOyB0aGUgY2FsYygpIGZhbGxiYWNrcyBhcmUgdXNlZCBvbmx5IGlmIHRoZSBzY3JpcHQgY2FuJ3QgcnVuLiAqLwojcG9sLXBhZ2UucG9sLWJsZWVkIC5wb2wtc2VjdGlvbiwgI3BvbC1wYWdlLnBvbC1ibGVlZCAucG9sLW5vdGljZSB7IHdpZHRoOiB2YXIoLS1wb2wtdncsIDEwMHZ3KSAhaW1wb3J0YW50OyBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDsgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7IGxlZnQ6IGF1dG8gIWltcG9ydGFudDsgcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6IHZhcigtLXBvbC1zaGlmdCwgY2FsYyg1MCUgLSA1MHZ3KSkgIWltcG9ydGFudDsgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7IH0KCi8qIFRoZW1lIHZpZGVvIGhlYWRlciBmaXgsIG1vYmlsZSBvbmx5OiB0aGUgdGhlbWUgd2lkZW5zIHRoZSB2aWRlbyB0byA0NTAlIG9uIHBob25lcyBidXQgbGVhdmVzIGl0IHBpbm5lZCBhdAogICBsZWZ0Oi0zNSUsIHNvIG9ubHkgdGhlIGJsYWNrIGxlZnQgZWRnZSBvZiB0aGUgcGxheWVyIHNob3dzLiBUaGlzIGtlZXBzIGl0IDE2OjkgYW5kIGNlbnRlcmVkIG92ZXIgdGhlIGhlYWRlci4gKi8KQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgYm9keSAuaGVyb1ZpZGVvRmx1aWQgI2hlcm8tdmlkZW8tY29udGFpbmVyICNoZXJvLXZpZGVvIHsgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsgaGVpZ2h0OiAxNTAlICFpbXBvcnRhbnQ7IGFzcGVjdC1yYXRpbzogMTYgLyA5ICFpbXBvcnRhbnQ7IG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OyBsZWZ0OiA1MCUgIWltcG9ydGFudDsgdG9wOiA1MCUgIWltcG9ydGFudDsgcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsgYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpICFpbXBvcnRhbnQ7IH0KfQpib2R5OmhhcygjcG9sLXBhZ2UucG9sLWJsZWVkKSB7IG92ZXJmbG93LXg6IGhpZGRlbiAhaW1wb3J0YW50OyB9CgojcG9sLXBhZ2UgLnBvbC13cmFwIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgbWF4LXdpZHRoOiAxMzQwcHggIWltcG9ydGFudDsgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsgcGFkZGluZzogMCAyOHB4ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtbmFycm93IHsgbWF4LXdpZHRoOiA4NjBweCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLW5hcnJvdy1wIHsgbWF4LXdpZHRoOiA4NjBweCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNlbnRlciB7IHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OyB9CgovKiBTZWN0aW9ucyAqLwojcG9sLXBhZ2UgLnBvbC1zZWN0aW9uIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgcGFkZGluZzogODBweCAwICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiAjRkZGRkZGICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtc2VjdGlvbi10aWdodCB7IHBhZGRpbmc6IDQ4cHggMCAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtc2VjdGlvbi1ncmF5IHsgYmFja2dyb3VuZDogI0Y2RjdGNyAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLXNlY3Rpb24tYmx1ZSB7IGJhY2tncm91bmQ6ICNFQkY1RkEgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1zZWN0aW9uLW5hdnkgeyBiYWNrZ3JvdW5kOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtc2VjdGlvbi1uYXZ5IHAgeyBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLW9uLWRhcmsgeyBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50OyB9CgovKiBIZWFkaW5ncyBhbmQgdGV4dCAqLwojcG9sLXBhZ2UgLnBvbC1oMiB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAwIDI0cHggIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyBmb250LXNpemU6IDQ4cHggIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7IGNvbG9yOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDsgdGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1oMyB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAwIDEycHggIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyBmb250LXNpemU6IDIycHggIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7IGNvbG9yOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIHAgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyBtYXJnaW46IDAgMCAyNHB4ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDAgIWltcG9ydGFudDsgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAxLjYgIWltcG9ydGFudDsgY29sb3I6ICMzQjNEM0QgIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDQwMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSBwOmxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIHN0cm9uZyB7IGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1oMi5wb2wtb24tZGFyaywgI3BvbC1wYWdlIC5wb2wtaDMucG9sLW9uLWRhcmssICNwb2wtcGFnZSAucG9sLXNlY3Rpb24tbmF2eSAucG9sLWgyLCAjcG9sLXBhZ2UgLnBvbC1zZWN0aW9uLW5hdnkgLnBvbC1oMyB7IGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY3lhbiB7IGNvbG9yOiAjMkJBQ0UzICFpbXBvcnRhbnQ7IH0KCi8qIFdvcmRQcmVzcyBhdXRvLXBhcmFncmFwaHM6IHRoZSBlZGl0b3Igd3JhcHMgbG9vc2UgaW5saW5lIHRhZ3MgKGJ1dHRvbnMsIGltYWdlcywgbGlua3MsIHNwYW5zKSBpbiA8cD4gYW5kIGFkZHMgPGJyPi4KICAgVGhlc2UgcnVsZXMgbWFrZSB0aG9zZSBpbmplY3RlZCB3cmFwcGVycyBpbnZpc2libGUgdG8gdGhlIGxheW91dCBzbyBub3RoaW5nIGdhaW5zIHN0cmF5IHNwYWNpbmcuICovCiNwb2wtcGFnZSBiciB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgcDplbXB0eSwgI3BvbC1wYWdlID4gcCwgI3BvbC1wYWdlIC5wb2wtc2VjdGlvbiA+IHAsICNwb2wtcGFnZSAucG9sLXNlY3Rpb24gPiAucG9sLXdyYXAgPiBwOm5vdCgucG9sLW5hcnJvdy1wKTpub3QoLnBvbC1maW5lKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDAgIWltcG9ydGFudDsgfQpib2R5ICNwb2wtcGFnZSAucG9sLWZhcS1pdGVtID4gcCwgYm9keSAjcG9sLXBhZ2UgLnBvbC1idG5zID4gcCwgYm9keSAjcG9sLXBhZ2UgLnBvbC1jYXJkLWltZyA+IHAsIGJvZHkgI3BvbC1wYWdlIC5wb2wtc3BsaXQtbWVkaWEgPiBwLCBib2R5ICNwb2wtcGFnZSAucG9sLXNwbGl0LW1lZGlhLXBob25lID4gcCwgYm9keSAjcG9sLXBhZ2UgLnBvbC1jaGVja3MgPiBwLCBib2R5ICNwb2wtcGFnZSAucG9sLXJvd2hlYWQgPiBwLCBib2R5ICNwb2wtcGFnZSAucG9sLXN0ZXAgPiBwOmZpcnN0LWNoaWxkLCBib2R5ICNwb2wtcGFnZSAucG9sLWNvbXBhcmUtY2FyZCA+IHAsIGJvZHkgI3BvbC1wYWdlIC5wb2wtdmlkZW8tZnJhbWUgPiBwLCBib2R5ICNwb2wtcGFnZSAucG9sLWJhbm5lciA+IHA6bm90KC5wb2wtYmFubmVyLXRleHQpLCBib2R5ICNwb2wtcGFnZSAucG9sLWNhcmQtYm9keSA+IHA6aGFzKD4gLnBvbC1tb3JlKSwgYm9keSAjcG9sLXBhZ2UgLnBvbC1jYXJkLWJvZHkgPiBwOmhhcyg+IC5wb2wtY2FyZC10aXRsZSksIGJvZHkgI3BvbC1wYWdlIGxpID4gcCwgYm9keSAjcG9sLXBhZ2UgLnBvbC1oMiA+IHAsIGJvZHkgI3BvbC1wYWdlIC5wb2wtaDMgPiBwLCBib2R5ICNwb2wtcGFnZSAucG9sLWNhcmQtdGl0bGUgPiBwLCBib2R5ICNwb2wtcGFnZSAucG9sLWNvbXBhcmUtaGVhZCA+IHAsIGJvZHkgI3BvbC1wYWdlIGJ1dHRvbiA+IHAgeyBkaXNwbGF5OiBjb250ZW50cyAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDsgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsgdGV4dC10cmFuc2Zvcm06IGluaGVyaXQgIWltcG9ydGFudDsgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQgIWltcG9ydGFudDsgfQoKLyogVGV4dCBsaW5rczogdGhlIHRoZW1lIGZvcmNlcyBsaW5rcyB0byBkaXNwbGF5OmJsb2NrLCB3aGljaCBicmVha3MgaW5saW5lIGxpbmtzIG9udG8gdGhlaXIgb3duIGxpbmUgKi8KI3BvbC1wYWdlIHAgYSwgI3BvbC1wYWdlIGxpIGEsICNwb2wtcGFnZSAucG9sLWZpbmUgYSB7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyB3aWR0aDogYXV0byAhaW1wb3J0YW50OyBjb2xvcjogIzE1MzI1NyAhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIHAgYTpob3ZlciwgI3BvbC1wYWdlIGxpIGE6aG92ZXIgeyBjb2xvcjogIzJCQUNFMyAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWZpbmUgYSB7IGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIGEucG9sLW1vcmUsICNwb2wtcGFnZSBhLnBvbC1jYXJkLXRpdGxlLWxpbmsgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsgfQovKiBMaW5rcyBvbiB0aGUgbmF2eSBiYW5kcyAoYW5kIGFueSBwaG9uZSBudW1iZXIgaU9TIGF1dG8tbGlua3MgdGhlcmUpIG11c3Qgbm90IGJlIG5hdnkgb24gbmF2eSAqLwojcG9sLXBhZ2UgLnBvbC1iYW5uZXIgYTpub3QoLnBvbC1idG4pLCAjcG9sLXBhZ2UgLnBvbC1zZWN0aW9uLW5hdnkgcCBhLCAjcG9sLXBhZ2UgLnBvbC1zZWN0aW9uLW5hdnkgbGkgYSwgI3BvbC1wYWdlIC5wb2wtb24tZGFyayBhOm5vdCgucG9sLWJ0biksICNwb2wtcGFnZSBhLnBvbC10ZWwgeyBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSAhaW1wb3J0YW50OyBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtYmFubmVyIGE6bm90KC5wb2wtYnRuKTpob3ZlciwgI3BvbC1wYWdlIC5wb2wtb24tZGFyayBhOm5vdCgucG9sLWJ0bik6aG92ZXIsICNwb2wtcGFnZSBhLnBvbC10ZWw6aG92ZXIgeyBjb2xvcjogIzJCQUNFMyAhaW1wb3J0YW50OyB9CgovKiBOb3RpY2UgYmFyICovCiNwb2wtcGFnZSAucG9sLW5vdGljZSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDEycHggMCAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgYmFja2dyb3VuZDogI0VCRjVGQSAhaW1wb3J0YW50OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0Q1RTlGNCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLW5vdGljZSBwIHsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTVweCAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDogMS41ICFpbXBvcnRhbnQ7IGNvbG9yOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLW5vdGljZSBzdHJvbmcgeyBjb2xvcjogIzE1MzI1NyAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLW5vdGljZSBhIHsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IGNvbG9yOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsgfQoKLyogUGlsbCBidXR0b25zIChzaXRlOiAubWFpbkNUQSkgKi8KI3BvbC1wYWdlIC5wb2wtYnRucyB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7IGdhcDogMTZweCAhaW1wb3J0YW50OyBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtYnRucy1jZW50ZXIgeyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWJ0bnMtdW5kZXIgeyBtYXJnaW46IC00cHggMCAzNnB4ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIGEucG9sLWJ0biB7IGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OyB3aWR0aDogYXV0byAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZzogMTJweCAzMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDI1cHggIWltcG9ydGFudDsgZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCAhaW1wb3J0YW50OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDogMS42ICFpbXBvcnRhbnQ7IHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OyBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50OyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzIGVhc2UgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgYS5wb2wtYnRuOmhvdmVyIHsgdHJhbnNmb3JtOiBzY2FsZSguOTUpICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSBhLnBvbC1idG4tcmVkIHsgYmFja2dyb3VuZDogI0RBMjgyRSAhaW1wb3J0YW50OyBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50OyBib3JkZXI6IDJweCBzb2xpZCAjREEyODJFICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIGEucG9sLWJ0bi1yZWQ6aG92ZXIgeyBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSBhLnBvbC1idG4tY3lhbiB7IGJhY2tncm91bmQ6ICMyQkFDRTMgIWltcG9ydGFudDsgY29sb3I6ICMxNTMyNTcgIWltcG9ydGFudDsgYm9yZGVyOiAycHggc29saWQgIzJCQUNFMyAhaW1wb3J0YW50OyBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwwLDAsMC4xMikgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgYS5wb2wtYnRuLWN5YW46aG92ZXIgeyBjb2xvcjogIzE1MzI1NyAhaW1wb3J0YW50OyB9CgovKiBOYXZ5IHBpbGwgYmFubmVyIChzaXRlOiBGUkVFIGVzdGltYXRlcyBiYW5uZXIpICovCiNwb2wtcGFnZSAucG9sLWJhbm5lciB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDsgZ2FwOiAyOHB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6ICMxNTMyNTcgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogNjRweCAhaW1wb3J0YW50OyBwYWRkaW5nOiAzMnB4IDQ0cHggIWltcG9ydGFudDsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtYmFubmVyLXRleHQgeyBtYXJnaW46IDAgIWltcG9ydGFudDsgZm9udC1zaXplOiAyNHB4ICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50OyBjb2xvcjogI0ZGRkZGRiAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWJhbm5lci1zdGFjayB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsgZ2FwOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDQ4cHggIWltcG9ydGFudDsgcGFkZGluZzogNDRweCA0OHB4ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtYmFubmVyLWgyIHsgZm9udC1zaXplOiAzNnB4ICFpbXBvcnRhbnQ7IG1hcmdpbi1ib3R0b206IDE0cHggIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1iYW5uZXIgcCB7IGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtYnRucy1iYW5uZXIgeyBtYXJnaW4tdG9wOiA0cHggIWltcG9ydGFudDsgfQoKLyogU3BsaXQgaW50cm8gKHNpdGU6IGltYWdlIGxlZnQsIGNvcHkgcmlnaHQpICovCiNwb2wtcGFnZSAucG9sLXNwbGl0IHsgZGlzcGxheTogZ3JpZCAhaW1wb3J0YW50OyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCA1ZnIpIG1pbm1heCgwLCA3ZnIpICFpbXBvcnRhbnQ7IGdhcDogNTZweCAhaW1wb3J0YW50OyBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtc3BsaXQtbWVkaWEgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLXBob3RvIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiAxMnB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyB9CgovKiBBcHAgc3BsaXQgKGNvcHkgbGVmdCwgcGhvbmUgcmlnaHQpICovCiNwb2wtcGFnZSAucG9sLXNwbGl0LWFwcCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDdmcikgbWlubWF4KDAsIDVmcikgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1zcGxpdC1tZWRpYS1waG9uZSB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1waG9uZSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IG1heC13aWR0aDogNDAwcHggIWltcG9ydGFudDsgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IG1hcmdpbjogMCBhdXRvICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1jaGVja3MgeyBkaXNwbGF5OiBncmlkICFpbXBvcnRhbnQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKSAhaW1wb3J0YW50OyBnYXA6IDEycHggMjRweCAhaW1wb3J0YW50OyBsaXN0LXN0eWxlOiBub25lICFpbXBvcnRhbnQ7IG1hcmdpbjogMjRweCAwIDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNoZWNrcyBsaSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OyBsaXN0LXN0eWxlOiBub25lICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwIDAgMCAzMHB4ICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDogMS41ICFpbXBvcnRhbnQ7IGNvbG9yOiAjM0IzRDNEICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY2hlY2tzIGxpIHN0cm9uZyB7IGNvbG9yOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1jaGVja3MgbGk6OmJlZm9yZSB7IGNvbnRlbnQ6ICIiICFpbXBvcnRhbnQ7IHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OyBsZWZ0OiAwICFpbXBvcnRhbnQ7IHRvcDogMnB4ICFpbXBvcnRhbnQ7IHdpZHRoOiAyMHB4ICFpbXBvcnRhbnQ7IGhlaWdodDogMjBweCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDsgYmFja2dyb3VuZDogIzJCQUNFMyAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNoZWNrcyBsaTo6YWZ0ZXIgeyBjb250ZW50OiAiIiAhaW1wb3J0YW50OyBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsgbGVmdDogN3B4ICFpbXBvcnRhbnQ7IHRvcDogNXB4ICFpbXBvcnRhbnQ7IHdpZHRoOiA1cHggIWltcG9ydGFudDsgaGVpZ2h0OiA5cHggIWltcG9ydGFudDsgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI0ZGRkZGRiAhaW1wb3J0YW50OyBib3JkZXItYm90dG9tOiAycHggc29saWQgI0ZGRkZGRiAhaW1wb3J0YW50OyB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgIWltcG9ydGFudDsgfQoKLyogUm93IGhlYWRlciAoc2l0ZTogSDIgbGVmdCwgcGlsbCByaWdodCkgKi8KI3BvbC1wYWdlIC5wb2wtcm93aGVhZCB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDsgZ2FwOiAyNHB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAwIDMycHggIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1yb3doZWFkIC5wb2wtaDIgeyBtYXJnaW46IDAgIWltcG9ydGFudDsgfQoKLyogR3JpZHMgKi8KI3BvbC1wYWdlIC5wb2wtZ3JpZCB7IGRpc3BsYXk6IGdyaWQgIWltcG9ydGFudDsgZ2FwOiAyOHB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtZ3JpZC0yIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpICFpbXBvcnRhbnQ7IGdhcDogNTZweCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWdyaWQtMyB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKSAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWdyaWQtNCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIG1pbm1heCgwLCAxZnIpKSAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNlbnRlciArIC5wb2wtZ3JpZCB7IG1hcmdpbi10b3A6IDM2cHggIWltcG9ydGFudDsgfQoKLyogQ2FyZHMgKHNpdGU6IC5jYXJkQmFzaWMpICovCiNwb2wtcGFnZSAucG9sLWNhcmQgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiAjRkZGRkZGICFpbXBvcnRhbnQ7IGJvcmRlcjogMCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiAxMnB4ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDAgIWltcG9ydGFudDsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IHJnYmEoNTEsNTAsNDgsMC4xNCkgMHB4IDFweCA4cHggMHB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7IGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIGEucG9sLWNhcmQtbGluayB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzIGVhc2UgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgYS5wb2wtY2FyZC1saW5rOmhvdmVyIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNhcmQtaW1nIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgcGFkZGluZzogMjBweCAyMHB4IDAgIWltcG9ydGFudDsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY2FyZC1pbWcgaW1nIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OyBhc3BlY3QtcmF0aW86IDE2IC8gMTAgIWltcG9ydGFudDsgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogOHB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNhcmQtYm9keSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDI4cHggMjhweCAzMnB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNhcmQtdGl0bGUgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyBtYXJnaW46IDAgMCAxMnB4ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDAgIWltcG9ydGFudDsgZm9udC1zaXplOiAyNnB4ICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAxLjI1ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsgY29sb3I6ICMxNTMyNTcgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1jYXJkLWJvZHkgcCB7IGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDogMS42ICFpbXBvcnRhbnQ7IGNvbG9yOiAjNUE1RjVGICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNhcmQtaW1nIGEgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSBhLnBvbC1jYXJkLXRpdGxlLWxpbmsgeyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgY29sb3I6ICMxNTMyNTcgIWltcG9ydGFudDsgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIGEucG9sLWNhcmQtdGl0bGUtbGluazpob3ZlciB7IGNvbG9yOiAjMkJBQ0UzICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIGEucG9sLW1vcmUsICNwb2wtcGFnZSAucG9sLW1vcmUgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgbWFyZ2luOiAxOHB4IDAgMCAhaW1wb3J0YW50OyBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7IGNvbG9yOiAjREEyODJFICFpbXBvcnRhbnQ7IGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1hcnJvdyB7IGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OyB3aWR0aDogOXB4ICFpbXBvcnRhbnQ7IGhlaWdodDogOXB4ICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiA2cHggIWltcG9ydGFudDsgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNEQTI4MkUgIWltcG9ydGFudDsgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI0RBMjgyRSAhaW1wb3J0YW50OyB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgIWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246IDFweCAhaW1wb3J0YW50OyB9CgovKiBTdGVwcyAobmF2eSBiYW5kKSAqLwojcG9sLXBhZ2UgLnBvbC1zdGVwIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA2KSAhaW1wb3J0YW50OyBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTYpICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDEycHggIWltcG9ydGFudDsgcGFkZGluZzogMjhweCAyNnB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLXN0ZXAgcCB7IGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1zdGVwLW51bSB7IGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7IGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsgd2lkdGg6IDQ0cHggIWltcG9ydGFudDsgaGVpZ2h0OiA0NHB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAwIDE2cHggIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6ICMyQkFDRTMgIWltcG9ydGFudDsgY29sb3I6ICMxNTMyNTcgIWltcG9ydGFudDsgZm9udC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IDEgIWltcG9ydGFudDsgfQoKLyogVmlkZW8gKHNob3duIG9ubHkgd2hlbiBhIFVSTCBpcyBzZXQgb24gdGhlIHNlY3Rpb24pICovCiNwb2wtcGFnZSAjcG9sLXZpZGVvIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAjcG9sLXZpZGVvLnBvbC1oYXMtdmlkZW8geyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLXZpZGVvLWZyYW1lIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IGFzcGVjdC1yYXRpbzogMTYgLyA5ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDEycHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IHJnYmEoNTEsNTAsNDgsMC4xNCkgMHB4IDFweCA4cHggMHB4ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtdmlkZW8tZnJhbWUgaWZyYW1lIHsgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7IGluc2V0OiAwICFpbXBvcnRhbnQ7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IGhlaWdodDogMTAwJSAhaW1wb3J0YW50OyBib3JkZXI6IDAgIWltcG9ydGFudDsgfQoKLyogQ29tcGFyaXNvbiBjYXJkcyAoUGFzY2hhbCB2cyBESVkga2l0IHZzIHN0cmluZyBsaWdodHMpICovCiNwb2wtcGFnZSAucG9sLWNvbXBhcmUgeyBkaXNwbGF5OiBncmlkICFpbXBvcnRhbnQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKSAhaW1wb3J0YW50OyBnYXA6IDI4cHggIWltcG9ydGFudDsgYWxpZ24taXRlbXM6IHN0YXJ0ICFpbXBvcnRhbnQ7IG1hcmdpbjogMzZweCAwIDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNvbXBhcmUtY2FyZCB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6ICNGRkZGRkYgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OyBib3gtc2hhZG93OiByZ2JhKDUxLDUwLDQ4LDAuMTQpIDBweCAxcHggOHB4IDBweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY29tcGFyZS1oZWFkIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgcGFkZGluZzogMjBweCAyNHB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6ICNGNkY3RjcgIWltcG9ydGFudDsgY29sb3I6ICMxNTMyNTcgIWltcG9ydGFudDsgZm9udC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7IGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNvbXBhcmUtaGwgeyBib3gtc2hhZG93OiByZ2JhKDIxLDUwLDg3LDAuMjIpIDBweCA2cHggMjJweCAwcHggIWltcG9ydGFudDsgYm9yZGVyOiAycHggc29saWQgIzJCQUNFMyAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNvbXBhcmUtaGwgLnBvbC1jb21wYXJlLWhlYWQgeyBiYWNrZ3JvdW5kOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY29tcGFyZS1saXN0IHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgbGlzdC1zdHlsZTogbm9uZSAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgcGFkZGluZzogNnB4IDI0cHggMTBweCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNvbXBhcmUtbGlzdCBsaSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OyBsaXN0LXN0eWxlOiBub25lICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAxNnB4IDAgMTZweCAzNHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRUNFRkYyICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDogMS41ICFpbXBvcnRhbnQ7IGNvbG9yOiAjM0IzRDNEICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY29tcGFyZS1saXN0IGxpOmxhc3QtY2hpbGQgeyBib3JkZXItYm90dG9tOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY29tcGFyZS1sYWJlbCB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IG1hcmdpbjogMCAwIDNweCAhaW1wb3J0YW50OyBmb250LXNpemU6IDEycHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50OyBsZXR0ZXItc3BhY2luZzogLjRweCAhaW1wb3J0YW50OyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7IGNvbG9yOiAjMTUzMjU3ICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY29tcGFyZS1obCAucG9sLWNvbXBhcmUtbGFiZWwgeyBjb2xvcjogIzFBM0U2RCAhaW1wb3J0YW50OyB9Ci8qIHJvdyBpY29uczogZGFzaCBmb3IgdGhlIHR3byBjb21wYXJpc29uIGNvbHVtbnMsIGNoZWNrIGluIGEgY3lhbiBjaXJjbGUgZm9yIFBhc2NoYWwgKi8KI3BvbC1wYWdlIC5wb2wtY29tcGFyZS1saXN0IGxpOjpiZWZvcmUgeyBjb250ZW50OiAiIiAhaW1wb3J0YW50OyBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsgbGVmdDogMCAhaW1wb3J0YW50OyB0b3A6IDIxcHggIWltcG9ydGFudDsgd2lkdGg6IDIwcHggIWltcG9ydGFudDsgaGVpZ2h0OiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDUwJSAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiAjRUNFRkYyICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtY29tcGFyZS1saXN0IGxpOjphZnRlciB7IGNvbnRlbnQ6ICIiICFpbXBvcnRhbnQ7IHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OyBsZWZ0OiA1cHggIWltcG9ydGFudDsgdG9wOiAzMHB4ICFpbXBvcnRhbnQ7IHdpZHRoOiAxMHB4ICFpbXBvcnRhbnQ7IGhlaWdodDogMnB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQ6ICM5QUEzQUQgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UgLnBvbC1jb21wYXJlLWxpc3QgbGkucG9sLXllczo6YmVmb3JlIHsgYmFja2dyb3VuZDogIzJCQUNFMyAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWNvbXBhcmUtbGlzdCBsaS5wb2wteWVzOjphZnRlciB7IGxlZnQ6IDdweCAhaW1wb3J0YW50OyB0b3A6IDI0cHggIWltcG9ydGFudDsgd2lkdGg6IDVweCAhaW1wb3J0YW50OyBoZWlnaHQ6IDlweCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjRkZGRkZGICFpbXBvcnRhbnQ7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjRkZGRkZGICFpbXBvcnRhbnQ7IHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSAhaW1wb3J0YW50OyB9CgovKiBGQVEgKHNpdGU6IC5iZWVmdXAgYWNjb3JkaW9uKSAqLwojcG9sLXBhZ2UgLnBvbC1mYXEgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyBtYXgtd2lkdGg6IDgwMHB4ICFpbXBvcnRhbnQ7IG1hcmdpbjogMzZweCBhdXRvIDAgIWltcG9ydGFudDsgcGFkZGluZzogMCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWZhcS1pdGVtIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgYmFja2dyb3VuZDogI0ZGRkZGRiAhaW1wb3J0YW50OyBib3JkZXI6IDAgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OyBtYXJnaW46IDAgMCAyOHB4ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDAgIWltcG9ydGFudDsgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OyBib3gtc2hhZG93OiByZ2JhKDUxLDUwLDQ4LDAuMDgpIDBweCAxcHggNnB4IDBweCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWZhcS1pdGVtOmxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIGJ1dHRvbi5wb2wtZmFxLXEgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyBwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDE4cHggNjBweCAxNnB4IDIwcHggIWltcG9ydGFudDsgYmFja2dyb3VuZDogI0ZGRkZGRiAhaW1wb3J0YW50OyBib3JkZXI6IDAgIWltcG9ydGFudDsgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50OyBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7IHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsgZm9udC1zaXplOiAxOXB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IDEuNCAhaW1wb3J0YW50OyBjb2xvcjogIzFBM0U2RCAhaW1wb3J0YW50OyBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsgdGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSBidXR0b24ucG9sLWZhcS1xOmhvdmVyIHsgYmFja2dyb3VuZDogI0ZGRkZGRiAhaW1wb3J0YW50OyBjb2xvcjogIzFBM0U2RCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSBidXR0b24ucG9sLWZhcS1xOjphZnRlciB7IGNvbnRlbnQ6ICIiICFpbXBvcnRhbnQ7IHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OyByaWdodDogMjRweCAhaW1wb3J0YW50OyB0b3A6IDUwJSAhaW1wb3J0YW50OyB3aWR0aDogMTFweCAhaW1wb3J0YW50OyBoZWlnaHQ6IDExcHggIWltcG9ydGFudDsgbWFyZ2luLXRvcDogLTlweCAhaW1wb3J0YW50OyBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMUEzRTZEICFpbXBvcnRhbnQ7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMUEzRTZEICFpbXBvcnRhbnQ7IHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSAhaW1wb3J0YW50OyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzIGVhc2UgIWltcG9ydGFudDsgfQojcG9sLXBhZ2UucG9sLWpzIGJ1dHRvbi5wb2wtZmFxLXFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdOjphZnRlciB7IHRyYW5zZm9ybTogcm90YXRlKDIyNWRlZykgIWltcG9ydGFudDsgbWFyZ2luLXRvcDogLTNweCAhaW1wb3J0YW50OyB9CiNwb2wtcGFnZSAucG9sLWZhcS1hIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgcGFkZGluZzogMCAyMHB4IDIwcHggIWltcG9ydGFudDsgbWFyZ2luOiAwICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlLnBvbC1qcyAucG9sLWZhcS1pdGVtOm5vdCgucG9sLW9wZW4pIC5wb2wtZmFxLWEgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KI3BvbC1wYWdlIC5wb2wtZmFxLWEgcCB7IGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OyBjb2xvcjogIzNCM0QzRCAhaW1wb3J0YW50OyBtYXJnaW46IDAgIWltcG9ydGFudDsgfQoKLyogRmluZSBwcmludCAqLwojcG9sLXBhZ2UgLnBvbC1maW5lIHsgbWFyZ2luOiAyNHB4IGF1dG8gMCAhaW1wb3J0YW50OyBmb250LXNpemU6IDEzcHggIWltcG9ydGFudDsgbGluZS1oZWlnaHQ6IDEuNSAhaW1wb3J0YW50OyBjb2xvcjogIzVBNUY1RiAhaW1wb3J0YW50OyB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsgbWF4LXdpZHRoOiA4MjBweCAhaW1wb3J0YW50OyB9CgovKiBSZXNwb25zaXZlICovCkBtZWRpYSAobWF4LXdpZHRoOiAxMTAwcHgpIHsKICAjcG9sLXBhZ2UgLnBvbC1ncmlkLTQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSkgIWltcG9ydGFudDsgfQp9CkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICNwb2wtcGFnZSAucG9sLWgyIHsgZm9udC1zaXplOiAzOHB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1ncmlkLTMgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSkgIWltcG9ydGFudDsgfQogICNwb2wtcGFnZSAucG9sLWNvbXBhcmUgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAhaW1wb3J0YW50OyBtYXgtd2lkdGg6IDY0MHB4ICFpbXBvcnRhbnQ7IG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7IG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtc3BsaXQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAhaW1wb3J0YW50OyBnYXA6IDMycHggIWltcG9ydGFudDsgfQogICNwb2wtcGFnZSAucG9sLXNwbGl0LW1lZGlhIHsgbWF4LXdpZHRoOiA1MjBweCAhaW1wb3J0YW50OyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBtYXJnaW46IDAgYXV0byAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtc3BsaXQtYXBwIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgIWltcG9ydGFudDsgfQogICNwb2wtcGFnZSAucG9sLXBob25lIHsgbWF4LXdpZHRoOiAzNDBweCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtc3BsaXQtY29weSAucG9sLWgyIHsgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1iYW5uZXIgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7IGJvcmRlci1yYWRpdXM6IDMycHggIWltcG9ydGFudDsgcGFkZGluZzogMzJweCAzNnB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1yb3doZWFkIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50OyBhbGlnbi1pdGVtczogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7CiAgI3BvbC1wYWdlIC5wb2wtc2VjdGlvbiB7IHBhZGRpbmc6IDQ4cHggMCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtc2VjdGlvbi10aWdodCB7IHBhZGRpbmc6IDI4cHggMCAwICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC13cmFwIHsgcGFkZGluZzogMCAyMHB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1oMiB7IGZvbnQtc2l6ZTogMzBweCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtYmFubmVyLWgyIHsgZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1iYW5uZXItdGV4dCB7IGZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtYmFubmVyLCAjcG9sLXBhZ2UgLnBvbC1iYW5uZXItc3RhY2sgeyBib3JkZXItcmFkaXVzOiAyNHB4ICFpbXBvcnRhbnQ7IHBhZGRpbmc6IDI4cHggMjRweCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtZ3JpZC0yLCAjcG9sLXBhZ2UgLnBvbC1ncmlkLTMsICNwb2wtcGFnZSAucG9sLWdyaWQtNCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyICFpbXBvcnRhbnQ7IGdhcDogMjRweCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIGEucG9sLWJ0biB7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDsgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgYnV0dG9uLnBvbC1mYXEtcSB7IGZvbnQtc2l6ZTogMTdweCAhaW1wb3J0YW50OyBwYWRkaW5nOiAxNnB4IDUycHggMTRweCAxNnB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1jYXJkLXRpdGxlIHsgZm9udC1zaXplOiAyMnB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1zcGxpdC1tZWRpYSB7IG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtY2hlY2tzIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgIWltcG9ydGFudDsgfQogICNwb2wtcGFnZSAucG9sLXBob25lIHsgbWF4LXdpZHRoOiAzMDBweCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtc3BsaXQtY29weSAucG9sLWgyIHsgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OyB9CiAgI3BvbC1wYWdlIC5wb2wtcm93aGVhZCAucG9sLWJ0biB7IHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1zdGVwIHsgcGFkZGluZzogMjJweCAyMHB4ICFpbXBvcnRhbnQ7IH0KICAjcG9sLXBhZ2UgLnBvbC1maW5lIHsgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7IH0KfQo=
KGZ1bmN0aW9uICgpIHsKICB2YXIgcGFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb2wtcGFnZScpOwogIGlmICghcGFnZSkgcmV0dXJuOwogIHBhZ2UuY2xhc3NOYW1lICs9ICcgcG9sLWpzJzsKCiAgLyogRkFRIGFjY29yZGlvbiAqLwogIHZhciBpdGVtcyA9IHBhZ2UucXVlcnlTZWxlY3RvckFsbCgnLnBvbC1mYXEtaXRlbScpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgIChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHsKICAgICAgdmFyIGJ0biA9IGl0ZW0ucXVlcnlTZWxlY3RvcignLnBvbC1mYXEtcScpOwogICAgICBpZiAoIWJ0bikgcmV0dXJuOwogICAgICB2YXIgb3BlbiA9IGluZGV4ID09PSAwOwogICAgICBpZiAob3BlbikgaXRlbS5jbGFzc05hbWUgKz0gJyBwb2wtb3Blbic7CiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyk7CiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgaXNPcGVuID0gaXRlbS5jbGFzc05hbWUuaW5kZXhPZigncG9sLW9wZW4nKSAhPT0gLTE7CiAgICAgICAgaWYgKGlzT3BlbikgewogICAgICAgICAgaXRlbS5jbGFzc05hbWUgPSBpdGVtLmNsYXNzTmFtZS5yZXBsYWNlKCcgcG9sLW9wZW4nLCAnJyk7CiAgICAgICAgICBidG4uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lICs9ICcgcG9sLW9wZW4nOwogICAgICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pKGl0ZW1zW2ldLCBpKTsKICB9CgogIC8qIFB1bGwgdGhlIGJsb2NrIHVwIHNvIGl0IHRvdWNoZXMgdGhlIHBhZ2UncyB0aXRsZSBiYW5uZXIgKGNhbmNlbHMgdGhlIHRoZW1lJ3MgY29udGVudCBwYWRkaW5nKS4KICAgICBBdXRvLW1lYXN1cmVzIHRoZSB3aGl0ZSBnYXAgYWJvdmUgdGhlIGJsb2NrLiBUbyBmb3JjZSBhIHZhbHVlLCBzZXQgZGF0YS1wdWxsLXVwPSI0MCIgb24gI3BvbC1wYWdlLiAqLwogIGZ1bmN0aW9uIHB1bGxVcCgpIHsKICAgIHRyeSB7CiAgICAgIHZhciBtYW51YWwgPSBwYWdlLmdldEF0dHJpYnV0ZSgnZGF0YS1wdWxsLXVwJyk7CiAgICAgIGlmIChtYW51YWwgIT09IG51bGwgJiYgbWFudWFsICE9PSAnJykgeyBwYWdlLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tdG9wJywgJy0nICsgcGFyc2VJbnQobWFudWFsLCAxMCkgKyAncHgnLCAnaW1wb3J0YW50Jyk7IHJldHVybjsgfQogICAgICBwYWdlLnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tdG9wJywgJzBweCcsICdpbXBvcnRhbnQnKTsKICAgICAgdmFyIHRvcCA9IHBhZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0OwogICAgICB2YXIgYmVzdCA9IG51bGw7CiAgICAgIHZhciBlbHMgPSBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGUgPSBlbHNbaV07CiAgICAgICAgaWYgKGUgPT09IHBhZ2UgfHwgcGFnZS5jb250YWlucyhlKSB8fCBlLmNvbnRhaW5zKHBhZ2UpKSBjb250aW51ZTsKICAgICAgICB2YXIgY3MgPSBnZXRDb21wdXRlZFN0eWxlKGUpOwogICAgICAgIGlmIChjcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyB8fCBjcy5wb3NpdGlvbiA9PT0gJ3N0aWNreScpIGNvbnRpbnVlOwogICAgICAgIHZhciBiID0gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBpZiAoYi53aWR0aCA8IHdpbmRvdy5pbm5lcldpZHRoICogMC42IHx8IGIuaGVpZ2h0IDwgMjApIGNvbnRpbnVlOwogICAgICAgIHZhciBib3R0b20gPSBiLmJvdHRvbSArIHdpbmRvdy5wYWdlWU9mZnNldDsKICAgICAgICBpZiAoYm90dG9tID4gdG9wICsgMSkgY29udGludWU7CiAgICAgICAgdmFyIGJnID0gY3MuYmFja2dyb3VuZENvbG9yLCBiaSA9IGNzLmJhY2tncm91bmRJbWFnZTsKICAgICAgICB2YXIgc29saWQgPSAoYmcgJiYgYmcgIT09ICdyZ2JhKDAsIDAsIDAsIDApJyAmJiBiZyAhPT0gJ3RyYW5zcGFyZW50JyAmJiBiZyAhPT0gJ3JnYigyNTUsIDI1NSwgMjU1KScpIHx8IChiaSAmJiBiaSAhPT0gJ25vbmUnKTsKICAgICAgICBpZiAoIXNvbGlkKSBjb250aW51ZTsKICAgICAgICBpZiAoYmVzdCA9PT0gbnVsbCB8fCBib3R0b20gPiBiZXN0KSBiZXN0ID0gYm90dG9tOwogICAgICB9CiAgICAgIHZhciBnYXAgPSBiZXN0ID09PSBudWxsID8gbnVsbCA6IE1hdGgucm91bmQodG9wIC0gYmVzdCk7CiAgICAgIGlmIChnYXAgIT09IG51bGwgJiYgZ2FwID49IDAgJiYgZ2FwIDw9IDE2MCkgcGFnZS5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsICctJyArIGdhcCArICdweCcsICdpbXBvcnRhbnQnKTsKICAgICAgZWxzZSBwYWdlLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4tdG9wJyk7IC8qIGZhbGwgYmFjayB0byB0aGUgZml4ZWQgdmFsdWUgaW4gdGhlIENTUyAqLwogICAgfSBjYXRjaCAoZSkgeyB0cnkgeyBwYWdlLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4tdG9wJyk7IH0gY2F0Y2ggKGUyKSB7fSB9CiAgfQogIC8qIEZ1bGwtd2lkdGggYmFuZHM6IG1lYXN1cmUgdGhlIHJlYWwgcGFnZSB3aWR0aCAod2l0aG91dCB0aGUgc2Nyb2xsYmFyKSBhbmQgdGhlIGJsb2NrJ3MgbGVmdCBvZmZzZXQsCiAgICAgc28gZXZlcnkgYmFuZCBsaW5lcyB1cCBlZGdlIHRvIGVkZ2UgYW5kIGNlbnRlcmVkIGNvbnRlbnQgc3RheXMgY2VudGVyZWQuICovCiAgZnVuY3Rpb24gZml0QmFuZHMoKSB7CiAgICB0cnkgewogICAgICB2YXIgdncgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICAgIHZhciBsZWZ0ID0gcGFnZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OwogICAgICBwYWdlLnN0eWxlLnNldFByb3BlcnR5KCctLXBvbC12dycsIHZ3ICsgJ3B4Jyk7CiAgICAgIHBhZ2Uuc3R5bGUuc2V0UHJvcGVydHkoJy0tcG9sLXNoaWZ0JywgKC1NYXRoLnJvdW5kKGxlZnQpKSArICdweCcpOwogICAgfSBjYXRjaCAoZSkge30KICB9CgogIGZ1bmN0aW9uIHJlbGF5b3V0KCkgeyBmaXRCYW5kcygpOyBwdWxsVXAoKTsgfQogIHJlbGF5b3V0KCk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCByZWxheW91dCk7CiAgdmFyIHJ0OyB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24gKCkgeyBjbGVhclRpbWVvdXQocnQpOyBydCA9IHNldFRpbWVvdXQocmVsYXlvdXQsIDE1MCk7IH0pOwoKICAvKiBUaGVtZSB2aWRlbyBoZWFkZXIgb24gaVBob25lczogdGhlIHRoZW1lJ3MgWW91VHViZSBwbGF5ZXIgaXMgY3JlYXRlZCB3aXRob3V0IHBsYXlzaW5saW5lLCBhbmQgaU9TIHdpbGwKICAgICBub3QgYXV0b3BsYXkgYSBZb3VUdWJlIGVtYmVkIGlubGluZSB3aXRob3V0IGl0LiBBZGQgaXQgYmVmb3JlIHRoZSBwbGF5ZXIgaXMgYnVpbHQsIG9yIGFmdGVyIG9uIGlPUyBvbmx5LiAqLwogIGZ1bmN0aW9uIGhlcm9JbmxpbmUoKSB7CiAgICB0cnkgewogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVyby12aWRlbycpOwogICAgICBpZiAoIWVsKSByZXR1cm47CiAgICAgIGlmIChlbC50YWdOYW1lICE9PSAnSUZSQU1FJykgewogICAgICAgIHZhciBvcmlnID0gd2luZG93Lm9uWW91VHViZUlmcmFtZUFQSVJlYWR5OwogICAgICAgIGlmIChvcmlnICYmIG9yaWcuX19wb2wpIHJldHVybjsKICAgICAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICh3aW5kb3cuWVQgJiYgd2luZG93LllULlBsYXllciAmJiAhd2luZG93LllULlBsYXllci5fX3BvbCkgewogICAgICAgICAgICAgIHZhciBQID0gd2luZG93LllULlBsYXllcjsKICAgICAgICAgICAgICB2YXIgVyA9IGZ1bmN0aW9uIChhLCBvKSB7IG8gPSBvIHx8IHt9OyBvLnBsYXllclZhcnMgPSBvLnBsYXllclZhcnMgfHwge307IGlmIChvLnBsYXllclZhcnMucGxheXNpbmxpbmUgPT0gbnVsbCkgby5wbGF5ZXJWYXJzLnBsYXlzaW5saW5lID0gMTsgcmV0dXJuIG5ldyBQKGEsIG8pOyB9OwogICAgICAgICAgICAgIFcucHJvdG90eXBlID0gUC5wcm90b3R5cGU7IFcuX19wb2wgPSAxOyB3aW5kb3cuWVQuUGxheWVyID0gVzsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG9yaWcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICAgIHdyYXBwZWQuX19wb2wgPSAxOwogICAgICAgIHdpbmRvdy5vbllvdVR1YmVJZnJhbWVBUElSZWFkeSA9IHdyYXBwZWQ7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBzcmMgPSBlbC5nZXRBdHRyaWJ1dGUoJ3NyYycpIHx8ICcnOwogICAgICBpZiAoIXNyYyB8fCAvWz8mXXBsYXlzaW5saW5lPTEvLnRlc3Qoc3JjKSkgcmV0dXJuOwogICAgICB2YXIgaU9TID0gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgKG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ01hY0ludGVsJyAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAxKTsKICAgICAgaWYgKGlPUykgZWwuc2V0QXR0cmlidXRlKCdzcmMnLCBzcmMgKyAoc3JjLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArICdwbGF5c2lubGluZT0xJyk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KICBoZXJvSW5saW5lKCk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7IHNldFRpbWVvdXQoaGVyb0lubGluZSwgMTUwMCk7IH0pOwoKICAvKiBPcHRpb25hbCB2aWRlbzogcHV0IGEgWW91VHViZSBvciBWaW1lbyBVUkwgaW4gZGF0YS12aWRlbyBvbiAjcG9sLXZpZGVvIGFuZCBpdCBlbWJlZHMgaGVyZSAqLwogIHRyeSB7CiAgICB2YXIgdnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9sLXZpZGVvJyk7CiAgICB2YXIgdmYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9sLXZpZGVvLWZyYW1lJyk7CiAgICB2YXIgdXJsID0gdnMgPyAodnMuZ2V0QXR0cmlidXRlKCdkYXRhLXZpZGVvJykgfHwgJycpLnRyaW0oKSA6ICcnOwogICAgaWYgKHZzICYmIHZmICYmIHVybCkgewogICAgICB2YXIgc3JjID0gJyc7CiAgICAgIHZhciB5dCA9IHVybC5tYXRjaCgvKD86eW91dHVcLmJlXC98dj18XC9lbWJlZFwvfFwvc2hvcnRzXC8pKFtBLVphLXowLTlfLV17Nix9KS8pOwogICAgICB2YXIgdm0gPSB1cmwubWF0Y2goL3ZpbWVvXC5jb21cLyg/OnZpZGVvXC8pPyhcZCspLyk7CiAgICAgIGlmICh5dCkgc3JjID0gJ2h0dHBzOi8vd3d3LnlvdXR1YmUtbm9jb29raWUuY29tL2VtYmVkLycgKyB5dFsxXSArICc/cmVsPTAnOwogICAgICBlbHNlIGlmICh2bSkgc3JjID0gJ2h0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8nICsgdm1bMV07CiAgICAgIGlmIChzcmMpIHsKICAgICAgICB2YXIgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwogICAgICAgIGYuc3JjID0gc3JjOyBmLnRpdGxlID0gJ1Blcm1hbmVudCBPdXRkb29yIExpZ2h0aW5nIHZpZGVvJzsgZi5sb2FkaW5nID0gJ2xhenknOwogICAgICAgIGYuc2V0QXR0cmlidXRlKCdhbGxvdycsICdhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlJyk7CiAgICAgICAgZi5zZXRBdHRyaWJ1dGUoJ2FsbG93ZnVsbHNjcmVlbicsICcnKTsKICAgICAgICB2Zi5hcHBlbmRDaGlsZChmKTsKICAgICAgICB2cy5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwogICAgICAgIHZzLmNsYXNzTmFtZSArPSAnIHBvbC1oYXMtdmlkZW8nOwogICAgICB9CiAgICB9CiAgfSBjYXRjaCAoZSkge30KCiAgLyogRkFRUGFnZSBzY2hlbWEsIGJ1aWx0IGZyb20gdGhlIEZBUSB0ZXh0IG9uIHRoZSBwYWdlIHNvIGl0IHN0YXlzIGluIHN5bmMgd2l0aCBlZGl0cyAqLwogIHRyeSB7CiAgICB2YXIgZmFxcyA9IFtdOwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7IGorKykgewogICAgICB2YXIgcSA9IGl0ZW1zW2pdLnF1ZXJ5U2VsZWN0b3IoJy5wb2wtZmFxLXEnKTsKICAgICAgdmFyIGEgPSBpdGVtc1tqXS5xdWVyeVNlbGVjdG9yKCcucG9sLWZhcS1hJyk7CiAgICAgIGlmICghcSB8fCAhYSkgY29udGludWU7CiAgICAgIGZhcXMucHVzaCh7CiAgICAgICAgJ0B0eXBlJzogJ1F1ZXN0aW9uJywKICAgICAgICAnbmFtZSc6IHEudGV4dENvbnRlbnQucmVwbGFjZSgvXHMrL2csICcgJykudHJpbSgpLAogICAgICAgICdhY2NlcHRlZEFuc3dlcic6IHsgJ0B0eXBlJzogJ0Fuc3dlcicsICd0ZXh0JzogYS50ZXh0Q29udGVudC5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkgfQogICAgICB9KTsKICAgIH0KICAgIGlmIChmYXFzLmxlbmd0aCAmJiAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvbC1mYXEtc2NoZW1hJykpIHsKICAgICAgdmFyIGxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgIGxkLnR5cGUgPSAnYXBwbGljYXRpb24vbGQranNvbic7CiAgICAgIGxkLmlkID0gJ3BvbC1mYXEtc2NoZW1hJzsKICAgICAgbGQudGV4dCA9IEpTT04uc3RyaW5naWZ5KHsgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsICdAdHlwZSc6ICdGQVFQYWdlJywgJ21haW5FbnRpdHknOiBmYXFzIH0pOwogICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxkKTsKICAgIH0KICB9IGNhdGNoIChlKSB7fQp9KSgpOwo=