Brooklyn Life, New York Life. classifieds at brooklynlife.net http://www.brooklynlife.net en_US Suade Restaurant <p style="text-align: center;"><span style="color: #993300;"><span style="font-size: x-large;"><strong>Suade Restaurant</strong></span></span></p> <p>&nbsp;</p> <p dir="ltr" id="docs-internal-guid-c19f5596-dd83-5017-0172-0ff1f2eade16" style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: medium;"><span style="color: #333399;"><span style="background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">Today&rsquo;s Caribbean patron is unlike any other. Adventurous, authentic and with a palate for the refined, this consumer seeks cuisine with a decadent flare. Suede elegantly fuses all aspects of traditional taste and modern elegance to create a one-of-a kind dining experience. Our flavorful dishes are more than a meal, they are an extension of the Caribbean lifestyle. </span></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p dir="ltr" style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: medium;"><span style="color: #333399;"><span style="background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"><strong>The Food:</strong> Our top rated and highly experienced chefs focus on re-imagining Caribbean cuisine by embracing the traditional West-Indian ingredients complemented with contemporary international culinary techniques. </span></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p dir="ltr" style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: medium;"><span style="color: #333399;"><span style="background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;"><strong>The Drinks: </strong>Our beverage program is based on our library of more than 100 crafted Caribbean rum flavors that engage the taste buds and imagination. We take your tastebuds on tropical vacation with every delightful sip. </span></span></span></p> <p dir="ltr" style="line-height: 1.15; margin-top: 0pt; margin-bottom: 0pt;"><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;">HOURS</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><strong>Monday - Thursday: Open at 4PM - 2AM</strong></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><strong>Friday: Open 3PM</strong></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><strong>Saturday &amp; Sunday: 11AM (Brunch)</strong></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><strong>Kitchen Closes 2AM Friday &amp; Saturday | Bar Closes 3AM</strong></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;">&nbsp;</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><strong>SUEDE<img src="data:image/jpeg;base64,PCFET0NUWVBFIEhUTUw+CjxodG1sIGNsYXNzPSJpc19tb3ogaXNfd2luIG5vLWpzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgPgogICAgICA8aGVhZD4KCiAgICAgICAgICAgIDwhLS1oZWFkLS0+PG1ldGEgbmFtZT0iZnJhZ21lbnQiIGNvbnRlbnQ9IiEiIC8+CjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIgLz4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmOCIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnNpdGVfbmFtZSIgY29udGVudD0iUGhvdG9idWNrZXQiIC8+CjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iSU5ERVgsIEZPTExPVyIgLz4KPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlRoaXMgUGhvdG8gd2FzIHVwbG9hZGVkIGJ5IGNhcmliYmVhbmZ1c2UuIiAvPgo8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iZnJlZSBpbWFnZSBob3N0aW5nLCBmcmVlIHZpZGVvIGhvc3RpbmcsIGltYWdlIGhvc3RpbmcsIHZpZGVvIGhvc3RpbmcsIHBob3RvIGltYWdlIGhvc3Rpbmcgc2l0ZSwgdmlkZW8gaG9zdGluZyBzaXRlIiAvPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCB1c2VyLXNjYWxhYmxlPW5vLCBpbml0aWFsLXNjYWxlPTEuMCwgIG1heGltdW0tc2NhbGU9MS4wIiAvPgo8bWV0YSBuYW1lPSJIYW5kaGVsZEZyaWVuZGx5IiBjb250ZW50PSJ0cnVlIiAvPgo8bWV0YSBwcm9wZXJ0eT0iZmI6YXBwX2lkIiBjb250ZW50PSIzODk5NzE1OTQ2MCIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9InBicGhvdG9zOnBob3RvIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IlBob3RvIGJ5IENhcmliYmVhbiBGdXNlIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcmliYmVhbiBGdXNlIHVwbG9hZGVkIHRoaXMgaW1hZ2UgdG8gJ2NhcmliYmVhbicuICBTZWUgdGhlIGFsYnVtIG9uIFBob3RvYnVja2V0LiIgLz4KPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVudD0iaHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9tZWRpYS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWw/c3JjPXBiIiAvPgo8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHA6Ly9pNTI2LnBob3RvYnVja2V0LmNvbS9hbGJ1bXMvY2MzNDkvY2FyaWJiZWFuZnVzZS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnIiAvPgo8bWV0YSBwcm9wZXJ0eT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iaHR0cDovL2k1MjYucGhvdG9idWNrZXQuY29tL2FsYnVtcy9jYzM0OS9jYXJpYmJlYW5mdXNlL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGciIC8+CjxtZXRhIHByb3BlcnR5PSJ0d2l0dGVyOnVybCIgY29udGVudD0iaHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9tZWRpYS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWw/c3JjPXBiIiAvPgo8bWV0YSBwcm9wZXJ0eT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJwaG90byIgLz4KPG1ldGEgcHJvcGVydHk9InR3aXR0ZXI6c2l0ZSIgY29udGVudD0iQHBob3RvYnVja2V0IiAvPgo8bWV0YSBwcm9wZXJ0eT0idHdpdHRlcjp0aXRsZSIgY29udGVudD0iUGhvdG8gYnkgQ2FyaWJiZWFuIEZ1c2UgaW4gJ2NhcmliYmVhbicuIiAvPgo8bWV0YSBuYW1lPSJwOmRvbWFpbl92ZXJpZnkiIGNvbnRlbnQ9IjQwNzk1MGIxMjhhODE3ODUwYWIzZWRkMDFiN2E2YmQ0IiAvPgo8IS0tICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL3Jlc291cmNlcy9jb21tb24vanMvbW9iaWxlL3Bob3RvYnVja2V0LmpzIj48L3NjcmlwdD4KICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2FkX2luZGV4ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXhTY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhTY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgICAgICAgICAgICAgICAgICBpbmRleFNjcmlwdC5zcmMgPSBjeWdudXNfaW5kZXhfc3RhcnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGVjb2RlVVJJQ29tcG9uZW50KGN5Z251c19pbmRleF9zdGFydCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGluZGV4U2NyaXB0LCBub2RlKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIGxvYWRfaW5kZXgoKTsKICAgICAgICAgICAgPC9zY3JpcHQ+LS0+CiAgICAgICAgICAgIDx0aXRsZT5jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcgUGhvdG8gYnkgY2FyaWJiZWFuZnVzZSB8IFBob3RvYnVja2V0PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9Imh0dHA6Ly9waWMyLnBic3JjLmNvbS9jb21tb24vZmF2aWNvbi5pY28iIC8+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgdHlwZT0iaW1hZ2UveC1pY29uIiBocmVmPSJodHRwOi8vcGljMi5wYnNyYy5jb20vY29tbW9uL2Zhdmljb24uaWNvIiAvPgo8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9tZWRpYS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWwiIC8+CjwhLS1nbG9iYWwtLT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL3N0YXRpYzIucGJzcmMuY29tL3BrZy9hZGZlMDI2ZDE5NTU1Nzg5MTFiNGNkMWQ4ZTVhNGU1NjNkNmMxNjUwL2hlYWRfZ2xvYmFsX21haW4uY3NzIiAvPgo8IS0taGVhZC0tPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vc3RhdGljMi5wYnNyYy5jb20vcGtnL2FkZmUwMjZkMTk1NTU3ODkxMWI0Y2QxZDhlNWE0ZTU2M2Q2YzE2NTAvaGVhZF9kZXRhaWxfZGV0YWlscGFnZS5jc3MiIC8+CjwhLS1leHRlcm5hbCBzdHlsZXNoZWV0cy0tPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwczovL2pzLmFwcGJveWNkbi5jb20vd2ViLXNkay8wLjIvYXBwYm95Lm1pbi5jc3MiIC8+CgogICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0aW1lIEpTIGZpcnN0IHN0YXJ0ZWQgZXhlY3V0aW5nIChmb3IgdGltaW5nIGluZm9ybWF0aW9uIGxhdGVyKQogICAgICAgICAgICAgICAgICAgIHdpbmRvd1snanNTdGFydFRpbWUnXSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgIDwvc2NyaXB0PiAKCgogICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vc3RhdGljMi5wYnNyYy5jb20vcGtnL2FkZmUwMjZkMTk1NTU3ODkxMWI0Y2QxZDhlNWE0ZTU2M2Q2YzE2NTAvaGVhZF9nbG9iYWxfbWFpbi5qcyIgPjwvc2NyaXB0Pgo8IS0tZXh0ZXJuYWwgaGVhZC0tPjxzY3JpcHQgc3JjPSJodHRwczovL3NlY3VyZS5waG90b2J1Y2tldC5jb20vcmVzb3VyY2VzL2NvbW1vbi9qcy9hZHMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9qcy5hcHBib3ljZG4uY29tL3dlYi1zZGsvMC4yL2FwcGJveS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgPjwvc2NyaXB0Pgo8IS0taGVhZCBzY3JpcHRzLS0+CgogICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoUGIpICE9PSAndW5kZWZpbmVkJyAmJiBQYi5EYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnYWRmZTAyNmQxOTU1NTc4OTExYjRjZDFkOGU1YTRlNTYzZDZjMTY1MCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljVXJsOiAnaHR0cDovL3N0YXRpYzIucGJzcmMuY29tLycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljVXJsOiAnaHR0cDovL3BpYzIucGJzcmMuY29tLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYi5EYXRhLmluaXQoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KCkpOwogICAgICAgICAgICA8L3NjcmlwdD4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy8gICAgICAgICAgICAgICAgICAgIC8vIENIRUNLIElGIEpRVUVSWSBJUyBOT1QgTE9BREVEIExPQUQgVEhFIEpRVUVSWQovLyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkgPT0gdW5kZWZpbmVkKSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTsKLy8gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NycHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLy8gICAgICAgICAgICAgICAgICAgICAgICBzY3JwdC50eXBlID0gInRleHQvamF2YXNjcmlwdCI7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgc2NycHQuc3JjID0gIi9yZXNvdXJjZXMvY29tbW9uL2pzL2pxdWVyeS9qcXVlcnktMS4xMC4yLmpzIjsKLy8gICAgICAgICAgICAgICAgICAgICAgICBlbC5pbnNlcnRCZWZvcmUoc2NycHQsIGVsLmZpcnN0Q2hpbGQpOwovLyAgICAgICAgICAgICAgICAgICAgfQovLwovLyAgICAgICAgICAgICAgICAgICAgdmFyIGFkT2JqID0ge2RlZmF1bHRXcml0ZTogZG9jdW1lbnQud3JpdGV9OwovLyAgICAgICAgICAgICAgICAgICAgLy8gT1ZFUldSSVRJTkcgRE9DVU1FTlQgV1JJVEUgVE8gT1VSIEZVTkNUSU9OCi8vICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZSA9IGZ1bmN0aW9uIChjb250ZW50KSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXTsKLy8gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISQuaXNFbXB0eU9iamVjdChhZE9iaikgJiYgYWRPYmouYWRTZWxlY3RvciAhPSB1bmRlZmluZWQgJiYgYWRPYmouYWRTZWxlY3RvciAhPSAiIiAmJiB3aW5kb3cualF1ZXJ5ICE9IHVuZGVmaW5lZCkgewovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9ICQoYWRPYmouYWRTZWxlY3Rvcik7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgfQovLyAgICAgICAgICAgICAgICAgICAgICAgICQoc2VsZWN0b3IpLmFwcGVuZChjb250ZW50KTsKLy8gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC53cml0ZSA9IGFkT2JqLmRlZmF1bHRXcml0ZTsKLy8gICAgICAgICAgICAgICAgICAgICAgICBhZE9iai5hZFNlbGVjdG9yID0gIiI7Ci8vICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZiwgdTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwuaW5kZXhPZignIycpICE9PSAtMSAmJiBsLmluZGV4T2YoJyZfc3VpZCcpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IGwuc3BsaXQoJyMnKVsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSB1LmluZGV4T2YoJyZfc3VpZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHUuc3Vic3RyaW5nKDAsIHBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaGVhZCBzY3JpcHRzICgnICsgd2luZG93LmxvY2F0aW9uICsgJykgY29tcGxldGVkIGFmdGVyICcgKyAoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAtIHdpbmRvd1snanNTdGFydFRpbWUnXSkgKyAnbXMnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICA8L2hlYWQ+Cjxib2R5IGlkPSJkZXRhaWxwYWdlIiAgY2xhc3M9IiBkZXNrdG9wIj4KICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIHZhciBvcmlnVVJMID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjsKICAgIHZhciB0cnVuY2F0ZWRVUkwgPSBvcmlnVVJMLnNwbGl0KCI/IiwgMSk7CiAgICB2YXIgX2NvbXNjb3JlID0gX2NvbXNjb3JlIHx8IFtdOwoKICAgIF9jb21zY29yZS5wdXNoKHsgYzE6ICIyIiwgYzI6ICIxNjk1NTgzOCIsIGM0OiB0cnVuY2F0ZWRVUkxbMF19KTsKCiAgICAoZnVuY3Rpb24oKQogICAgewogICAgICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpWzBdOwoKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9IChkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA9PSAiaHR0cHM6IiA/ICJodHRwczovL3NiIiA6ICJodHRwOi8vYiIpICsgIi5zY29yZWNhcmRyZXNlYXJjaC5jb20vYmVhY29uLmpzIjsKICAgICAgICBlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLCBlbCk7CiAgICB9KSgpOwoKPC9zY3JpcHQ+Cgo8bm9zY3JpcHQ+CiAgICA8cD48aW1nIHNyYz0iLy9iLnNjb3JlY2FyZHJlc2VhcmNoLmNvbS9wP2MxPTImYW1wO2MyPTE2OTU1ODM4JmFtcDtjMz0mYW1wO2M0PWh0dHAlM0ElMkYlMkZzNTI2LnBob3RvYnVja2V0LmNvbSUyRnVzZXIlMkZjYXJpYmJlYW5mdXNlJTJGbWVkaWElMkZjYXJpYmJlYW4lMkZjaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcuaHRtbCZhbXA7YzU9JmFtcDtjNj0mYW1wO2MxNT0mYW1wO2NqPTEiIGFsdD0iKiIgLz48L3A+Cjwvbm9zY3JpcHQ+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3MzUuZ2xhbS5jb20vZ2FkL2dsYW1hZGFwdF9qc2FwaS5hY3Q/YWZpZD0xNjU1MDI4ODU1Ij48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgppZiAodHlwZW9mKEdsYW1DcmVhdGVTbG90KSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YoR2xhbUdldEFkcykgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICBHbGFtQ3JlYXRlU2xvdCgnMTY1NTAyODg1NScsICczMDB4MjUwJywgJ1JFQ1RBTkdMRScpOwogICAgICAgIEdsYW1DcmVhdGVTbG90KCcxNjU1MDI4ODU1JywgJzMwMHgyNTAnLCAnUkVDVEFOR0xFMicpOwogICAgICAgIEdsYW1DcmVhdGVTbG90KCcxNjU1MDI4ODU1JywgJzcyOHg5MCcsICdCQU5ORVInKTsKICAgICAgICBHbGFtQ3JlYXRlU2xvdCgnMTY1NTAyODg1NScsICc3Mjh4OTAnLCAnQkFOTkVSMicpOwogICAgICAgIEdsYW1HZXRBZHMoJzE2NTUwMjg4NTUnKTsKfQo8L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly9jLmFtYXpvbi1hZHN5c3RlbS5jb20vYWF4Mi9hbXpuX2Fkcy5qcyc+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYW16bmFkcy5nZXRBZHMoJzMwMjknKTsKICAgICAgICB9IGNhdGNoIChlKSB7LyppZ25vcmUqL30KICAgIDwvc2NyaXB0PgoKICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgaWQ9InRva2VuIiB2YWx1ZT0iYTgyMjBjYTZkYzFkZmMzNmQ5Yjk0MTJiOWNhMDVmMTEiIC8+CiAgICAgICAgPGRpdiBpZD0ibWVzc2FnZUNvbnRhaW5lciI+CjwvZGl2PiAgICAgICAgPGRpdiBjbGFzcz0iYWQgYmFubmVyQWQgIiAgZGF0YS1kZWJ1Zz0nWyJ2aWV3aWQ9NTE4Nzk2MTkwNiIsInNpemU9QkFOTkVSIiwicmFuZG9tPTY3NTk5MiIsImFyZWE9bGliX21lZGlhZGV0YWlsIiwibG9naW49TiIsInV0eXBlPWZyZWUiLCJzcD1mIiwib3duZXJuYW1lPWNhcmliYmVhbmZ1c2UiLCJzZWFyY2hfa3c9ZW1wdHkiLCJwdHlwZT1mdl9pbWFnZSIsInBvcz1ub19pbmYiLCJsaWtlcz1uIiwic3Bvbj1lbXB0eSIsImFkQ291bnQ9ZW1wdHkiLCJibD0xIiwicmVmX2RvbWFpbj1lbXB0eSIsImZlYXR1cmU9bWRwcmV2aWV3Y3VycmVudCIsInNpdGU9cGIyIiwidHJhY2s9ZW1wdHkiXSc+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWZyYW1lCiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDcyOHB4OyBoZWlnaHQ6IDkwcHgiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYmFubmVyQWRJZnJhbWUiIGlkPSJiYW5uZXJBZCIKICAgICAgICAgICAgICAgICAgICAgIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9Im5vIiBkYXRhLXR5cGU9IkJBTk5FUiIgZGF0YS13aWR0aD0iNzI4IiAgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+CiAgICAgICAgICAgICAgICAgIDwvaWZyYW1lPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZFVybCA9ICdodHRwOi8vcGhvdG9idWNrZXQuYWRueHMuY29tL3B0P2ludl9jb2RlPWxpYl9tZWRpYWRldGFpbCZzaXplPTcyOHg5MCZtZW1iZXI9ODYmcmVkaXI9JTJGJTJGYi5waG90b2J1Y2tldC5jb20lMkZwYmt0JTJGaHNlcnZlciUyRnZpZXdpZCUzRDUxODc5NjE5MDYlMkZzaXplJTNEQkFOTkVSJTJGcmFuZG9tJTNENjc1OTkyJTJGYXJlYSUzRGxpYl9tZWRpYWRldGFpbCUyRmxvZ2luJTNETiUyRnV0eXBlJTNEZnJlZSUyRnNwJTNEZiUyRm93bmVybmFtZSUzRGNhcmliYmVhbmZ1c2UlMkZzZWFyY2hfa3clM0RlbXB0eSUyRnB0eXBlJTNEZnZfaW1hZ2UlMkZwb3MlM0Rub19pbmYlMkZsaWtlcyUzRG4lMkZzcG9uJTNEZW1wdHklMkZhZENvdW50JTNEZW1wdHklMkZibCUzRDElMkZyZWZfZG9tYWluJTNEZW1wdHklMkZmZWF0dXJlJTNEbWRwcmV2aWV3Y3VycmVudCUyRnNpdGUlM0RwYjIlMkZ0cmFjayUzRGVtcHR5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBfdmFsdWF0aW9uID0gcnBfdmFsdWF0aW9uIHx8IHt9LCAvLyBnbG9iYWwgZnJvbSBydWJpY29uIGRvcm90aHkgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkU2l6ZSA9IDcyOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRGdWxsU2l6ZSA9ICI3Mjh4OTAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFtem5hZHMgIT09ICd1bmRlZmluZWQnICYmIChhZFVybC5tYXRjaCgvcG9zJTNEaW5mKy9nKSA9PT0gbnVsbCAmJiBhZFVybC5tYXRjaCgvcG9zPWluZi9nKSA9PT0gbnVsbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gYW16bmFkcy5nZXRLZXlzKGFkRnVsbFNpemUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9IGVzY2FwZSgnLycgKyBrZXkgKyAnPTEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoR2xhbUlzQXZhaWxhYmxlKSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdsYW0sIGdhZGFkaWQsIGdhZHN6LCBnYWRyZXFpZCwgcG9zLCB1c2VyUGFyYW1zLCBnYWRvYmo7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclBhcmFtcyA9IHsibG9naW4iOiJOIiwidXR5cGUiOiJmcmVlIiwic3AiOiJmIiwib3duZXJuYW1lIjoiY2FyaWJiZWFuZnVzZSIsInNlYXJjaF9rdyI6ImVtcHR5IiwicHR5cGUiOiJmdl9pbWFnZSIsInBvcyI6Im5vX2luZiIsImxpa2VzIjoibiIsInNwb24iOiJlbXB0eSIsImFkQ291bnQiOiJlbXB0eSIsImJsIjoiMSIsInJlZl9kb21haW4iOiJlbXB0eSIsImZlYXR1cmUiOiJtZHByZXZpZXdjdXJyZW50In07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB1c2VyUGFyYW1zLnBvczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT09ICdub19pbmYnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Fkb2JqID0gR2xhbUdldFNsb3RPYmplY3QoJ0JBTk5FUicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHbGFtSXNBdmFpbGFibGUoJ0JBTk5FUicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW0gPSAnMSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Fkb2JqID0gR2xhbUdldFNsb3RPYmplY3QoJ0JBTk5FUjInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoR2xhbUlzQXZhaWxhYmxlKCdCQU5ORVIyJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbSA9ICcxJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnYWRvYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRhZGlkID0gZ2Fkb2JqLmFkaWQgPyBnYWRvYmouYWRpZCA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZHN6ID0gZ2Fkb2JqLnN6ID8gZ2Fkb2JqLnN6IDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkcmVxaWQgPSBnYWRvYmoucmVxaWQgPyBnYWRvYmoucmVxaWQgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkYWRpZCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZHN6ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkcmVxaWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xhbUlkID0gZ2xhbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbGFtSWQgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA9PT0gJ25vX2luZicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdCQU5ORVInID09PSAnUkVDVEFOR0xFJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbUlkID0gJ3IxJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnQkFOTkVSJyA9PT0gJ0JBTk5FUicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW1JZCA9ICdiMSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ0JBTk5FUicgPT09ICdSRUNUQU5HTEUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtSWQgPSAncjInOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdCQU5ORVInID09PSAnQkFOTkVSJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbUlkID0gJ2IyJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoJy9nbGFtNzI4PScgKyBnbGFtSWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCcvZ2FkYWRpZD0nICsgZ2FkYWRpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoJy9nYWRzej0nICsgZ2Fkc3opOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCcvZ2FkcmVxaWQ9JyArIGdhZHJlcWlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gJy9hbnByaWNlPXtQUklDRUJVQ0tFVH0vZ2VuZXJpYz17QklEVVJMRU5DfSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHJwX3ZhbHVhdGlvbi5lc3RpbWF0ZSkgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiAocnBfdmFsdWF0aW9uLmVzdGltYXRlLnRpZXIpICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGllciA9IHJwX3ZhbHVhdGlvbi5lc3RpbWF0ZS50aWVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCIvcnBfdGllcj0iICsgdGllcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NldHRpbmcgYWQgYmFubmVyQWQgc3JjIHRvICcgKyBhZFVybCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgKyAobm93LmdldFRpbWUoKSAtIHdpbmRvd1snanNTdGFydFRpbWUnXS5nZXRUaW1lKCkpICsgJ21zKScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkdW5pdCA9ICQoJyNiYW5uZXJBZCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2Jhbm5lckFkJykuYXR0cignc3JjJywgYWRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdmFyIGFkbWFydmVsVVJMID0gYWRVcmw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhZCBwcmV2aW91cyB1cmw6ICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhZG1hcnZlbFVSTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYmpzID0gcGJqcyB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5xdWUgPSBwYmpzLnF1ZSB8fCBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5xdWUucHVzaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZFVuaXRzID0gW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogJy8xOTk2ODMzNi9oZWFkZXItYmlkLXRhZy0wJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFtbMzAwLCAyNTBdLCBbMzAwLCA2MDBdXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkczogW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkZGVyOiAnYnJlYWx0aW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudElkOiAnNjQ1ODY3NScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5hZGRBZFVuaXRzKGFkVW5pdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmpzLnJlcXVlc3RCaWRzKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkc0JhY2tIYW5kbGVyOiBmdW5jdGlvbiAoYmlkUmVzcG9uc2VzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdicnJlYWx0aW1lIHJlc3BvbnNlOiAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYmlkUmVzcG9uc2VzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJyZWFsdGltZXBhcmFtcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChiaWRSZXNwb25zZXNbJy8xOTk2ODMzNi9oZWFkZXItYmlkLXRhZy0wJ11bJ2JpZHMnXVswXVsnYWRzZXJ2ZXJUYXJnZXRpbmcnXSwgZnVuY3Rpb24gKGtleSwgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICdoYl9wYicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWx0aW1lcGFyYW1zLnB1c2goa2V5ICsgIj0iICsgaXRlbSAqIDAuMDgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhbHRpbWVwYXJhbXMucHVzaChrZXkgKyAiPSIgKyBpdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtYXJ2ZWxVUkwgKz0gJyYnICsgYnJlYWx0aW1lcGFyYW1zLmpvaW4oJyYnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYnJlYWx0aW1lcGFyYW1zLmpvaW4oJyYnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2Vpbmcgb2xkIGdlbmVyYXRlZCB1cmwgd2l0aCBvdXIgbmV3IGdlbmVyYXRlZCB1cmwgZm9yIHByZWJpZCBqcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCA9IGFkbWFydmVsVVJMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjJykuYXR0cignc3JjJywgYWRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xhenkgZWxzZSBhZGRpbmcgYWQgdXJsIGZvciAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJCgnIycpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjJykuYXR0cignc3JjJywgYWRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKSk7CiAgICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyIGRlc2t0b3AgICBsb2dnZWRvdXQiIGlkPSJkZXNrdG9wTmF2aWdhdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciBjbGVhcmZpeCI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJicmFuZE1lbnVDb250YWluZXIgbG9nZ2VkT3V0IiBzdHlsZT0iZmxvYXQ6IGxlZnQ7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnJhbmQiIGhyZWY9Imh0dHA6Ly9waG90b2J1Y2tldC5jb20vIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9nbyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBzaXRlTmF2Ij4KICAgICAgICA8bGkgaWQ9ImV4cGxvcmVNZW51IiBjbGFzcz0iZHJvcGRvd24gIj48YSBocmVmPSIvYnJvd3NlIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBvbmNsaWNrPSJQYi5UcmFjay50cignbmF2X2Jyb3dzZV9sb2dnZWRvdXRfY2xpY2snKTsiPkJyb3dzZTwvYT4KICAgICAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcGhvdG9idWNrZXQuY29tL2Jyb3dzZSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ25hdl9jYXRlZ29yaWVzX2xvZ2dlZG91dF9jbGljaycpOyI+VG9wIENhdGVnb3JpZXM8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcGhvdG9idWNrZXQuY29tL3JlY2VudHVwbG9hZHMiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCduYXZfcmVjZW50X2xvZ2dlZG91dF9jbGljaycpOyI+UmVjZW50PC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2Jsb2cucGhvdG9idWNrZXQuY29tIiB0YXJnZXQ9Il9ibGFuayIgb25jbGljaz0iUGIuVHJhY2sudHIoJ25hdl9ibG9nX2xvZ2dlZG91dF9jbGljaycpOyI+QmxvZzwvYT48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgIDwvbGk+CgogICAgICAgIDxsaSBpZD0iZWRpdE1lbnUiIGNsYXNzPSJlZGl0bG8gIj48YSBjbGFzcyA9ImRyb3Bkb3duLXRvZ2dsZSIgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9lZGl0b3IiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCduYXZfZWRpdF9sb2dnZWRvdXRfY2xpY2snKTsiPkVkaXRvcjwvYT48L2xpPgogICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZENvbnRhaW5lciBoaWRlSW5DYXJ0ICI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii9yZWdpc3Rlcj9yZXR1cm5Vcmw9aHR0cCUzQSUyRiUyRnBob3RvYnVja2V0LmNvbSUyRnVwbG9hZCUzRnBvc3RyZWdpc3RlciUzRHRydWUiIGNsYXNzPSJ1cGxvYWQiIGlkPSJ1cGxvYWRNZW51IiBvbmNsaWNrPSJQYi5UcmFjay50cignbG9nZ2Vkb3V0X3VwbG9hZF9idXR0b25fY2xpY2snKTsiPjxkaXYgY2xhc3M9InVwbG9hZEJ1dHRvbiI+VXBsb2FkPC9kaXY+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZlU3RhdGVDb250YWluZXIiPjwvZGl2PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmludENvbnRhaW5lciB0b3BOYXZQcmludCBoaWRlSW5DYXJ0ICI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBob3RvYnVja2V0LmNvbS9wcmludCIgY2xhc3M9InByaW50IiBpZD0icHJpbnRNZW51IiBvbmNsaWNrPSJQYi5UcmFjay50cignbG9nZ2Vkb3V0X3ByaW50X2J1dHRvbl9jbGljaycpOyI+PGRpdiBjbGFzcz0icHJpbnRCdXR0b24iPlByaW50IFNob3A8L2Rpdj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3RpdmVTdGF0ZUNvbnRhaW5lciI+PC9kaXY+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXZSaWdodEl0ZW1zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2SXRlbUNvbnRhaW5lciBsb2dnZWRPdXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9InNlYXJjaGJveCBuYXZiYXItc2VhcmNoIHJlc3BvbnNpdmUgaGlkZUluQ2FydCIgbmFtZT0ic2VhcmNoQm94Rm9ybSIKICAgICAgICA+CiAgICA8ZGl2IGNsYXNzPSJpbnB1dENvbnRhaW5lciI+CiAgICAgICAgPGEgY2xhc3M9InNlYXJjaFRyaWdnZXIiIGhyZWY9IiMiPjxkaXYgaWQ9InNlYXJjaEljb24iPjwvZGl2PjwvYT4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzZWFyY2hVcmwiIHZhbHVlPSJodHRwOi8vcGhvdG9idWNrZXQuY29tLyIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSJpbWFnZXMiLz4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icSIgYXV0b2NvbXBsZXRlPSJvZmYiIGNsYXNzPSJzZWFyY2gtcXVlcnkiIHBsYWNlaG9sZGVyPSJTZWFyY2giLz4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZHJvcGRvd25Db250YWluZXIgbmF2Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93biBzZWFyY2hUeXBlcyI+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgZGF0YS10YXJnZXQ9IiNzZWFyY2hUeXBlcyI+CiAgICAgICAgICAgICAgICA8YiBjbGFzcz0nY2FyZXQnPjwvYj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhY3RpdmUiIG5hbWU9ImltYWdlcyI+PGEgaHJlZj0iIyI+UGhvdG9zPC9hPjwvbGk+CiAgICAgICAgICAgICAgICA8bGkgbmFtZT0idmlkZW9zIj48YSBocmVmPSIjIj5WaWRlb3M8L2E+PC9saT4KICAgICAgICAgICAgICAgIDxsaSBuYW1lPSJnaWZzIj48YSBocmVmPSIjIj5BbmltYXRlZCBHaWZzPC9hPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJsb2dpbiBuYXYgaGlkZUluQ2FydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPSJsb2dpbi1saW5rIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGhvdG9idWNrZXQuY29tL2xvZ2luIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nIGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9ImxvZ2luLWRyb3Bkb3duIiBjbGFzcz0iZHJvcGRvd24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgZGF0YS10YXJnZXQ9IiNsb2dpbi1kcm9wZG93biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZyBpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9ImNhcmV0Ij48L2I+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLW1lbnUgbG9naW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSdsb2dpbkJveCc+CiAgICA8ZGl2IGlkPSJsb2dpbi1sZWZ0Ij4KICAgICAgICA8YSBjbGFzcz0icmVnaXN0ZXItZXh0ZXJuYWwgcmVnaXN0ZXItZmFjZWJvb2siIGhyZWY9Ii9hdXRoL2ZhY2Vib29rL3N0YXJ0P2NhbGxiYWNrX3R5cGU9bG9naW4mZGlzcGxheT1wb3B1cCZtb2JpbGU9IiBvbmNsaWNrPSJyZXR1cm4gUGIuQ29tcG9uZW50LkV4dGVybmFsU2l0ZS5SZWdpc3Rlci5yZWdpc3Rlcih0aGlzLCAnZHJvcE92ZXJfZmFjZWJvb2tfbG9naW5fY2xpY2snKTsiPgogICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJyZWdpc3Rlci1mYWNlYm9vay1idXR0b24iIGNsYXNzPSJyZWdpc3Rlci1idXR0b24iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlZ2lzdGVyLWljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJpY29uLWZhY2Vib29rIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVnaXN0ZXItdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgIExvZyBpbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2E+CjxhIGNsYXNzPSJyZWdpc3Rlci1leHRlcm5hbCByZWdpc3Rlci10d2l0dGVyIiBocmVmPSIvYXV0aC90d2l0dGVyL3N0YXJ0P2NhbGxiYWNrX3R5cGU9bG9naW4mZGlzcGxheT1wb3B1cCZtb2JpbGU9IiBvbmNsaWNrPSJyZXR1cm4gUGIuQ29tcG9uZW50LkV4dGVybmFsU2l0ZS5SZWdpc3Rlci5yZWdpc3Rlcih0aGlzLCAnZHJvcE92ZXJfdHdpdHRlcl9sb2dpbl9jbGljaycpOyI+CiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InJlZ2lzdGVyLXR3aXR0ZXItYnV0dG9uIiBjbGFzcz0icmVnaXN0ZXItYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWdpc3Rlci1pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iaWNvbi10d2l0dGVyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVnaXN0ZXItdGV4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgIExvZyBpbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2E+CiAgICAgICAgPHAgY2xhc3M9InNpZ251cCI+CiAgICAgICAgICAgIE5lZWQgYW4gYWNjb3VudD88YnIvPgogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3NlY3VyZS5waG90b2J1Y2tldC5jb20vcmVnaXN0ZXIiPlNpZ24gdXAhPC9hPgogICAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibG9naW4tZGl2aWRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ib3IiPk9SPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImxvZ2luLXJpZ2h0Ij4KICAgICAgICA8aWZyYW1lIGlkPSdsb2dpbkJveEZyYW1lJyBuYW1lPSdsb2dpbkJveEZyYW1lJyBkYXRhLXNyYz0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9sb2dpbmJveD9wYXJlbnRVcmw9aHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9tZWRpYS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWwmbW9kZT1kcm9wT3ZlciIgZnJhbWVib3JkZXI9IjAiPjwvaWZyYW1lPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJjbGVhckIiPjwvZGl2Pgo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0ic2lnblVwTGluayIgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhvdG9idWNrZXQuY29tL3JlZ2lzdGVyIj5TaWduIHVwPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJoZWxwIG5hdiBzaG93SW5DYXJ0IHByaW50U2hpcHBpbmciIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCduYXZfc2hpcHBpbmdfbGlua19jbGljaycpOyI+U2hpcHBpbmcgQ291bnRyeTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImhlbHAgbmF2IHNob3dJbkNhcnQgcHJpbnRDdXJyZW5jeSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ25hdl9jdXJyZW5jeV9saW5rX2NsaWNrJyk7Ij5DdXJyZW5jeTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImhlbHAgbmF2IHNob3dJbkNhcnQgcHJpbnRVbml0cyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ25hdl91bml0c19saW5rX2NsaWNrJyk7Ij5Vbml0czwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3N1cHBvcnQucGhvdG9idWNrZXQuY29tL2hjL2VuLXVzL2NhdGVnb3JpZXMvMjAwMTU0MzMwLVByaW50IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImhlbHAgbmF2IHNob3dJbkNhcnQiIGlkPSJoZWxwTWVudSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ25hdl9oZWxwX2xpbmtfY2xpY2snKTsiPkhlbHA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrb3V0Q29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhvdG9idWNrZXQuY29tL3ByaW50L2NhcnQiIGNsYXNzPSJwcmludENhcnQiIGlkPSJjYXJ0TWVudSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ25hdl9jYXJ0X2J1dHRvbl9jbGljaycpOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrb3V0QnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNoZWNrb3V0SWNvbiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2FydCI+Q2FydDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvdW50Ij48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV4dHJhU3BlY2lhbFNpZ25VcExpbmsgaGlkZSI+IDxhIHN0eWxlPSJjb2xvcjogd2hpdGUiIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBob3RvYnVja2V0LmNvbS9yZWdpc3RlciI+U2lnbiB1cDwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Ym5hdiBoaWRlSW5DYXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgY2xlYXJmaXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaW50Q2F0ZWdvcmllcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InN1YkNhdGVnb3J5IiBocmVmPSJodHRwczovL3NlY3VyZS5waG90b2J1Y2tldC5jb20vcHJpbnQvaG9tZWRlY29yL2NhbnZhc3ByaW50cyIgb25jbGljaz0iUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrUHJpbnRQcm9kdWN0Q2xpY2soe2NhdGVnb3J5OiAnaG9tZSBkZWNvcicsIGNvbXBvbmVudDogJ3BiIG5hdicsIHByb2R1Y3Q6ICdjYW52YXMgcHJpbnRzJ30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBiLlRyYWNrLnRyKCdwcmludF9zaG9wX25hdl9jYW52YXNfcHJpbnRzX2NhdGVnb3J5X2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGIuUGFnZVRyYWNrZXIuYWRkR29vZ2xlQW5hbHl0aWNzUGFydG5lckV2ZW50KCdVQS0yNDU0NTUtMzYnLCAnd2lkZ2V0LnByaW50LmlvJywgJ3BidG5nJywgJ3ByaW50X3N1Ym5hdl9jbGljaycsICdjYW52YXNfcHJpbnRzJywgbnVsbCk7IiBpZD0iSG9tZURlY29yIj5DQU5WQVMgUFJJTlRTPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJub0NhdGVnb3JpZXMiIG9uY2xpY2s9IlBiLkNvbXBvbmVudC5UcmFja2luZy5NaXhwYW5lbC50cmFja1ByaW50UHJvZHVjdENsaWNrKHtjYXRlZ29yeTogJ2hvbWUgZGVjb3InLCBjb21wb25lbnQ6ICdwcmludCBzaG9wIG5hdicsIHByb2R1Y3Q6ICdtZXRhbCBwcmludHMnfSk7IiBocmVmPSIvcHJpbnQvaG9tZWRlY29yL21ldGFscHJpbnRzIiBpZD0iSG9saWRheVBob3RvQ2FyZHMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEFMIFBSSU5UUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXZpZGVyLXZlcnRpY2FsIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3ViQ2F0ZWdvcnkiIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBob3RvYnVja2V0LmNvbS9wcmludC9wcmludHMiIG9uY2xpY2s9IlBiLkNvbXBvbmVudC5UcmFja2luZy5NaXhwYW5lbC50cmFja1ByaW50UHJvZHVjdENsaWNrKHtjYXRlZ29yeTogJ3ByaW50cycsIGNvbXBvbmVudDogJ3BiIG5hdicsIHByb2R1Y3Q6ICdwcmludHMnfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGIuVHJhY2sudHIoJ3ByaW50X3Nob3BfbmF2X3ByaW50c19jYXRlZ29yeV9jbGljaycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBiLlBhZ2VUcmFja2VyLmFkZEdvb2dsZUFuYWx5dGljc1BhcnRuZXJFdmVudCgnVUEtMjQ1NDU1LTM2JywgJ3dpZGdldC5wcmludC5pbycsICdwYnRuZycsICdwcmludF9zdWJuYXZfY2xpY2snLCAncHJpbnRzJywgbnVsbCk7IiBpZD0iUHJpbnRzIj5QUklOVFM8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGl2aWRlci12ZXJ0aWNhbCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgb25jbGljaz0iUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrUHJpbnRQcm9kdWN0Q2xpY2soe2NhdGVnb3J5OiAnaG9tZSBkZWNvcicsIGNvbXBvbmVudDogJ3ByaW50IHNob3AgbmF2JywgcHJvZHVjdDogJ2NhbnZhcyBwb3N0ZXJzJ30pOyIgaHJlZj0iL3ByaW50L2hvbWVkZWNvci9jYW52YXNwb3N0ZXJzIj5DQU5WQVMgUE9TVEVSUzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXZpZGVyLXZlcnRpY2FsIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJQYi5Db21wb25lbnQuVHJhY2tpbmcuTWl4cGFuZWwudHJhY2tQcmludFByb2R1Y3RDbGljayh7Y2F0ZWdvcnk6ICdob21lIGRlY29yJywgY29tcG9uZW50OiAncHJpbnQgc2hvcCBuYXYnLCBwcm9kdWN0OiAnZnJhbWVkIHByaW50cyd9KTsiIGhyZWY9Ii9wcmludC9ob21lZGVjb3IvZnJhbWVkcHJpbnRzIj5GUkFNRUQgUFJJTlRTPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpdmlkZXItdmVydGljYWwiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzdWJDYXRlZ29yeSIgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhvdG9idWNrZXQuY29tL3ByaW50L2hvbWVkZWNvciIgb25jbGljaz0iUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrUHJpbnRDYXRlZ29yeUNsaWNrKHtjYXRlZ29yeTogJ2hvbWUgZGVjb3InLCBjb21wb25lbnQ6ICdwYiBuYXYnfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGIuVHJhY2sudHIoJ3ByaW50X3Nob3BfbmF2X2hvbWVfZGVjb3JfY2F0ZWdvcnlfY2xpY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYi5QYWdlVHJhY2tlci5hZGRHb29nbGVBbmFseXRpY3NQYXJ0bmVyRXZlbnQoJ1VBLTI0NTQ1NS0zNicsICd3aWRnZXQucHJpbnQuaW8nLCAncGJ0bmcnLCAncHJpbnRfc3VibmF2X2NsaWNrJywgJ2hvbWVfZGVjb3InLCBudWxsKTsiIGlkPSJIb21lRGVjb3IiPkhPTUUgREVDT1I8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGl2aWRlci12ZXJ0aWNhbCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InN1YkNhdGVnb3J5IiBocmVmPSJodHRwczovL3NlY3VyZS5waG90b2J1Y2tldC5jb20vcHJpbnQvcGhvdG9naWZ0cyIgb25jbGljaz0iUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrUHJpbnRDYXRlZ29yeUNsaWNrKHtjYXRlZ29yeTogJ3Bob3RvIGdpZnRzJywgY29tcG9uZW50OiAncGIgbmF2J30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBiLlRyYWNrLnRyKCdwcmludF9zaG9wX25hdl9waG90b19naWZ0c19jYXRlZ29yeV9jbGljaycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBiLlBhZ2VUcmFja2VyLmFkZEdvb2dsZUFuYWx5dGljc1BhcnRuZXJFdmVudCgnVUEtMjQ1NDU1LTM2JywgJ3dpZGdldC5wcmludC5pbycsICdwYnRuZycsICdwcmludF9zdWJuYXZfY2xpY2snLCAncGhvdG9fZ2lmdHMnLCBudWxsKTsiIGlkPSJQaG90b0dpZnRzIj5QSE9UTyBHSUZUUzwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXZpZGVyLXZlcnRpY2FsIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBob3RvYnVja2V0LmNvbS9wcmludCIgb25jbGljaz0iUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrUHJpbnRQcm9tb0NsaWNrKHtwcm9tbzogJ21hcmtldGluZyBwcm9tbycsIGNvbXBvbmVudDogJ3BiIG5hdid9KTsiPjxkaXYgY2xhc3M9InByaW50UHJvbW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIFBiLkRhdGEuYWRkKCdpc0xvZ2dlZEluJywgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIFBiLkRhdGEuYWRkKCdzZWN1cmVVcmwnLCAnaHR0cHM6Ly9zZWN1cmUucGhvdG9idWNrZXQuY29tLycpOwogICAgICAgICAgICAgICAgICAgIFBiLkRhdGEuYWRkKCdwZycseyJuYW1lIjoiZGV0YWlscGFnZSIsImJsIjp0cnVlfSk7CiAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICAKPGRpdiBpZD0iIiBjbGFzcz0icGFnZUZlYXR1cmUgZmVhdHVyZSBhbGVydCBmYWRlIHNocmluayBsaW5lbiI+DQogICAgICAgIDxhIGNsYXNzPSJjbG9zZSIgIGRhdGEtZGlzbWlzcz0iYWxlcnQiIGhyZWY9IiMiPjxpIGNsYXNzPSdpY29uLXJlbW92ZSc+PC9pPjwvYT4NCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZUJvZHkiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmVDb250ZW50Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZmVhdHVyZUZvb3RlciI+DQogICAgICAgICAgICA8L2Rpdj4NCjwvZGl2Pg0KCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudFdyYXBwZXIiIGlkPSJtYWluIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsV3JhcHBlciIgaWQ9ImRldGFpbGFsYnVtIiBkYXRhLXBiZGtleT0ic2hhcmVkLm1lZGlhIiBkYXRhLXBiZG9mZnNldD0iIj4NCiAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KUGIuRGF0YS5TaGFyZWQucHV0KFBiLkRhdGEuU2hhcmVkLk1FRElBLCB7InBpY3R1cmVJZCI6bnVsbCwic3RhdHNDb3VudGVyVHlwZXMiOm51bGwsInN0YXRzQ291bnRlclRvdGFscyI6bnVsbCwibmFtZSI6ImNoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyIsInRpdGxlIjoiIiwiY29udGVudE1vZFN0YXR1cyI6bnVsbCwiZGVzY3JpcHRpb24iOiIiLCJzdWJkb21haW4iOiJpNTI2IiwiZGlyZWN0b3J5IjoiYWxidW1zXC9jYzM0OSIsImxvY2F0aW9uIjoiY2FyaWJiZWFuIiwicHVibGljIjpudWxsLCJmaWxlVHlwZUlkIjpudWxsLCJjaGVja3N1bSI6bnVsbCwibW9kaWZpY2F0aW9uRGF0ZSI6bnVsbCwiY3JlYXRpb25EYXRlIjpudWxsLCJ1c2VySWQiOjc2NjAxNzAwLCJ1c2VybmFtZSI6ImNhcmliYmVhbmZ1c2UiLCJvZmZzZXQiOm51bGwsInNpbG8iOm51bGwsInBhdGgiOiJcL2FsYnVtc1wvY2MzNDlcL2NhcmliYmVhbmZ1c2VcL2NhcmliYmVhblwvY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnIiwiYWxidW1QYXRoIjoiXC9hbGJ1bXNcL2NjMzQ5XC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW4iLCJhbGJ1bVVybCI6Imh0dHA6XC9cL3M1MjYucGhvdG9idWNrZXQuY29tXC91c2VyXC9jYXJpYmJlYW5mdXNlXC9saWJyYXJ5XC9jYXJpYmJlYW4iLCJzdG9yeVVybCI6Imh0dHA6XC9cL3M1MjYucGhvdG9idWNrZXQuY29tXC91c2VyXC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW5cL3N0b3J5IiwibWVkaWFUeXBlIjoiaW1hZ2UiLCJmdWxsc2l6ZVVybCI6Imh0dHA6XC9cL2k1MjYucGhvdG9idWNrZXQuY29tXC9hbGJ1bXNcL2NjMzQ5XC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW5cL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyIsInRodW1iVXJsIjoiaHR0cDpcL1wvcnM1MjYucGJzcmMuY29tXC9hbGJ1bXNcL2NjMzQ5XC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW5cL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZ35jMTAwIiwibW9iaWxlRnVsbHNpemVVcmwiOiJodHRwOlwvXC9yczUyNi5wYnNyYy5jb21cL2FsYnVtc1wvY2MzNDlcL2NhcmliYmVhbmZ1c2VcL2NhcmliYmVhblwvY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnP3c9NDgwJmg9NDgwJmZpdD1jbGlwIiwibGlua1VybCI6Imh0dHA6XC9cL3M1MjYucGhvdG9idWNrZXQuY29tXC91c2VyXC9jYXJpYmJlYW5mdXNlXC9tZWRpYVwvY2FyaWJiZWFuXC9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcuaHRtbCIsImlzUGVyc2lzdGVkIjpmYWxzZSwib3duZXJuYW1lIjoiY2FyaWJiZWFuZnVzZSIsImV4dCI6ImpwZyIsIm1lZGlhSWQiOm51bGwsImxpa2VDb3VudCI6MCwiY29tbWVudENvdW50IjowLCJ2aWV3Q291bnQiOjAsInBiZGtleSI6InNoYXJlZC5tZWRpYSIsImNvbnRleHQiOiJhbGJ1bSIsImlkIjowLCJvd25lcnByb2ZpbGVsaW5rIjoiXC91c2VyXC9jYXJpYmJlYW5mdXNlXC9wcm9maWxlIiwicnNXaWR0aCI6IiIsInJzSGVpZ2h0IjoiIiwicGxhY2VIb2xkIjpmYWxzZSwicGxhY2VIb2xkZXJJZCI6InBsYWNlSG9sZGVyXzAiLCJ0aXRsZU9yRmlsZW5hbWUiOiJjaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdSIsImxpbmtjb2RlcyI6eyJlbWFpbCI6Imh0dHA6XC9cL3M1MjYucGhvdG9idWNrZXQuY29tXC91c2VyXC9jYXJpYmJlYW5mdXNlXC9tZWRpYVwvY2FyaWJiZWFuXC9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcuaHRtbCIsImRpcmVjdCI6Imh0dHA6XC9cL2k1MjYucGhvdG9idWNrZXQuY29tXC9hbGJ1bXNcL2NjMzQ5XC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW5cL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyIsImh0bWwiOiImbHQ7YSBocmVmPSZxdW90O2h0dHA6XC9cL3M1MjYucGhvdG9idWNrZXQuY29tXC91c2VyXC9jYXJpYmJlYW5mdXNlXC9tZWRpYVwvY2FyaWJiZWFuXC9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcuaHRtbCZxdW90OyB0YXJnZXQ9JnF1b3Q7X2JsYW5rJnF1b3Q7Jmd0OyZsdDtpbWcgc3JjPSZxdW90O2h0dHA6XC9cL2k1MjYucGhvdG9idWNrZXQuY29tXC9hbGJ1bXNcL2NjMzQ5XC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW5cL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyZxdW90OyBib3JkZXI9JnF1b3Q7MCZxdW90OyBhbHQ9JnF1b3Q7IHBob3RvIGNoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyZxdW90O1wvJmd0OyZsdDtcL2EmZ3Q7IiwiaW1nIjoiW1VSTD1odHRwOlwvXC9zNTI2LnBob3RvYnVja2V0LmNvbVwvdXNlclwvY2FyaWJiZWFuZnVzZVwvbWVkaWFcL2NhcmliYmVhblwvY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWxdW0lNR11odHRwOlwvXC9pNTI2LnBob3RvYnVja2V0LmNvbVwvYWxidW1zXC9jYzM0OVwvY2FyaWJiZWFuZnVzZVwvY2FyaWJiZWFuXC9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGdbXC9JTUddW1wvVVJMXSJ9LCJhbHRUZXh0IjoiIHBob3RvIGNoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyIsImlzTGlrZWQiOmZhbHNlLCJpc0ZvbGxvd2luZyI6ZmFsc2UsImxpa2VidXR0b24iOlt7Imxpa2VhYmxlVXJsIjp7fSwiY29udGV4dCI6ImRldGFpbCIsImxvZ2luUmVkaXJlY3QiOiI8YSBjbGFzcz1cImxpa2Vsb2dpblwiPkxvZ2luPFwvYT4gdG8gbGlrZSB0aGlzISJ9XSwib3JpZ2luYWxVcmwiOiJodHRwOlwvXC9pNTI2LnBob3RvYnVja2V0LmNvbVwvYWxidW1zXC9jYzM0OVwvY2FyaWJiZWFuZnVzZVwvY2FyaWJiZWFuXC9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGd+b3JpZ2luYWwiLCJzZWN1cmVPcmlnaW5hbCI6Imh0dHBzOlwvXC9vaTUyNi5waG90b2J1Y2tldC5jb21cL2FsYnVtc1wvY2MzNDlcL2NhcmliYmVhbmZ1c2VcL2NhcmliYmVhblwvY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnfm9yaWdpbmFsIiwic2VjdXJlVGh1bWJVcmwiOiJodHRwczpcL1wvcnM1MjYucGJzcmMuY29tXC9hbGJ1bXNcL2NjMzQ5XC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW5cL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZ35jMTAwIiwic2VjdXJlRnVsbHNpemUiOiJodHRwczpcL1wvb2k1MjYucGhvdG9idWNrZXQuY29tXC9hbGJ1bXNcL2NjMzQ5XC9jYXJpYmJlYW5mdXNlXC9jYXJpYmJlYW5cL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyIsImhhc2h0YWdNZWRpYSI6ZmFsc2UsInNob3dQcmV2aWV3IjpmYWxzZSwic2l6ZUNsYXNzIjoiZHluYW1pY1RodW1ibmFpbCIsInVzZXJDYW5GbGFnIjp0cnVlLCJpbyI6ZmFsc2UsImNkIjp0cnVlLCJjcCI6dHJ1ZSwiZG93bmxvYWRVcmwiOiJodHRwOlwvXC9pNTI2LnBob3RvYnVja2V0LmNvbVwvZG93bmxvYWQtYWxidW1zXC9jYzM0OVwvY2FyaWJiZWFuZnVzZVwvY2FyaWJiZWFuXC9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGd+b3JpZ2luYWwiLCJibCI6dHJ1ZX0pOwoKJChkb2N1bWVudCkub24oJ0RldGFpbDo6Zmlyc3RfYmF0Y2hfcmVjZWl2ZWQnLCBmdW5jdGlvbihlKXsKICAgIG5ldyBQYi5Db21wb25lbnQuRGV0YWlsLkRldGFpbCh7CiAgICAgICAgJ2N1cnJlbnRJbmRleCc6IGUuY3VycmVudE9mZnNldCwKICAgICAgICAnY29udGV4dCc6ICdhbGJ1bScsCiAgICAgICAgYWN0aW9uOiAiIiwKICAgICAgICBzaG93UHJldmlldzogZmFsc2UgICAgfSk7CiAgICBuZXcgUGIuQ29tcG9uZW50LkRldGFpbC5GZXRjaGVyKGUuZmV0Y2hlckRhdGEpOwogICAgLy9uZXcgUGIuQ29tcG9uZW50LkNvbW1vbi5Db21tZW50cyh7J2NvbW1lbnRUYXJnZXQnOiBQYi5EYXRhLlNoYXJlZC5nZXQoUGIuRGF0YS5TaGFyZWQuTUVESUEpfSk7Cn0pOwo8L3NjcmlwdD4KPGRpdiBjbGFzcz0nc3RyaXAnPgogICAgPGRpdiBjbGFzcz0nc3RyaXBDb250ZW50Jz4KCiAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlsQ29tcFdyYXBwZXIgIj4KICAgICAgICAgICAgPGRpdiBpZD0ibWVkaWFUZW1wbGF0ZSI+CiAgIAogICAgICAgICAgICA8ZGl2IGlkPSdtZWRpYVRlbXBsYXRlVGFyZ2V0Jz48L2Rpdj4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJob3Zlck9wdGlvbnMiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQgb3JkZXJOb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCBkZXRhaWxIb3ZlckJ0bnMgZmFkZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIKICAgICAgICAgaWQ9Im9wdGlvbnNCdG4iIGNsYXNzPSJidG4tc2Vjb25kYXJ5IGRldGFpbEhvdmVyQnRuIGJ0biBidG4tc21hbGwgYnRuLWljb24iIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdvcHRpb25zX2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiB0aXRsZT0iTW9yZSBvcHRpb25zIiAgaWQ9Im9wdGlvbnMiICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0naWNvbi1jb2dzJz48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IgogICAgICAgICBpZD0iem9vbUJ0biIgY2xhc3M9ImJ0bi1zZWNvbmRhcnkgZGV0YWlsSG92ZXJCdG4gem9vbU9yaWdpbmFsIGJ0biBidG4tc21hbGwgYnRuLWljb24iIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCd6b29tX2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiB0aXRsZT0iVmlldyBpbWFnZSIgIGlkPSJidG56b29tIiAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ljb24tem9vbSc+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIKICAgICAgICAgaWQ9ImVkaXRCdG4iIGNsYXNzPSJidG4tc2Vjb25kYXJ5IGRldGFpbEhvdmVyQnRuIGJ0biBidG4tc21hbGwgYnRuLWljb24iIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdlZGl0X2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiB0aXRsZT0iRWRpdCIgIGlkPSJlZGl0IiAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ljb24tZWRpdC1waG90byc+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIKICAgICAgICAgaWQ9InNsaWRlc2hvd0J0biIgY2xhc3M9ImJ0bi1zZWNvbmRhcnkgZGV0YWlsSG92ZXJCdG4gYnRuIGJ0bi1zbWFsbCBidG4taWNvbiIgb25jbGljaz0iUGIuVHJhY2sudHIoJ3NsaWRlc2hvd19kZXRhaWxwYWdlX2J0bl9jbGljaycpOyIgdGl0bGU9IlNsaWRlc2hvdyIgIGlkPSJzbGlkZXNob3ciICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0naWNvbi1zbGlkZSc+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgIDxzcGFuIGlkPSdsaWtlVGFyZ2V0Jz48L3NwYW4+ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImRldGFpbE9wdGlvbnNNZW51IiBjbGFzcz0iZHJvcGRvd24tbWVudSI+PC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgCjwvZGl2PgoKPGRpdiBpZD0ibWV0YXRpdGxlVGFyZ2V0Ij48L2Rpdj4KCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClBiLkluaXRFdmVudFF1ZXVlLmFkZFRvRG9tUmVhZHkoZnVuY3Rpb24oKSB7CiAgICBQYi5EYXRhLlNoYXJlZC5nZXQoUGIuRGF0YS5TaGFyZWQuTUVESUEpLnNlcXVlbmNlID0gImN1cnJlbnRNZWRpYSI7CiAgICAobmV3IFBiLkNvbXBvbmVudC5NZWRpYS5NZWRpYSh7CiAgICAgICAgJ2N1cnJlbnRUYXJnZXQnOiBQYi5EYXRhLlNoYXJlZC5nZXQoUGIuRGF0YS5TaGFyZWQuTUVESUEpLAogICAgICAgICdjYW5FZGl0JzogZmFsc2UsCiAgICAgICAgJ3Nob3dQYWdpbmF0aW9uJzogdHJ1ZSwKICAgICAgICAnY2FuQ29weSc6IHRydWUsCiAgICAgICAgJ2lzTW9iaWxlJzogZmFsc2UsCiAgICAgICAgJ3Nob3dQcmV2aWV3JzogZmFsc2UgICAgfSkpOwp9LCBQYi5Jbml0RXZlbnRRdWV1ZS5ISUdIX1BSSU9SSVRZKTsKPC9zY3JpcHQ+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYURlc2NyaXB0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9wTGlua3NDb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nYnJlYWRjcnVtYk5hdic+CiAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiID4KICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9saWJyYXJ5LyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2RldGFpbF9wYWdlX2JyZWFkY3J1bWJfY2xpY2snKSI+Y2FyaWJiZWFuZnVzZSdzICBCdWNrZXQ8L2E+PHNwYW4gY2xhc3M9ImRpdmlkZXIiPiYjNDc7PC9zcGFuPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9zNTI2LnBob3RvYnVja2V0LmNvbS91c2VyL2NhcmliYmVhbmZ1c2UvbGlicmFyeS9jYXJpYmJlYW4iIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdkZXRhaWxfcGFnZV9icmVhZGNydW1iX2NsaWNrJykiPmNhcmliYmVhbjwvYT48L2xpPiAgICA8L3VsPgo8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbEFjdGlvbnNXcmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJkZXRhaWxBY3Rpb25zIiBjbGFzcz0iZGV0YWlsQWN0aW9ucyI+PC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KUGIuSW5pdEV2ZW50UXVldWUuYWRkVG9Eb21SZWFkeShmdW5jdGlvbigpIHsKICAgIG5ldyBQYi5Db21wb25lbnQuRGV0YWlsLkRldGFpbEFjdGlvbnMoeyJidG5ncm91cHNvY2lhbCI6W3sidHlwZSI6OSwidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjpmYWxzZSwiaWRlbnRpZmllciI6ImZhY2Vib29rIiwiY2xhc3NTdHJpbmciOiJzb2NpYWwtZmFjZWJvb2sgYnRuIGJ0bi1zbWFsbCBidG4tc29jaWFsIiwib25DbGljayI6IiIsImV4dHJhQXR0cmlidXRlcyI6IiB0aXRsZT0nU2hhcmUgdG8gRmFjZWJvb2snICIsImljb25DbGFzcyI6ZmFsc2UsIm5vdFN1Ym1pdEJ0biI6dHJ1ZSwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOmZhbHNlLCJpZGVudGlmaWVyIjoiZmFjZWJvb2sifSwidG9vbHRpcCI6IlNoYXJlIHRvIEZhY2Vib29rIiwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6ZmFsc2V9LHsidHlwZSI6OSwidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjpmYWxzZSwiaWRlbnRpZmllciI6InR3aXR0ZXIiLCJjbGFzc1N0cmluZyI6InNvY2lhbC10d2l0dGVyIGJ0biBidG4tc21hbGwgYnRuLXNvY2lhbCIsIm9uQ2xpY2siOiIiLCJleHRyYUF0dHJpYnV0ZXMiOiIgdGl0bGU9J1NoYXJlIHRvIFR3aXR0ZXInICIsImljb25DbGFzcyI6ZmFsc2UsIm5vdFN1Ym1pdEJ0biI6dHJ1ZSwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOmZhbHNlLCJpZGVudGlmaWVyIjoidHdpdHRlciJ9LCJ0b29sdGlwIjoiU2hhcmUgdG8gVHdpdHRlciIsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2UsImluQnV0dG9uR3JvdXAiOmZhbHNlfSx7InR5cGUiOjksInVybCI6Imh0dHBzOlwvXC9wbHVzLmdvb2dsZS5jb21cL3NoYXJlP3VybD1odHRwOlwvXC9zNTI2LnBob3RvYnVja2V0LmNvbVwvdXNlclwvY2FyaWJiZWFuZnVzZVwvbWVkaWFcL2NhcmliYmVhblwvY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWw/c3JjPXBiIiwibGFiZWwiOmZhbHNlLCJpZGVudGlmaWVyIjoiZ3BsdXMiLCJjbGFzc1N0cmluZyI6InNvY2lhbC1ncGx1cyBidG4gYnRuLXNtYWxsIGJ0bi1zb2NpYWwiLCJvbkNsaWNrIjoiIiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdTaGFyZSB0byBHb29nbGUgUGx1cycgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6ZmFsc2UsImlkZW50aWZpZXIiOiJncGx1cyJ9LCJ0b29sdGlwIjoiU2hhcmUgdG8gR29vZ2xlIFBsdXMiLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlLCJpbkJ1dHRvbkdyb3VwIjpmYWxzZX0seyJ0eXBlIjo5LCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOmZhbHNlLCJpZGVudGlmaWVyIjoidHVtYmxyIiwiY2xhc3NTdHJpbmciOiJzb2NpYWwtdHVtYmxyIGJ0biBidG4tc21hbGwgYnRuLXNvY2lhbCIsIm9uQ2xpY2siOiIiLCJleHRyYUF0dHJpYnV0ZXMiOiIgdGl0bGU9J1NoYXJlIHRvIFR1bWJscicgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6ZmFsc2UsImlkZW50aWZpZXIiOiJ0dW1ibHIifSwidG9vbHRpcCI6IlNoYXJlIHRvIFR1bWJsciIsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2UsImluQnV0dG9uR3JvdXAiOmZhbHNlfSx7InR5cGUiOjksInVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6ZmFsc2UsImlkZW50aWZpZXIiOiJwaW50ZXJlc3QiLCJjbGFzc1N0cmluZyI6InNvY2lhbC1waW50ZXJlc3QgYnRuIGJ0bi1zbWFsbCBidG4tc29jaWFsIiwib25DbGljayI6IiIsImV4dHJhQXR0cmlidXRlcyI6IiB0aXRsZT0nU2hhcmUgdG8gUGludGVyZXN0JyAiLCJpY29uQ2xhc3MiOmZhbHNlLCJub3RTdWJtaXRCdG4iOnRydWUsImpzQXR0cmlidXRlcyI6eyJjaGVja3Blcm1zIjpmYWxzZSwiaWRlbnRpZmllciI6InBpbnRlcmVzdCJ9LCJ0b29sdGlwIjoiU2hhcmUgdG8gUGludGVyZXN0IiwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6ZmFsc2V9XSwiYnRuZ3JvdXBzaGFyZSI6W3sidHlwZSI6OSwidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjpmYWxzZSwiaWRlbnRpZmllciI6ImxpbmtzIiwiY2xhc3NTdHJpbmciOiJzb2NpYWwtbGluayBidG4gYnRuLXNtYWxsIGJ0bi1zb2NpYWwiLCJvbkNsaWNrIjoiIiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdHZXQgbGluayBjb2RlcycgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6ZmFsc2UsImlkZW50aWZpZXIiOiJsaW5rcyJ9LCJ0b29sdGlwIjoiR2V0IGxpbmsgY29kZXMiLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlLCJpbkJ1dHRvbkdyb3VwIjpmYWxzZX0seyJ0eXBlIjo5LCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOmZhbHNlLCJpZGVudGlmaWVyIjoiZW1haWwiLCJjbGFzc1N0cmluZyI6InNvY2lhbC1lbWFpbCBidG4gYnRuLXNtYWxsIGJ0bi1zb2NpYWwiLCJvbkNsaWNrIjoiIiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdTaGFyZSB2aWEgZW1haWwnICIsImljb25DbGFzcyI6ZmFsc2UsIm5vdFN1Ym1pdEJ0biI6dHJ1ZSwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOmZhbHNlLCJpZGVudGlmaWVyIjoiZW1haWwifSwidG9vbHRpcCI6IlNoYXJlIHZpYSBlbWFpbCIsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2UsImluQnV0dG9uR3JvdXAiOmZhbHNlfSx7InR5cGUiOjksInVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6ZmFsc2UsImlkZW50aWZpZXIiOiJkb3dubG9hZF9idXR0b24iLCJjbGFzc1N0cmluZyI6InNvY2lhbC1kb3dubG9hZCBidG4gYnRuLXNtYWxsIGJ0bi1zb2NpYWwiLCJvbkNsaWNrIjoiIiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdEb3dubG9hZCBtZWRpYScgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6dHJ1ZSwiaWRlbnRpZmllciI6ImRvd25sb2FkX2J1dHRvbiJ9LCJ0b29sdGlwIjoiRG93bmxvYWQgYWxidW0iLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlLCJpbkJ1dHRvbkdyb3VwIjpmYWxzZX0seyJ0eXBlIjo5LCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOmZhbHNlLCJpZGVudGlmaWVyIjoib3RoZXIiLCJjbGFzc1N0cmluZyI6InNvY2lhbC1vdGhlciBidG4gYnRuLXNtYWxsIGJ0bi1zb2NpYWwiLCJvbkNsaWNrIjoiIiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdTaGFyZSB0byBvdGhlciBzZXJ2aWNlcycgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6ZmFsc2UsImlkZW50aWZpZXIiOiJvdGhlciJ9LCJ0b29sdGlwIjoiU2hhcmUgdG8gb3RoZXIgc2VydmljZXMiLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlLCJpbkJ1dHRvbkdyb3VwIjpmYWxzZX1dLCJidG5ncm91cHRvb2xzIjpbXSwiYnRuZ3JvdXBuYXYiOlt7InR5cGUiOjEsInVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6IlBSRVYiLCJpZGVudGlmaWVyIjoiYnRucHJldiIsImNsYXNzU3RyaW5nIjoiYnRuIGJ0bi1zbWFsbCBidG4tcHJpbWFyeSIsIm9uQ2xpY2siOiJQYi5UcmFjay50cmYoJ3ByZXZpb3VzX2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdQcmV2aW91cycgIiwiaWNvbkNsYXNzIjoiaWNvbi1jaGV2cm9uLWxlZnQiLCJub3RTdWJtaXRCdG4iOnRydWUsImpzQXR0cmlidXRlcyI6eyJjaGVja3Blcm1zIjp0cnVlLCJpZGVudGlmaWVyIjoiYnRucHJldiJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6dHJ1ZX0seyJ0eXBlIjoxLCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOmZhbHNlLCJpZGVudGlmaWVyIjoiYnRuYWxidW0iLCJjbGFzc1N0cmluZyI6ImJ0biBidG4tc21hbGwgYnRuLXByaW1hcnkiLCJvbkNsaWNrIjoiUGIuVHJhY2sudHJmKCdhbGJ1bV9kZXRhaWxwYWdlX2J0bl9jbGljaycpOyIsImV4dHJhQXR0cmlidXRlcyI6IiB0aXRsZT0nVmlldyBhbGJ1bScgIiwiaWNvbkNsYXNzIjoiaWNvbi10aCIsIm5vdFN1Ym1pdEJ0biI6dHJ1ZSwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJidG5hbGJ1bSJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6dHJ1ZX0seyJ0eXBlIjoxLCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOiJORVhUIiwiaWRlbnRpZmllciI6ImJ0bm5leHQiLCJjbGFzc1N0cmluZyI6Imxhc3RDaGlsZCBidG4gYnRuLXNtYWxsIGJ0bi1wcmltYXJ5Iiwib25DbGljayI6IlBiLlRyYWNrLnRyZignbmV4dF9kZXRhaWxwYWdlX2J0bl9jbGljaycpOyIsImV4dHJhQXR0cmlidXRlcyI6IiB0aXRsZT0nTmV4dCcgIiwiaWNvbkNsYXNzIjoiaWNvbi1jaGV2cm9uLXJpZ2h0Iiwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6dHJ1ZSwiaWRlbnRpZmllciI6ImJ0bm5leHQifSwidG9vbHRpcCI6ZmFsc2UsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6dHJ1ZSwiaW5CdXR0b25Hcm91cCI6dHJ1ZX1dLCJldmVudFJlZ2lzdGVyIjpbeyJldmVudFNlbGVjdG9yIjoiLmRldGFpbEFjdGlvbnMgYSNlbWFpbCIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJEZXRhaWxBY3Rpb25zOjplbWFpbCJ9LHsiZXZlbnRTZWxlY3RvciI6Ii5kZXRhaWxBY3Rpb25zIGEjZmFjZWJvb2siLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiRGV0YWlsQWN0aW9uczo6ZmFjZWJvb2sifSx7ImV2ZW50U2VsZWN0b3IiOiIuZGV0YWlsQWN0aW9ucyBhI3R3aXR0ZXIiLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiRGV0YWlsQWN0aW9uczo6dHdpdHRlciJ9LHsiZXZlbnRTZWxlY3RvciI6Ii5kZXRhaWxBY3Rpb25zIGEjZ3BsdXMiLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiRGV0YWlsQWN0aW9uczo6Z3BsdXMifSx7ImV2ZW50U2VsZWN0b3IiOiIuZGV0YWlsQWN0aW9ucyBhI3BpbnRlcmVzdCIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJEZXRhaWxBY3Rpb25zOjpwaW50ZXJlc3QifSx7ImV2ZW50U2VsZWN0b3IiOiIuZGV0YWlsQWN0aW9ucyBhI3R1bWJsciIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJEZXRhaWxBY3Rpb25zOjp0dW1ibHIifSx7ImV2ZW50U2VsZWN0b3IiOiIuZGV0YWlsQWN0aW9ucyBhI2xpbmtzIiwiZXZlbnRUeXBlIjoiY2xpY2siLCJldmVudCI6IkRldGFpbEFjdGlvbnM6OmxpbmtzIn0seyJldmVudFNlbGVjdG9yIjoiLmRldGFpbEFjdGlvbnMgYSNkb3dubG9hZF9idXR0b24iLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiRGV0YWlsQWN0aW9uczo6ZG93bmxvYWRfYnV0dG9uIn0seyJldmVudFNlbGVjdG9yIjoiLmRldGFpbEFjdGlvbnMgYSNvdGhlciIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJEZXRhaWxBY3Rpb25zOjpvdGhlciJ9LHsiZXZlbnRTZWxlY3RvciI6Ii5kZXRhaWxBY3Rpb25zIGEjbmF2IiwiZXZlbnRUeXBlIjoiY2xpY2siLCJldmVudCI6IkRldGFpbEFjdGlvbnM6Om5hdiJ9XSwic2hvd1BhZ2luYXRpb24iOnRydWUsImlzTW9iaWxlIjpmYWxzZX0pOwp9LCBQYi5Jbml0RXZlbnRRdWV1ZS5ISUdIX1BSSU9SSVRZKTsKPC9zY3JpcHQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gICAgICAgICAgICAtLT48ZGl2IGNsYXNzPSJkZXRhaWxmaWxtc3RyaXB3cmFwIG9mZiB3aXRob3V0YXJyb3dzIj4KICAgIDxkaXYgY2xhc3M9ImxvYWRpbmdJbmRpY2F0b3IgaGlkZSAiIGlkPSJmaWxtc3RyaXBMb2FkaW5nU2hyb3VkIj4KICAgIDxkaXY+CiAgICAgICAgPGltZyBhbHQ9IkxvYWRpbmcuLi4iIHNyYz0iaHR0cDovL3BpYzIucGJzcmMuY29tL2NvbW1vbi9sb2FkaW5nLmdpZiIvPgogICAgPC9kaXY+CjwvZGl2PiAgICA8ZGl2IGlkPSJkZXRhaWxmaWxtc3RyaXAiIGNsYXNzPSJzY3JvbGxhYmxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtcyI+CiAgICAgICAgICAgIDxkaXYgaWQ9Iml0ZW1Db250YWluZXIiIGNsYXNzPSJpdGVtIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPC9kaXY+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiQoZG9jdW1lbnQpLm9uKCdEZXRhaWw6OmZpcnN0X2JhdGNoX3JlY2VpdmVkJywgZnVuY3Rpb24oZSl7CiAgICBuZXcgUGIuQ29tcG9uZW50LkZpbG1zdHJpcC5GaWxtc3RyaXAoewogICAgICAgIHNjcm9sbGFibGVJZDogJ2RldGFpbGZpbG1zdHJpcCcsCiAgICAgICAgY3VycmVudE9mZnNldDogZS5maWxtU3RyaXBEYXRhLmN1cnJlbnRPZmZzZXQsCiAgICAgICAgdG90YWw6IGUuZmlsbVN0cmlwRGF0YS50b3RhbCwKICAgICAgICBzY3JvbGxhYmxlV3JhcHBlcjogJy5kZXRhaWxDb21wV3JhcHBlcicKICAgIH0pOwp9KTsKPC9zY3JpcHQ+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByaW50UHJvbW9XcmFwcGVyIj4KPGRpdiBjbGFzcz0icHJpbnRQcm9tb0NvbnRhaW5lciAiPgogICAgPGRpdiBjbGFzcz0icHJpbnRDb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InByb21vQ29udGFpbmVyIiBpZD0iY2FsZW5kYXJDb250YWluZXIiPgogICAgICAgICAgICA8YSBjbGFzcz0iY2FsZW5kYXJQcm9tb0xpbmsiIG9uY2xpY2s9IlBiLkNvbXBvbmVudC5UcmFja2luZy5NaXhwYW5lbC50cmFja1ByaW50UHJvbW9DbGljayh7cHJvbW86ICdjYWxlbmRhcnMgdmlzdWFsJywgY29tcG9uZW50OiAnbWVkaWEgZGV0YWlsJ30pO1BiLlRyYWNrLnRyZignbWVkaWFfZGV0YWlsX3Byb21vX2NsaWNrJyk7UGIuUGFnZVRyYWNrZXIuYWRkR29vZ2xlQW5hbHl0aWNzUGFydG5lckV2ZW50KCdVQS0yNDU0NTUtMzYnLCd3aWRnZXQucHJpbnQuaW8nLCAncGJ0bmcnLCAnbWVkaWFfZGV0YWlsX3Byb21vX2NsaWNrJywgJ2NhbGVuZGFyJywgbnVsbCk7Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb21vSW1hZ2UiIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHA6Ly9pNTI2LnBob3RvYnVja2V0LmNvbS9hbGJ1bXMvY2MzNDkvY2FyaWJiZWFuZnVzZS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnJyk7Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb21vSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InByb21vVGl0bGUiPkNhbGVuZGFyczwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2F0ZWdvcnlQcmljZSI+JDI5Ljk5KzwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icHJvbW9QcmljZSI+NTAlIG9mZiB3aXRoIENBTDIwMTY8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaW50Q29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9tb0NvbnRhaW5lciIgaWQ9ImNhbnZhc0NvbnRhaW5lciI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJjYW52YXNQcm9tb0xpbmsiIG9uY2xpY2s9IlBiLkNvbXBvbmVudC5UcmFja2luZy5NaXhwYW5lbC50cmFja1ByaW50UHJvbW9DbGljayh7cHJvbW86ICdjYW52YXMgcHJpbnRzIHZpc3VhbCcsIGNvbXBvbmVudDogJ21lZGlhIGRldGFpbCd9KTtQYi5UcmFjay50cmYoJ21lZGlhX2RldGFpbF9wcm9tb19jbGljaycpO1BiLlBhZ2VUcmFja2VyLmFkZEdvb2dsZUFuYWx5dGljc1BhcnRuZXJFdmVudCgnVUEtMjQ1NDU1LTM2Jywnd2lkZ2V0LnByaW50LmlvJywgJ3BidG5nJywgJ21lZGlhX2RldGFpbF9wcm9tb19jbGljaycsICdjYW52YXNfcHJpbnQnLCBudWxsKTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9JbWFnZSIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybCgnaHR0cDovL2k1MjYucGhvdG9idWNrZXQuY29tL2FsYnVtcy9jYzM0OS9jYXJpYmJlYW5mdXNlL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcnKTsiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icHJvbW9UaXRsZSI+Q2FudmFzIFdyYXBzPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2F0ZWdvcnlQcmljZSI+JDE4Ljk5KzwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icHJvbW9QcmljZSI+ODAlIG9mZiB3aXRoIEhPTElEQVk4MDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJwcmludENvbnRhaW5lciBoaWRlIiBpZD0iZXBzb25QcmludENvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9Db250YWluZXIiIGlkPSJlcHNvblByb21vQ29udGFpbmVyIj4KICAgICAgICAgICAgPGEgY2xhc3M9ImVwc29uUHJvbW9MaW5rIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5lcHNvbi5jb20vY2dpLWJpbi9TdG9yZS9qc3AvTGFuZGluZy9wcm8tcGhvdG9fcHJpbnQteW91ci1sZWdhY3lfYWQuZG8/cmVmPWRpc3A6ZnkxNl9waG90bzpwaG9idWNrX25hdGl2ZTpyZWJhdGVfdGlsZToiIG9uY2xpY2s9IlBiLkNvbXBvbmVudC5UcmFja2luZy5NaXhwYW5lbC50cmFja1ByaW50UHJvbW9DbGljayh7cHJvbW86ICdlcHNvbiB2aXN1YWwnLCBjb21wb25lbnQ6ICdtZWRpYSBkZXRhaWwnfSk7UGIuVHJhY2sudHJmKCdtZWRpYV9kZXRhaWxfcHJvbW9fY2xpY2snKTtQYi5QYWdlVHJhY2tlci5hZGRHb29nbGVBbmFseXRpY3NQYXJ0bmVyRXZlbnQoJ1VBLTI0NTQ1NS0zNicsJ3dpZGdldC5wcmludC5pbycsICdwYnRuZycsICdtZWRpYV9kZXRhaWxfcHJvbW9fY2xpY2snLCAnZXBzb24nLCBudWxsKTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9JbWFnZSIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybCgnaHR0cDovL2k1MjYucGhvdG9idWNrZXQuY29tL2FsYnVtcy9jYzM0OS9jYXJpYmJlYW5mdXNlL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcnKTsiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icHJvbW9UaXRsZSI+UHJpbnQgQXQgSG9tZTwvcD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iY2F0ZWdvcnlQcmljZSI+UGhvdG9ncmFwaGljIHByaW50cyB0aGF0IGluc3BpcmUgd2l0aCB0aGUgPHNwYW4gc3R5bGU9J2NvbG9yOiAjMDM0RUEyJz5ORVc8L3NwYW4+IEVwc29uIFN1cmVDb2xvciBQODAwIHByaW50ZXI8L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8YSBjbGFzcz0ncGl4ZWwnIGhyZWY9IiMiPjxpbWcgYm9yZGVyPSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBzcmM9Imh0dHBzOi8vb3BpYzIucGJzcmMuY29tL2NvbW1vbi9waXhlbC5wbmciIC8+PC9hPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InByaW50Q29udGFpbmVyIiBpZD0ibGFzdENvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9Db250YWluZXIiIGlkPSJob2xpZGF5Q2FyZENvbnRhaW5lciI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJob2xpZGF5Q2FyZFByb21vTGluayIgb25jbGljaz0iUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrUHJpbnRQcm9tb0NsaWNrKHtwcm9tbzogJ2hvbGlkYXkgcGhvdG8gY2FyZHMgdmlzdWFsJywgY29tcG9uZW50OiAnbWVkaWEgZGV0YWlsJ30pO1BiLlRyYWNrLnRyZignbWVkaWFfZGV0YWlsX3Byb21vX2NsaWNrJyk7UGIuUGFnZVRyYWNrZXIuYWRkR29vZ2xlQW5hbHl0aWNzUGFydG5lckV2ZW50KCdVQS0yNDU0NTUtMzYnLCd3aWRnZXQucHJpbnQuaW8nLCAncGJ0bmcnLCAnbWVkaWFfZGV0YWlsX3Byb21vX2NsaWNrJywgJ2hvbGlkYXlfcGhvdG9fY2FyZHMnLCBudWxsKTsiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9JbWFnZSIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybCgnaHR0cDovL2k1MjYucGhvdG9idWNrZXQuY29tL2FsYnVtcy9jYzM0OS9jYXJpYmJlYW5mdXNlL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcnKTsiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvbW9JbmZvIj4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icHJvbW9UaXRsZSI+SG9saWRheSBQaG90byBDYXJkczwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNhdGVnb3J5UHJpY2UiPiQxLjQ5IGVhY2g8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0icHJvbW9QcmljZSI+NTAlIG9mZiB3aXRoIEhPTElEQVk1MDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InZpZXdBbGxDb250YWluZXIiPgogICAgICAgIDxhIGhyZWY9Ii9wcmludCIgY2xhc3M9InZpZXdBbGwiIG9uY2xpY2s9IlBiLkNvbXBvbmVudC5UcmFja2luZy5NaXhwYW5lbC50cmFja1ByaW50UHJvbW9DbGljayh7cHJvbW86ICd2aWV3IGFsbCBsaW5rJywgY29tcG9uZW50OiAnbWVkaWEgZGV0YWlsJ30pO1BiLlRyYWNrLnRyZignbWVkaWFfZGV0YWlsX3Byb21vX2NsaWNrJyk7UGIuUGFnZVRyYWNrZXIuYWRkR29vZ2xlQW5hbHl0aWNzUGFydG5lckV2ZW50KCdVQS0yNDU0NTUtMzYnLCd3aWRnZXQucHJpbnQuaW8nLCAncGJ0bmcnLCAnbWVkaWFfZGV0YWlsX3Byb21vX2NsaWNrJywgJ3ZpZXdfYWxsX3Byb2R1Y3RzJywgbnVsbCk7Ij5WSUVXIEFMTCBQUk9EVUNUUzwvYT4KICAgIDwvZGl2Pgo8L2Rpdj4KPC9kaXY+ICAgICAgICAgICAgPGRpdiBpZD0iY29tbWVudEFuY2hvciIgbmFtZT0iY29tbWVudEFuY2hvciIgY2xhc3M9InN0cmlwIG1ldGF3cmFwcGVyIGJldmVsZWRFZGdlVG9wIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZCBiYW5uZXJBZCAiICBkYXRhLWRlYnVnPSdbInZpZXdpZD01MTg3OTYxOTA2Iiwic2l6ZT1CQU5ORVIiLCJyYW5kb209OTQyMDExIiwiYXJlYT1saWJfbWVkaWFkZXRhaWwiLCJsb2dpbj1OIiwidXR5cGU9ZnJlZSIsInNwPWYiLCJvd25lcm5hbWU9Y2FyaWJiZWFuZnVzZSIsInNlYXJjaF9rdz1lbXB0eSIsInB0eXBlPWZ2X2ltYWdlIiwicG9zPWluZiIsImxpa2VzPW4iLCJzcG9uPWVtcHR5IiwiYWRDb3VudD1lbXB0eSIsImJsPTEiLCJyZWZfZG9tYWluPWVtcHR5IiwiZmVhdHVyZT1tZHByZXZpZXdjdXJyZW50Iiwic2l0ZT1wYjIiLCJ0cmFjaz1lbXB0eSJdJz4KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZnJhbWUKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzI4cHg7IGhlaWdodDogOTBweCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJiYW5uZXJBZElmcmFtZSIgaWQ9ImJhbm5lckxhenkiCiAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJvcmRlcj0iMCIgc2Nyb2xsaW5nPSJubyIgZGF0YS10eXBlPSJCQU5ORVIiIGRhdGEtd2lkdGg9IjcyOCIgIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPgogICAgICAgICAgICAgICAgICA8L2lmcmFtZT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRVcmwgPSAnaHR0cDovL3Bob3RvYnVja2V0LmFkbnhzLmNvbS9wdD9pbnZfY29kZT1saWJfbWVkaWFkZXRhaWwmc2l6ZT03Mjh4OTAmbWVtYmVyPTg2JnJlZGlyPSUyRiUyRmIucGhvdG9idWNrZXQuY29tJTJGcGJrdCUyRmhzZXJ2ZXIlMkZ2aWV3aWQlM0Q1MTg3OTYxOTA2JTJGc2l6ZSUzREJBTk5FUiUyRnJhbmRvbSUzRDk0MjAxMSUyRmFyZWElM0RsaWJfbWVkaWFkZXRhaWwlMkZsb2dpbiUzRE4lMkZ1dHlwZSUzRGZyZWUlMkZzcCUzRGYlMkZvd25lcm5hbWUlM0RjYXJpYmJlYW5mdXNlJTJGc2VhcmNoX2t3JTNEZW1wdHklMkZwdHlwZSUzRGZ2X2ltYWdlJTJGcG9zJTNEaW5mJTJGbGlrZXMlM0RuJTJGc3BvbiUzRGVtcHR5JTJGYWRDb3VudCUzRGVtcHR5JTJGYmwlM0QxJTJGcmVmX2RvbWFpbiUzRGVtcHR5JTJGZmVhdHVyZSUzRG1kcHJldmlld2N1cnJlbnQlMkZzaXRlJTNEcGIyJTJGdHJhY2slM0RlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwX3ZhbHVhdGlvbiA9IHJwX3ZhbHVhdGlvbiB8fCB7fSwgLy8gZ2xvYmFsIGZyb20gcnViaWNvbiBkb3JvdGh5IHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFNpemUgPSA3MjgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkRnVsbFNpemUgPSAiNzI4eDkwIjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhbXpuYWRzICE9PSAndW5kZWZpbmVkJyAmJiAoYWRVcmwubWF0Y2goL3BvcyUzRGluZisvZykgPT09IG51bGwgJiYgYWRVcmwubWF0Y2goL3Bvcz1pbmYvZykgPT09IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGFtem5hZHMuZ2V0S2V5cyhhZEZ1bGxTaXplKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoJy8nICsga2V5ICsgJz0xJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKEdsYW1Jc0F2YWlsYWJsZSkgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbGFtLCBnYWRhZGlkLCBnYWRzeiwgZ2FkcmVxaWQsIHBvcywgdXNlclBhcmFtcywgZ2Fkb2JqOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJQYXJhbXMgPSB7ImxvZ2luIjoiTiIsInV0eXBlIjoiZnJlZSIsInNwIjoiZiIsIm93bmVybmFtZSI6ImNhcmliYmVhbmZ1c2UiLCJzZWFyY2hfa3ciOiJlbXB0eSIsInB0eXBlIjoiZnZfaW1hZ2UiLCJwb3MiOiJpbmYiLCJsaWtlcyI6Im4iLCJzcG9uIjoiZW1wdHkiLCJhZENvdW50IjoiZW1wdHkiLCJibCI6IjEiLCJyZWZfZG9tYWluIjoiZW1wdHkiLCJmZWF0dXJlIjoibWRwcmV2aWV3Y3VycmVudCJ9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gdXNlclBhcmFtcy5wb3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09PSAnbm9faW5mJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZG9iaiA9IEdsYW1HZXRTbG90T2JqZWN0KCdCQU5ORVInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoR2xhbUlzQXZhaWxhYmxlKCdCQU5ORVInKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtID0gJzEnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZG9iaiA9IEdsYW1HZXRTbG90T2JqZWN0KCdCQU5ORVIyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdsYW1Jc0F2YWlsYWJsZSgnQkFOTkVSMicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW0gPSAnMSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2Fkb2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkYWRpZCA9IGdhZG9iai5hZGlkID8gZ2Fkb2JqLmFkaWQgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRzeiA9IGdhZG9iai5zeiA/IGdhZG9iai5zeiA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZHJlcWlkID0gZ2Fkb2JqLnJlcWlkID8gZ2Fkb2JqLnJlcWlkIDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZGFkaWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRzeiA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZHJlcWlkID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdsYW1JZCA9IGdsYW07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xhbUlkICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT09ICdub19pbmYnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnQkFOTkVSJyA9PT0gJ1JFQ1RBTkdMRScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW1JZCA9ICdyMSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ0JBTk5FUicgPT09ICdCQU5ORVInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtSWQgPSAnYjEnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdCQU5ORVInID09PSAnUkVDVEFOR0xFJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbUlkID0gJ3IyJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnQkFOTkVSJyA9PT0gJ0JBTk5FUicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW1JZCA9ICdiMic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCcvZ2xhbTcyOD0nICsgZ2xhbUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9IGVzY2FwZSgnL2dhZGFkaWQ9JyArIGdhZGFkaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCcvZ2Fkc3o9JyArIGdhZHN6KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9IGVzY2FwZSgnL2dhZHJlcWlkPScgKyBnYWRyZXFpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9ICcvYW5wcmljZT17UFJJQ0VCVUNLRVR9L2dlbmVyaWM9e0JJRFVSTEVOQ30nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChycF92YWx1YXRpb24uZXN0aW1hdGUpICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgKHJwX3ZhbHVhdGlvbi5lc3RpbWF0ZS50aWVyKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZXIgPSBycF92YWx1YXRpb24uZXN0aW1hdGUudGllcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9IGVzY2FwZSgiL3JwX3RpZXI9IiArIHRpZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZXR0aW5nIGFkIGJhbm5lckxhenkgc3JjIHRvICcgKyBhZFVybCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgKyAobm93LmdldFRpbWUoKSAtIHdpbmRvd1snanNTdGFydFRpbWUnXS5nZXRUaW1lKCkpICsgJ21zKScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkdW5pdCA9ICQoJyNiYW5uZXJMYXp5Jyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjYmFubmVyTGF6eScpLmF0dHIoJ3NyYycsIGFkVXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnZhciBhZG1hcnZlbFVSTCA9IGFkVXJsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYWQgcHJldmlvdXMgdXJsOiAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYWRtYXJ2ZWxVUkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGJqcyA9IHBianMgfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBianMucXVlID0gcGJqcy5xdWUgfHwgW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBianMucXVlLnB1c2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRVbml0cyA9IFt7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6ICcvMTk5NjgzMzYvaGVhZGVyLWJpZC10YWctMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVzOiBbWzMwMCwgMjUwXSwgWzMwMCwgNjAwXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZHM6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGRlcjogJ2JyZWFsdGltZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRJZDogJzY0NTg2NzUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBianMuYWRkQWRVbml0cyhhZFVuaXRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5yZXF1ZXN0Qmlkcyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZHNCYWNrSGFuZGxlcjogZnVuY3Rpb24gKGJpZFJlc3BvbnNlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYnJyZWFsdGltZSByZXNwb25zZTogJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGJpZFJlc3BvbnNlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmVhbHRpbWVwYXJhbXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goYmlkUmVzcG9uc2VzWycvMTk5NjgzMzYvaGVhZGVyLWJpZC10YWctMCddWydiaWRzJ11bMF1bJ2Fkc2VydmVyVGFyZ2V0aW5nJ10sIGZ1bmN0aW9uIChrZXksIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PSAnaGJfcGInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFsdGltZXBhcmFtcy5wdXNoKGtleSArICI9IiArIGl0ZW0gKiAwLjA4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWx0aW1lcGFyYW1zLnB1c2goa2V5ICsgIj0iICsgaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWFydmVsVVJMICs9ICcmJyArIGJyZWFsdGltZXBhcmFtcy5qb2luKCcmJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGJyZWFsdGltZXBhcmFtcy5qb2luKCcmJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlaW5nIG9sZCBnZW5lcmF0ZWQgdXJsIHdpdGggb3VyIG5ldyBnZW5lcmF0ZWQgdXJsIGZvciBwcmViaWQganMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgPSBhZG1hcnZlbFVSTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycpLmF0dHIoJ3NyYycsIGFkVXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsYXp5IGVsc2UgYWRkaW5nIGFkIHVybCBmb3IgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCQoJyMnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycpLmF0dHIoJ3NyYycsIGFkVXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KCkpOwogICAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RyaXBDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b213cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0IiBpZD0iYWRkQ29tbWVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb21tZW50d3JhcHBlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyTCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyQiI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhckIiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCBzaWRlYmFyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZCBtcmVjICIgIGRhdGEtZGVidWc9J1sidmlld2lkPTUxODc5NjE5MDYiLCJzaXplPVJFQ1RBTkdMRSIsInJhbmRvbT02MzA1MjYiLCJhcmVhPWxpYl9tZWRpYWRldGFpbCIsImxvZ2luPU4iLCJ1dHlwZT1mcmVlIiwic3A9ZiIsIm93bmVybmFtZT1jYXJpYmJlYW5mdXNlIiwic2VhcmNoX2t3PWVtcHR5IiwicHR5cGU9ZnZfaW1hZ2UiLCJwb3M9bm9faW5mIiwibGlrZXM9biIsInNwb249ZW1wdHkiLCJhZENvdW50PWVtcHR5IiwiYmw9MSIsInJlZl9kb21haW49ZW1wdHkiLCJmZWF0dXJlPW1kcHJldmlld2N1cnJlbnQiLCJzaXRlPXBiMiIsInRyYWNrPWVtcHR5Il0nPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlmcmFtZQogICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAzMDBweDsgaGVpZ2h0OiAyNTBweCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtcmVjSWZyYW1lIiBpZD0ibXJlYyIKICAgICAgICAgICAgICAgICAgICAgIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9Im5vIiBkYXRhLXR5cGU9IlJFQ1RBTkdMRSIgZGF0YS13aWR0aD0iMzAwIiAgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+CiAgICAgICAgICAgICAgICAgIDwvaWZyYW1lPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJhZGZyZWUiIGhyZWY9Imh0dHA6Ly9waG90b2J1Y2tldC5jb20vcHJpY2luZy9hZGZyZWUiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdwcmljaW5nX21yZWNfYWRmcmVlX2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrKCdzdWJzY3JpcHRpb24gdXBncmFkZSBjbGljaycsIHsnYnV0dG9uIGxvY2F0aW9uJzogJ2dvIGFkIGZyZWUnfSk7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIEdvIEFkIEZyZWUgV2l0aCBQbHVzICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRVcmwgPSAnaHR0cDovL3Bob3RvYnVja2V0LmFkbnhzLmNvbS9wdD9pbnZfY29kZT1saWJfbWVkaWFkZXRhaWwmc2l6ZT0zMDB4MjUwJm1lbWJlcj04NiZyZWRpcj0lMkYlMkZiLnBob3RvYnVja2V0LmNvbSUyRnBia3QlMkZoc2VydmVyJTJGdmlld2lkJTNENTE4Nzk2MTkwNiUyRnNpemUlM0RSRUNUQU5HTEUlMkZyYW5kb20lM0Q2MzA1MjYlMkZhcmVhJTNEbGliX21lZGlhZGV0YWlsJTJGbG9naW4lM0ROJTJGdXR5cGUlM0RmcmVlJTJGc3AlM0RmJTJGb3duZXJuYW1lJTNEY2FyaWJiZWFuZnVzZSUyRnNlYXJjaF9rdyUzRGVtcHR5JTJGcHR5cGUlM0Rmdl9pbWFnZSUyRnBvcyUzRG5vX2luZiUyRmxpa2VzJTNEbiUyRnNwb24lM0RlbXB0eSUyRmFkQ291bnQlM0RlbXB0eSUyRmJsJTNEMSUyRnJlZl9kb21haW4lM0RlbXB0eSUyRmZlYXR1cmUlM0RtZHByZXZpZXdjdXJyZW50JTJGc2l0ZSUzRHBiMiUyRnRyYWNrJTNEZW1wdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycF92YWx1YXRpb24gPSBycF92YWx1YXRpb24gfHwge30sIC8vIGdsb2JhbCBmcm9tIHJ1Ymljb24gZG9yb3RoeSBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRTaXplID0gMzAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZEZ1bGxTaXplID0gIjMwMHgyNTAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFtem5hZHMgIT09ICd1bmRlZmluZWQnICYmIChhZFVybC5tYXRjaCgvcG9zJTNEaW5mKy9nKSA9PT0gbnVsbCAmJiBhZFVybC5tYXRjaCgvcG9zPWluZi9nKSA9PT0gbnVsbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gYW16bmFkcy5nZXRLZXlzKGFkRnVsbFNpemUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9IGVzY2FwZSgnLycgKyBrZXkgKyAnPTEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoR2xhbUlzQXZhaWxhYmxlKSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdsYW0sIGdhZGFkaWQsIGdhZHN6LCBnYWRyZXFpZCwgcG9zLCB1c2VyUGFyYW1zLCBnYWRvYmo7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclBhcmFtcyA9IHsibG9naW4iOiJOIiwidXR5cGUiOiJmcmVlIiwic3AiOiJmIiwib3duZXJuYW1lIjoiY2FyaWJiZWFuZnVzZSIsInNlYXJjaF9rdyI6ImVtcHR5IiwicHR5cGUiOiJmdl9pbWFnZSIsInBvcyI6Im5vX2luZiIsImxpa2VzIjoibiIsInNwb24iOiJlbXB0eSIsImFkQ291bnQiOiJlbXB0eSIsImJsIjoiMSIsInJlZl9kb21haW4iOiJlbXB0eSIsImZlYXR1cmUiOiJtZHByZXZpZXdjdXJyZW50In07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB1c2VyUGFyYW1zLnBvczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT09ICdub19pbmYnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Fkb2JqID0gR2xhbUdldFNsb3RPYmplY3QoJ1JFQ1RBTkdMRScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHbGFtSXNBdmFpbGFibGUoJ1JFQ1RBTkdMRScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW0gPSAnMSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Fkb2JqID0gR2xhbUdldFNsb3RPYmplY3QoJ1JFQ1RBTkdMRTInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoR2xhbUlzQXZhaWxhYmxlKCdSRUNUQU5HTEUyJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbSA9ICcxJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnYWRvYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRhZGlkID0gZ2Fkb2JqLmFkaWQgPyBnYWRvYmouYWRpZCA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZHN6ID0gZ2Fkb2JqLnN6ID8gZ2Fkb2JqLnN6IDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkcmVxaWQgPSBnYWRvYmoucmVxaWQgPyBnYWRvYmoucmVxaWQgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkYWRpZCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZHN6ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FkcmVxaWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xhbUlkID0gZ2xhbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbGFtSWQgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA9PT0gJ25vX2luZicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdSRUNUQU5HTEUnID09PSAnUkVDVEFOR0xFJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbUlkID0gJ3IxJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnUkVDVEFOR0xFJyA9PT0gJ0JBTk5FUicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW1JZCA9ICdiMSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ1JFQ1RBTkdMRScgPT09ICdSRUNUQU5HTEUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtSWQgPSAncjInOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdSRUNUQU5HTEUnID09PSAnQkFOTkVSJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbUlkID0gJ2IyJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoJy9nbGFtMzAwPScgKyBnbGFtSWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCcvZ2FkYWRpZD0nICsgZ2FkYWRpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoJy9nYWRzej0nICsgZ2Fkc3opOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCcvZ2FkcmVxaWQ9JyArIGdhZHJlcWlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gJy9hbnByaWNlPXtQUklDRUJVQ0tFVH0vZ2VuZXJpYz17QklEVVJMRU5DfSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHJwX3ZhbHVhdGlvbi5lc3RpbWF0ZSkgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiAocnBfdmFsdWF0aW9uLmVzdGltYXRlLnRpZXIpICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGllciA9IHJwX3ZhbHVhdGlvbi5lc3RpbWF0ZS50aWVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCIvcnBfdGllcj0iICsgdGllcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NldHRpbmcgYWQgbXJlYyBzcmMgdG8gJyArIGFkVXJsICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyArIChub3cuZ2V0VGltZSgpIC0gd2luZG93Wydqc1N0YXJ0VGltZSddLmdldFRpbWUoKSkgKyAnbXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWR1bml0ID0gJCgnI21yZWMnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNtcmVjJykuYXR0cignc3JjJywgYWRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdmFyIGFkbWFydmVsVVJMID0gYWRVcmw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdhZCBwcmV2aW91cyB1cmw6ICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhZG1hcnZlbFVSTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYmpzID0gcGJqcyB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5xdWUgPSBwYmpzLnF1ZSB8fCBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5xdWUucHVzaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZFVuaXRzID0gW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogJy8xOTk2ODMzNi9oZWFkZXItYmlkLXRhZy0wJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFtbMzAwLCAyNTBdLCBbMzAwLCA2MDBdXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkczogW3sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkZGVyOiAnYnJlYWx0aW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudElkOiAnNjQ1ODY3NScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJqcy5hZGRBZFVuaXRzKGFkVW5pdHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmpzLnJlcXVlc3RCaWRzKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkc0JhY2tIYW5kbGVyOiBmdW5jdGlvbiAoYmlkUmVzcG9uc2VzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdicnJlYWx0aW1lIHJlc3BvbnNlOiAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYmlkUmVzcG9uc2VzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJyZWFsdGltZXBhcmFtcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChiaWRSZXNwb25zZXNbJy8xOTk2ODMzNi9oZWFkZXItYmlkLXRhZy0wJ11bJ2JpZHMnXVswXVsnYWRzZXJ2ZXJUYXJnZXRpbmcnXSwgZnVuY3Rpb24gKGtleSwgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICdoYl9wYicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWx0aW1lcGFyYW1zLnB1c2goa2V5ICsgIj0iICsgaXRlbSAqIDAuMDgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhbHRpbWVwYXJhbXMucHVzaChrZXkgKyAiPSIgKyBpdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtYXJ2ZWxVUkwgKz0gJyYnICsgYnJlYWx0aW1lcGFyYW1zLmpvaW4oJyYnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYnJlYWx0aW1lcGFyYW1zLmpvaW4oJyYnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2Vpbmcgb2xkIGdlbmVyYXRlZCB1cmwgd2l0aCBvdXIgbmV3IGdlbmVyYXRlZCB1cmwgZm9yIHByZWJpZCBqcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCA9IGFkbWFydmVsVVJMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjJykuYXR0cignc3JjJywgYWRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xhenkgZWxzZSBhZGRpbmcgYWQgdXJsIGZvciAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJCgnIycpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjJykuYXR0cignc3JjJywgYWRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKSk7CiAgICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2VyIj48L2Rpdj48ZGl2IGNsYXNzPSJpbnNldEJveCBsaW5rY29kZXMiPgogICAgPGRpdiBjbGFzcz0iaW5zZXRCb3hDb250YWluZXIiPgogICAgICAgICAgICAgICAgPGgyPjxzcGFuPlNIQVJFIFRISVMgUEhPVE88L3NwYW4+IDxpIGNsYXNzPSJpY29uLXF1ZXN0aW9uLXNpZ24gaWNvbi1sYXJnZSIgaWQ9ImxpbmtzSGVscCIgZGF0YS1vcmlnaW5hbC10aXRsZT0iTGlua3MgYWxsb3cgeW91IHRvIGVhc2lseSBzaGFyZSB5b3VyIHBob3RvcyAmIHZpZGVvcyBhbnl3aGVyZSBvbiB0aGUgd2ViLiBTaW1wbHkgY2xpY2sgYSBsaW5rIHRvIGNvcHksIGFuZCBwYXN0ZSB0byBhbiBlbWFpbCwgYmxvZywgd2Vic2l0ZSwgZm9ydW0gYW5kIG1vcmUhIEhpbnQ6IFVzZSB0aGUgSFRNTCBjb2RlIHRvIGVtYmVkIHBob3RvcyBvbiB3ZWJzaXRlcyBsaWtlIEJsb2dnZXIsIGVCYXkgYW5kIENyYWlnc2xpc3QuIFVzZSB0aGUgSU1HIGNvZGUgZm9yIGJ1bGxldGluIGJvYXJkcyBhbmQgZm9ydW1zLiI+PC9pPjwvaDI+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudFRleHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyUiI+PC9kaXY+ICAgICAgDQogICAgPGRpdiBpZD0ic2hhcmVXYXJuaW5nIj48L2Rpdj4gICAgPGRpdiBjbGFzcz0ibGluay1jb250YWluZXIgIj4NCiAgICAgICAgPGRpdiBpZD0ibGlua3NNb2R1bGVfemVyb2NsaXBib2FyZF8wIiBjbGFzcz0iemVyb2NsaXBib2FyZCIgZGF0YS1hcHBib3k9IndlYl9tZWRpYV9zaGFyZSIgIGRhdGEtbWl4cGFuZWw9ImltYWdlIiBkYXRhLXRyYWNraW5nPSJkZXRhaWxfZW1haWxfYW5kX2ltX2xpbmtjb2RlX2NsaWNrIj4KICAgIDxkaXYgaWQ9ImxpbmtzTW9kdWxlX2NvcHljb2RlXzAiIGNsYXNzPSJjb3B5Y29kZSBjb250cm9sLWdyb3VwIiBkYXRhLWNsaXBib2FyZC10ZXh0PSJodHRwOi8vczUyNi5waG90b2J1Y2tldC5jb20vdXNlci9jYXJpYmJlYW5mdXNlL21lZGlhL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcuaHRtbCIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSJsaW5rc01vZHVsZV9jY2lucHV0XzAiPgogICAgICAgIDxsYWJlbCBjbGFzcz0ibGluayI+RW1haWwgJiBJTTwvbGFiZWw+ICAgICAgICA8aW5wdXQgaWQ9ImxpbmtzTW9kdWxlX2NjaW5wdXRfMCIgY2xhc3M9Imxpbmtjb3B5IiByZWFkb25seT0icmVhZG9ubHkiIHR5cGU9InRleHQiIHZhbHVlPSJodHRwOi8vczUyNi5waG90b2J1Y2tldC5jb20vdXNlci9jYXJpYmJlYW5mdXNlL21lZGlhL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcuaHRtbCIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhckIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9ImxpbmtzTW9kdWxlX3plcm9jbGlwYm9hcmRfMSIgY2xhc3M9Inplcm9jbGlwYm9hcmQiIGRhdGEtYXBwYm95PSJ3ZWJfbWVkaWFfc2hhcmUiICBkYXRhLW1peHBhbmVsPSJpbWFnZSIgZGF0YS10cmFja2luZz0iZGV0YWlsX2RpcmVjdF9saW5rY29kZV9jbGljayI+CiAgICA8ZGl2IGlkPSJsaW5rc01vZHVsZV9jb3B5Y29kZV8xIiBjbGFzcz0iY29weWNvZGUgY29udHJvbC1ncm91cCIgZGF0YS1jbGlwYm9hcmQtdGV4dD0iaHR0cDovL2k1MjYucGhvdG9idWNrZXQuY29tL2FsYnVtcy9jYzM0OS9jYXJpYmJlYW5mdXNlL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGciIGRhdGEtY2xpcGJvYXJkLXRhcmdldD0ibGlua3NNb2R1bGVfY2NpbnB1dF8xIj4KICAgICAgICA8bGFiZWwgY2xhc3M9ImxpbmsiPkRpcmVjdDwvbGFiZWw+ICAgICAgICA8aW5wdXQgaWQ9ImxpbmtzTW9kdWxlX2NjaW5wdXRfMSIgY2xhc3M9Imxpbmtjb3B5IiByZWFkb25seT0icmVhZG9ubHkiIHR5cGU9InRleHQiIHZhbHVlPSJodHRwOi8vaTUyNi5waG90b2J1Y2tldC5jb20vYWxidW1zL2NjMzQ5L2NhcmliYmVhbmZ1c2UvY2FyaWJiZWFuL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhckIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2PjxkaXYgaWQ9ImxpbmtzTW9kdWxlX3plcm9jbGlwYm9hcmRfMiIgY2xhc3M9Inplcm9jbGlwYm9hcmQiIGRhdGEtYXBwYm95PSJ3ZWJfbWVkaWFfc2hhcmUiICBkYXRhLW1peHBhbmVsPSJpbWFnZSIgZGF0YS10cmFja2luZz0iZGV0YWlsX2h0bWxfbGlua2NvZGVfY2xpY2siPgogICAgPGRpdiBpZD0ibGlua3NNb2R1bGVfY29weWNvZGVfMiIgY2xhc3M9ImNvcHljb2RlIGNvbnRyb2wtZ3JvdXAiIGRhdGEtY2xpcGJvYXJkLXRleHQ9IiZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9tZWRpYS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWwmcXVvdDsgdGFyZ2V0PSZxdW90O19ibGFuayZxdW90OyZndDsmbHQ7aW1nIHNyYz0mcXVvdDtodHRwOi8vaTUyNi5waG90b2J1Y2tldC5jb20vYWxidW1zL2NjMzQ5L2NhcmliYmVhbmZ1c2UvY2FyaWJiZWFuL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyZxdW90OyBib3JkZXI9JnF1b3Q7MCZxdW90OyBhbHQ9JnF1b3Q7IHBob3RvIGNoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZyZxdW90Oy8mZ3Q7Jmx0Oy9hJmd0OyIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSJsaW5rc01vZHVsZV9jY2lucHV0XzIiPgogICAgICAgIDxsYWJlbCBjbGFzcz0ibGluayI+SFRNTDwvbGFiZWw+ICAgICAgICA8aW5wdXQgaWQ9ImxpbmtzTW9kdWxlX2NjaW5wdXRfMiIgY2xhc3M9Imxpbmtjb3B5IiByZWFkb25seT0icmVhZG9ubHkiIHR5cGU9InRleHQiIHZhbHVlPSImbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly9zNTI2LnBob3RvYnVja2V0LmNvbS91c2VyL2NhcmliYmVhbmZ1c2UvbWVkaWEvY2FyaWJiZWFuL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZy5odG1sJnF1b3Q7IHRhcmdldD0mcXVvdDtfYmxhbmsmcXVvdDsmZ3Q7Jmx0O2ltZyBzcmM9JnF1b3Q7aHR0cDovL2k1MjYucGhvdG9idWNrZXQuY29tL2FsYnVtcy9jYzM0OS9jYXJpYmJlYW5mdXNlL2NhcmliYmVhbi9jaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcmcXVvdDsgYm9yZGVyPSZxdW90OzAmcXVvdDsgYWx0PSZxdW90OyBwaG90byBjaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcmcXVvdDsvJmd0OyZsdDsvYSZndDsiIC8+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXJCIj48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj48ZGl2IGlkPSJsaW5rc01vZHVsZV96ZXJvY2xpcGJvYXJkXzMiIGNsYXNzPSJ6ZXJvY2xpcGJvYXJkIiBkYXRhLWFwcGJveT0id2ViX21lZGlhX3NoYXJlIiAgZGF0YS1taXhwYW5lbD0iaW1hZ2UiIGRhdGEtdHJhY2tpbmc9ImRldGFpbF9pbWdfbGlua2NvZGVfY2xpY2siPgogICAgPGRpdiBpZD0ibGlua3NNb2R1bGVfY29weWNvZGVfMyIgY2xhc3M9ImNvcHljb2RlIGNvbnRyb2wtZ3JvdXAiIGRhdGEtY2xpcGJvYXJkLXRleHQ9IltVUkw9aHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9tZWRpYS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWxdW0lNR11odHRwOi8vaTUyNi5waG90b2J1Y2tldC5jb20vYWxidW1zL2NjMzQ5L2NhcmliYmVhbmZ1c2UvY2FyaWJiZWFuL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZ1svSU1HXVsvVVJMXSIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSJsaW5rc01vZHVsZV9jY2lucHV0XzMiPgogICAgICAgIDxsYWJlbCBjbGFzcz0ibGluayI+SU1HPC9sYWJlbD4gICAgICAgIDxpbnB1dCBpZD0ibGlua3NNb2R1bGVfY2NpbnB1dF8zIiBjbGFzcz0ibGlua2NvcHkiIHJlYWRvbmx5PSJyZWFkb25seSIgdHlwZT0idGV4dCIgdmFsdWU9IltVUkw9aHR0cDovL3M1MjYucGhvdG9idWNrZXQuY29tL3VzZXIvY2FyaWJiZWFuZnVzZS9tZWRpYS9jYXJpYmJlYW4vY2hpY2tlbndhZmZsZXNfenBzeHlnMW9iZHUuanBnLmh0bWxdW0lNR11odHRwOi8vaTUyNi5waG90b2J1Y2tldC5jb20vYWxidW1zL2NjMzQ5L2NhcmliYmVhbmZ1c2UvY2FyaWJiZWFuL2NoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZ1svSU1HXVsvVVJMXSIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhckIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgICANCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KUGIuSW5pdEV2ZW50UXVldWUuYWRkVG9Eb21SZWFkeShmdW5jdGlvbigpIHsNCiAgICB2YXIgY29weUNvZGVDb250cm9sbGVyID0gUGIuQ29tcG9uZW50LkNvbW1vbi5Db3B5Q29kZS5Db3B5Q29kZTsNCiAgICAgICAgICAgIGNvcHlDb2RlQ29udHJvbGxlci5jcmVhdGVaZXJvQ2xpcGJvYXJkKCcjbGlua3NNb2R1bGVfY2NpbnB1dF8wJywgZmFsc2UpOw0KICAgICAgICAgICAgY29weUNvZGVDb250cm9sbGVyLmNyZWF0ZVplcm9DbGlwYm9hcmQoJyNsaW5rc01vZHVsZV9jY2lucHV0XzEnLCBmYWxzZSk7DQogICAgICAgICAgICBjb3B5Q29kZUNvbnRyb2xsZXIuY3JlYXRlWmVyb0NsaXBib2FyZCgnI2xpbmtzTW9kdWxlX2NjaW5wdXRfMicsIGZhbHNlKTsNCiAgICAgICAgICAgIGNvcHlDb2RlQ29udHJvbGxlci5jcmVhdGVaZXJvQ2xpcGJvYXJkKCcjbGlua3NNb2R1bGVfY2NpbnB1dF8zJywgZmFsc2UpOw0KICAgIH0pOw0KPC9zY3JpcHQ+DQogICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPC9kaXY+CjwvZGl2PjxkaXYgY2xhc3M9Im1vcmVDb250ZW50Q29udGFpbmVyIj4KCiAgICA8aDIgY2xhc3M9ImFsYnVtc0hlYWQgaGlkZSI+TU9SRSBBTEJVTVMgQlkgPGEgY2xhc3M9InVzZXJuYW1lIiBocmVmPSJodHRwOi8vczUyNi5waG90b2J1Y2tldC5jb20vdXNlci9jYXJpYmJlYW5mdXNlL3Byb2ZpbGUvIiBvbmNsaWNrPSJQYi5UcmFjay50cigncHJpdmF0ZV9tZWRpYV9tb3JlX2FsYnVtc19wcm9maWxlX2NsaWNrJyk7Ij4gY2FyaWJiZWFuZnVzZTwvYT48L2gyPgogICAgPGRpdiBjbGFzcz0nYWxidW1zSGVhZCBzdWJBbGJ1bXMgcHVibGljYWxidW1zIHVuc3R5bGVkJz4KICAgIDwvZGl2PgoKICAgIDxoMiBjbGFzcz0idHJlbmRpbmdIZWFkIGhpZGUiPlRSRU5ESU5HIE9OIFBIT1RPQlVDS0VUPC9oMj4KICAgIDxkaXYgY2xhc3M9InRyZW5kaW5nIj4KICAgIDwvZGl2PiAgICAKPC9kaXY+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICBQYi5Jbml0RXZlbnRRdWV1ZS5hZGRUb1BhZ2VMb2FkKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBQYi5Db21wb25lbnQuRGV0YWlsLk1vcmVDb250ZW50Q29udGFpbmVyKHsKICAgICAgICAgICAgInRyZW5kaW5nUXVlcnkiOiAiZmlsdGVyc1t1c2VyXT04NjIxNjg4MyZmaWx0ZXJzW2xpa2VzXT0xJnNvcnQ9MSZsaW1pdD0zJnVuYW1lPWNhcmliYmVhbmZ1c2UiCiAgICAgICAgfSk7CiAgICB9KTsKICAgICAgICAKPC9zY3JpcHQ+CgoKPGRpdiBjbGFzcz0iaW5zZXRCb3ggb3B0aW9ucyI+CiAgICA8ZGl2IGNsYXNzPSJpbnNldEJveENvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8aDI+T1BUSU9OUzwvaDI+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudFRleHQiPgogICAgICAgIDxkaXYgaWQ9ImRldGFpbE9wdGlvbnMiIGNsYXNzPSJkZXRhaWxPcHRpb25zIj48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICBQYi5Jbml0RXZlbnRRdWV1ZS5hZGRUb0RvbVJlYWR5KGZ1bmN0aW9uKCkgew0KICAgICAgICBuZXcgUGIuQ29tcG9uZW50LkRldGFpbC5PcHRpb25zKHsiaWNvbkxpbmsiOlt7InVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6IlByaW50IGNhbnZhcyBkZWNvciIsImlkZW50aWZpZXIiOiJwcmludGRlY29yIiwiY2xhc3NTdHJpbmciOiJpY29uTGluayIsIm9uQ2xpY2siOiJQYi5Db21wb25lbnQuVHJhY2tpbmcuTWl4cGFuZWwudHJhY2tQcmludFByb21vQ2xpY2soe3Byb21vOiAnY2FudmFzIHByaW50cyBsaW5rJywgY29tcG9uZW50OiAnbWVkaWEgZGV0YWlsJ30pO1BiLlRyYWNrLnRyZigncHJpbnRfZGVjb3Jfb3B0aW9uX2NsaWNrJyk7IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY9J2h0dHBzOlwvXC9zZWN1cmUucGhvdG9idWNrZXQuY29tXC9wcmludFwvaG9tZWRlY29yXC9jYW52YXNwcmludHM/bWVkaWE9JyArIGVuY29kZVVSSUNvbXBvbmVudChQYi5EYXRhLmdldCgnc2hhcmVkLm1lZGlhJykubGlua1VybCk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdQcmludCBjYW52YXMgZGVjb3InICIsImljb25DbGFzcyI6Imljb24tb3JkZXItcHJpbnRzIiwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJwcmludGRlY29yIn0sInRvb2x0aXAiOmZhbHNlLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlfSx7InVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6IkNvcHkiLCJpZGVudGlmaWVyIjoiY29weSIsImNsYXNzU3RyaW5nIjoiaWNvbkxpbmsiLCJvbkNsaWNrIjoiUGIuVHJhY2sudHJmKCdjb3B5X2RldGFpbHBhZ2Vfb3B0aW9uX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdDb3B5JyBkYXRhLWNvcHltb3ZlbW9kZT0nY29weScgIiwiaWNvbkNsYXNzIjoiaWNvbi1jb3B5IiwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJjb3B5In0sInRvb2x0aXAiOmZhbHNlLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlfSx7InVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6Ik9yZGVyIHByaW50cyIsImlkZW50aWZpZXIiOiJwcmludHMiLCJjbGFzc1N0cmluZyI6Imljb25MaW5rIiwib25DbGljayI6IlBiLkNvbXBvbmVudC5UcmFja2luZy5NaXhwYW5lbC50cmFja1ByaW50UHJvbW9DbGljayh7cHJvbW86ICdwcmludHMgbGluaycsIGNvbXBvbmVudDogJ21lZGlhIGRldGFpbCd9KTtQYi5UcmFjay50cmYoJ3ByaW50X2RldGFpbHBhZ2Vfb3B0aW9uX2NsaWNrJyk7IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY9J2h0dHBzOlwvXC9zZWN1cmUucGhvdG9idWNrZXQuY29tXC9wcmludFwvcHJpbnRzXC9wcmludHM/bWVkaWE9JyArIGVuY29kZVVSSUNvbXBvbmVudChQYi5EYXRhLmdldCgnc2hhcmVkLm1lZGlhJykubGlua1VybCk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdQcmludCBwaG90bycgIiwiaWNvbkNsYXNzIjoiaWNvbi1zaG9wcGluZy1jYXJ0IiwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJwcmludHMifSwidG9vbHRpcCI6ZmFsc2UsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2V9LHsidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjoiRG93bmxvYWQiLCJpZGVudGlmaWVyIjoiZG93bmxvYWQiLCJjbGFzc1N0cmluZyI6Imljb25MaW5rIiwib25DbGljayI6IlBiLlRyYWNrLnRyZignZG93bmxvYWRfZGV0YWlscGFnZV9vcHRpb25fY2xpY2snKTsiLCJleHRyYUF0dHJpYnV0ZXMiOiIgdGl0bGU9J0Rvd25sb2FkJyAiLCJpY29uQ2xhc3MiOiJpY29uLWRvd25sb2FkLWFsdCIsImpzQXR0cmlidXRlcyI6eyJjaGVja3Blcm1zIjp0cnVlLCJpZGVudGlmaWVyIjoiZG93bmxvYWQifSwidG9vbHRpcCI6ZmFsc2UsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2V9LHsidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjoiQ3JlYXRlIG1ldGFsIHByaW50cyIsImlkZW50aWZpZXIiOiJtZXRhbHByaW50cyIsImNsYXNzU3RyaW5nIjoiaWNvbkxpbmsiLCJvbkNsaWNrIjoiUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLnRyYWNrUHJpbnRQcm9tb0NsaWNrKHtwcm9tbzogJ21ldGFsIHByaW50cyBsaW5rJywgY29tcG9uZW50OiAnbWVkaWEgZGV0YWlsJ30pO1BiLlRyYWNrLnRyZignbWV0YWxwcmludHNfZGV0YWlscGFnZV9vcHRpb25fY2xpY2snKTsgZG9jdW1lbnQubG9jYXRpb24uaHJlZj0naHR0cHM6XC9cL3NlY3VyZS5waG90b2J1Y2tldC5jb21cL3ByaW50XC9ob21lZGVjb3JcL21ldGFscHJpbnRzP21lZGlhPScgKyBlbmNvZGVVUklDb21wb25lbnQoUGIuRGF0YS5nZXQoJ3NoYXJlZC5tZWRpYScpLmxpbmtVcmwpOyIsImV4dHJhQXR0cmlidXRlcyI6IiB0aXRsZT0nQ3JlYXRlIG1ldGFsIHByaW50cycgIiwiaWNvbkNsYXNzIjoiaWNvbi1naWZ0IiwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJtZXRhbHByaW50cyJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZX0seyJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOiJSZXBvcnQgdGhpcyBwaG90byIsImlkZW50aWZpZXIiOiJmbGFnIiwiY2xhc3NTdHJpbmciOiJpY29uTGluayBzaG93UmVwb3J0TW9kYWwiLCJvbkNsaWNrIjoiUGIuVHJhY2sudHJmKCdmbGFnX2RldGFpbHBhZ2Vfb3B0aW9uX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdGbGFnJyAiLCJpY29uQ2xhc3MiOiJpY29uLWZsYWciLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6dHJ1ZSwiaWRlbnRpZmllciI6ImZsYWcifSwidG9vbHRpcCI6ZmFsc2UsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2V9XSwiZXZlbnRSZWdpc3RlciI6W3siZXZlbnRTZWxlY3RvciI6ImEjcHJpbnRzIiwiZXZlbnRUeXBlIjoiY2xpY2siLCJldmVudCI6Ik9wdGlvbnM6OnByaW50cyJ9LHsiZXZlbnRTZWxlY3RvciI6ImEjcHJpbnRvcHRpb24iLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiT3B0aW9uczo6cHJpbnRvcHRpb24ifSx7ImV2ZW50U2VsZWN0b3IiOiJhI2VkaXQyIiwiZXZlbnRUeXBlIjoiY2xpY2siLCJldmVudCI6Ik9wdGlvbnM6OmVkaXQyIn0seyJldmVudFNlbGVjdG9yIjoiYSNkb3dubG9hZCIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJPcHRpb25zOjpkb3dubG9hZCJ9LHsiZXZlbnRTZWxlY3RvciI6ImEjZG93bmxvYWRvcHRpb24iLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiT3B0aW9uczo6ZG93bmxvYWRvcHRpb24ifSx7ImV2ZW50U2VsZWN0b3IiOiJhI3ZpZXdhbGJ1bSIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJPcHRpb25zOjp2aWV3YWxidW0ifSx7ImV2ZW50U2VsZWN0b3IiOiJhI21vdmUiLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiT3B0aW9uczo6bW92ZSJ9LHsiZXZlbnRTZWxlY3RvciI6ImEjcm90YXRlbGVmdCIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJPcHRpb25zOjpyb3RhdGVsZWZ0In0seyJldmVudFNlbGVjdG9yIjoiYSNyb3RhdGVyaWdodCIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJPcHRpb25zOjpyb3RhdGVyaWdodCJ9LHsiZXZlbnRTZWxlY3RvciI6ImEjZWZmZWN0cyIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJPcHRpb25zOjplZmZlY3RzIn0seyJldmVudFNlbGVjdG9yIjoiYSNkZWxldGUiLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiT3B0aW9uczo6ZGVsZXRlIn0seyJldmVudFNlbGVjdG9yIjoiYSNjb3B5IiwiZXZlbnRUeXBlIjoiY2xpY2siLCJldmVudCI6Ik9wdGlvbnM6OmNvcHkifSx7ImV2ZW50U2VsZWN0b3IiOiJhI2NvcHlvcHRpb24iLCJldmVudFR5cGUiOiJjbGljayIsImV2ZW50IjoiT3B0aW9uczo6Y29weW9wdGlvbiJ9LHsiZXZlbnRTZWxlY3RvciI6ImEjY3JvcCIsImV2ZW50VHlwZSI6ImNsaWNrIiwiZXZlbnQiOiJPcHRpb25zOjpjcm9wIn0seyJldmVudFNlbGVjdG9yIjoiYSNwcmludGRlY29yIiwiZXZlbnRUeXBlIjoiY2xpY2siLCJldmVudCI6Ik9wdGlvbnM6OnByaW50ZGVjb3IifSx7ImV2ZW50U2VsZWN0b3IiOiJhI21ldGFscHJpbnRzIiwiZXZlbnRUeXBlIjoiY2xpY2siLCJldmVudCI6Ik9wdGlvbnM6Om1ldGFscHJpbnRzIn1dLCJkcm9wZG93bkxpbmsiOlt7InR5cGUiOjcsInVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6IlZpZXcgYWxidW0iLCJpZGVudGlmaWVyIjoidmlld2FsYnVtIiwiY2xhc3NTdHJpbmciOiJkZXRhaWxNZW51T3B0aW9uIGJ0bi1saW5rIiwib25DbGljayI6IlBiLlRyYWNrLnRyZigndmlld2FsYnVtX2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdWaWV3IGFsYnVtJyAiLCJpY29uQ2xhc3MiOmZhbHNlLCJub3RTdWJtaXRCdG4iOnRydWUsImpzQXR0cmlidXRlcyI6eyJjaGVja3Blcm1zIjpmYWxzZSwiaWRlbnRpZmllciI6InZpZXdhbGJ1bSJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6ZmFsc2V9LHsidHlwZSI6NywidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjoiQ3JvcCIsImlkZW50aWZpZXIiOiJjcm9wIiwiY2xhc3NTdHJpbmciOiJkZXRhaWxNZW51T3B0aW9uIGJ0bi1saW5rIiwib25DbGljayI6IlBiLlRyYWNrLnRyZignY3JvcF9kZXRhaWxwYWdlX2J0bl9jbGljaycpOyIsImV4dHJhQXR0cmlidXRlcyI6IiB0aXRsZT0nQ3JvcCcgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6dHJ1ZSwiaWRlbnRpZmllciI6ImNyb3AifSwidG9vbHRpcCI6ZmFsc2UsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2UsImluQnV0dG9uR3JvdXAiOmZhbHNlfSx7InR5cGUiOjcsInVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6IlJvdGF0ZSByaWdodCIsImlkZW50aWZpZXIiOiJyb3RhdGVyaWdodCIsImNsYXNzU3RyaW5nIjoiZGV0YWlsTWVudU9wdGlvbiBidG4tbGluayIsIm9uQ2xpY2siOiJQYi5UcmFjay50cmYoJ3JvdGF0ZXJpZ2h0X2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdSb3RhdGUgcmlnaHQnICIsImljb25DbGFzcyI6ZmFsc2UsIm5vdFN1Ym1pdEJ0biI6dHJ1ZSwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJyb3RhdGVyaWdodCJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6ZmFsc2V9LHsidHlwZSI6NywidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjoiUm90YXRlIGxlZnQiLCJpZGVudGlmaWVyIjoicm90YXRlbGVmdCIsImNsYXNzU3RyaW5nIjoiZGV0YWlsTWVudU9wdGlvbiBidG4tbGluayIsIm9uQ2xpY2siOiJQYi5UcmFjay50cmYoJ3JvdGF0ZWxlZnRfZGV0YWlscGFnZV9idG5fY2xpY2snKTsiLCJleHRyYUF0dHJpYnV0ZXMiOiIgdGl0bGU9J1JvdGF0ZSBsZWZ0JyAiLCJpY29uQ2xhc3MiOmZhbHNlLCJub3RTdWJtaXRCdG4iOnRydWUsImpzQXR0cmlidXRlcyI6eyJjaGVja3Blcm1zIjp0cnVlLCJpZGVudGlmaWVyIjoicm90YXRlbGVmdCJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6ZmFsc2V9LHsidHlwZSI6NywidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjoiQWRkIGVmZmVjdHMiLCJpZGVudGlmaWVyIjoiZWZmZWN0cyIsImNsYXNzU3RyaW5nIjoiZGV0YWlsTWVudU9wdGlvbiBidG4tbGluayIsIm9uQ2xpY2siOiJQYi5UcmFjay50cmYoJ2VmZmVjdHNfZGV0YWlscGFnZV9idG5fY2xpY2snKTsiLCJleHRyYUF0dHJpYnV0ZXMiOiIgdGl0bGU9J0FkZCBlZmZlY3RzJyAiLCJpY29uQ2xhc3MiOmZhbHNlLCJub3RTdWJtaXRCdG4iOnRydWUsImpzQXR0cmlidXRlcyI6eyJjaGVja3Blcm1zIjp0cnVlLCJpZGVudGlmaWVyIjoiZWZmZWN0cyJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6ZmFsc2V9LHsidHlwZSI6NywidXJsIjoiamF2YXNjcmlwdDp2b2lkKDApOyIsImxhYmVsIjoiTW92ZSIsImlkZW50aWZpZXIiOiJtb3ZlIiwiY2xhc3NTdHJpbmciOiJkZXRhaWxNZW51T3B0aW9uIGJ0bi1saW5rIiwib25DbGljayI6IlBiLlRyYWNrLnRyZignbW92ZV9kZXRhaWxwYWdlX2J0bl9jbGljaycpOyIsImV4dHJhQXR0cmlidXRlcyI6IiB0aXRsZT0nTW92ZScgZGF0YS1jb3B5bW92ZW1vZGU9J21vdmUnICIsImljb25DbGFzcyI6ZmFsc2UsIm5vdFN1Ym1pdEJ0biI6dHJ1ZSwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJtb3ZlIn0sInRvb2x0aXAiOmZhbHNlLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlLCJpbkJ1dHRvbkdyb3VwIjpmYWxzZX0seyJ0eXBlIjo3LCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOiJEZWxldGUiLCJpZGVudGlmaWVyIjoiZGVsZXRlIiwiY2xhc3NTdHJpbmciOiJkZXRhaWxNZW51T3B0aW9uIGJ0bi1saW5rIiwib25DbGljayI6IlBiLlRyYWNrLnRyZignZGVsZXRlX2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdEZWxldGUnICIsImljb25DbGFzcyI6ZmFsc2UsIm5vdFN1Ym1pdEJ0biI6dHJ1ZSwianNBdHRyaWJ1dGVzIjp7ImNoZWNrcGVybXMiOnRydWUsImlkZW50aWZpZXIiOiJkZWxldGUifSwidG9vbHRpcCI6ZmFsc2UsImRpc3BsYXlJY29uQWZ0ZXJMYWJlbCI6ZmFsc2UsImluQnV0dG9uR3JvdXAiOmZhbHNlfSx7InR5cGUiOjcsInVybCI6ImphdmFzY3JpcHQ6dm9pZCgwKTsiLCJsYWJlbCI6IlByaW50IiwiaWRlbnRpZmllciI6InByaW50b3B0aW9uIiwiY2xhc3NTdHJpbmciOiJkZXRhaWxNZW51T3B0aW9uIGJ0bi1saW5rIiwib25DbGljayI6IlBiLlRyYWNrLnRyZigncHJpbnRfZGV0YWlscGFnZV9idG5fY2xpY2snKTtkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSdodHRwczpcL1wvc2VjdXJlLnBob3RvYnVja2V0LmNvbVwvcHJpbnQ/bWVkaWE9JyArIGVuY29kZVVSSUNvbXBvbmVudChQYi5EYXRhLmdldCgnc2hhcmVkLm1lZGlhJykubGlua1VybCk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdQcmludCcgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6dHJ1ZSwiaWRlbnRpZmllciI6InByaW50b3B0aW9uIn0sInRvb2x0aXAiOmZhbHNlLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlLCJpbkJ1dHRvbkdyb3VwIjpmYWxzZX0seyJ0eXBlIjo3LCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOiJEb3dubG9hZCIsImlkZW50aWZpZXIiOiJkb3dubG9hZG9wdGlvbiIsImNsYXNzU3RyaW5nIjoiZGV0YWlsTWVudU9wdGlvbiBidG4tbGluayIsIm9uQ2xpY2siOiJQYi5UcmFjay50cmYoJ2Rvd25sb2FkX2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdEb3dubG9hZCcgIiwiaWNvbkNsYXNzIjpmYWxzZSwibm90U3VibWl0QnRuIjp0cnVlLCJqc0F0dHJpYnV0ZXMiOnsiY2hlY2twZXJtcyI6dHJ1ZSwiaWRlbnRpZmllciI6ImRvd25sb2Fkb3B0aW9uIn0sInRvb2x0aXAiOmZhbHNlLCJkaXNwbGF5SWNvbkFmdGVyTGFiZWwiOmZhbHNlLCJpbkJ1dHRvbkdyb3VwIjpmYWxzZX0seyJ0eXBlIjo3LCJ1cmwiOiJqYXZhc2NyaXB0OnZvaWQoMCk7IiwibGFiZWwiOiJDb3B5IiwiaWRlbnRpZmllciI6ImNvcHlvcHRpb24iLCJjbGFzc1N0cmluZyI6ImRldGFpbE1lbnVPcHRpb24gYnRuLWxpbmsiLCJvbkNsaWNrIjoiUGIuVHJhY2sudHJmKCdjb3B5X2RldGFpbHBhZ2VfYnRuX2NsaWNrJyk7IiwiZXh0cmFBdHRyaWJ1dGVzIjoiIHRpdGxlPSdDb3B5JyAiLCJpY29uQ2xhc3MiOmZhbHNlLCJub3RTdWJtaXRCdG4iOnRydWUsImpzQXR0cmlidXRlcyI6eyJjaGVja3Blcm1zIjp0cnVlLCJpZGVudGlmaWVyIjoiY29weW9wdGlvbiJ9LCJ0b29sdGlwIjpmYWxzZSwiZGlzcGxheUljb25BZnRlckxhYmVsIjpmYWxzZSwiaW5CdXR0b25Hcm91cCI6ZmFsc2V9XX0pOw0KICAgIH0sIFBiLkluaXRFdmVudFF1ZXVlLk1FRElVTV9QUklPUklUWSk7DQo8L3NjcmlwdD4NCiAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICBQYi5EYXRhLmFkZCgnc3RhdHNDb250YWluZXInLCB7InN0YXRzRmV0Y2hEYXRhIjoiXC9jb21wb25lbnRcL0RldGFpbC1TdGF0c0NvbnRhaW5lcj9tZWRpYT1odHRwJTNBJTJGJTJGaTUyNi5waG90b2J1Y2tldC5jb20lMkZhbGJ1bXMlMkZjYzM0OSUyRmNhcmliYmVhbmZ1c2UlMkZjYXJpYmJlYW4lMkZjaGlja2Vud2FmZmxlc196cHN4eWcxb2JkdS5qcGcifSk7CiAgICBQYi5Jbml0RXZlbnRRdWV1ZS5hZGRUb1BhZ2VMb2FkKGZ1bmN0aW9uICgpIHsKICAgICAgICBuZXcgUGIuQ29tcG9uZW50LkRldGFpbC5TdGF0cygpOwogICAgfSk7ICAgIAo8L3NjcmlwdD4KPGRpdiBpZD0ic3RhdHNQbGFjZWhvbGRlciI+PC9kaXY+CiAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJhZCBwcm9tb0FkICIgIGRhdGEtZGVidWc9J1sidmlld2lkPTUxODc5NjE5MDYiLCJzaXplPVBST01PMiIsInJhbmRvbT02NTgyNjAiLCJhcmVhPWxpYl9tZWRpYWRldGFpbCIsImxvZ2luPU4iLCJ1dHlwZT1mcmVlIiwic3A9ZiIsIm93bmVybmFtZT1jYXJpYmJlYW5mdXNlIiwic2VhcmNoX2t3PWVtcHR5IiwicHR5cGU9ZnZfaW1hZ2UiLCJwb3M9bm9faW5mIiwibGlrZXM9biIsInNwb249ZW1wdHkiLCJhZENvdW50PWVtcHR5IiwiYmw9MSIsInJlZl9kb21haW49ZW1wdHkiLCJmZWF0dXJlPW1kcHJldmlld2N1cnJlbnQiLCJzaXRlPXBiMiIsInRyYWNrPWVtcHR5Il0nPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlmcmFtZQogICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAzMDBweDsgaGVpZ2h0OiAxNTBweCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcm9tb0FkSWZyYW1lIiBpZD0icHJvbW9BZCIKICAgICAgICAgICAgICAgICAgICAgIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9Im5vIiBkYXRhLXR5cGU9IlBST01PMiIgZGF0YS13aWR0aD0iMzAwIiAgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+CiAgICAgICAgICAgICAgICAgIDwvaWZyYW1lPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZFVybCA9ICcvL2IucGhvdG9idWNrZXQuY29tL3Bia3QvaHNlcnZlci92aWV3aWQ9NTE4Nzk2MTkwNi9zaXplPVBST01PMi9yYW5kb209NjU4MjYwL2FyZWE9bGliX21lZGlhZGV0YWlsL2xvZ2luPU4vdXR5cGU9ZnJlZS9zcD1mL293bmVybmFtZT1jYXJpYmJlYW5mdXNlL3NlYXJjaF9rdz1lbXB0eS9wdHlwZT1mdl9pbWFnZS9wb3M9bm9faW5mL2xpa2VzPW4vc3Bvbj1lbXB0eS9hZENvdW50PWVtcHR5L2JsPTEvcmVmX2RvbWFpbj1lbXB0eS9mZWF0dXJlPW1kcHJldmlld2N1cnJlbnQvc2l0ZT1wYjIvdHJhY2s9ZW1wdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycF92YWx1YXRpb24gPSBycF92YWx1YXRpb24gfHwge30sIC8vIGdsb2JhbCBmcm9tIHJ1Ymljb24gZG9yb3RoeSBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRTaXplID0gMzAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZEZ1bGxTaXplID0gIjMwMHgxNTAiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYi5Jbml0RXZlbnRRdWV1ZS5hZGRUb1BhZ2VMb2FkKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3Byb21vQWQnKS5hdHRyKCdzcmMnLCBhZFVybCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgUGIuSW5pdEV2ZW50UXVldWUuTE9XX1BSSU9SSVRZICsgMTApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KCkpOwogICAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWQgbXJlYyAiICBkYXRhLWRlYnVnPSdbInZpZXdpZD01MTg3OTYxOTA2Iiwic2l6ZT1SRUNUQU5HTEUiLCJyYW5kb209MjAzNjIzIiwiYXJlYT1saWJfbWVkaWFkZXRhaWwiLCJsb2dpbj1OIiwidXR5cGU9ZnJlZSIsInNwPWYiLCJvd25lcm5hbWU9Y2FyaWJiZWFuZnVzZSIsInNlYXJjaF9rdz1lbXB0eSIsInB0eXBlPWZ2X2ltYWdlIiwicG9zPWluZiIsImxpa2VzPW4iLCJzcG9uPWVtcHR5IiwiYWRDb3VudD1lbXB0eSIsImJsPTEiLCJyZWZfZG9tYWluPWVtcHR5IiwiZmVhdHVyZT1tZHByZXZpZXdjdXJyZW50Iiwic2l0ZT1wYjIiLCJ0cmFjaz1lbXB0eSJdJz4KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZnJhbWUKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogMjUwcHgiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXJlY0lmcmFtZSIgaWQ9Im1yZWNMYXp5IgogICAgICAgICAgICAgICAgICAgICAgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iIGRhdGEtdHlwZT0iUkVDVEFOR0xFIiBkYXRhLXdpZHRoPSIzMDAiICBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4KICAgICAgICAgICAgICAgICAgPC9pZnJhbWU+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImFkZnJlZSIgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9wcmljaW5nL2FkZnJlZSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ3ByaWNpbmdfbXJlY19hZGZyZWVfY2xpY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYi5Db21wb25lbnQuVHJhY2tpbmcuTWl4cGFuZWwudHJhY2soJ3N1YnNjcmlwdGlvbiB1cGdyYWRlIGNsaWNrJywgeydidXR0b24gbG9jYXRpb24nOiAnZ28gYWQgZnJlZSd9KTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgR28gQWQgRnJlZSBXaXRoIFBsdXMgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZFVybCA9ICdodHRwOi8vcGhvdG9idWNrZXQuYWRueHMuY29tL3B0P2ludl9jb2RlPWxpYl9tZWRpYWRldGFpbCZzaXplPTMwMHgyNTAmbWVtYmVyPTg2JnJlZGlyPSUyRiUyRmIucGhvdG9idWNrZXQuY29tJTJGcGJrdCUyRmhzZXJ2ZXIlMkZ2aWV3aWQlM0Q1MTg3OTYxOTA2JTJGc2l6ZSUzRFJFQ1RBTkdMRSUyRnJhbmRvbSUzRDIwMzYyMyUyRmFyZWElM0RsaWJfbWVkaWFkZXRhaWwlMkZsb2dpbiUzRE4lMkZ1dHlwZSUzRGZyZWUlMkZzcCUzRGYlMkZvd25lcm5hbWUlM0RjYXJpYmJlYW5mdXNlJTJGc2VhcmNoX2t3JTNEZW1wdHklMkZwdHlwZSUzRGZ2X2ltYWdlJTJGcG9zJTNEaW5mJTJGbGlrZXMlM0RuJTJGc3BvbiUzRGVtcHR5JTJGYWRDb3VudCUzRGVtcHR5JTJGYmwlM0QxJTJGcmVmX2RvbWFpbiUzRGVtcHR5JTJGZmVhdHVyZSUzRG1kcHJldmlld2N1cnJlbnQlMkZzaXRlJTNEcGIyJTJGdHJhY2slM0RlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwX3ZhbHVhdGlvbiA9IHJwX3ZhbHVhdGlvbiB8fCB7fSwgLy8gZ2xvYmFsIGZyb20gcnViaWNvbiBkb3JvdGh5IHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFNpemUgPSAzMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkRnVsbFNpemUgPSAiMzAweDI1MCI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYW16bmFkcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKGFkVXJsLm1hdGNoKC9wb3MlM0RpbmYrL2cpID09PSBudWxsICYmIGFkVXJsLm1hdGNoKC9wb3M9aW5mL2cpID09PSBudWxsKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBhbXpuYWRzLmdldEtleXMoYWRGdWxsU2l6ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRVcmwgKz0gZXNjYXBlKCcvJyArIGtleSArICc9MScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChHbGFtSXNBdmFpbGFibGUpID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xhbSwgZ2FkYWRpZCwgZ2Fkc3osIGdhZHJlcWlkLCBwb3MsIHVzZXJQYXJhbXMsIGdhZG9iajsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyUGFyYW1zID0geyJsb2dpbiI6Ik4iLCJ1dHlwZSI6ImZyZWUiLCJzcCI6ImYiLCJvd25lcm5hbWUiOiJjYXJpYmJlYW5mdXNlIiwic2VhcmNoX2t3IjoiZW1wdHkiLCJwdHlwZSI6ImZ2X2ltYWdlIiwicG9zIjoiaW5mIiwibGlrZXMiOiJuIiwic3BvbiI6ImVtcHR5IiwiYWRDb3VudCI6ImVtcHR5IiwiYmwiOiIxIiwicmVmX2RvbWFpbiI6ImVtcHR5IiwiZmVhdHVyZSI6Im1kcHJldmlld2N1cnJlbnQifTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHVzZXJQYXJhbXMucG9zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA9PT0gJ25vX2luZicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRvYmogPSBHbGFtR2V0U2xvdE9iamVjdCgnUkVDVEFOR0xFJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdsYW1Jc0F2YWlsYWJsZSgnUkVDVEFOR0xFJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbSA9ICcxJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRvYmogPSBHbGFtR2V0U2xvdE9iamVjdCgnUkVDVEFOR0xFMicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHbGFtSXNBdmFpbGFibGUoJ1JFQ1RBTkdMRTInKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtID0gJzEnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdhZG9iaikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZGFkaWQgPSBnYWRvYmouYWRpZCA/IGdhZG9iai5hZGlkIDogJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Fkc3ogPSBnYWRvYmouc3ogPyBnYWRvYmouc3ogOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRyZXFpZCA9IGdhZG9iai5yZXFpZCA/IGdhZG9iai5yZXFpZCA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRhZGlkID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Fkc3ogPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYWRyZXFpZCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbGFtSWQgPSBnbGFtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsYW1JZCAhPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09PSAnbm9faW5mJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ1JFQ1RBTkdMRScgPT09ICdSRUNUQU5HTEUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtSWQgPSAncjEnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdSRUNUQU5HTEUnID09PSAnQkFOTkVSJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xhbUlkID0gJ2IxJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnUkVDVEFOR0xFJyA9PT0gJ1JFQ1RBTkdMRScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsYW1JZCA9ICdyMic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ1JFQ1RBTkdMRScgPT09ICdCQU5ORVInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbGFtSWQgPSAnYjInOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9IGVzY2FwZSgnL2dsYW0zMDA9JyArIGdsYW1JZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoJy9nYWRhZGlkPScgKyBnYWRhZGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsICs9IGVzY2FwZSgnL2dhZHN6PScgKyBnYWRzeik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoJy9nYWRyZXFpZD0nICsgZ2FkcmVxaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSAnL2FucHJpY2U9e1BSSUNFQlVDS0VUfS9nZW5lcmljPXtCSURVUkxFTkN9JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAocnBfdmFsdWF0aW9uLmVzdGltYXRlKSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIChycF92YWx1YXRpb24uZXN0aW1hdGUudGllcikgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWVyID0gcnBfdmFsdWF0aW9uLmVzdGltYXRlLnRpZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZFVybCArPSBlc2NhcGUoIi9ycF90aWVyPSIgKyB0aWVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2V0dGluZyBhZCBtcmVjTGF6eSBzcmMgdG8gJyArIGFkVXJsICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyArIChub3cuZ2V0VGltZSgpIC0gd2luZG93Wydqc1N0YXJ0VGltZSddLmdldFRpbWUoKSkgKyAnbXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWR1bml0ID0gJCgnI21yZWNMYXp5Jyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjbXJlY0xhenknKS5hdHRyKCdzcmMnLCBhZFVybCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp2YXIgYWRtYXJ2ZWxVUkwgPSBhZFVybDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2FkIHByZXZpb3VzIHVybDogJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGFkbWFydmVsVVJMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBianMgPSBwYmpzIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmpzLnF1ZSA9IHBianMucXVlIHx8IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmpzLnF1ZS5wdXNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkVW5pdHMgPSBbewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiAnLzE5OTY4MzM2L2hlYWRlci1iaWQtdGFnLTAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplczogW1szMDAsIDI1MF0sIFszMDAsIDYwMF1dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRzOiBbewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRkZXI6ICdicmVhbHRpbWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50SWQ6ICc2NDU4Njc1JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYmpzLmFkZEFkVW5pdHMoYWRVbml0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBianMucmVxdWVzdEJpZHMoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRzQmFja0hhbmRsZXI6IGZ1bmN0aW9uIChiaWRSZXNwb25zZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2JycmVhbHRpbWUgcmVzcG9uc2U6ICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhiaWRSZXNwb25zZXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnJlYWx0aW1lcGFyYW1zID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGJpZFJlc3BvbnNlc1snLzE5OTY4MzM2L2hlYWRlci1iaWQtdGFnLTAnXVsnYmlkcyddWzBdWydhZHNlcnZlclRhcmdldGluZyddLCBmdW5jdGlvbiAoa2V5LCBpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gJ2hiX3BiJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhbHRpbWVwYXJhbXMucHVzaChrZXkgKyAiPSIgKyBpdGVtICogMC4wOCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFsdGltZXBhcmFtcy5wdXNoKGtleSArICI9IiArIGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1hcnZlbFVSTCArPSAnJicgKyBicmVhbHRpbWVwYXJhbXMuam9pbignJicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhicmVhbHRpbWVwYXJhbXMuam9pbignJicpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZWluZyBvbGQgZ2VuZXJhdGVkIHVybCB3aXRoIG91ciBuZXcgZ2VuZXJhdGVkIHVybCBmb3IgcHJlYmlkIGpzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkVXJsID0gYWRtYXJ2ZWxVUkw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyMnKS5hdHRyKCdzcmMnLCBhZFVybCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbGF6eSBlbHNlIGFkZGluZyBhZCB1cmwgZm9yICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKCcjJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyMnKS5hdHRyKCdzcmMnLCBhZFVybCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSgpKTsKICAgICAgICAgICAgICA8L3NjcmlwdD4KICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyQiI+PC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vIG1ha2UgdGhlIGZpcnN0IGJhdGNoIHJlcXVlc3QKUGIuSW5pdEV2ZW50UXVldWUuYWRkVG9Eb21SZWFkeShmdW5jdGlvbigpewoKICAgIHZhciB1cmwgPSAnL2NvbXBvbmVudC9EZXRhaWwtQWxidW0/ZmlsdGVyc1thbGJ1bV09L2FsYnVtcy9jYzM0OS9jYXJpYmJlYW5mdXNlL2NhcmliYmVhbiZmaWx0ZXJzW2FsYnVtJTVGY29udGVudF09MiZzb3J0PTEmbz0vYWxidW1zL2NjMzQ5L2NhcmliYmVhbmZ1c2UvY2FyaWJiZWFuL2NoaWNrZW53YWZmbGVzJTVGenBzeHlnMW9iZHUlMkVqcGcnOwogICAgUGIuRGV0YWlsSW5pdC5pbml0KHVybCk7CgogICAgICAgIFBiLkRhdGEuYWRkKCdmZWF0dXJlVHJhY2tpbmdLZXknLCAnbWRwcmV2aWV3Y3VycmVudCcpOwogICAgICAgICAgICAgICAgICAgIAp9LCBQYi5Jbml0RXZlbnRRdWV1ZS5NRURJVU1fUFJJT1JJVFkpOwoKPC9zY3JpcHQ+CjwvZGl2Pg0KDQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICAgICAgKGZ1bmN0aW9uICgkKSB7DQovLyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeVRhZ05hbWUoJ2JvZHknKVswXS5hcHBlbmRDaGlsZCgnPHNjcicgKyAnaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvL2FjZG4uYWRueHMuY29tL3ByZWJpZC9wcmViaWQuanMiPjwvc2NyJyArICdpcHQ+Jyk7DQogICAgICAgICAgICAkKCdib2R5JykuY2hpbGRyZW4oKS5maXJzdCgpLmJlZm9yZSgnPHNjcicgKyAnaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvbGliL1BiL0NvbXBvbmVudC9BZC9pbnNlcnRzY3JpcHQuanMiPjwvc2NyJyArICdpcHQ+Jyk7DQogICAgICAgIH0pKGpRdWVyeSk7DQogICAgICAgIFBiLkluaXRFdmVudFF1ZXVlLmFkZFRvRG9tUmVhZHkoZnVuY3Rpb24gKCkgew0KDQoNCiAgICAgICAgfSwgUGIuSW5pdEV2ZW50UXVldWUuTUVESVVNX1BSSU9SSVRZKTsNCjwvc2NyaXB0PiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKPGRpdiBpZD0iZm9vdGVyIiBkYXRhLW9mZnNldD0iNDExIiBjbGFzcz0iICI+CiAgICAgIDwhLS1EZXBhcnR1cmUgUGFnZS0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNvbnRlbnRhZDE0ODY5OSI+PC9kaXY+CiAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIChkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICJjODk3MWIwNC1kOWNhLTQ0YmItODE2ZC1mMTBkZGYwMzYzMjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiAiY0dodmRHOWlkV05yWlhRdVkyOXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWQ6ICIxNDg2OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0UG9wOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYjogKG5ldyBEYXRlKCkpLmdldFRpbWUoKQogICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFzID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXMucHVzaChrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW2tleV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSAnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA/ICdodHRwcycgOiAnaHR0cCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcy5zcmMgPSBwICsgIjovL2FwaS5jb250ZW50LmFkL1NjcmlwdHMvd2lkZ2V0Mi5hc3B4PyIgKyBxcy5qb2luKCcmJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRFbGVtZW50QnlJZCgiY29udGVudGFkMTQ4Njk5IikuYXBwZW5kQ2hpbGQocyk7CiAgICAgICAgICAgICAgICAgICAgICB9KShkb2N1bWVudCk7CiAgICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyT3V0ZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXJJbm5lciI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3dJbldpZGdldCBoaWRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9InByaW50U2hpcHBpbmciPlNoaXBwaW5nIENvdW50cnk8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJwcmludEN1cnJlbmN5Ij5DdXJyZW5jeTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9InByaW50VW5pdHMiPlVuaXRzPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vc3VwcG9ydC5waG90b2J1Y2tldC5jb20vaGMvZW4tdXMvY2F0ZWdvcmllcy8yMDAxNTQzMzAtUHJpbnQiIHRhcmdldD0iX2JsYW5rIj5IZWxwPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5UmlnaHREYXRlIj4mY29weTsgMjAxNiBQaG90b2J1Y2tldDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29weVJpZ2h0RGF0ZSBoaWRlSW5XaWRnZXQiPiZjb3B5OyAyMDE2IFBob3RvYnVja2V0PC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpdGVMb2dvIHB1bGwtbGVmdCBoaWRlSW5XaWRnZXQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIvIiBjbGFzcz0ibG9nbyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9sb2dvJyk7Ij48aW1nIHNyYz0iaHR0cDovL3BpYzIucGJzcmMuY29tL2Zvb3Rlci9mb290ZXItbG9nby5wbmciIC8+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaXRlSWNvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZmFjZWJvb2suY29tL3Bob3RvYnVja2V0IiB0YXJnZXQ9Il9CTEFOSyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9mYWNlYm9vaycpOyI+PGltZyBzcmM9Imh0dHA6Ly9waWMyLnBic3JjLmNvbS9mb290ZXIvZm9vdGVyLWZhY2Vib29rLnBuZyIgLz48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9waG90b2J1Y2tldCIgdGFyZ2V0PSJfQkxBTksiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfdHdpdHRlcicpOyI+PGltZyBzcmM9Imh0dHA6Ly9waWMyLnBic3JjLmNvbS9mb290ZXIvZm9vdGVyLXR3aXR0ZXIucG5nIiAvPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BpbnRlcmVzdC5jb20vcGhvdG9idWNrZXQiIHRhcmdldD0iX0JMQU5LIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX3BpbnRlcmVzdCcpOyI+PGltZyBzcmM9Imh0dHA6Ly9waWMyLnBic3JjLmNvbS9mb290ZXIvZm9vdGVyLXBpbnRyZXN0LnBuZyIgLz48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbnN0YWdyYW0uY29tL3Bob3RvYnVja2V0IiB0YXJnZXQ9Il9CTEFOSyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9pbnN0YWdyYW0nKTsiPjxpbWcgc3JjPSJodHRwOi8vcGljMi5wYnNyYy5jb20vZm9vdGVyL2Zvb3Rlci1JbnN0YWdyYW0ucG5nIiAvPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZW5kZ3JpZEZvcm0gcHVsbC1sZWZ0IGhpZGVJbldpZGdldCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJzZW5kZ3JpZE1lc3NhZ2UiPkdldCBEZWFscywgR2l2ZWF3YXlzICYgTW9yZTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VuZGdyaWQtc3Vic2NyaXB0aW9uLXdpZGdldCIgZGF0YS10b2tlbj0iTm16QXZvMGdlV284VlFYJTJGWFlnTW5zNGRxTzB4MiUyQkVVZHh0OTRnRUI0QzJGYzlETUZjbjdyRzM1UVNBJTJCZmxaTyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+IWZ1bmN0aW9uIChkLCBzLCBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganMsIGZqcyA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUocylbMF0sIHAgPSAvXmh0dHA6Ly50ZXN0KGQubG9jYXRpb24pID8gImh0dHAiIDogImh0dHBzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkLmdldEVsZW1lbnRCeUlkKGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMgPSBkLmNyZWF0ZUVsZW1lbnQocyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcy5pZCA9IGlkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMuc3JjID0gcCArICI6Ly9zMy5hbWF6b25hd3MuY29tL3N1YnNjcmlwdGlvbi1jZG4vMC4yL3dpZGdldC5taW4uanMiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmpzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGpzLCBmanMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlciAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpLCB0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDAsIGwgPSBpbnB1dHMubGVuZ3RoOyB4IDwgbDsgeCArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRzW3hdLmdldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInKSA9PT0gJ3lvdUBleGFtcGxlLmNvbScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHNbeF0uc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsICdZb3VyIGVtYWlsIGhlcmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfShkb2N1bWVudCwgInNjcmlwdCIsICJzZW5kZ3JpZC1zdWJzY3JpcHRpb24td2lkZ2V0LWpzIik7CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVzdGltb25pYWxDb250YWluZXIgaGlkZUluV2lkZ2V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHA+IkkgbmVlZGVkIGEgdmVyeSBoaWdoIHF1YWxpdHkgcHJpbnQgdG8gZW50ZXIgaW4gYSBwaG90b2dyYXBoeSBhcnQgc2hvdy4gSSBoYWQgbXkgcGhvdG9ncmFwaCBwcmludGVkIGF0IGEgc3VwZXJiIHByaW50ZXIsIHVzaW5nIGEgdmVyeSBleHBlbnNpdmUgbWFjaGluZS4gSSBhbHNvIG9yZGVyZWQgdGhlIHNhbWUgcHJpbnQgdGhyb3VnaCBQaG90b2J1Y2tldC4gQW5kIHlvdXJzIHdhcyBzdXBlcmlvciEiPC9wPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2l0ZUxpbmtzIGNvcHkgaGlkZUluV2lkZ2V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdHNlY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InVuc3R5bGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzdWJoZWFkZXIiPldlYnNpdGUgSGVscDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vc3VwcG9ydC5waG90b2J1Y2tldC5jb20iIHRhcmdldD0iX0JMQU5LIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX2hlbHBfc2VsZicpOyI+SGVscDwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3N1cHBvcnQucGhvdG9idWNrZXQuY29tL2hjL2VuLXVzL2FydGljbGVzLzIwMTg5NDkwNCIgIHRhcmdldD0iX0JMQU5LIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX2hlbHBfZmVhdHVyZXMnKTsiPk5ldyBmZWF0dXJlczwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9sZWFybi91cGxvYWQiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfaGVscF91cGxvYWQnKTsiPkhvdyB0byB1cGxvYWQ8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdXBwb3J0LnBob3RvYnVja2V0LmNvbS9oYy9lbi11cy9jYXRlZ29yaWVzLzIwMDA1Njk4NSIgIHRhcmdldD0iX0JMQU5LIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX2hlbHBfcGF5bWVudCcpOyI+UGF5bWVudCBxdWVzdGlvbnM8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhvdG9idWNrZXQuY29tL2ZvcmdvdCIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9oZWxwX3JlY292ZXInKTsiPlJlY292ZXIgeW91ciBhY2NvdW50PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RzZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJ1bnN0eWxlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3ViaGVhZGVyIj5QaG90b2J1Y2tldCBQcmludCBTaG9wPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9waG90b2J1Y2tldC5jb20vcHJpbnQvcmV0dXJucyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9wcmludF9yZXR1cm4nKTsiPk91ciBndWFyYW50ZWU8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBob3RvYnVja2V0LmNvbS9wcmludCIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9wcmludF9wcm9kdWN0Jyk7Ij5QcmludCBwcm9kdWN0czwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9wcmludC9zdGF0dXMiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfcHJpbnRfc3RhdHVzJyk7Ij5PcmRlciBzdGF0dXM8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9waG90b2J1Y2tldC5jb20vcHJpbnQvcHJvbW90aW9ucyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9wcmludF9wcm9tb3Rpb25zJyk7Ij5Qcm9tb3Rpb25zPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vc3VwcG9ydC5waG90b2J1Y2tldC5jb20vaGMvZW4tdXMvY2F0ZWdvcmllcy8yMDAxNTQzMzAtUHJpbnQiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfcHJpbnRfZmFxJyk7Ij5GQVE8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0c2VjdGlvbiB3cmFwcmVzcG9uc2l2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN1YmhlYWRlciI+QWJvdXQgUGhvdG9idWNrZXQ8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9wcmludC9hYm91dCIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9wcmludF9hYm91dCcpOyI+QWJvdXQgdXM8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9ibG9nLnBob3RvYnVja2V0LmNvbSIgIHRhcmdldD0iX0JMQU5LIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX2Fib3V0X2Jsb2cnKTsiPkJsb2c8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9waWMucGJzcmMuY29tL2Rldl9oZWxwL1dlYkhlbHBQdWJsaWMvUGhvdG9idWNrZXRQdWJsaWNIZWxwLmh0bSIgIHRhcmdldD0iX0JMQU5LIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX2Fib3V0X2RldmVsb3BlcicpOyI+RGV2ZWxvcGVyPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcGhvdG9idWNrZXQuY29tL3Rlcm1zIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX2Fib3V0X3Rlcm1zJyk7Ij5UZXJtcyBvZiB1c2U8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9waG90b2J1Y2tldC5jb20vcHJpdmFjeSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9hYm91dF9wcml2YWN5Jyk7Ij5Qcml2YWN5IHBvbGljeTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2Jsb2cucGhvdG9idWNrZXQuY29tL2FkdmVydGlzZS13aXRoLXVzLyIgIHRhcmdldD0iX0JMQU5LIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX2Fib3V0X2FkdmVydGlzZScpOyI+QWR2ZXJ0aXNlIHdpdGggdXM8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdHNlY3Rpb24gd3JhcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN1YmhlYWRlciI+T3VyIFNlcnZpY2VzPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9waG90b2J1Y2tldC5jb20vbGVhcm4vc2hhcmUiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfc2VydmljZXNfc2hhcmluZycpOyI+UGhvdG8gc2hhcmluZzwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9kZXNrdG9wIiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX3NlcnZpY2VzX2JhY2t1cCcpOyI+UGhvdG8gYmFja3VwPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcGhvdG9idWNrZXQuY29tL3ByaW50IiBvbmNsaWNrPSJQYi5UcmFjay50cignZm9vdGVyX3NlcnZpY2VzX3ByaW50cycpOyI+T3JkZXIgcHJpbnRzPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcGhvdG9idWNrZXQuY29tL21vYmlsZSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9zZXJ2aWNlc19hcHBzJyk7Ij5Nb2JpbGUgcGhvdG8gYXBwczwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9lZGl0b3IiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfc2VydmljZXNfZWRpdG9yJyk7Ij5PbmxpbmUgcGhvdG8gZWRpdG9yPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcGhvdG9idWNrZXQuY29tL3ByaWNpbmciIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfc2VydmljZXNfcHJpY2luZycpOyI+UHJpY2luZyBQbGFuczwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3Bob3RvYnVja2V0LmNvbS9wcmljaW5nL2FkZnJlZSIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9zZXJ2aWNlc19hZGZyZWUnKTsiPkdvIEFkIEZyZWU8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0c2VjdGlvbiB3cmFwcmVzcG9uc2l2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idW5zdHlsZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN1YmhlYWRlciI+UHJpbnQgUHJvZHVjdHM8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhvdG9idWNrZXQuY29tL3ByaW50L3ByaW50cyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9wcmludF9wcmludHMnKTsiPlByaW50czwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhvdG9idWNrZXQuY29tL3ByaW50L3Bob3RvYm9va3MiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfcHJpbnRfYm9va3MnKTsiPlBob3RvIGJvb2tzPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3NlY3VyZS5waG90b2J1Y2tldC5jb20vcHJpbnQvcGhvdG9naWZ0cyIgb25jbGljaz0iUGIuVHJhY2sudHIoJ2Zvb3Rlcl9wcmludF9naWZ0cycpOyI+UGhvdG8gZ2lmdHM8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBob3RvYnVja2V0LmNvbS9wcmludC9ob21lZGVjb3IiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfcHJpbnRfZGVjb3InKTsiPkhvbWUgZGVjb3I8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBob3RvYnVja2V0LmNvbS9wcmludC9jYXJkc2FuZHN0YXRpb25lcnkiIG9uY2xpY2s9IlBiLlRyYWNrLnRyKCdmb290ZXJfcHJpbnRfY2FyZHMnKTsiPkNhcmRzICYgc3RhdGlvbmVyeTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiAgICAKICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAogICAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQogICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCcvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOwoKICAgIGdhKCdjcmVhdGUnLCAnVUEtMjQ1NDU1LTEnLCB7CiAgICAgICAgY29va2llRG9tYWluOiAncGhvdG9idWNrZXQuY29tJywKICAgICAgICBzYW1wbGVSYXRlOiAxMDAsCiAgICAgICAgbmFtZTogJ3Bob3RvYnVja2V0JwogICAgfSk7CiAgICAKICAgIGdhKCdwaG90b2J1Y2tldC5yZXF1aXJlJywgJ2Rpc3BsYXlmZWF0dXJlcycpOwogICAgZ2EoJ3Bob3RvYnVja2V0LnJlcXVpcmUnLCAnbGlua2lkJyk7CiAgICAKICAgICAgICAgICAgICAgIGdhKCdwaG90b2J1Y2tldC5zZXQnLCAnZGltZW5zaW9uMTknLCAnY3VycmVudCcpOwogICAgICAgICAgICAgICAgZ2EoJ3Bob3RvYnVja2V0LnNlbmQnLCAncGFnZXZpZXcnKTsKICAgICAgICAgICAgICAgIGdhKCdwaG90b2J1Y2tldC5zZW5kJywgJ2V2ZW50JywgJ3BidG5nJywncGFnZSB2aWV3JywnbG9nZ2Vkb3V0OmRldGFpbCcsIHtub25JbnRlcmFjdGlvbjogMX0pOwogICAgICAgIFBiLkRhdGEuYWRkKCdnYScsIHsidXJsIjoiXC9cL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbVwvYW5hbHl0aWNzLmpzIiwiZGVidWciOiIiLCJVQS0yNDU0NTUtMSI6eyJnYU5hbWUiOiJwaG90b2J1Y2tldCIsInNhbXBsZVJhdGUiOjEwMH0sIlVBLTI0NTQ1NS0xMCI6eyJnYU5hbWUiOiJtcGhvdG9idWNrZXQiLCJzYW1wbGVSYXRlIjoxMDB9LCJVQS0yNDU0NTUtMzYiOnsiZ2FOYW1lIjoicHJpbnRpbyIsInNhbXBsZVJhdGUiOjEwMH0sImFjdGl2ZSI6InBob3RvYnVja2V0In0pOwo8L3NjcmlwdD4KPG5vc2NyaXB0PgogICAgPGltZyBzdHlsZT0iZGlzcGxheTpub25lOyIgaGVpZ2h0PSIwIiB3aWR0aD0iMCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2NvbGxlY3Q/cGF5bG9hZF9kYXRhPXYlM0QxJTI2dGlkJTNEVUEtMjQ1NDU1LTEwJTI2dCUzRHBhZ2V2aWV3JTI2Y2lkJTNEMTQ2MDA1NTYzODcwODIxOTY1OTU1NjA1JTI2ZGglM0RzNTI2LnBob3RvYnVja2V0LmNvbSUyNmRwJTNEJTJGdXNlciUyRmNhcmliYmVhbmZ1c2UlMkZtZWRpYSUyRmNhcmliYmVhbiUyRmNoaWNrZW53YWZmbGVzX3pwc3h5ZzFvYmR1LmpwZy5odG1sJTI2ZHQlM0RmZWF0dXJlcGhvbmUmej0xNDYyODA0MDc2IiAvPgo8L25vc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAoZnVuY3Rpb24oKQogICAgewogICAgICAgIHZhciBkID0gbmV3IEltYWdlKDEsIDEpOwogICAgICAgIGQub25lcnJvciA9IGQub25sb2FkID0gZnVuY3Rpb24oKQogICAgICAgIHsKICAgICAgICAgICAgZC5vbmVycm9yID0gZC5vbmxvYWQgPSBudWxsOwogICAgICAgIH07CgogICAgICAgIGQuc3JjID0gWyIvL3NlY3VyZS11cy5pbXJ3b3JsZHdpZGUuY29tL2NnaS1iaW4vbT9jaT11cy05MDQ4OTZoJmNnPTAmY2M9MSZzaT0iLCBlc2NhcGUod2luZG93LmxvY2F0aW9uLmhyZWYpLCAiJnJwPSIsIGVzY2FwZShkb2N1bWVudC5yZWZlcnJlciksICImdHM9Y29tcGFjdCZybmQ9IiwgKG5ldyBEYXRlKCkpLmdldFRpbWUoKV0uam9pbignJyk7CiAgICAgIH0pKCk7Cjwvc2NyaXB0PgoKPG5vc2NyaXB0PgogICAgPGRpdj48aW1nIHNyYz0iLy9zZWN1cmUtdXMuaW1yd29ybGR3aWRlLmNvbS9jZ2ktYmluL20/Y2k9dXMtOTA0ODk2aCZhbXA7Y2c9MCZhbXA7Y2M9MSZhbXA7dHM9bm9zY3JpcHQiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGFsdD0iIiAvPjwvZGl2Pgo8L25vc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClBiLkluaXRFdmVudFF1ZXVlLmFkZFRvUGFnZUxvYWQoZnVuY3Rpb24oKXsKICAgIHZhciBzcmNVcmwgPSAnLy9sb2FkdXMuZXhlbGF0b3IuY29tL2xvYWQvP3A9MzkxJmc9MSZrdz0mJzsKICAgICQuZ2V0U2NyaXB0KHNyY1VybCk7Cn0sIFBiLkluaXRFdmVudFF1ZXVlLkxPV19QUklPUklUWSk7Cjwvc2NyaXB0PgogICAgICAgIDxpZnJhbWUgaWQ9ImxpdmVyYW1wX2JlYWNvbiIgbmFtZT0iX3JsY2RuIiB3aWR0aD0wIGhlaWdodD0wIGZyYW1lYm9yZGVyPTAgZGF0YS1zcmM9Ii8vcmMucmxjZG4uY29tLzI5ODEuaHRtbCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48L2lmcmFtZT4gCiAgICAKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIFBiLkluaXRFdmVudFF1ZXVlLmFkZFRvUGFnZUxvYWQoZnVuY3Rpb24oKXsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZWwgPSAkKCcjbGl2ZXJhbXBfYmVhY29uJyk7CiAgICAgICAgICAgIGVsLmF0dHIoJ3NyYycsIGVsLmRhdGEoJ3NyYycpKTsKICAgICAgICAgICAgUGIuVHJhY2sudHIoImxpdmVyYW1wX2JlYWNvbl9maXJlZCIpOwogICAgICAgIH0sIDEwMDApOwogICAgfSwgUGIuSW5pdEV2ZW50UXVldWUuTE9XX1BSSU9SSVRZKTsKICAgIDwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiQuYWpheCh7CiAgICB1cmw6ICcvL3RhZ3MuY3J3ZGNudHJsLm5ldC9jLzI4My9jYy5qcycsCiAgICBjYWNoZTogdHJ1ZSwKICAgIGRhdGFUeXBlOiAnc2NyaXB0JywKICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0eXBlb2YgTE9UQ0NfMjgzICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgICAgICBMT1RDQ18yODMuYmNwKCk7CiAgICAgICAgfQogICAgfQp9KTsKPC9zY3JpcHQ+CjwhLS0gIFF1YW50Y2FzdCBUYWcgLS0+CjxzY3JpcHQ+CiAgcWNkYXRhID0ge30gfHwgcWNkYXRhOwogICAgICAgKGZ1bmN0aW9uKCl7CiAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgZWxlbS5zcmMgPSAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wgPT0gImh0dHBzOiIgPyAiaHR0cHM6Ly9zZWN1cmUiIDogImh0dHA6Ly9waXhlbCIpICsgIi5xdWFudHNlcnZlLmNvbS9hcXVhbnQuanM/YT1wLTE3Nm9qOUJNa2RfaHciOwogICAgICAgZWxlbS5hc3luYyA9IHRydWU7CiAgICAgICBlbGVtLnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKICAgICAgIHZhciBzY3B0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOwogICAgICAgc2NwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtLHNjcHQpOwogICAgIH0oKSk7CgoKICAgdmFyIHFjZGF0YSA9IHtxYWNjdDogJ3AtMTc2b2o5Qk1rZF9odycsCiAgICAgICAgdWlkOiAnJwogICAgfTsKPC9zY3JpcHQ+Cjxub3NjcmlwdD4KICA8aW1nIHNyYz0iLy9waXhlbC5xdWFudHNlcnZlLmNvbS9waXhlbC9wLTE3Nm9qOUJNa2RfaHcuZ2lmP2xhYmVscz1fZnAuZXZlbnQuRGVmYXVsdCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiBib3JkZXI9IjAiIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iUXVhbnRjYXN0Ii8+Cjwvbm9zY3JpcHQ+CjwhLS0gRW5kIFF1YW50Y2FzdCBUYWcgLS0+CjwhLS0gU3RhcnQgQ29udmVyc2FudCBUYWcgLS0+CjwhLS0gRW5kIENvbnZlcnNhbnQgVGFnIC0tPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KJC5hamF4KHsKICAgIHVybDogJy8vcHMuZXllb3RhLm5ldC9waXhlbD9waWQ9aWZpNTFtMSZ0PWpzJnNpZD1wYicsCiAgICBjYWNoZTogdHJ1ZSwKICAgIGRhdGFUeXBlOiAnc2NyaXB0Jwp9KTsKPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIFBiLkRhdGEuYWRkKCd0cmFja1Vuc3VwcG9ydGVkQnJvd3NlcicsIHRydWUpOwogICAgPC9zY3JpcHQ+CjwhLS0gc3RhcnQgTWl4cGFuZWwgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4oZnVuY3Rpb24oZixiKXtpZighYi5fX1NWKXt2YXIgYSxlLGksZzt3aW5kb3cubWl4cGFuZWw9YjtiLl9pPVtdO2IuaW5pdD1mdW5jdGlvbihhLGUsZCl7ZnVuY3Rpb24gZihiLGgpe3ZhciBhPWguc3BsaXQoIi4iKTsyPT1hLmxlbmd0aCYmKGI9YlthWzBdXSxoPWFbMV0pO2JbaF09ZnVuY3Rpb24oKXtiLnB1c2goW2hdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpKX19dmFyIGM9YjsidW5kZWZpbmVkIiE9PXR5cGVvZiBkP2M9YltkXT1bXTpkPSJtaXhwYW5lbCI7Yy5wZW9wbGU9Yy5wZW9wbGV8fFtdO2MudG9TdHJpbmc9ZnVuY3Rpb24oYil7dmFyIGE9Im1peHBhbmVsIjsibWl4cGFuZWwiIT09ZCYmKGErPSIuIitkKTtifHwoYSs9IiAoc3R1YikiKTtyZXR1cm4gYX07Yy5wZW9wbGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gYy50b1N0cmluZygxKSsiLnBlb3BsZSAoc3R1YikifTtpPSJkaXNhYmxlIHRyYWNrIHRyYWNrX3BhZ2V2aWV3IHRyYWNrX2xpbmtzIHRyYWNrX2Zvcm1zIHJlZ2lzdGVyIHJlZ2lzdGVyX29uY2UgYWxpYXMgdW5yZWdpc3RlciBpZGVudGlmeSBuYW1lX3RhZyBzZXRfY29uZmlnIHBlb3BsZS5zZXQgcGVvcGxlLnNldF9vbmNlIHBlb3BsZS5pbmNyZW1lbnQgcGVvcGxlLmFwcGVuZCBwZW9wbGUudW5pb24gcGVvcGxlLnRyYWNrX2NoYXJnZSBwZW9wbGUuY2xlYXJfY2hhcmdlcyBwZW9wbGUuZGVsZXRlX3VzZXIiLnNwbGl0KCIgIik7CmZvcihnPTA7ZzxpLmxlbmd0aDtnKyspZihjLGlbZ10pO2IuX2kucHVzaChbYSxlLGRdKX07Yi5fX1NWPTEuMjthPWYuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiO2EuYXN5bmM9ITA7YS5zcmM9InVuZGVmaW5lZCIhPT10eXBlb2YgTUlYUEFORUxfQ1VTVE9NX0xJQl9VUkw/TUlYUEFORUxfQ1VTVE9NX0xJQl9VUkw6Ii8vY2RuLm14cG5sLmNvbS9saWJzL21peHBhbmVsLTItbGF0ZXN0Lm1pbi5qcyI7ZT1mLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXTtlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsZSl9fSkoZG9jdW1lbnQsd2luZG93Lm1peHBhbmVsfHxbXSk7Cm1peHBhbmVsLmluaXQoIjhmOTQzMTM5NGVkYTdiYzM0NzQxODg5YTg2ZDFiZDUyIik7PC9zY3JpcHQ+CjwhLS0gZW5kIE1peHBhbmVsIC0tPgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIFBiLkRhdGEuYWRkKCdtaXhwYW5lbCcsIFtdKTsKICAgIFBiLkRhdGEuYWRkKCdmZWF0dXJlS2V5cycsIFt7ImsiOiJtZHByZXZpZXciLCJ2IjoiY3VycmVudCJ9LHsiayI6Im1kcHJldmlldyIsInYiOiJjdXJyZW50In1dKTsKICAgIFBiLkluaXRFdmVudFF1ZXVlLmFkZFRvUGFnZUxvYWQoZnVuY3Rpb24oKSB7CiAgICAgICAgUGIuQ29tcG9uZW50LlRyYWNraW5nLk1peHBhbmVsLmluaXQoKTsKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgIAogICAgICAgICAKICAgIH0sIFBiLkluaXRFdmVudFF1ZXVlLkhJR0hfUFJJT1JJVFkpOwo8L3NjcmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIFBiLkRhdGEuYWRkKCdmYWNlYm9va0tleScsIDM4OTk3MTU5NDYwKTsKPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9zdGF0aWMyLnBic3JjLmNvbS9wa2cvYWRmZTAyNmQxOTU1NTc4OTExYjRjZDFkOGU1YTRlNTYzZDZjMTY1MC9kZWZlcnJlZF9kZXRhaWxfZGV0YWlscGFnZS5qcyIgPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vc3RhdGljMi5wYnNyYy5jb20vcGtnL2FkZmUwMjZkMTk1NTU3ODkxMWI0Y2QxZDhlNWE0ZTU2M2Q2YzE2NTAvZGVmZXJyZWRfZGV0YWlsX2RldGFpbHBhZ2VfdGVtcGxhdGVzLmpzIiA+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgaWYgKCdtYWluJyAhPT0gJ2VtcHR5JykgewogICAgICAgICAgICBQYi5KU1RlbXBsYXRlcy5zZXR1cFRlbXBsYXRlcygpOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgUGIuRGF0YS5hZGQoJ3pvb21Nb2RhbCcsIHsiaWQiOiJ6b29tTW9kYWwiLCJjbGFzc05hbWUiOiJ6b29tTW9kYWwgbm8tZm9vdGVyIiwiYnV0dG9ucyI6W10sInRpdGxlIjoiIiwic3RhdGljIjoiIiwidGVtcGxhdGVOYW1lIjoiI3pvb21Nb2RhbFRlbXBsYXRlIiwiaGFzRm9vdGVyIjp0cnVlLCJpbmNsdWRlRm9ybSI6dHJ1ZSwiZm9vdGVyTm90ZSI6IiIsImZvcmNlQWN0aW9uIjpmYWxzZSwia2V5Ym9hcmQiOiJ0cnVlIiwiZmlsbXN0cmlwIjpudWxsfSk7Cjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgUGIuRGF0YS5hZGQoJ3JlcG9ydE1vZGFsJywgeyJhamF4RmV0Y2hEYXRhIjoiXC9jb21wb25lbnRcL1JlcG9ydEFidXNlLVJlcG9ydE1vZGFsIn0pOwo8L3NjcmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIFBiLkRhdGEuYWRkKCdsb2dpbk1vZGFsJywgeyJhamF4RmV0Y2hEYXRhIjoiXC9jb21wb25lbnRcL0NvbW1vbi1Mb2dpbi1Mb2dpbk1vZGFsIn0pOwo8L3NjcmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgIFBiLkRhdGEuYWRkKCdzaGFyZU1vZGFsJywgeyJhamF4RmV0Y2hEYXRhIjoiXC9jb21wb25lbnRcL1NoYXJlLVNoYXJlTW9kYWwiLCJpc1Nwb25zb3JlZEVkaXQiOmZhbHNlfSk7Cjwvc2NyaXB0PgoKPCEtLWV4dGVybmFsIGRlZmVycmVkLS0+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiID5QYi5Gb3JtLmFkZEhhc2goIiNzaWduVXBGb3JtIik7PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiA+UGIuQ29tcG9uZW50LkVsZW1lbnQuTWVzc2FnZS5nbG9iYWxBbGVydCgpOzwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+Cg==" alt="" /></strong><br /> 5610 Clarendon Rd.,<br /> Brooklyn, NY 11203</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;">visit our website: at </span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><a title="http://www.suedenyc.com" href="http://www.suedenyc.com" target="_blank">http://www.suedenyc.com</a></span></span></p> <p><br /> <span style="font-size: 15px; font-family: Arial; color: #000000; background-color: transparent; font-weight: normal; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline;">&nbsp;</span></p> http://www.brooklynlife.net/category/Dining/Suade_Restaurant.htm 09 May 2016 04:56 +0000 Fada French Bistro <p style="text-align: center;"><span style="color: #993300;"><span style="font-size: x-large;"><strong>Fada French Bistro</strong></span></span></p> <p>&nbsp;</p> <p><span style="color: #333399;"><span style="font-size: medium;">Address: 530 Driggs Ave. (corner of N8th) Brooklyn, NY 11211<br />By subway: L train to Bedford Ave (First stop from Manhattan), exit Driggs. <br />Easy street parking everyday.<br /><br />Hours: Tuesday-Friday 5pm-midnight<br />Saturdat-Sunday 11am-midnight </span></span></p> <p><span style="color: #333399;"><span style="font-size: medium;"><br /></span></span></p> <p><span style="color: #333399;"><span style="font-size: medium;">visit our website: at </span></span></p> <p><span style="color: #333399;"><span style="font-size: medium;"><a title="http://www.fadany.com" href="http://www.fadany.com" target="_blank">http://www.fadany.com</a></span></span></p> http://www.brooklynlife.net/category/Dining/Fada_French_Bistro.htm 09 May 2016 04:20 +0000 Uncle Jimmys BBQ <p style="text-align: center;"><span style="color: #993300;"><span style="font-size: x-large;"><strong>Uncle Jimmys BBQ</strong></span></span></p> <p>&nbsp;</p> <p><span style="color: #333399;"><span style="font-size: medium;"><strong><em>Baby Back Ribs, Pulled Pork, Wings and Burgers Served at our BBQ.</em></strong></span></span></p> <p><span style="color: #333399;"><span style="font-size: medium;"><span style="font-size: medium;">Visit our BBQ Restaurant in Bay Ridge!&nbsp; We also offer Delivery and Take Out.</span></span></span></p> <p>&nbsp;</p> <p><span style="color: #333399;"><span style="font-size: medium;"><span style="font-size: medium;">visit our website: at </span></span></span></p> <p><a title="http://www.bbqbrooklyn.com" href="http://www.bbqbrooklyn.com" target="_blank"><span style="color: #333399;"><span style="font-size: medium;"><span style="font-size: medium;">http://www.bbqbrooklyn.com</span></span></span></a></p> http://www.brooklynlife.net/category/Dining/Uncle_Jimmys_BBQ.htm 09 May 2016 04:03 +0000 Tuscany Grill <p style="text-align: center;"><span style="color: #993300;"><span style="font-size: x-large;"><strong>Tuscany Grill.</strong></span></span></p> <p>&nbsp;</p> <p><span style="font-size: medium;"><span style="color: #333399;">Tuscany Grill has been a restaurant staple here in Bay Ridge Brooklyn for the last 20 years. We are providing authentic Italian cuisine with flavors and dishes coming right out of Tuscany, Italy.&nbsp;<br /><br />Whether you are looking for a relaxing night with friends, and intimate dinner with a loved one or just looking for that real Italian flavor in Brooklyn, Tuscany Grill is your destination.</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></p> <h2 style="text-align: left;" class="wsite-content-title"><span style="font-size: medium;"><span style="color: #333399;">Hours</span></span></h2> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <div style="text-align: left;" class="paragraph"><span style="font-size: medium;"><span style="color: #333399;">Monday &nbsp; &nbsp;<span style="font-size: x-small;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>5:00-11:00<br />Tuesday&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5:00-11:00<br />Wednesday&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;5:00-11:00<br />Thursday&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5:00-11:00<br />Friday&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;5:00-11:00<br />Saturday&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;5:00-11:00<br />​Sunday&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;5:00-11:00</span></span></div> <div style="text-align: left;" class="paragraph"><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></div> <div style="text-align: left;" class="paragraph"><span style="font-size: medium;"><span style="color: #333399;">visit our website: at </span></span></div> <div style="text-align: left;" class="paragraph"><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></div> <div style="text-align: left;" class="paragraph"><span style="font-size: medium;"><span style="color: #333399;"><a title="http://www.tuscanygrillbrooklyn.com" href="http://www.tuscanygrillbrooklyn.com" target="_blank">http://www.tuscanygrillbrooklyn.com</a></span></span></div> http://www.brooklynlife.net/category/Dining/Tuscany_Grill.htm 09 May 2016 03:51 +0000 Colandra New Corner Restaurant <p style="text-align: center;"><span style="font-size: x-large;"><span style="color: #993300;"><strong>Colandra New Corner Restaurant.</strong></span></span></p> <p style="text-align: center;"><span style="color: #333399;"><br /></span></p> <p><span style="font-size: medium;"><span style="color: #333399;">The New Corner was founded in 1936 by Vincenzo Colandrea as a one room pizzeria. Through hard work and endless hours of supervision and determination, New Corner Restaurant has expanded into a full-service, third generation Italian restaurant that is now considered a "Landmark" to visit when in Brooklyn. In addition to placing the quality of food and service on the highest priority, the Colandrea family has always tried to maintain the family-oriented feel a customer experiences when dining here. When you're here, you're part of the family. Second Generation Management was passed to Vincenzo's son, Joseph Colandrea, in 1963. Currently Joseph's two sons, Vincent and Steven Colandrea, are the third generation managers who, adhearing to a strict formula inherited from their father and grandfather, maintain the very qualities that make this restaurant what it is today. <br /><br /> It is our sincere hope that in the awareness of our experience and background you will appreciate and enjoy the variety of specialties offered on our menu. Buon Appetito!</span></span></p> <p>&nbsp;</p> <p><span style="font-size: medium;"><span style="color: #333399;">visit our website: at </span></span></p> <p><a title="http://www.newcornerrestaurant.com" href="http://www.newcornerrestaurant.com" target="_blank"><span style="font-size: medium;"><span style="color: #333399;">http://www.newcornerrestaurant.com</span></span></a></p> http://www.brooklynlife.net/category/Dining/Colandra_New_Corner_Restaurant.htm 09 May 2016 03:40 +0000 Clementes Maryland Crab House <p style="text-align: center;"><span style="color: #993300;"><span style="font-size: x-large;"><strong>Clementes Maryland Crab House</strong></span></span></p> <p><span style="color: #333399;"> </span></p> <p><span style="font-size: x-small;"> </span></p> <p style="text-align: left;"><span style="font-size: medium;">Our menu offers something for everyone.&nbsp; We serve only the freshest products, and everything is cooked to order.&nbsp; If it's just a casual drink that you're looking for, then our bayside Tiki Bar and outdoor lounge is the jusClementes Maryland Crab Houset the place to kick back, and enjoy the picturesque Venice Marina.&nbsp; Clemente's dining room can accommodate all private&nbsp;party sizes, so bring your family and friends, and let our friendly staff spoil you.</span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><span style="font-size: medium;"><span style="font-size: xx-small;">Since 2002, CClementes Maryland Crab Houselemente's Maryland Crab House has been offering a complete dining experience.&nbsp; </span><br /></span></p> <p><span style="font-size: large;"><span style="color: #333399;"><span style="font-size: medium;">visit our website: at </span></span></span></p> <p><span style="font-size: large;"><a title="http://www.clementescrabhouse.com" href="http://www.clementescrabhouse.com" target="_blank"><span style="color: #333399;"><span style="font-size: medium;">http://www.clementescrabhouse.com</span></span></a></span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> http://www.brooklynlife.net/category/Dining/Clementes_Maryland_Crab_House.htm 09 May 2016 03:28 +0000 Sahara Restaurant <p style="text-align: center;"><span style="color: #993300;"><span style="font-size: x-large;"><strong>Sahara Restaurant </strong></span></span></p> <p>&nbsp;</p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;">Sahara restaurant operates one of the largest and most popular Turkish restaurant in new york since 1986 </span></span></p> <p class="font_8">&nbsp;</p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;">T</span></span><span style="font-size: medium;"><span style="color: #333399;">he legendary&nbsp;</span></span><span style="font-size: medium;"><span style="color: #333399;">Sahara Restaurant&nbsp;</span></span><span style="font-size: medium;"><span style="color: #333399;">Has been serving its loyal costumers since 1986,&nbsp;</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;">Sahara is the first largest&nbsp;</span></span><span style="font-size: medium;"><span style="color: #333399;">Mediterranean restaurant in the USA.</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;">sahara restaurant is The founder of Gyro and Shish Kebab&nbsp;</span></span><span style="font-size: medium;"><span style="color: #333399;">wonderful garden dining&nbsp;</span></span><span style="font-size: medium;"><span style="color: #333399;">outdoor seating</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;">&nbsp;Sahara Restaurant is offering you a mini mediterranean gateaway with a choice of many different rooms and atmospheres with a great menu selection. .</span></span></p> <p><span style="font-size: medium;"><span style="color: #333399;"> </span></span></p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;">Thank you for visiting us online</span></span></p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;"><br /></span></span></p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;">For more information visit our website: at </span></span></p> <p class="font_8"><span style="font-size: medium;"><span style="color: #333399;"><a title="http://www.saharanewyork.com" href="http://www.saharanewyork.com" target="_blank">http://www.saharanewyork.com</a></span></span></p> http://www.brooklynlife.net/category/Dining/Sahara_Restaurant_.htm 09 May 2016 03:13 +0000