10.6 sec in total
28 ms
9.9 sec
679 ms
Visit newburyportbuilder.com now to see the best up-to-date Newburyportbuilder content and also check out these interesting facts you probably never knew about newburyportbuilder.com
Greene Construction is one of the home building and remodeling construction experts of Newburyport, MA. We build custom homes and help make lives even better.
Visit newburyportbuilder.comWe analyzed Newburyportbuilder.com page load time and found that the first response time was 28 ms and then it took 10.6 sec to load all DOM resources and completely render a web page. This is a poor result, as 90% of websites can load faster.
newburyportbuilder.com performance score
name
value
score
weighting
Value5.7 s
5/100
10%
Value57.0 s
0/100
25%
Value27.8 s
0/100
10%
Value450 ms
63/100
30%
Value0.095
91/100
15%
Value31.1 s
0/100
10%
28 ms
54 ms
927 ms
3 ms
76 ms
Our browser made a total of 92 requests to load all elements on the main page. We found that 2% of them (2 requests) were addressed to the original Newburyportbuilder.com, 70% (64 requests) were made to Greenedesignandbuild.com and 16% (15 requests) were made to . The less responsive or slowest element that took the longest time to load (5.7 sec) relates to the external source Greenedesignandbuild.com.
Page size can be reduced by 1.4 MB (12%)
11.7 MB
10.3 MB
In fact, the total size of Newburyportbuilder.com main page is 11.7 MB. This result falls beyond the top 1M of websites and identifies a large and not optimized web page that may take ages to load. 70% of websites need less resources to load. Images take 11.1 MB which makes up the majority of the site volume.
Potential reduce by 205.9 kB
HTML content can be minified and compressed by a website’s server. The most efficient way is to compress content using GZIP which reduces data amount travelling through the network between server and browser. HTML code on this page is well minified. It is highly recommended that content of this web page should be compressed using GZIP, as it can save up to 205.9 kB or 81% of the original size.
Potential reduce by 1.2 MB
Image size optimization can help to speed up a website loading time. The chart above shows the difference between the size before and after optimization. Obviously, Newburyportbuilder needs image optimization as it can save up to 1.2 MB or 11% of the original volume. The most popular and efficient tools for JPEG and PNG image optimization are Jpegoptim and PNG Crush.
Potential reduce by 2.8 kB
It’s better to minify JavaScript in order to improve website performance. The diagram shows the current total size of all JavaScript files against the prospective JavaScript size after its minification and compression. This website has mostly compressed JavaScripts.
Potential reduce by 0 B
CSS files minification is very important to reduce a web page rendering time. The faster CSS files can load, the earlier a page can be rendered. Newburyportbuilder.com has all CSS files already compressed.
Number of requests can be reduced by 46 (72%)
64
18
The browser has sent 64 CSS, Javascripts, AJAX and image requests in order to completely render the main page of Newburyportbuilder. We recommend that multiple CSS and JavaScript files should be merged into one by each type, as it can help reduce assets requests from 27 to 1 for JavaScripts and from 21 to 1 for CSS and as a result speed up the page load time.
newburyportbuilder.com
28 ms
newburyportbuilder.com
54 ms
www.greenedesignandbuild.com
927 ms
bmV3IE9mZnNjcmVlbkNhbnZhcygzMDAsMTUwKTppLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGE9ci5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pLG89KGEudGV4dEJhc2VsaW5lPSJ0b3AiLGEuZm9udD0iNjAwIDMycHggQXJpYWwiLHt9KTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe29bZV09dChhLGUsbil9KSxvfWZ1bmN0aW9uIHQoZSl7dmFyIHQ9aS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTt0LnNyYz1lLHQuZGVmZXI9ITAsaS5oZWFkLmFwcGVuZENoaWxkKHQpfSJ1bmRlZmluZWQiIT10eXBlb2YgUHJvbWlzZSYmKG89IndwRW1vamlTZXR0aW5nc1N1cHBvcnRzIixzPVsiZmxhZyIsImVtb2ppIl0sbi5zdXBwb3J0cz17ZXZlcnl0aGluZzohMCxldmVyeXRoaW5nRXhjZXB0RmxhZzohMH0sZT1uZXcgUHJvbWlzZShmdW5jdGlvbihlKXtpLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGUse29uY2U6ITB9KX0pLG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3ZhciBuPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPUpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShvKSk7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiYibnVtYmVyIj09dHlwZW9mIGUudGltZXN0YW1wJiYobmV3IERhdGUpLnZhbHVlT2YoKTxlLnRpbWVzdGFtcCs2MDQ4MDAmJiJvYmplY3QiPT10eXBlb2YgZS5zdXBwb3J0VGVzdHMpcmV0dXJuIGUuc3VwcG9ydFRlc3RzfWNhdGNoKGUpe31yZXR1cm4gbnVsbH0oKTtpZighbil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzJiYidW5kZWZpbmVkIiE9dHlwZW9mIFVSTCYmVVJMLmNyZWF0ZU9iamVjdFVSTCYmInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iKXRyeXt2YXIgZT0icG9zdE1lc3NhZ2UoIitmLnRvU3RyaW5nKCkrIigiK1tKU09OLnN0cmluZ2lmeShzKSx1LnRvU3RyaW5nKCkscC50b1N0cmluZygpXS5qb2luKCIsIikrIikpOyIscj1uZXcgQmxvYihbZV0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSxhPW5ldyBXb3JrZXIoVVJMLmNyZWF0ZU9iamVjdFVSTChyKSx7bmFtZToid3BUZXN0RW1vamlTdXBwb3J0cyJ9KTtyZXR1cm4gdm9pZChhLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtjKG49ZS5kYXRhKSxhLnRlcm1pbmF0ZSgpLHQobil9KX1jYXRjaChlKXt9YyhuPWYocyx1LHApKX10KG4pfSkudGhlbihmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSluLnN1cHBvcnRzW3RdPWVbdF0sbi5zdXBwb3J0cy5ldmVyeXRoaW5nPW4uc3VwcG9ydHMuZXZlcnl0aGluZyYmbi5zdXBwb3J0c1t0XSwiZmxhZyIhPT10JiYobi5zdXBwb3J0cy5ldmVyeXRoaW5nRXhjZXB0RmxhZz1uLnN1cHBvcnRzLmV2ZXJ5dGhpbmdFeGNlcHRGbGFnJiZuLnN1cHBvcnRzW3RdKTtuLnN1cHBvcnRzLmV2ZXJ5dGhpbmdFeGNlcHRGbGFnPW4uc3VwcG9ydHMuZXZlcnl0aGluZ0V4Y2VwdEZsYWcmJiFuLnN1cHBvcnRzLmZsYWcsbi5ET01SZWFkeT0hMSxuLnJlYWR5Q2FsbGJhY2s9ZnVuY3Rpb24oKXtuLkRPTVJlYWR5PSEwfX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZX0pLnRoZW4oZnVuY3Rpb24oKXt2YXIgZTtuLnN1cHBvcnRzLmV2ZXJ5dGhpbmd8fChuLnJlYWR5Q2FsbGJhY2soKSwoZT1uLnNvdXJjZXx8e30pLmNvbmNhdGVtb2ppP3QoZS5jb25jYXRlbW9qaSk6ZS53cGVtb2ppJiZlLnR3ZW1vamkmJih0KGUudHdlbW9qaSksdChlLndwZW1vamkpKSl9KSl9KCh3aW5kb3csZG9jdW1lbnQpLHdpbmRvdy5fd3BlbW9qaVNldHRpbmdzKTsK
3 ms
style.min.css
76 ms
autoptimize_single_37e40fb2401e9d466c5588da228b2394.php
88 ms
autoptimize_single_3fd2afa98866679439097f4ab102fe0a.php
86 ms
autoptimize_single_a0b823f7ab1f0a3a563fb10c3664d2a6.php
87 ms
global.min.css
54 ms
autoptimize_single_852c010cad83c1b56b35bb25521627ac.php
43 ms
autoptimize_single_bb8b44d6b94c0f2ce913e70ac712d18a.php
78 ms
autoptimize_single_cbfb4e568ec84c228d9403db89f55f21.php
90 ms
autoptimize_single_1baf4c181ae358bceb19ab48886bb491.php
108 ms
autoptimize_single_60e11e6d88bbcbca8e13342ea848dba2.php
730 ms
js_composer.min.css
113 ms
jquery.min.js
124 ms
jquery-migrate.min.js
148 ms
css
43 ms
javascript;base64,CnZhciBwYkxvY2FsaXplT2JqID0geyJhamF4IjoiaHR0cHM6XC9cL3d3dy5ncmVlbmVkZXNpZ25hbmRidWlsZC5jb21cL3dwLWFkbWluXC9hZG1pbi1hamF4LnBocCIsInNlY29uZHMiOiJzZWNvbmRzIiwidGhpc1dpbGxDbG9zZSI6IlRoaXMgd2lsbCBjbG9zZSBpbiIsImljb25zIjp7ImNsb3NlX2ljb24iOiI8c3ZnIGNsYXNzPVwiYXlzX3BiX21hdGVyaWFsX2Nsb3NlX2ljb25cIiB4bWxucz1cImh0dHBzOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBoZWlnaHQ9XCIzNnB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMzZweFwiIGZpbGw9XCIjMDAwMDAwXCIgYWx0PVwiUG9wLXVwIENsb3NlXCI+PHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiXC8+PHBhdGggZD1cIk0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6XCJcLz48XC9zdmc+IiwiY2xvc2VfY2lyY2xlX2ljb24iOiI8c3ZnIGNsYXNzPVwiYXlzX3BiX21hdGVyaWFsX2Nsb3NlX2NpcmNsZV9pY29uXCIgeG1sbnM9XCJodHRwczpcL1wvd3d3LnczLm9yZ1wvMjAwMFwvc3ZnXCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIzNlwiIGFsdD1cIlBvcC11cCBDbG9zZVwiPjxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIlwvPjxwYXRoIGQ9XCJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6XCJcLz48XC9zdmc+Iiwidm9sdW1lX3VwX2ljb24iOiI8c3ZnIGNsYXNzPVwiYXlzX3BiX2ZhX3ZvbHVtZVwiIHhtbG5zPVwiaHR0cHM6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Z1wiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMzZcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCJcLz48cGF0aCBkPVwiTTMgOXY2aDRsNSA1VjRMNyA5SDN6bTEzLjUgM2MwLTEuNzctMS4wMi0zLjI5LTIuNS00LjAzdjguMDVjMS40OC0uNzMgMi41LTIuMjUgMi41LTQuMDJ6TTE0IDMuMjN2Mi4wNmMyLjg5Ljg2IDUgMy41NCA1IDYuNzFzLTIuMTEgNS44NS01IDYuNzF2Mi4wNmM0LjAxLS45MSA3LTQuNDkgNy04Ljc3cy0yLjk5LTcuODYtNy04Ljc3elwiXC8+PFwvc3ZnPiIsInZvbHVtZV9tdXRlX2ljb24iOiI8c3ZnIHhtbG5zPVwiaHR0cHM6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Z1wiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCJcLz48cGF0aCBkPVwiTTcgOXY2aDRsNSA1VjRsLTUgNUg3elwiXC8+PFwvc3ZnPiJ9fTsK
2 ms
autoptimize_single_f3d5fe90ca6738715e756f29a7026721.php
1014 ms
owl.carousel.min.js
133 ms
autoptimize_single_79397eb28ae4c733cd080d3f3499788c.php
1902 ms
javascript;base64,
1 ms
email-decode.min.js
122 ms
javascript;base64,DQogICAgICAgICAgCQkJCWpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCl7DQogICAgICAgICAgICAgICAgICAgIGlmICgkKCIudGVzdGltb25pYWwtY2FyZHMua2QtdGNhcmRzLTY2ZDg0ZmIzYTQ5ZDggLnRjYXJkcy1jb250ZW50IikubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgICAgJCgiLnRlc3RpbW9uaWFsLWNhcmRzLmtkLXRjYXJkcy02NmQ4NGZiM2E0OWQ4IC50Y2FyZHMtY29udGVudCIpLm93bENhcm91c2VsKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWdlQ2xhc3M6ICJvd2wtd3JhcHBlciIsDQogICAgICAgICAgICAgICAgICAgICAgICBzdGFnZU91dGVyQ2xhc3M6ICJvd2wtd3JhcHBlci1vdXRlciIsDQogICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRDbGFzczogIm93bC1jYXJvdXNlbCIsDQogICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlOnsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOnsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90czogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2U3BlZWQ6IDUwMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc2ODp7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOjIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHM6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXY6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdlNwZWVkOiA1MDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0OnsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6MywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90czogZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2U3BlZWQ6IDUwMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNjY6e25hdjogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdlNwZWVkOiA1MDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1NwZWVkOiA1MDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3RzRWFjaDogdHJ1ZSx9LA0KICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHJld2luZDogdHJ1ZSxsb29wOiB0cnVlLGF1dG9wbGF5OiBmYWxzZSxhdXRvcGxheUhvdmVyUGF1c2U6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgCQkJCX0pOw0KICAgICAgICAgIAkJCQ==
1 ms
javascript;base64,aWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4KSB7IGpRdWVyeShkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKHsndG9wJzogJzAnLCAncmlnaHQnOiAnMCcsICdib3R0b20nOiAnMCcsICdsZWZ0JzogJzAnfSk7IH0gZWxzZSB7IGpRdWVyeShkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKHsndG9wJzogJzAnLCAncmlnaHQnOiAnMCcsICdib3R0b20nOiAnMCcsICdsZWZ0JzogJzAnfSk7IH0=
1 ms
javascript;base64,CiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCAkICkgewoJICAgICAgICAgICAgICAgICAgICAndXNlIHN0cmljdCc7CiAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGJWaWV3c0ZsYWdfMiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ3RlbXBsYXRlJyA9PSAnbm90aWZpY2F0aW9uJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxzJykucHJlcGVuZFRvKCQoZG9jdW1lbnQuYm9keSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsczpub3QoLmF5cy1wYi1tb2RhbHMuYXlzLXBiLW5vdGlmaWNhdGlvbi1tb2RhbCknKS5hcHBlbmRUbygkKGRvY3VtZW50LmJvZHkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc01vYmlsZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsb3NlUG9wdXBPdmVybGF5ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc1BhZ2VTY3JvbGxEaXNhYmxlZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hlY2tBbmltU3BlZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF5c19wYl9hbmltYXRpb25fY2xvc2Vfc3BlZWQgPSAkKGRvY3VtZW50KS5maW5kKCcjYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZF8yJykudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXlzX3BiX2VmZmVjdEluXzIgPSAkKGRvY3VtZW50KS5maW5kKCcjYXlzX3BiX21vZGFsX2FuaW1hdGVfaW5fMicpLnZhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF5c19wYl9lZmZlY3RPdXRfMiA9ICQoZG9jdW1lbnQpLmZpbmQoJyNheXNfcGJfbW9kYWxfYW5pbWF0ZV9vdXRfMicpLnZhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNb2JpbGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUG9wdXBPdmVybGF5ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BhZ2VTY3JvbGxEaXNhYmxlZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBbmltU3BlZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF5c19wYl9hbmltYXRpb25fY2xvc2Vfc3BlZWQgPSAkKGRvY3VtZW50KS5maW5kKCcjYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZF9tb2JpbGVfMicpLnZhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF5c19wYl9lZmZlY3RJbl8yID0gJChkb2N1bWVudCkuZmluZCgnI2F5c19wYl9tb2RhbF9hbmltYXRlX2luX21vYmlsZV8yJykudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXlzX3BiX2VmZmVjdE91dF8yID0gJChkb2N1bWVudCkuZmluZCgnI2F5c19wYl9tb2RhbF9hbmltYXRlX291dF9tb2JpbGVfMicpLnZhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGF5c19wYl9kZWxheU9wZW5fMiA9IHBhcnNlSW50KCQoZG9jdW1lbnQpLmZpbmQoJy5heXNfcGJfZGVsYXlfMicpLnZhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBheXNfcGJfc2Nyb2xsVG9wXzIgPSBwYXJzZUludCgkKGRvY3VtZW50KS5maW5kKCcuYXlzX3BiX3Njcm9sbF8yJykudmFsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTW9iaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXlzX3BiX3Njcm9sbFRvcF8yPSBwYXJzZUludCgkKGRvY3VtZW50KS5maW5kKCcuYXlzX3BiX3Njcm9sbF9tb2JpbGVfMicpLnZhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF5c19wYl9kZWxheU9wZW5fMiA9IHBhcnNlSW50KCQoZG9jdW1lbnQpLmZpbmQoJy5heXNfcGJfZGVsYXlfbW9iaWxlXzInKS52YWwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVfcGJfMiA9ICQoZG9jdW1lbnQpLmZpbmQoJy5heXNfcGJfdGltZXJfMiBzcGFuJykuZGF0YSgnc2Vjb25kcycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF5c19wYl9hbmltYXRpb25fY2xvc2Vfc2Vjb25kcyA9IChheXNfcGJfYW5pbWF0aW9uX2Nsb3NlX3NwZWVkIC8gMTAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggYXlzX3BiX2RlbGF5T3Blbl8yID09IDAgJiYgIGF5c19wYl9zY3JvbGxUb3BfMiA9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXZfcG9wX21vZGFsc18yJykuY3NzKCdkaXNwbGF5JywnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA3NjgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9iaWxlVGltZXIgPSArJChkb2N1bWVudCkuZmluZCgnLmF5c19wYl90aW1lcl8yIHNwYW4nKS5hdHRyKCdkYXRhLWF5cy1tb2JpbGUtc2Vjb25kcycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXNfcGJfdGltZXJfMiBzcGFuJykuaHRtbChtb2JpbGVUaW1lcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9wYl8yID0gbW9iaWxlVGltZXI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZCA9IHBhcnNlRmxvYXQoYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZCkgLSA1MDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzX3BiX211c2ljX3NvdW5kJykuY3NzKHsnZGlzcGxheSc6J25vbmUnfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aW1lX3BiXzIgIT09IHVuZGVmaW5lZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGltZV9wYl8yICE9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnI2F5cy1wYi1tb2RhbC1jaGVja2JveF8yJykudHJpZ2dlcignY2xpY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXlzX3BiX3Njcm9sbFRvcF8yID09IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF5c19wYl9mbGFnID0gIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmltYXRpb24tZHVyYXRpb24nOiBheXNfcGJfYW5pbWF0aW9uX2Nsb3NlX3NlY29uZHMgKyAncycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVyX3BiXzIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdUaW1lX3BiXzIgPSB0aW1lX3BiXzItLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzX3BiX3RpbWVyXzIgc3BhbicpLnRleHQobmV3VGltZV9wYl8yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuZXdUaW1lX3BiXzIgPD0gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2NsYXNzJywgJ2F5c190ZW1wbGF0ZV93aW5kb3cgYXlzLXBiLW1vZGFsXzIgIGF5cy1wYi1ib3JkZXItbW9iaWxlXzIgJytheXNfcGJfZWZmZWN0T3V0XzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihheXNfcGJfZWZmZWN0T3V0XzIgIT0gJ25vbmUnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5hdHRyKCdkYXRhLWF5cy1mbGFnJywndHJ1ZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2RhdGEtYXlzLWZsYWcnLCd0cnVlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJfcGJfMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLm9uZSgnY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGJWaWV3c0ZsYWdfMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBiX2lkID0gMjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGJMb2NhbGl6ZU9iai5hamF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F5c19pbmNyZW1lbnRfcGJfdmlld3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYlZpZXdzRmxhZ18yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF2X3BvcF9tb2RhbHNfMicpLmNzcygncG9pbnRlci1ldmVudHMnLCAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5hdHRyKCdjbGFzcycsICdheXNfdGVtcGxhdGVfd2luZG93ICBheXMtcGItbW9kYWxfMiAgYXlzLXBiLWJvcmRlci1tb2JpbGVfMiAnK2F5c19wYl9lZmZlY3RPdXRfMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50cygnLmF5cy1wYi1tb2RhbHMnKS5maW5kKCdpZnJhbWUnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gL2h0dHBzOlwvXC93d3cueW91dHViZS5jb20vOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyYyA9ICQodGhpcykuYXR0cignc3JjJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsICQodGhpcykuYXR0cignc3JjJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcuYXlzLXBiLW1vZGFscycpLmZpbmQoJ3ZpZGVvLndwLXZpZGVvLXNob3J0Y29kZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiAkKHRoaXMpLmdldCgwKSAhPSAndW5kZWZpbmVkJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhICQodGhpcykuZ2V0KDApLnBhdXNlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5nZXQoMCkucGF1c2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudHMoJy5heXMtcGItbW9kYWxzJykuZmluZCgnYXVkaW8ud3AtYXVkaW8tc2hvcnRjb2RlJykuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mICQodGhpcykuZ2V0KDApICE9ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEgJCh0aGlzKS5nZXQoMCkucGF1c2VkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmdldCgwKS5wYXVzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZV9zb3VuZF9zcmMgPSAkKGRvY3VtZW50KS5maW5kKCcjYXlzX3BiX2Nsb3NlX3NvdW5kXzInKS5hdHRyKCdzcmMnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2hlY2tBbmltU3BlZWQgJiYgdHlwZW9mIGNsb3NlX3NvdW5kX3NyYyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ29mZicgPT09ICdvbicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2hlY2tBbmltU3BlZWQgIT09IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF5UHJvbWlzZSA9ICQoZG9jdW1lbnQpLmZpbmQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKS5wbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYXlQcm9taXNlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheVByb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF5c19wYl9lZmZlY3RPdXRfMiAhPSAnbm9uZScpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF2X3BvcF9tb2RhbHNfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuYXR0cignZGF0YS1heXMtZmxhZycsJ3RydWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkKCcjYXlzX3BiX2Nsb3NlX3NvdW5kXzInKS5nZXQoMCkgIT0gdW5kZWZpbmVkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKS5wYXVzZWQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdWRpbyA9ICQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5jdXJyZW50VGltZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZCk7ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF2X3BvcF9tb2RhbHNfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5hdHRyKCdkYXRhLWF5cy1mbGFnJywndHJ1ZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCgnI2F5c19wYl9jbG9zZV9zb3VuZF8yJykuZ2V0KDApICE9IHVuZGVmaW5lZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKS5wYXVzZWQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXVkaW8gPSAkKCcjYXlzX3BiX2Nsb3NlX3NvdW5kXzInKS5nZXQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLmN1cnJlbnRUaW1lID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcjYXlzLXBiLXNjcmVlbi1zaGFkZV8yJykuY3NzKHsnb3BhY2l0eSc6ICcwJywgJ2Rpc3BsYXknOiAnbm9uZSd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcl9wYl8yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZignMScgJiYgYXlzX3BiX2ZsYWcpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzY0Nsb3NpbmdQb3B1cHMgPSAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLWNsb3NlLXBvcHVwLXdpdGgtZXNjOnZpc2libGUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvcG1vc3RQb3B1cCA9IGVzY0Nsb3NpbmdQb3B1cHMubGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcG1vc3RQb3B1cC5maW5kKCcuYXlzLXBiLW1vZGFsLWNsb3NlXzInKS50cmlnZ2VyKCdjbGljaycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF5c19wYl9mbGFnID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheXNfcGJfZmxhZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwxMDAwKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjbG9zZVBvcHVwT3ZlcmxheSAmJiAnT24nID09ICdPbicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5hdl9wb3BfbW9kYWxzXzInKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYl9wYXJlbnQgPSAkKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGJfZGl2ID0gJCh0aGlzKS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYl9kaXYuaXMoZS50YXJnZXQpICYmIHBiX2Rpdi5oYXMoZS50YXJnZXQpLmxlbmd0aCA9PT0gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsLWNsb3NlXzInKS5jbGljaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5c19wYl90aW1lcl8yJykuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmltYXRpb24tZHVyYXRpb24nOiBheXNfcGJfYW5pbWF0aW9uX2Nsb3NlX3NlY29uZHMgKyAncycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLm9uZSgnY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBiVmlld3NGbGFnXzIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGJfaWQgPSAyOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHBiTG9jYWxpemVPYmouYWpheCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ2F5c19pbmNyZW1lbnRfcGJfdmlld3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYlZpZXdzRmxhZ18yID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXZfcG9wX21vZGFsc18yJykuY3NzKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5hdHRyKCdjbGFzcycsICdheXNfdGVtcGxhdGVfd2luZG93ICAgYXlzLXBiLW1vZGFsXzIgIGF5cy1wYi1ib3JkZXItbW9iaWxlXzIgJytheXNfcGJfZWZmZWN0T3V0XzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcuYXlzLXBiLW1vZGFscycpLmZpbmQoJ2lmcmFtZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gL2h0dHBzOlwvXC93d3cueW91dHViZS5jb20vOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSAkKHRoaXMpLmF0dHIoJ3NyYycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3JjJywgJCh0aGlzKS5hdHRyKCdzcmMnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50cygnLmF5cy1wYi1tb2RhbHMnKS5maW5kKCd2aWRlby53cC12aWRlby1zaG9ydGNvZGUnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mICQodGhpcykuZ2V0KDApICE9ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhICQodGhpcykuZ2V0KDApLnBhdXNlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZ2V0KDApLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucGFyZW50cygnLmF5cy1wYi1tb2RhbHMnKS5maW5kKCdhdWRpby53cC1hdWRpby1zaG9ydGNvZGUnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mICQodGhpcykuZ2V0KDApICE9ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhICQodGhpcykuZ2V0KDApLnBhdXNlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZ2V0KDApLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF5c19wYl9lZmZlY3RPdXRfMiAhPSAnbm9uZScpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF2X3BvcF9tb2RhbHNfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2RhdGEtYXlzLWZsYWcnLCd0cnVlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKSAhPSB1bmRlZmluZWQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKS5wYXVzZWQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1ZGlvID0gJCgnI2F5c19wYl9jbG9zZV9zb3VuZF8yJykuZ2V0KDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8uY3VycmVudFRpbWUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZCk7ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF2X3BvcF9tb2RhbHNfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuYXR0cignZGF0YS1heXMtZmxhZycsJ3RydWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkKCcjYXlzX3BiX2Nsb3NlX3NvdW5kXzInKS5nZXQoMCkgIT0gdW5kZWZpbmVkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKS5wYXVzZWQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdWRpbyA9ICQoJyNheXNfcGJfY2xvc2Vfc291bmRfMicpLmdldCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5jdXJyZW50VGltZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJyNheXMtcGItc2NyZWVuLXNoYWRlXzInKS5jc3MoeydvcGFjaXR5JzogJzAnLCAnZGlzcGxheSc6ICdub25lJ30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBheXNfcGJfc2Nyb2xsVG9wXzIgIT09IDAgKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoJCh0aGlzKS5zY3JvbGxUb3AoKSA+PSBheXNfcGJfc2Nyb2xsVG9wXzIpICYmIChjb3VudCA9PT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggYXlzX3BiX2RlbGF5T3Blbl8yICE9PSAwICl7ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdhbmltYXRpb24tZGVsYXknLCBheXNfcGJfZGVsYXlPcGVuXzIvMTAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXZfcG9wX21vZGFsc18yJykuY3NzKCdkaXNwbGF5JywnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuYWRkQ2xhc3MoYXlzX3BiX2VmZmVjdEluXzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ICYmICQoZG9jdW1lbnQpLmZpbmQoJyNheXMtcGItc2NyZWVuLXNoYWRlXzInKS5hdHRyKCdkYXRhLW1vYmlsZS1vdmVybGF5JykgPT0gJ3RydWUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcjYXlzLXBiLXNjcmVlbi1zaGFkZV8yJykuY3NzKHsnb3BhY2l0eSc6ICcwLjUnfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJyNheXMtcGItc2NyZWVuLXNoYWRlXzInKS5jc3MoeydvcGFjaXR5JzogJzAuNTAwMDAwJ30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsLWNoZWNrXzInKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYXlzX3BiX2RlbGF5T3Blbl8yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5hdl9wb3BfbW9kYWxzXzInKS5jc3MoJ2Rpc3BsYXknLCdibG9jaycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmFkZENsYXNzKGF5c19wYl9lZmZlY3RJbl8yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA3NjggJiYgJChkb2N1bWVudCkuZmluZCgnI2F5cy1wYi1zY3JlZW4tc2hhZGVfMicpLmF0dHIoJ2RhdGEtbW9iaWxlLW92ZXJsYXknKSA9PSAndHJ1ZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnI2F5cy1wYi1zY3JlZW4tc2hhZGVfMicpLmNzcyh7J29wYWNpdHknOiAnMC41J30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcjYXlzLXBiLXNjcmVlbi1zaGFkZV8yJykuY3NzKHsnb3BhY2l0eSc6ICcwLjUwMDAwMCd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2hlY2tfMicpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCdmYWxzZScgPT0gJ3RydWUnICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigwICE9IDAgJiYgJ29mZicgIT0gJ29uJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbG9zZV9idXR0b25fZGVsYXlfZm9yX21vYmlsZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheXNfcGJfZGVsYXlPcGVuXzIgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfYnV0dG9uX2RlbGF5X2Zvcl9tb2JpbGUgKz0gTWF0aC5mbG9vcihheXNfcGJfZGVsYXlPcGVuXzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLmNzcyh7J2Rpc3BsYXknOiAnbm9uZSd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLmNzcyh7J2Rpc3BsYXknOiAnYmxvY2snfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNsb3NlX2J1dHRvbl9kZWxheV9mb3JfbW9iaWxlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKDAgIT0gMCAmJiAnb2ZmJyAhPSAnb24nKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsb3NlX2J1dHRvbl9kZWxheSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChheXNfcGJfZGVsYXlPcGVuXzIgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9idXR0b25fZGVsYXkgKz0gTWF0aC5mbG9vcihheXNfcGJfZGVsYXlPcGVuXzIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLmNzcyh7J2Rpc3BsYXknOiAnbm9uZSd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLmNzcyh7J2Rpc3BsYXknOiAnYmxvY2snfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNsb3NlX2J1dHRvbl9kZWxheSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTAgIT0gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuaW1hdGlvbi1kdXJhdGlvbic6IGF5c19wYl9hbmltYXRpb25fY2xvc2Vfc2Vjb25kcyArICdzJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lcl9wYl8yID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RpbWVfcGJfMiA9IHRpbWVfcGJfMi0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzX3BiX3RpbWVyXzIgc3BhbicpLnRleHQobmV3VGltZV9wYl8yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3VGltZV9wYl8yIDw9IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbC1jbG9zZV8yJykudHJpZ2dlcignY2xpY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2NsYXNzJywgJ2F5c190ZW1wbGF0ZV93aW5kb3cgYXlzLXBiLW1vZGFsXzIgICAnK2F5c19wYl9lZmZlY3RPdXRfMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihheXNfcGJfZWZmZWN0T3V0XzIgIT0gJ25vbmUnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2RhdGEtYXlzLWZsYWcnLCd0cnVlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYXlzX3BiX2FuaW1hdGlvbl9jbG9zZV9zcGVlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2RhdGEtYXlzLWZsYWcnLCd0cnVlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJfcGJfMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbC1jbG9zZV8yJykub25lKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGJWaWV3c0ZsYWdfMikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYl9pZCA9IDI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcGJMb2NhbGl6ZU9iai5hamF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBiX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnYXlzX2luY3JlbWVudF9wYl92aWV3cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBiVmlld3NGbGFnXzIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5hdl9wb3BfbW9kYWxzXzInKS5jc3MoJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2NsYXNzJywgJ2F5c190ZW1wbGF0ZV93aW5kb3cgIGF5cy1wYi1tb2RhbF8yICAgYXlzLXBiLWJvcmRlci1tb2JpbGVfMiAnK2F5c19wYl9lZmZlY3RPdXRfMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudHMoJy5heXMtcGItbW9kYWxzJykuZmluZCgnaWZyYW1lJykuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSAvaHR0cHM6XC9cL3d3dy55b3V0dWJlLmNvbS87CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyYyA9ICQodGhpcykuYXR0cignc3JjJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmF0dHIoJ3NyYycpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcuYXlzLXBiLW1vZGFscycpLmZpbmQoJ3ZpZGVvLndwLXZpZGVvLXNob3J0Y29kZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgJCh0aGlzKS5nZXQoMCkgIT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEgJCh0aGlzKS5nZXQoMCkucGF1c2VkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5nZXQoMCkucGF1c2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcuYXlzLXBiLW1vZGFscycpLmZpbmQoJ2F1ZGlvLndwLWF1ZGlvLXNob3J0Y29kZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgJCh0aGlzKS5nZXQoMCkgIT0gJ3VuZGVmaW5lZCcpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEgJCh0aGlzKS5nZXQoMCkucGF1c2VkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5nZXQoMCkucGF1c2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXlzX3BiX2VmZmVjdE91dF8yICE9ICdub25lJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXZfcG9wX21vZGFsc18yJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuYXR0cignZGF0YS1heXMtZmxhZycsJ3RydWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCgnI2F5c19wYl9jbG9zZV9zb3VuZF8yJykuZ2V0KDApICE9IHVuZGVmaW5lZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJCgnI2F5c19wYl9jbG9zZV9zb3VuZF8yJykuZ2V0KDApLnBhdXNlZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXVkaW8gPSAkKCcjYXlzX3BiX2Nsb3NlX3NvdW5kXzInKS5nZXQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ucGF1c2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5jdXJyZW50VGltZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBheXNfcGJfYW5pbWF0aW9uX2Nsb3NlX3NwZWVkKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5hdl9wb3BfbW9kYWxzXzInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmF0dHIoJ2RhdGEtYXlzLWZsYWcnLCd0cnVlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCgnI2F5c19wYl9jbG9zZV9zb3VuZF8yJykuZ2V0KDApICE9IHVuZGVmaW5lZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkKCcjYXlzX3BiX2Nsb3NlX3NvdW5kXzInKS5nZXQoMCkucGF1c2VkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnZGlzcGxheScsICdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXVkaW8gPSAkKCcjYXlzX3BiX2Nsb3NlX3NvdW5kXzInKS5nZXQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5wYXVzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8uY3VycmVudFRpbWUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcjYXlzLXBiLXNjcmVlbi1zaGFkZV8yJykuY3NzKHsnb3BhY2l0eSc6ICcwJywgJ2Rpc3BsYXknOiAnbm9uZSd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJfcGJfMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXlzX3BiX2ZsYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGV2ZW50KSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJzEnICYmIGF5c19wYl9mbGFnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXNjQ2xvc2luZ1BvcHVwcyA9ICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItY2xvc2UtcG9wdXAtd2l0aC1lc2M6dmlzaWJsZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3Btb3N0UG9wdXAgPSBlc2NDbG9zaW5nUG9wdXBzLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wbW9zdFBvcHVwLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF5c19wYl9mbGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXlzX3BiX2ZsYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LDEwMDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggYXlzX3BiX2RlbGF5T3Blbl8yICE9PSAwICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnYW5pbWF0aW9uLWRlbGF5JywgYXlzX3BiX2RlbGF5T3Blbl8yLzEwMDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXZfcG9wX21vZGFsc18yJykuY3NzKCdkaXNwbGF5JywnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmFkZENsYXNzKGF5c19wYl9lZmZlY3RJbl8yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnZGlzcGxheScsICdibG9jaycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ICYmICQoZG9jdW1lbnQpLmZpbmQoJyNheXMtcGItc2NyZWVuLXNoYWRlXzInKS5hdHRyKCdkYXRhLW1vYmlsZS1vdmVybGF5JykgPT0gJ3RydWUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnI2F5cy1wYi1zY3JlZW4tc2hhZGVfMicpLmNzcyh7J29wYWNpdHknOiAnMC41J30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcjYXlzLXBiLXNjcmVlbi1zaGFkZV8yJykuY3NzKHsnb3BhY2l0eSc6ICcwLjUwMDAwMCd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2hlY2tfMicpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzUGFnZVNjcm9sbERpc2FibGVkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCdib2R5JykuYWRkQ2xhc3MoJ3BiX2Rpc2FibGVfc2Nyb2xsXzInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCdodG1sJykucmVtb3ZlQ2xhc3MoJ3BiX2VuYWJsZV9zY3JvbGwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGF5c19wYl9kZWxheU9wZW5fMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJChkb2N1bWVudCkuZmluZCgnLmF5c19wYl9hYnRfMicpLnZhbCgpICE9ICdjbGlja1NlbGVjdG9yJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXZfcG9wX21vZGFsc18yJykuY3NzKCdkaXNwbGF5JywnYmxvY2snKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmFkZENsYXNzKGF5c19wYl9lZmZlY3RJbl8yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxfMicpLmNzcygnZGlzcGxheScsICdibG9jaycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ICYmICQoZG9jdW1lbnQpLmZpbmQoJyNheXMtcGItc2NyZWVuLXNoYWRlXzInKS5hdHRyKCdkYXRhLW1vYmlsZS1vdmVybGF5JykgPT0gJ3RydWUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnI2F5cy1wYi1zY3JlZW4tc2hhZGVfMicpLmNzcyh7J29wYWNpdHknOiAnMC41J30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcjYXlzLXBiLXNjcmVlbi1zaGFkZV8yJykuY3NzKHsnb3BhY2l0eSc6ICcwLjUwMDAwMCd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2hlY2tfMicpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzUGFnZVNjcm9sbERpc2FibGVkKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCdib2R5JykuYWRkQ2xhc3MoJ3BiX2Rpc2FibGVfc2Nyb2xsXzInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCdodG1sJykuYWRkQ2xhc3MoJ3BiX2Rpc2FibGVfc2Nyb2xsXzInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnT24nICE9ICdPbicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJyNheXMtcGItc2NyZWVuLXNoYWRlXzInKS5jc3MoeydvcGFjaXR5JzogJzAnLCAnZGlzcGxheSc6ICdub25lICFpbXBvcnRhbnQnLCAncG9pbnRlci1ldmVudHMnOiAnbm9uZScsICdiYWNrZ3JvdW5kJzogJ25vbmUnfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbF8yJykuY3NzKCdwb2ludGVyLWV2ZW50cycsICdhdXRvJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF2X3BvcF9tb2RhbHNfMicpLmNzcygncG9pbnRlci1ldmVudHMnLCdub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbHMgdmlkZW8nKS5oYXNDbGFzcygnd3AtdmlkZW8tc2hvcnRjb2RlJykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb1dpZHRoICA9ICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxzIHZpZGVvLndwLXZpZGVvLXNob3J0Y29kZScpLmF0dHIoJ3dpZHRoJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSGVpZ2h0ID0gJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbHMgdmlkZW8ud3AtdmlkZW8tc2hvcnRjb2RlJykuYXR0cignaGVpZ2h0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFscyAud3AtdmlkZW8nKS5yZW1vdmVBdHRyKCdzdHlsZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFscyAubWVqcy1jb250YWluZXInKS5yZW1vdmVBdHRyKCdzdHlsZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFscyB2aWRlby53cC12aWRlby1zaG9ydGNvZGUnKS5yZW1vdmVBdHRyKCdzdHlsZScpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbHMgLndwLXZpZGVvJykuY3NzKHsnd2lkdGgnOiAnMTAwJSd9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbHMgLm1lanMtY29udGFpbmVyJykuY3NzKHsnd2lkdGgnOiAnMTAwJScsJ2hlaWdodCc6IHZpZGVvSGVpZ2h0ICsgJ3B4J30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXlzLXBiLW1vZGFscyB2aWRlby53cC12aWRlby1zaG9ydGNvZGUnKS5jc3Moeyd3aWR0aCc6ICcxMDAlJywnaGVpZ2h0JzogdmlkZW9IZWlnaHQgKyAncHgnfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwxMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWxzIGlmcmFtZScpLmF0dHIoJ3N0eWxlJykgIT0gJycpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkuZmluZCgnLmF5cy1wYi1tb2RhbHMgaWZyYW1lJykucmVtb3ZlQXR0cignc3R5bGUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LDUwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZigxMCA9PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjbG9zZVBvcHVwT3ZlcmxheSAmJiAnT24nID09ICdPbicpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5maW5kKCcuYXZfcG9wX21vZGFsc18yJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBiX3BhcmVudCA9ICQodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGJfZGl2ID0gJCh0aGlzKS5maW5kKCcuYXlzLXBiLW1vZGFsXzInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGJfZGl2LmlzKGUudGFyZ2V0KSAmJiBwYl9kaXYuaGFzKGUudGFyZ2V0KS5sZW5ndGggPT09IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLmNsaWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXlzX3BiX2ZsYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZXZlbnQpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCcxJyAmJiBheXNfcGJfZmxhZyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXNjQ2xvc2luZ1BvcHVwcyA9ICQoZG9jdW1lbnQpLmZpbmQoJy5heXMtcGItY2xvc2UtcG9wdXAtd2l0aC1lc2M6dmlzaWJsZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wbW9zdFBvcHVwID0gZXNjQ2xvc2luZ1BvcHVwcy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wbW9zdFBvcHVwLmZpbmQoJy5heXMtcGItbW9kYWwtY2xvc2VfMicpLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXlzX3BiX2ZsYWcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXlzX3BiX2ZsYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZignb2ZmJyA9PSAnb24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvID0gJChkb2N1bWVudCkuZmluZCgndmlkZW8ud3AtdmlkZW8tc2hvcnRjb2RlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWRlby5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb1tpXS5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykubmV4dCgpLnZhbCgpID09PSAnb24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcuYXlzX3ZpZGVvX3dpbmRvdycpLmZpbmQoJy5jbG9zZS1pbWFnZS1idG4nKS50cmlnZ2VyKCdjbGljaycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShkb2N1bWVudCkub24oJ2NsaWNrJywgJy5heXMtcGItbW9kYWwtY2xvc2VfMicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJ2JvZHknKS5yZW1vdmVDbGFzcygncGJfZGlzYWJsZV9zY3JvbGxfMicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmZpbmQoJ2h0bWwnKS5yZW1vdmVDbGFzcygncGJfZGlzYWJsZV9zY3JvbGxfMicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KSggalF1ZXJ5ICk7CiAgICAgICAgICAgICAgICA=
5 ms
javascript;base64,CiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGF5c1BvcHVwT3B0aW9ucyA9PT0gInVuZGVmaW5lZCIpewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXlzUG9wdXBPcHRpb25zID0gW107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGF5c1BvcHVwT3B0aW9uc1siMiJdICA9ICJleUp3YjNCMWNHSnZlQ0k2ZXlKcFpDSTZJaklpTENKMGFYUnNaU0k2SWxkbGJHTnZiV1VnVUc5d0xYVndJR1p2Y2lCMGFHVWdibVYzSUdSdmJXRnBiaUlzSW5CdmNIVndYMjVoYldVaU9pSWlMQ0prWlhOamNtbHdkR2x2YmlJNklpSXNJbU5oZEdWbmIzSjVYMmxrSWpvaU1TSXNJbUYxZEc5amJHOXpaU0k2SWpFd0lpd2lZMjl2YTJsbElqb2lNVFEwTUNJc0luZHBaSFJvSWpvMk1EQXNJbWhsYVdkb2RDSTZNelV3TENKaVoyTnZiRzl5SWpvaUkyWm1abVptWmlJc0luUmxlSFJqYjJ4dmNpSTZJaU13TURBd01EQWlMQ0ppYjNKa1pYSnphWHBsSWpvaU1TSXNJbUp2Y21SbGNtTnZiRzl5SWpvaUkyWm1abVptWmlJc0ltSnZjbVJsY2w5eVlXUnBkWE1pT2lJMElpd2ljMmh2Y25SamIyUmxJam9pSWl3aWRYTmxjbk5mY205c1pTSTZJbHRkSWl3aVkzVnpkRzl0WDJOc1lYTnpJam9pSWl3aVkzVnpkRzl0WDJOemN5STZJaUlzSW1OMWMzUnZiVjlvZEcxc0lqb2lQR2d6UGp4cGJXY2dZMnhoYzNNOVhDSmhiR2xuYm01dmJtVWdkM0F0YVcxaFoyVXRPVFkyTWx3aUlITnlZejFjSW1oMGRIQnpPbHd2WEM5M2QzY3VaM0psWlc1bFpHVnphV2R1WVc1a1luVnBiR1F1WTI5dFhDOTNjQzFqYjI1MFpXNTBYQzkxY0d4dllXUnpYQzh5TURJMFhDOHdOVnd2TlRFeE1qUXRSM0psWlc1bExVeHZaMjh0TXpBd2VEZzFMbkJ1WjF3aUlHRnNkRDFjSWx3aUlIZHBaSFJvUFZ3aU1qQTVYQ0lnYUdWcFoyaDBQVndpTlRsY0lpQmNMejQ4WEM5b016NWNjbHh1UEdneVBqeHpkSEp2Ym1jK1YwVWdTRUZXUlNCQklFNUZWeUJCUkVSU1JWTlRJVHhjTDNOMGNtOXVaejQ4WEM5b01qNWNjbHh1UEdnMElITjBlV3hsUFZ3aVkyOXNiM0k2SUdKc1lXTnJPMXdpUGp4emNHRnVJSE4wZVd4bFBWd2lZMjlzYjNJNklDTTNOemhsTTJJN1hDSStUbVYzWW5WeWVYQnZjblJpZFdsc1pHVnlMbU52YlR4Y0wzTndZVzQrSUdseklHNXZkeUE4YzNCaGJpQnpkSGxzWlQxY0ltTnZiRzl5T2lBak56YzRaVE5pTzF3aVBrZHlaV1Z1WkdWemFXZHVZVzVrWW5WcGJHUXVZMjl0SVR4Y0wzTndZVzQrUEZ3dmFEUStJaXdpYjI1dlptWnpkMmwwWTJnaU9pSlBiaUlzSW5Ob2IzZGZiMjVzZVY5bWIzSmZZWFYwYUc5eUlqb2liMlptSWl3aWMyaHZkMTloYkd3aU9pSmhiR3dpTENKa1pXeGhlU0k2SWpBaUxDSnpZM0p2Ykd4ZmRHOXdJam9pTUNJc0ltRnVhVzFoZEdWZmFXNGlPaUptWVdSbFNXNGlMQ0poYm1sdFlYUmxYMjkxZENJNkltWmhaR1ZQZFhRaUxDSmhZM1JwYjI1ZlluVjBkRzl1SWpvaUlpd2lkbWxsZDE5d2JHRmpaU0k2SWlJc0ltRmpkR2x2Ymw5aWRYUjBiMjVmZEhsd1pTSTZJbkJoWjJWTWIyRmtaV1FpTENKdGIyUmhiRjlqYjI1MFpXNTBJam9pWTNWemRHOXRYMmgwYld3aUxDSjJhV1YzWDNSNWNHVWlPaUowWlcxd2JHRjBaU0lzSW05dWIyWm1iM1psY214aGVTSTZJazl1SWl3aWIzWmxjbXhoZVY5dmNHRmphWFI1SWpvaU1DNDFNREF3TURBaUxDSnphRzkzWDNCdmNIVndYM1JwZEd4bElqb2lUMlptSWl3aWMyaHZkMTl3YjNCMWNGOWtaWE5qSWpvaVQyWm1JaXdpWTJ4dmMyVmZZblYwZEc5dUlqb2liMlptSWl3aWFHVmhaR1Z5WDJKblkyOXNiM0lpT2lJalptWm1abVptSWl3aVltZGZhVzFoWjJVaU9pSm9kSFJ3Y3pwY0wxd3ZkM2QzTG1keVpXVnVaV1JsYzJsbmJtRnVaR0oxYVd4a0xtTnZiVnd2ZDNBdFkyOXVkR1Z1ZEZ3dmRYQnNiMkZrYzF3dk1qQXlORnd2TURoY0wyZHlaV1Z1WlMxd2IzQmliMk10Ym1WM0xXUnZiV0ZwYmkweUxuQnVaeUlzSW14dloxOTFjMlZ5SWpvaVQyNGlMQ0puZFdWemRDSTZJazl1SWl3aVlXTjBhWFpsWDJSaGRHVmZZMmhsWTJzaU9pSnZabVlpTENKaFkzUnBkbVZKYm5SbGNuWmhiQ0k2SWpJd01qUXRNRGd0TURVZ01UUTZNRGs2TkRFaUxDSmtaV0ZqZEdsMlpVbHVkR1Z5ZG1Gc0lqb2lNakF5TkMwd09DMHdOU0F4TkRvd09UbzBNU0lzSW5CaVgzQnZjMmwwYVc5dUlqb2lZMlZ1ZEdWeUxXTmxiblJsY2lJc0luQmlYMjFoY21kcGJpSTZJakFpTENKMmFXVjNjeUk2SWpJd01TSXNJbU52Ym5abGNuTnBiMjV6SWpvaU1DSXNJbTl3ZEdsdmJuTWlPaUo3WENKbGJtRmliR1ZmWW1GamEyZHliM1Z1WkY5bmNtRmthV1Z1ZEZ3aU9sd2liMlptWENJc1hDSmlZV05yWjNKdmRXNWtYMmR5WVdScFpXNTBYMk52Ykc5eVh6RmNJanBjSWlNd01EQmNJaXhjSW1KaFkydG5jbTkxYm1SZlozSmhaR2xsYm5SZlkyOXNiM0pmTWx3aU9sd2lJMlptWmx3aUxGd2ljR0pmWjNKaFpHbGxiblJmWkdseVpXTjBhVzl1WENJNlhDSjJaWEowYVdOaGJGd2lMRndpWlc1aFlteGxYMkpoWTJ0bmNtOTFibVJmWjNKaFpHbGxiblJmYlc5aWFXeGxYQ0k2WENKdlptWmNJaXhjSW1KaFkydG5jbTkxYm1SZlozSmhaR2xsYm5SZlkyOXNiM0pmTVY5dGIySnBiR1ZjSWpwY0lpTXdNREJjSWl4Y0ltSmhZMnRuY205MWJtUmZaM0poWkdsbGJuUmZZMjlzYjNKZk1sOXRiMkpwYkdWY0lqcGNJaU5tWm1aY0lpeGNJbkJpWDJkeVlXUnBaVzUwWDJScGNtVmpkR2x2Ymw5dGIySnBiR1ZjSWpwY0luWmxjblJwWTJGc1hDSXNYQ0psZUdObGNIUmZjRzl6ZEY5MGVYQmxjMXdpT2x0Y0luQmhaMlZjSWwwc1hDSmxlR05sY0hSZmNHOXpkSE5jSWpwYlhDSTVOVGN5WENKZExGd2lZV3hzWDNCdmMzUnpYQ0k2WENKY0lpeGNJbU5zYjNObFgySjFkSFJ2Ymw5a1pXeGhlVndpT2pBc1hDSmpiRzl6WlY5aWRYUjBiMjVmWkdWc1lYbGZabTl5WDIxdlltbHNaVndpT2pBc1hDSmxibUZpYkdWZlkyeHZjMlZmWW5WMGRHOXVYMlJsYkdGNVgyWnZjbDl0YjJKcGJHVmNJanBjSW05bVpsd2lMRndpWlc1aFlteGxYM0JpWDNOdmRXNWtYQ0k2WENKdlptWmNJaXhjSW05MlpYSnNZWGxmWTI5c2IzSmNJanBjSWlNd01EQmNJaXhjSW1WdVlXSnNaVjl2ZG1WeWJHRjVYMk52Ykc5eVgyMXZZbWxzWlZ3aU9sd2liMlptWENJc1hDSnZkbVZ5YkdGNVgyTnZiRzl5WDIxdlltbHNaVndpT2x3aUl6QXdNRndpTEZ3aVlXNXBiV0YwYVc5dVgzTndaV1ZrWENJNk1TeGNJbVZ1WVdKc1pWOWhibWx0WVhScGIyNWZjM0JsWldSZmJXOWlhV3hsWENJNlhDSnZabVpjSWl4Y0ltRnVhVzFoZEdsdmJsOXpjR1ZsWkY5dGIySnBiR1ZjSWpveExGd2lZMnh2YzJWZllXNXBiV0YwYVc5dVgzTndaV1ZrWENJNk1TeGNJbVZ1WVdKc1pWOWpiRzl6WlY5aGJtbHRZWFJwYjI1ZmMzQmxaV1JmYlc5aWFXeGxYQ0k2WENKdlptWmNJaXhjSW1Oc2IzTmxYMkZ1YVcxaGRHbHZibDl6Y0dWbFpGOXRiMkpwYkdWY0lqb3hMRndpY0dKZmJXOWlhV3hsWENJNlhDSnZabVpjSWl4Y0ltTnNiM05sWDJKMWRIUnZibDkwWlhoMFhDSTZYQ0pjWEhVeU56RTFYQ0lzWENKbGJtRmliR1ZmWTJ4dmMyVmZZblYwZEc5dVgzUmxlSFJmYlc5aWFXeGxYQ0k2WENKdmJsd2lMRndpWTJ4dmMyVmZZblYwZEc5dVgzUmxlSFJmYlc5aWFXeGxYQ0k2WENKY1hIVXlOekUxWENJc1hDSmpiRzl6WlY5aWRYUjBiMjVmYUc5MlpYSmZkR1Y0ZEZ3aU9sd2lYQ0lzWENKdGIySnBiR1ZmZDJsa2RHaGNJam81TUN4Y0ltMXZZbWxzWlY5dFlYaGZkMmxrZEdoY0lqcGNJbHdpTEZ3aWJXOWlhV3hsWDJobGFXZG9kRndpT2pZd01DeGNJbU5zYjNObFgySjFkSFJ2Ymw5d2IzTnBkR2x2Ymx3aU9sd2ljbWxuYUhRdGRHOXdYQ0lzWENKbGJtRmliR1ZmWTJ4dmMyVmZZblYwZEc5dVgzQnZjMmwwYVc5dVgyMXZZbWxzWlZ3aU9sd2liMlptWENJc1hDSmpiRzl6WlY5aWRYUjBiMjVmY0c5emFYUnBiMjVmYlc5aWFXeGxYQ0k2WENKeWFXZG9kQzEwYjNCY0lpeGNJbk5vYjNkZmIyNXNlVjl2Ym1ObFhDSTZYQ0p2Wm1aY0lpeGNJbk5vYjNkZmIyNWZhRzl0WlY5d1lXZGxYQ0k2WENKdlptWmNJaXhjSW1Oc2IzTmxYM0J2Y0hWd1gyVnpZMXdpT2x3aWIyNWNJaXhjSW5CdmNIVndYM2RwWkhSb1gySjVYM0JsY21ObGJuUmhaMlZmY0hoY0lqcGNJbkJwZUdWc2Mxd2lMRndpY0c5d2RYQmZkMmxrZEdoZllubGZjR1Z5WTJWdWRHRm5aVjl3ZUY5dGIySnBiR1ZjSWpwY0luQmxjbU5sYm5SaFoyVmNJaXhjSW5CdmNIVndYMk52Ym5SbGJuUmZjR0ZrWkdsdVoxd2lPakV3TEZ3aWNHOXdkWEJmY0dGa1pHbHVaMTlpZVY5d1pYSmpaVzUwWVdkbFgzQjRYQ0k2WENKd2FYaGxiSE5jSWl4Y0luQmlYMlp2Ym5SZlptRnRhV3g1WENJNlhDSmhjbWxoYkZ3aUxGd2lZMnh2YzJWZmNHOXdkWEJmYjNabGNteGhlVndpT2x3aWIyWm1YQ0lzWENKamJHOXpaVjl3YjNCMWNGOXZkbVZ5YkdGNVgyMXZZbWxzWlZ3aU9sd2liMlptWENJc1hDSmxibUZpYkdWZmNHSmZablZzYkhOamNtVmxibHdpT2x3aWIyWm1YQ0lzWENKbGJtRmliR1ZmYUdsa1pWOTBhVzFsY2x3aU9sd2liMlptWENJc1hDSmxibUZpYkdWZmFHbGtaVjkwYVcxbGNsOXRiMkpwYkdWY0lqcGNJbTltWmx3aUxGd2laVzVoWW14bFgyRjFkRzlqYkc5elpWOXZibDlqYjIxd2JHVjBhVzl1WENJNlhDSnZabVpjSWl4Y0ltVnVZV0pzWlY5emIyTnBZV3hmYkdsdWEzTmNJanBjSW05bVpsd2lMRndpYzI5amFXRnNYMnhwYm10elhDSTZlMXdpYkdsdWEyVmthVzVmYkdsdWExd2lPbHdpWENJc1hDSm1ZV05sWW05dmExOXNhVzVyWENJNlhDSmNJaXhjSW5SM2FYUjBaWEpmYkdsdWExd2lPbHdpWENJc1hDSjJhMjl1ZEdGcmRHVmZiR2x1YTF3aU9sd2lYQ0lzWENKNWIzVjBkV0psWDJ4cGJtdGNJanBjSWx3aUxGd2lhVzV6ZEdGbmNtRnRYMnhwYm10Y0lqcGNJbHdpTEZ3aVltVm9ZVzVqWlY5c2FXNXJYQ0k2WENKY0luMHNYQ0p6YjJOcFlXeGZZblYwZEc5dWMxOW9aV0ZrYVc1blhDSTZYQ0pjSWl4Y0ltTnNiM05sWDJKMWRIUnZibDl6YVhwbFhDSTZNU3hjSW1Oc2IzTmxYMkoxZEhSdmJsOXBiV0ZuWlZ3aU9sd2lYQ0lzWENKaWIzSmtaWEpmYzNSNWJHVmNJanBjSW5OdmJHbGtYQ0lzWENKbGJtRmliR1ZmWW05eVpHVnlYM04wZVd4bFgyMXZZbWxzWlZ3aU9sd2liMlptWENJc1hDSmliM0prWlhKZmMzUjViR1ZmYlc5aWFXeGxYQ0k2WENKemIyeHBaRndpTEZ3aVlYbHpYM0JpWDJodmRtVnlYM05vYjNkZlkyeHZjMlZmWW5SdVhDSTZYQ0p2Wm1aY0lpeGNJbVJwYzJGaWJHVmZjMk55YjJ4c1hDSTZYQ0p2Wm1aY0lpeGNJbVJwYzJGaWJHVmZjMk55YjJ4c1gyMXZZbWxzWlZ3aU9sd2liMlptWENJc1hDSmxibUZpYkdWZmIzQmxibDlrWld4aGVWOXRiMkpwYkdWY0lqcGNJbTltWmx3aUxGd2liM0JsYmw5a1pXeGhlVjl0YjJKcGJHVmNJanBjSWpCY0lpeGNJbVZ1WVdKc1pWOXpZM0p2Ykd4ZmRHOXdYMjF2WW1sc1pWd2lPbHdpYjJabVhDSXNYQ0p6WTNKdmJHeGZkRzl3WDIxdlltbHNaVndpT2x3aU1Gd2lMRndpWlc1aFlteGxYM0JpWDNCdmMybDBhVzl1WDIxdlltbHNaVndpT2x3aWIyWm1YQ0lzWENKd1lsOXdiM05wZEdsdmJsOXRiMkpwYkdWY0lqcGNJbU5sYm5SbGNpMWpaVzUwWlhKY0lpeGNJbkJpWDJKblgybHRZV2RsWDNCdmMybDBhVzl1WENJNlhDSmpaVzUwWlhJdFkyVnVkR1Z5WENJc1hDSmxibUZpYkdWZmNHSmZZbWRmYVcxaFoyVmZjRzl6YVhScGIyNWZiVzlpYVd4bFhDSTZYQ0p2Wm1aY0lpeGNJbkJpWDJKblgybHRZV2RsWDNCdmMybDBhVzl1WDIxdlltbHNaVndpT2x3aVkyVnVkR1Z5TFdObGJuUmxjbHdpTEZ3aWNHSmZZbWRmYVcxaFoyVmZjMmw2YVc1blhDSTZYQ0pqYjNabGNsd2lMRndpWlc1aFlteGxYM0JpWDJKblgybHRZV2RsWDNOcGVtbHVaMTl0YjJKcGJHVmNJanBjSW05bVpsd2lMRndpY0dKZlltZGZhVzFoWjJWZmMybDZhVzVuWDIxdlltbHNaVndpT2x3aVkyOTJaWEpjSWl4Y0luWnBaR1Z2WDNSb1pXMWxYM1Z5YkZ3aU9sd2lYQ0lzWENKcGJXRm5aVjkwZVhCbFgybHRaMTl6Y21OY0lqcGNJbHdpTEZ3aWFXMWhaMlZmZEhsd1pWOXBiV2RmY21Wa2FYSmxZM1JmZFhKc1hDSTZYQ0pjSWl4Y0ltbHRZV2RsWDNSNWNHVmZhVzFuWDNKbFpHbHlaV04wWDNSdlgyNWxkMTkwWVdKY0lqcGNJbTltWmx3aUxGd2labUZqWldKdmIydGZjR0ZuWlY5MWNteGNJanBjSW1oMGRIQnpPbHhjWEM5Y1hGd3ZkM2QzTG1aaFkyVmliMjlyTG1OdmJWeGNYQzkzYjNKa2NISmxjM05jSWl4Y0ltaHBaR1ZmWm1KZmNHRm5aVjlqYjNabGNsOXdhRzkwYjF3aU9sd2liMlptWENJc1hDSjFjMlZmYzIxaGJHeGZabUpmYUdWaFpHVnlYQ0k2WENKdmJsd2lMRndpYm05MGFXWnBZMkYwYVc5dVgzUjVjR1ZmWTI5dGNHOXVaVzUwYzF3aU9sdGRMRndpYm05MGFXWnBZMkYwYVc5dVgzUjVjR1ZmWTI5dGNHOXVaVzUwYzE5dmNtUmxjbHdpT250Y0ltMWhhVzVmWTI5dWRHVnVkRndpT2x3aWJXRnBibDlqYjI1MFpXNTBYQ0lzWENKaWRYUjBiMjVmTVZ3aU9sd2lZblYwZEc5dVh6RmNJbjBzWENKdWIzUnBabWxqWVhScGIyNWZiV0ZwYmw5amIyNTBaVzUwWENJNlhDSlhjbWwwWlNCMGFHVWdZM1Z6ZEc5dElHNXZkR2xtYVdOaGRHbHZiaUJpWVc1dVpYSWdkR1Y0ZENCb1pYSmxMbHdpTEZ3aWJtOTBhV1pwWTJGMGFXOXVYMkoxZEhSdmJsOHhYM1JsZUhSY0lqcGNJa05zYVdOcklWd2lMRndpYm05MGFXWnBZMkYwYVc5dVgySjFkSFJ2Ymw4eFgzSmxaR2x5WldOMFgzVnliRndpT2x3aVhDSXNYQ0p1YjNScFptbGpZWFJwYjI1ZlluVjBkRzl1WHpGZmNtVmthWEpsWTNSZmRHOWZibVYzWDNSaFlsd2lPbHdpYjJabVhDSXNYQ0p1YjNScFptbGpZWFJwYjI1ZlluVjBkRzl1WHpGZlltZGZZMjlzYjNKY0lqcGNJaU5HTmpZeE1qTmNJaXhjSW01dmRHbG1hV05oZEdsdmJsOWlkWFIwYjI1Zk1WOWlaMTlvYjNabGNsOWpiMnh2Y2x3aU9sd2lJMFkyTmpFeU0xd2lMRndpYm05MGFXWnBZMkYwYVc5dVgySjFkSFJ2Ymw4eFgzUmxlSFJmWTI5c2IzSmNJanBjSWlOR1JrWkdSa1pjSWl4Y0ltNXZkR2xtYVdOaGRHbHZibDlpZFhSMGIyNWZNVjkwWlhoMFgyaHZkbVZ5WDJOdmJHOXlYQ0k2WENJalJrWkdSa1pHWENJc1hDSnViM1JwWm1sallYUnBiMjVmWW5WMGRHOXVYekZmYkdWMGRHVnlYM053WVdOcGJtZGNJam93TEZ3aWJtOTBhV1pwWTJGMGFXOXVYMkoxZEhSdmJsOHhYMlp2Ym5SZmMybDZaVndpT2pFMUxGd2libTkwYVdacFkyRjBhVzl1WDJKMWRIUnZibDh4WDJKdmNtUmxjbDl5WVdScGRYTmNJam8yTEZ3aWJtOTBhV1pwWTJGMGFXOXVYMkoxZEhSdmJsOHhYMkp2Y21SbGNsOTNhV1IwYUZ3aU9qQXNYQ0p1YjNScFptbGpZWFJwYjI1ZlluVjBkRzl1WHpGZlltOXlaR1Z5WDJOdmJHOXlYQ0k2WENJalJrWkdSa1pHWENJc1hDSnViM1JwWm1sallYUnBiMjVmWW5WMGRHOXVYekZmWW05eVpHVnlYM04wZVd4bFhDSTZYQ0p6YjJ4cFpGd2lMRndpYm05MGFXWnBZMkYwYVc5dVgySjFkSFJ2Ymw4eFgzQmhaR1JwYm1kZmJHVm1kRjl5YVdkb2RGd2lPak15TEZ3aWJtOTBhV1pwWTJGMGFXOXVYMkoxZEhSdmJsOHhYM0JoWkdScGJtZGZkRzl3WDJKdmRIUnZiVndpT2pFeUxGd2libTkwYVdacFkyRjBhVzl1WDJKMWRIUnZibDh4WDJWdVlXSnNaVjlpYjNoZmMyaGhaRzkzWENJNlhDSnZabVpjSWl4Y0ltNXZkR2xtYVdOaGRHbHZibDlpZFhSMGIyNWZNVjlpYjNoZmMyaGhaRzkzWDJOdmJHOXlYQ0k2WENJalJrWTRNekU1WENJc1hDSnViM1JwWm1sallYUnBiMjVmWW5WMGRHOXVYekZmWW05NFgzTm9ZV1J2ZDE5NFgyOW1abk5sZEZ3aU9qQXNYQ0p1YjNScFptbGpZWFJwYjI1ZlluVjBkRzl1WHpGZlltOTRYM05vWVdSdmQxOTVYMjltWm5ObGRGd2lPakFzWENKdWIzUnBabWxqWVhScGIyNWZZblYwZEc5dVh6RmZZbTk0WDNOb1lXUnZkMTk2WDI5bVpuTmxkRndpT2pFd0xGd2ljR0pmYldGNFgyaGxhV2RvZEZ3aU9sd2lYQ0lzWENKd2IzQjFjRjl0WVhoZmFHVnBaMmgwWDJKNVgzQmxjbU5sYm5SaFoyVmZjSGhjSWpwY0luQnBlR1ZzYzF3aUxGd2ljR0pmYldGNFgyaGxhV2RvZEY5dGIySnBiR1ZjSWpwY0lsd2lMRndpY0c5d2RYQmZiV0Y0WDJobGFXZG9kRjlpZVY5d1pYSmpaVzUwWVdkbFgzQjRYMjF2WW1sc1pWd2lPbHdpY0dsNFpXeHpYQ0lzWENKd1lsOXRhVzVmYUdWcFoyaDBYQ0k2WENKY0lpeGNJbkJpWDJadmJuUmZjMmw2WlZ3aU9qWXdMRndpY0dKZlptOXVkRjl6YVhwbFgyWnZjbDl0YjJKcGJHVmNJam94TXl4Y0luQmlYM1JwZEd4bFgzUmxlSFJmYzJoaFpHOTNYQ0k2WENKeVoySmhLREkxTlN3eU5UVXNNalUxTERBcFhDSXNYQ0psYm1GaWJHVmZjR0pmZEdsMGJHVmZkR1Y0ZEY5emFHRmtiM2RjSWpwY0ltOW1abHdpTEZ3aWNHSmZkR2wwYkdWZmRHVjRkRjl6YUdGa2IzZGZlRjl2Wm1aelpYUmNJam95TEZ3aWNHSmZkR2wwYkdWZmRHVjRkRjl6YUdGa2IzZGZlVjl2Wm1aelpYUmNJam95TEZ3aWNHSmZkR2wwYkdWZmRHVjRkRjl6YUdGa2IzZGZlbDl2Wm1aelpYUmNJam93TEZ3aWNHSmZkR2wwYkdWZmRHVjRkRjl6YUdGa2IzZGZiVzlpYVd4bFhDSTZYQ0p5WjJKaEtESTFOU3d5TlRVc01qVTFMREFwWENJc1hDSmxibUZpYkdWZmNHSmZkR2wwYkdWZmRHVjRkRjl6YUdGa2IzZGZiVzlpYVd4bFhDSTZYQ0p2Wm1aY0lpeGNJbkJpWDNScGRHeGxYM1JsZUhSZmMyaGhaRzkzWDNoZmIyWm1jMlYwWDIxdlltbHNaVndpT2pJc1hDSndZbDkwYVhSc1pWOTBaWGgwWDNOb1lXUnZkMTk1WDI5bVpuTmxkRjl0YjJKcGJHVmNJam95TEZ3aWNHSmZkR2wwYkdWZmRHVjRkRjl6YUdGa2IzZGZlbDl2Wm1aelpYUmZiVzlpYVd4bFhDSTZNQ3hjSW1OeVpXRjBaVjlrWVhSbFhDSTZYQ0l5TURJMExUQTRMVEExSURFeU9qSTBPakkwWENJc1hDSmpjbVZoZEdWZllYVjBhRzl5WENJNk1TeGNJbUYxZEdodmNsd2lPbHdpZTF4Y1hDSnBaRnhjWENJNlhGeGNJakZjWEZ3aUxGeGNYQ0p1WVcxbFhGeGNJanBjWEZ3aVFXeHdhR0Z1YjIxcGVGOUJaRzFwYmx4Y1hDSjlYQ0lzWENKbGJtRmliR1ZmWkdsemJXbHpjMXdpT2x3aWIyWm1YQ0lzWENKbGJtRmliR1ZmWkdsemJXbHpjMTkwWlhoMFhDSTZYQ0pFYVhOdGFYTnpJR0ZrWENJc1hDSmxibUZpYkdWZlpHbHpiV2x6YzE5dGIySnBiR1ZjSWpwY0ltOW1abHdpTEZ3aVpXNWhZbXhsWDJScGMyMXBjM05mZEdWNGRGOXRiMkpwYkdWY0lqcGNJa1JwYzIxcGMzTWdZV1JjSWl4Y0ltVnVZV0pzWlY5aWIzaGZjMmhoWkc5M1hDSTZYQ0p2Wm1aY0lpeGNJbVZ1WVdKc1pWOWliM2hmYzJoaFpHOTNYMjF2WW1sc1pWd2lPbHdpYjJabVhDSXNYQ0ppYjNoZmMyaGhaRzkzWDJOdmJHOXlYQ0k2WENJak1EQXdYQ0lzWENKaWIzaGZjMmhoWkc5M1gyTnZiRzl5WDIxdlltbHNaVndpT2x3aUl6QXdNRndpTEZ3aWNHSmZZbTk0WDNOb1lXUnZkMTk0WDI5bVpuTmxkRndpT2pBc1hDSndZbDlpYjNoZmMyaGhaRzkzWDNoZmIyWm1jMlYwWDIxdlltbHNaVndpT2pBc1hDSndZbDlpYjNoZmMyaGhaRzkzWDNsZmIyWm1jMlYwWENJNk1DeGNJbkJpWDJKdmVGOXphR0ZrYjNkZmVWOXZabVp6WlhSZmJXOWlhV3hsWENJNk1DeGNJbkJpWDJKdmVGOXphR0ZrYjNkZmVsOXZabVp6WlhSY0lqb3hOU3hjSW5CaVgySnZlRjl6YUdGa2IzZGZlbDl2Wm1aelpYUmZiVzlpYVd4bFhDSTZNVFVzWENKa2FYTmhZbXhsWDNOamNtOXNiRjl2Ymw5d2IzQjFjRndpT2x3aWIyWm1YQ0lzWENKa2FYTmhZbXhsWDNOamNtOXNiRjl2Ymw5d2IzQjFjRjl0YjJKcGJHVmNJanBjSW05bVpsd2lMRndpYzJodmQxOXpZM0p2Ykd4aVlYSmNJanBjSW05bVpsd2lMRndpYUdsa1pWOXZibDl3WTF3aU9sd2liMlptWENJc1hDSm9hV1JsWDI5dVgzUmhZbXhsZEhOY0lqcGNJbTltWmx3aUxGd2ljR0pmWW1kZmFXMWhaMlZmWkdseVpXTjBhVzl1WDI5dVgyMXZZbWxzWlZ3aU9sd2liMjVjSWl4Y0ltTnNiM05sWDJKMWRIUnZibDlqYjJ4dmNsd2lPbHdpSXpBd01Gd2lMRndpWTJ4dmMyVmZZblYwZEc5dVgyaHZkbVZ5WDJOdmJHOXlYQ0k2WENJak1EQXdNREF3WENJc1hDSmliSFZ5WldSZmIzWmxjbXhoZVZ3aU9sd2liMlptWENJc1hDSmliSFZ5WldSZmIzWmxjbXhoZVY5dGIySnBiR1ZjSWpwY0ltOW1abHdpTEZ3aWNHSmZZWFYwYjJOc2IzTmxYMjF2WW1sc1pWd2lPbHdpTWpCY0lpeGNJbVZ1WVdKc1pWOWhkWFJ2WTJ4dmMyVmZaR1ZzWVhsZmRHVjRkRjl0YjJKcGJHVmNJanBjSW05bVpsd2lMRndpWlc1aFlteGxYMjkyWlhKc1lYbGZkR1Y0ZEY5dGIySnBiR1ZjSWpwY0ltOW1abHdpTEZ3aWIzWmxjbXhoZVY5dGIySnBiR1ZmYjNCaFkybDBlVndpT2x3aU1DNDFYQ0lzWENKemFHOTNYM0J2Y0hWd1gzUnBkR3hsWDIxdlltbHNaVndpT2x3aVQyWm1YQ0lzWENKemFHOTNYM0J2Y0hWd1gyUmxjMk5mYlc5aWFXeGxYQ0k2WENKUFptWmNJaXhjSW1WdVlXSnNaVjloYm1sdFlYUmxYMmx1WDIxdlltbHNaVndpT2x3aWIyWm1YQ0lzWENKaGJtbHRZWFJsWDJsdVgyMXZZbWxzWlZ3aU9sd2labUZrWlVsdVhDSXNYQ0psYm1GaWJHVmZZVzVwYldGMFpWOXZkWFJmYlc5aWFXeGxYQ0k2WENKdlptWmNJaXhjSW1GdWFXMWhkR1ZmYjNWMFgyMXZZbWxzWlZ3aU9sd2labUZrWlU5MWRGd2lMRndpWlc1aFlteGxYMlJwYzNCc1lYbGZZMjl1ZEdWdWRGOXRiMkpwYkdWY0lqcGNJbTltWmx3aUxGd2laVzVoWW14bFgySm5ZMjlzYjNKZmJXOWlhV3hsWENJNlhDSnZabVpjSWl4Y0ltSm5ZMjlzYjNKZmJXOWlhV3hsWENJNlhDSWpabVptWm1abVhDSXNYQ0psYm1GaWJHVmZZbWRmYVcxaFoyVmZiVzlpYVd4bFhDSTZYQ0p2Wm1aY0lpeGNJbUpuWDJsdFlXZGxYMjF2WW1sc1pWd2lPbHdpWENJc1hDSmxibUZpYkdWZlltOXlaR1Z5WTI5c2IzSmZiVzlpYVd4bFhDSTZYQ0p2Wm1aY0lpeGNJbUp2Y21SbGNtTnZiRzl5WDIxdlltbHNaVndpT2x3aUkyWm1abVptWmx3aUxGd2laVzVoWW14bFgySnZjbVJsY25OcGVtVmZiVzlpYVd4bFhDSTZYQ0p2Wm1aY0lpeGNJbUp2Y21SbGNuTnBlbVZmYlc5aWFXeGxYQ0k2WENJeFhDSXNYQ0psYm1GaWJHVmZZbTl5WkdWeVgzSmhaR2wxYzE5dGIySnBiR1ZjSWpwY0ltOW1abHdpTEZ3aVltOXlaR1Z5WDNKaFpHbDFjMTl0YjJKcGJHVmNJanBjSWpSY0luMGlMQ0p6YUc5M1gzQnZjSFZ3WDNScGRHeGxYMjF2WW1sc1pTSTZJazltWmlJc0luTm9iM2RmY0c5d2RYQmZaR1Z6WTE5dGIySnBiR1VpT2lKUFptWWlmWDA9IjsKICAgICAgICAgICAgICAgIA==
4 ms
javascript;base64,CiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKGQsIHMsIGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcywgZmpzID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIGpzID0gZC5jcmVhdGVFbGVtZW50KHMpOwogICAgICAgICAgICAgICAgICAgICAgICBqcy5pZCA9IGlkOwogICAgICAgICAgICAgICAgICAgICAgICBqcy5zcmMgPSAiLy9jb25uZWN0LmZhY2Vib29rLm5ldC9lbl9VUy9zZGsuanMjeGZibWw9MSZ2ZXJzaW9uPXYyLjUiOwogICAgICAgICAgICAgICAgICAgICAgICBmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZqcyk7CiAgICAgICAgICAgICAgICAgICAgfShkb2N1bWVudCwgJ3NjcmlwdCcsICdmYWNlYm9vay1qc3NkaycpKTsKICAgICAgICAgICAgICAgIA==
5 ms
javascript;base64,CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzZnNpX2Z1bmN0aW9uc19sb2FkZWQnLCBmdW5jdGlvbigpIHsKICAgIGlmICh0eXBlb2Ygc2ZzaV9yZXNwb25zaXZlX3RvZ2dsZSA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgc2ZzaV9yZXNwb25zaXZlX3RvZ2dsZSgwKTsKICAgICAgICAvLyBjb25zb2xlLmxvZygnc2ZzaV9yZXNwb25zaXZlX3RvZ2dsZScpOwoKICAgIH0KfSkK
5 ms
javascript;base64,d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNmc2lfZnVuY3Rpb25zX2xvYWRlZCIsIGZ1bmN0aW9uKCkKCQkJewoJCQkJaWYgKHR5cGVvZiBzZnNpX3dpZGdldF9zZXQgPT0gImZ1bmN0aW9uIikgewoJCQkJCXNmc2lfd2lkZ2V0X3NldCgpOwoJCQkJfQoJCQl9KTsgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Nmc2lfZnVuY3Rpb25zX2xvYWRlZCcsZnVuY3Rpb24oKQoJCQkJCSAgewoJCQkJCQl2YXIgdG9wYWxpZ24gPSAoIGpRdWVyeSh3aW5kb3cpLmhlaWdodCgpIC0galF1ZXJ5KCcjc2ZzaV9mbG9hdGVyJykuaGVpZ2h0KCkgKSAvIDI7CgkJCQkJCWpRdWVyeSgnI3Nmc2lfZmxvYXRlcicpLmNzcygndG9wJyx0b3BhbGlnbik7CgkJCQkJICAJc2ZzaV9mbG9hdF93aWRnZXQoJ2NlbnRlcicpOwoJCQkJCSAgfSk7
5 ms
javascript;base64,DQp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2ZzaV9mdW5jdGlvbnNfbG9hZGVkJywgZnVuY3Rpb24oKSB7DQogICAgaWYgKHR5cGVvZiBzZnNpX3BsdWdpbl92ZXJzaW9uID09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgc2ZzaV9wbHVnaW5fdmVyc2lvbigyLjc3KTsNCiAgICB9DQp9KTsNCg0KZnVuY3Rpb24gc2ZzaV9wcm9jZXNzZnVydGhlcihyZWYpIHsNCiAgICB2YXIgZmVlZF9pZCA9ICdZak5NT1ZVMVV6ZFBabVl6U0dsdU56ZDZTbHB2Y21RMFNHdEhTV1JFUWtkblQyNWtkbXc1VlhkV1JtazJlbHBwVDFkMFZFZFhTbTFIUjJkR0wzQllPVXQ0V1N0cVpXUlNLMUZsYmt0UFoyVjJhbFZ4U0hGUlJrUXJUMkl5TVhweWVFZEtNamhYYkRGcU5HZExZbVIzUkVocWRrVnJkMGxHUnpoRFFuSkxOVkI4YjI5SmJEUlhSazFvV0VWU1UwYzNaMU5OWld0MlREUjJaVUp0YUZCdVpHNUthbkZ4Tkdaa1RtOW5jejA9JzsNCiAgICB2YXIgZmVlZHR5cGUgPSA4Ow0KICAgIHZhciBlbWFpbCA9IGpRdWVyeShyZWYpLmZpbmQoJ2lucHV0W25hbWU9ImVtYWlsIl0nKS52YWwoKTsNCiAgICB2YXIgZmlsdGVyID0gL14oKFtePD4oKVtcXVxcLiw7OlxzQFwiXSsoXC5bXjw+KClbXF1cXC4sOzpcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVxdKXwoKFthLXpBLVpcLTAtOV0rXC4pK1thLXpBLVpdezIsfSkpJC87DQogICAgaWYgKChlbWFpbCAhPSAiRW50ZXIgeW91ciBlbWFpbCIpICYmIChmaWx0ZXIudGVzdChlbWFpbCkpKSB7DQogICAgICAgIGlmIChmZWVkdHlwZSA9PSAiOCIpIHsNCiAgICAgICAgICAgIHZhciB1cmwgPSAiaHR0cHM6Ly9hcGkuZm9sbG93Lml0L3N1YnNjcmlwdGlvbi1mb3JtLyIgKyBmZWVkX2lkICsgIi8iICsgZmVlZHR5cGU7DQogICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsICJwb3B1cHdpbmRvdyIsICJzY3JvbGxiYXJzPXllcyx3aWR0aD0xMDgwLGhlaWdodD03NjAiKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgYWxlcnQoIlBsZWFzZSBlbnRlciBlbWFpbCBhZGRyZXNzIik7DQogICAgICAgIGpRdWVyeShyZWYpLmZpbmQoJ2lucHV0W25hbWU9ImVtYWlsIl0nKS5mb2N1cygpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KfQ0K
5 ms
autoptimize_single_b2cab759a126cf91b47502b1a99ddbde.php
1886 ms
autoptimize_single_f07af59cb2c74b06bebdc70ee9cbddf3.php
2905 ms
autoptimize_single_073c6f53093c1452e7e69fc909bfa21c.php
2904 ms
font-awesome.min.css
817 ms
animate.min.css
818 ms
autoptimize_single_88c35cf04d85fd01386d5406953e5d72.php
823 ms
autoptimize_single_b59b8c443bf7752575eff46a508d8277.php
895 ms
ays-pb-public-min.css
918 ms
autoptimize_single_08f3fa5cd7040c88c7ddf43deadde2a9.php
2909 ms
hooks.min.js
1040 ms
i18n.min.js
1064 ms
javascript;base64,CndwLmkxOG4uc2V0TG9jYWxlRGF0YSggeyAndGV4dCBkaXJlY3Rpb25cdTAwMDRsdHInOiBbICdsdHInIF0gfSApOwo=
3 ms
autoptimize_single_efc27e253fae1b7b891fb5a40e687768.php
1089 ms
javascript;base64,CnZhciB3cGNmNyA9IHsiYXBpIjp7InJvb3QiOiJodHRwczpcL1wvd3d3LmdyZWVuZWRlc2lnbmFuZGJ1aWxkLmNvbVwvd3AtanNvblwvIiwibmFtZXNwYWNlIjoiY29udGFjdC1mb3JtLTdcL3YxIn19Owo=
3 ms
autoptimize_single_0b1719adf5fa7231cb1a1b54cf11a50e.php
1125 ms
autoptimize_single_a814e25df935e17c09b8fb765308c70a.php
1149 ms
javascript;base64,CndwYV9maWVsZF9pbmZvID0geyJ3cGFfZmllbGRfbmFtZSI6Impla2RxdTE5MjEiLCJ3cGFfZmllbGRfdmFsdWUiOjc2MTk3Miwid3BhX2FkZF90ZXN0Ijoibm8ifQo=
2 ms
core.min.js
1185 ms
modernizr.custom.min.js
1245 ms
jquery.shuffle.min.js
1293 ms
random-shuffle-min.js
1320 ms
javascript;base64,CnZhciBzZnNpX2ljb25fYWpheF9vYmplY3QgPSB7Im5vbmNlIjoiZGIyZjVkZTJjZSIsImFqYXhfdXJsIjoiaHR0cHM6XC9cL3d3dy5ncmVlbmVkZXNpZ25hbmRidWlsZC5jb21cL3dwLWFkbWluXC9hZG1pbi1hamF4LnBocCIsInBsdWdpbl91cmwiOiJodHRwczpcL1wvd3d3LmdyZWVuZWRlc2lnbmFuZGJ1aWxkLmNvbVwvd3AtY29udGVudFwvcGx1Z2luc1wvdWx0aW1hdGUtc29jaWFsLW1lZGlhLWljb25zXC8ifTsK
2 ms
autoptimize_single_77c296adc2a1b014cf4dddcca2513b8d.php
1347 ms
bootstrap.min.js
1365 ms
autoptimize_single_b385047b75556e78347cc7f0b1a4c8a2.php
1382 ms
autoptimize_single_5ff82b5c930c48df99ed1b1630673455.php
3875 ms
js_composer_front.min.js
1851 ms
vc-waypoints.min.js
1853 ms
51124-Greene-Logo-300x85.png
2154 ms
51124-Greene-Logo.png
1215 ms
51124-Greene-Logo-white.png
1198 ms
cover-9.png
1239 ms
dots.svg
3164 ms
cropped-51124-Greene-Favicon.png
1274 ms
Greene-kitchen-table.png
1299 ms
1516928575438.png
3182 ms
51124-Greene-Logo-300x85.png
2290 ms
flat_facebook.png
2290 ms
flat_youtube.png
2222 ms
flat_linkedin.png
2221 ms
QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K3vXBi8Jow.ttf
74 ms
QGY_z_wNahGAdqQ43RhVcIgYT2Xz5u32K5fQBi8Jow.ttf
96 ms
sway-font.woff
3096 ms
flat_instagram.png
2217 ms
embed
242 ms
Greene-house-banner-10.png
2171 ms
greene-popboc-new-domain-2.png
2511 ms
js
26 ms
search.js
3 ms
geometry.js
5 ms
main.js
9 ms
sdk.js
84 ms
Buildings-Landmarks.woff
889 ms
Design.woff
890 ms
Industry.woff
966 ms
fa-regular-400.ttf
5746 ms
fa-solid-900.ttf
967 ms
Maps-Locations.woff
5745 ms
Desktop-apps.woff
5745 ms
sdk.js
7 ms
newburyportbuilder.com accessibility score
Contrast
These are opportunities to improve the legibility of your content.
Impact
Issue
Background and foreground colors do not have a sufficient contrast ratio.
Names and labels
These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader.
Impact
Issue
<frame> or <iframe> elements do not have a title
Links do not have a discernible name
Navigation
These are opportunities to improve keyboard navigation in your application.
Impact
Issue
Heading elements are not in a sequentially-descending order
newburyportbuilder.com best practices score
Trust and Safety
Impact
Issue
Does not use HTTPS
Ensure CSP is effective against XSS attacks
User Experience
Impact
Issue
Displays images with incorrect aspect ratio
General
Impact
Issue
Detected JavaScript libraries
newburyportbuilder.com SEO score
Crawling and Indexing
To appear in search results, crawlers need access to your app.
Impact
Issue
Links are not crawlable
Mobile Friendly
Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn more](https://developers.google.com/search/mobile-sites/).
Impact
Issue
Document uses legible font sizes
EN
EN
UTF-8
Language claimed in HTML meta tag should match the language actually used on the web page. Otherwise Newburyportbuilder.com can be misinterpreted by Google and other search engines. Our service has detected that English is used on the page, and it matches the claimed language. Our system also found out that Newburyportbuilder.com main page’s claimed encoding is utf-8. Use of this encoding format is the best practice as the main page visitors from all over the world won’t have any issues with symbol transcription.
newburyportbuilder.com
Open Graph description is not detected on the main page of Newburyportbuilder. Lack of Open Graph description can be counter-productive for their social media presence, as such a description allows converting a website homepage (or other pages) into good-looking, rich and well-structured posts, when it is being shared on Facebook and other social media. For example, adding the following code snippet into HTML <head> tag will help to represent this web page correctly in social networks: