diff --git a/.gitignore b/.gitignore index 998a537..f575375 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .obsidian .blend1 .blend +/data.db +/_plug/ diff --git a/_plug/git.plug.json b/_plug/git.plug.json deleted file mode 100644 index a85fe81..0000000 --- a/_plug/git.plug.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"git","imports":["https://get.silverbullet.md/global.plug.json"],"requiredPermissions":["shell"],"functions":{"snapshotCommand":{"env":"client","command":{"name":"Git: Snapshot"},"code":"(() => { var mod=(()=>{var l=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(e,r)=>{for(var o in r)l(e,o,{get:r[o],enumerable:!0})},x=(e,r,o,n)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let s of f(r))!d.call(e,s)&&s!==o&&l(e,s,{get:()=>r[s],enumerable:!(n=p(r,s))||n.enumerable});return e};var P=e=>x(l({},\"__esModule\",{value:!0}),e);var re={};m(re,{default:()=>te});var i=self.syscall;typeof self>\"u\"&&(self={syscall:()=>{throw new Error(\"Not implemented here\")}});var t=self.syscall;var a={};m(a,{dispatch:()=>$,enableReadOnlyMode:()=>H,filterBox:()=>U,flashNotification:()=>R,getCurrentPage:()=>M,getCursor:()=>k,getSelection:()=>T,getText:()=>C,hidePanel:()=>I,insertAtCursor:()=>Q,insertAtPos:()=>O,matchBefore:()=>G,moveCursor:()=>V,navigate:()=>E,openUrl:()=>N,prompt:()=>z,reloadPage:()=>q,replaceRange:()=>K,save:()=>L,setPage:()=>S,setSelection:()=>D,showPanel:()=>B});function M(){return t(\"editor.getCurrentPage\")}function S(e){return t(\"editor.setPage\",e)}function C(){return t(\"editor.getText\")}function k(){return t(\"editor.getCursor\")}function T(){return t(\"editor.getSelection\")}function D(e,r){return t(\"editor.setSelection\",e,r)}function L(){return t(\"editor.save\")}function E(e,r,o=!1){return t(\"editor.navigate\",e,r,o)}function q(){return t(\"editor.reloadPage\")}function N(e){return t(\"editor.openUrl\",e)}function R(e,r=\"info\"){return t(\"editor.flashNotification\",e,r)}function U(e,r,o=\"\",n=\"\"){return t(\"editor.filterBox\",e,r,o,n)}function B(e,r,o,n=\"\"){return t(\"editor.showPanel\",e,r,o,n)}function I(e){return t(\"editor.hidePanel\",e)}function O(e,r){return t(\"editor.insertAtPos\",e,r)}function K(e,r,o){return t(\"editor.replaceRange\",e,r,o)}function V(e){return t(\"editor.moveCursor\",e)}function Q(e){return t(\"editor.insertAtCursor\",e)}function G(e){return t(\"editor.matchBefore\",e)}function $(e){return t(\"editor.dispatch\",e)}function z(e,r=\"\"){return t(\"editor.prompt\",e,r)}function H(e){return t(\"editor.enableReadOnlyMode\",e)}var u={};m(u,{invokeCommand:()=>_,invokeFunction:()=>Z,listCommands:()=>j,reloadPlugs:()=>ee});function Z(e,r,...o){return t(\"system.invokeFunction\",e,r,...o)}function _(e){return t(\"system.invokeCommand\",e)}function j(){return t(\"system.listCommands\")}function ee(){t(\"system.reloadPlugs\")}async function g(){let e=await a.prompt(\"Revision name:\");e||(e=\"Snapshot\"),console.log(\"Revision name\",e),await u.invokeFunction(\"server\",\"commit\",e)}var te=g;return P(re);})();\n return mod;})()"},"syncCommand":{"env":"client","command":{"name":"Git: Sync"},"code":"(() => { var mod=(()=>{var l=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(e,r)=>{for(var o in r)l(e,o,{get:r[o],enumerable:!0})},x=(e,r,o,n)=>{if(r&&typeof r==\"object\"||typeof r==\"function\")for(let s of p(r))!d.call(e,s)&&s!==o&&l(e,s,{get:()=>r[s],enumerable:!(n=f(r,s))||n.enumerable});return e};var P=e=>x(l({},\"__esModule\",{value:!0}),e);var re={};m(re,{default:()=>te});var i=self.syscall;typeof self>\"u\"&&(self={syscall:()=>{throw new Error(\"Not implemented here\")}});var t=self.syscall;var a={};m(a,{dispatch:()=>$,enableReadOnlyMode:()=>H,filterBox:()=>U,flashNotification:()=>R,getCurrentPage:()=>M,getCursor:()=>k,getSelection:()=>T,getText:()=>C,hidePanel:()=>I,insertAtCursor:()=>Q,insertAtPos:()=>O,matchBefore:()=>G,moveCursor:()=>V,navigate:()=>E,openUrl:()=>N,prompt:()=>z,reloadPage:()=>q,replaceRange:()=>K,save:()=>L,setPage:()=>S,setSelection:()=>D,showPanel:()=>B});function M(){return t(\"editor.getCurrentPage\")}function S(e){return t(\"editor.setPage\",e)}function C(){return t(\"editor.getText\")}function k(){return t(\"editor.getCursor\")}function T(){return t(\"editor.getSelection\")}function D(e,r){return t(\"editor.setSelection\",e,r)}function L(){return t(\"editor.save\")}function E(e,r,o=!1){return t(\"editor.navigate\",e,r,o)}function q(){return t(\"editor.reloadPage\")}function N(e){return t(\"editor.openUrl\",e)}function R(e,r=\"info\"){return t(\"editor.flashNotification\",e,r)}function U(e,r,o=\"\",n=\"\"){return t(\"editor.filterBox\",e,r,o,n)}function B(e,r,o,n=\"\"){return t(\"editor.showPanel\",e,r,o,n)}function I(e){return t(\"editor.hidePanel\",e)}function O(e,r){return t(\"editor.insertAtPos\",e,r)}function K(e,r,o){return t(\"editor.replaceRange\",e,r,o)}function V(e){return t(\"editor.moveCursor\",e)}function Q(e){return t(\"editor.insertAtCursor\",e)}function G(e){return t(\"editor.matchBefore\",e)}function $(e){return t(\"editor.dispatch\",e)}function z(e,r=\"\"){return t(\"editor.prompt\",e,r)}function H(e){return t(\"editor.enableReadOnlyMode\",e)}var u={};m(u,{invokeCommand:()=>_,invokeFunction:()=>Z,listCommands:()=>j,reloadPlugs:()=>ee});function Z(e,r,...o){return t(\"system.invokeFunction\",e,r,...o)}function _(e){return t(\"system.invokeCommand\",e)}function j(){return t(\"system.listCommands\")}function ee(){t(\"system.reloadPlugs\")}async function g(){await a.flashNotification(\"Syncing with git\"),await u.invokeFunction(\"server\",\"sync\"),await a.flashNotification(\"Git sync complete!\")}var te=g;return P(re);})();\n return mod;})()"},"commit":{"env":"server","code":"(() => { var mod=(()=>{var a=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var l=(e,t)=>{for(var s in t)a(e,s,{get:t[s],enumerable:!0})},x=(e,t,s,u)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let n of p(t))!d.call(e,n)&&n!==s&&a(e,n,{get:()=>t[n],enumerable:!(u=f(t,n))||u.enumerable});return e};var P=e=>x(a({},\"__esModule\",{value:!0}),e);var L={};l(L,{default:()=>D});var r=self.syscall;var i={};l(i,{run:()=>F});function F(e,t){return r(\"shell.run\",e,t)}typeof self>\"u\"&&(self={syscall:()=>{throw new Error(\"Not implemented here\")}});var o=self.syscall;async function g(e){e||(e=\"Snapshot\"),console.log(\"Snapshotting the current space to git with commit message\",e),await i.run(\"git\",[\"add\",\"./*.md\"]);try{await i.run(\"git\",[\"commit\",\"-a\",\"-m\",e])}catch{}console.log(\"Done!\")}var D=g;return P(L);})();\n return mod;})()"},"sync":{"env":"server","code":"(() => { var mod=(()=>{var a=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var l=(e,t)=>{for(var s in t)a(e,s,{get:t[s],enumerable:!0})},x=(e,t,s,u)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of p(t))!d.call(e,i)&&i!==s&&a(e,i,{get:()=>t[i],enumerable:!(u=f(t,i))||u.enumerable});return e};var P=e=>x(a({},\"__esModule\",{value:!0}),e);var E={};l(E,{default:()=>L});var r=self.syscall;var o={};l(o,{run:()=>F});function F(e,t){return r(\"shell.run\",e,t)}typeof self>\"u\"&&(self={syscall:()=>{throw new Error(\"Not implemented here\")}});var n=self.syscall;async function D(e){e||(e=\"Snapshot\"),console.log(\"Snapshotting the current space to git with commit message\",e),await o.run(\"git\",[\"add\",\"./*.md\"]);try{await o.run(\"git\",[\"commit\",\"-a\",\"-m\",e])}catch{}console.log(\"Done!\")}async function g(){console.log(\"Going to sync with git\"),await D(),console.log(\"Then pulling from remote\"),await o.run(\"git\",[\"pull\"]),console.log(\"And then pushing to remote\"),await o.run(\"git\",[\"push\"]),console.log(\"Done!\")}var L=g;return P(E);})();\n return mod;})()"}},"assets":{}} \ No newline at end of file diff --git a/_plug/graphview.plug.json b/_plug/graphview.plug.json deleted file mode 100644 index ffd1745..0000000 --- a/_plug/graphview.plug.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"graphview","imports":["https://get.silverbullet.md/global.plug.json"],"version":0.1,"assets":{"asset/d3-force.js":"data:application/javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1mb3JjZS8gdjMuMC4wIENvcHlyaWdodCAyMDEwLTIwMjEgTWlrZSBCb3N0b2NrCiFmdW5jdGlvbihuLHQpeyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/dChleHBvcnRzLHJlcXVpcmUoImQzLXF1YWR0cmVlIikscmVxdWlyZSgiZDMtZGlzcGF0Y2giKSxyZXF1aXJlKCJkMy10aW1lciIpKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiLCJkMy1xdWFkdHJlZSIsImQzLWRpc3BhdGNoIiwiZDMtdGltZXIiXSx0KTp0KChuPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOm58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzKX0odGhpcywoZnVuY3Rpb24obix0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHUobil7cmV0dXJuIDFlLTYqKG4oKS0uNSl9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gbi54K24udnh9ZnVuY3Rpb24gZihuKXtyZXR1cm4gbi55K24udnl9ZnVuY3Rpb24gYShuKXtyZXR1cm4gbi5pbmRleH1mdW5jdGlvbiBjKG4sdCl7dmFyIGU9bi5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJub2RlIG5vdCBmb3VuZDogIit0KTtyZXR1cm4gZX1jb25zdCBsPTQyOTQ5NjcyOTY7ZnVuY3Rpb24gaChuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIHYobil7cmV0dXJuIG4ueX12YXIgeT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7bi5mb3JjZUNlbnRlcj1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MTtmdW5jdGlvbiBpKCl7dmFyIGksdSxvPWUubGVuZ3RoLGY9MCxhPTA7Zm9yKGk9MDtpPG87KytpKWYrPSh1PWVbaV0pLngsYSs9dS55O2ZvcihmPShmL28tbikqcixhPShhL28tdCkqcixpPTA7aTxvOysraSkodT1lW2ldKS54LT1mLHUueS09YX1yZXR1cm4gbnVsbD09biYmKG49MCksbnVsbD09dCYmKHQ9MCksaS5pbml0aWFsaXplPWZ1bmN0aW9uKG4pe2U9bn0saS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGkpOm59LGkueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixpKTp0fSxpLnN0cmVuZ3RoPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStuLGkpOnJ9LGl9LG4uZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKG4pe3ZhciBlLHIsYSxjPTEsbD0xO2Z1bmN0aW9uIGgoKXtmb3IodmFyIG4saSxoLHksZCxnLHgscz1lLmxlbmd0aCxwPTA7cDxsOysrcClmb3IoaT10LnF1YWR0cmVlKGUsbyxmKS52aXNpdEFmdGVyKHYpLG49MDtuPHM7KytuKWg9ZVtuXSxnPXJbaC5pbmRleF0seD1nKmcseT1oLngraC52eCxkPWgueStoLnZ5LGkudmlzaXQoTSk7ZnVuY3Rpb24gTShuLHQsZSxyLGkpe3ZhciBvPW4uZGF0YSxmPW4ucixsPWcrZjtpZighbylyZXR1cm4gdD55K2x8fHI8eS1sfHxlPmQrbHx8aTxkLWw7aWYoby5pbmRleD5oLmluZGV4KXt2YXIgdj15LW8ueC1vLnZ4LHM9ZC1vLnktby52eSxwPXYqditzKnM7cDxsKmwmJigwPT09diYmKHArPSh2PXUoYSkpKnYpLDA9PT1zJiYocCs9KHM9dShhKSkqcykscD0obC0ocD1NYXRoLnNxcnQocCkpKS9wKmMsaC52eCs9KHYqPXApKihsPShmKj1mKS8oeCtmKSksaC52eSs9KHMqPXApKmwsby52eC09dioobD0xLWwpLG8udnktPXMqbCl9fX1mdW5jdGlvbiB2KG4pe2lmKG4uZGF0YSlyZXR1cm4gbi5yPXJbbi5kYXRhLmluZGV4XTtmb3IodmFyIHQ9bi5yPTA7dDw0OysrdCluW3RdJiZuW3RdLnI+bi5yJiYobi5yPW5bdF0ucil9ZnVuY3Rpb24geSgpe2lmKGUpe3ZhciB0LGksdT1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkodSksdD0wO3Q8dTsrK3QpaT1lW3RdLHJbaS5pbmRleF09K24oaSx0LGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49aShudWxsPT1uPzE6K24pKSxoLmluaXRpYWxpemU9ZnVuY3Rpb24obix0KXtlPW4sYT10LHkoKX0saC5pdGVyYXRpb25zPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStuLGgpOmx9LGguc3RyZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K24saCk6Y30saC5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppKCt0KSx5KCksaCk6bn0saH0sbi5mb3JjZUxpbms9ZnVuY3Rpb24obil7dmFyIHQsZSxyLG8sZixsLGg9YSx2PWZ1bmN0aW9uKG4pe3JldHVybiAxL01hdGgubWluKG9bbi5zb3VyY2UuaW5kZXhdLG9bbi50YXJnZXQuaW5kZXhdKX0seT1pKDMwKSxkPTE7ZnVuY3Rpb24gZyhyKXtmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8ZDsrK2kpZm9yKHZhciBhLGMsaCx2LHksZyx4LHM9MDtzPG87KytzKWM9KGE9bltzXSkuc291cmNlLHY9KGg9YS50YXJnZXQpLngraC52eC1jLngtYy52eHx8dShsKSx5PWgueStoLnZ5LWMueS1jLnZ5fHx1KGwpLHYqPWc9KChnPU1hdGguc3FydCh2KnYreSp5KSktZVtzXSkvZypyKnRbc10seSo9ZyxoLnZ4LT12Kih4PWZbc10pLGgudnktPXkqeCxjLnZ4Kz12Kih4PTEteCksYy52eSs9eSp4fWZ1bmN0aW9uIHgoKXtpZihyKXt2YXIgaSx1LGE9ci5sZW5ndGgsbD1uLmxlbmd0aCx2PW5ldyBNYXAoci5tYXAoKChuLHQpPT5baChuLHQsciksbl0pKSk7Zm9yKGk9MCxvPW5ldyBBcnJheShhKTtpPGw7KytpKSh1PW5baV0pLmluZGV4PWksIm9iamVjdCIhPXR5cGVvZiB1LnNvdXJjZSYmKHUuc291cmNlPWModix1LnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgdS50YXJnZXQmJih1LnRhcmdldD1jKHYsdS50YXJnZXQpKSxvW3Uuc291cmNlLmluZGV4XT0ob1t1LnNvdXJjZS5pbmRleF18fDApKzEsb1t1LnRhcmdldC5pbmRleF09KG9bdS50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihpPTAsZj1uZXcgQXJyYXkobCk7aTxsOysraSl1PW5baV0sZltpXT1vW3Uuc291cmNlLmluZGV4XS8ob1t1LnNvdXJjZS5pbmRleF0rb1t1LnRhcmdldC5pbmRleF0pO3Q9bmV3IEFycmF5KGwpLHMoKSxlPW5ldyBBcnJheShsKSxwKCl9fWZ1bmN0aW9uIHMoKXtpZihyKWZvcih2YXIgZT0wLGk9bi5sZW5ndGg7ZTxpOysrZSl0W2VdPSt2KG5bZV0sZSxuKX1mdW5jdGlvbiBwKCl7aWYocilmb3IodmFyIHQ9MCxpPW4ubGVuZ3RoO3Q8aTsrK3QpZVt0XT0reShuW3RdLHQsbil9cmV0dXJuIG51bGw9PW4mJihuPVtdKSxnLmluaXRpYWxpemU9ZnVuY3Rpb24obix0KXtyPW4sbD10LHgoKX0sZy5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHgoKSxnKTpufSxnLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPW4sZyk6aH0sZy5pdGVyYXRpb25zPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPStuLGcpOmR9LGcuc3RyZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjppKCtuKSxzKCksZyk6dn0sZy5kaXN0YW5jZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmkoK24pLHAoKSxnKTp5fSxnfSxuLmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgbixlLHIsbyxmLGE9aSgtMzApLGM9MSxsPTEvMCx5PS44MTtmdW5jdGlvbiBkKHIpe3ZhciBpLHU9bi5sZW5ndGgsZj10LnF1YWR0cmVlKG4saCx2KS52aXNpdEFmdGVyKHgpO2ZvcihvPXIsaT0wO2k8dTsrK2kpZT1uW2ldLGYudmlzaXQocyl9ZnVuY3Rpb24gZygpe2lmKG4pe3ZhciB0LGUscj1uLmxlbmd0aDtmb3IoZj1uZXcgQXJyYXkociksdD0wO3Q8cjsrK3QpZT1uW3RdLGZbZS5pbmRleF09K2EoZSx0LG4pfX1mdW5jdGlvbiB4KG4pe3ZhciB0LGUscixpLHUsbz0wLGE9MDtpZihuLmxlbmd0aCl7Zm9yKHI9aT11PTA7dTw0OysrdSkodD1uW3VdKSYmKGU9TWF0aC5hYnModC52YWx1ZSkpJiYobys9dC52YWx1ZSxhKz1lLHIrPWUqdC54LGkrPWUqdC55KTtuLng9ci9hLG4ueT1pL2F9ZWxzZXsodD1uKS54PXQuZGF0YS54LHQueT10LmRhdGEueTtkb3tvKz1mW3QuZGF0YS5pbmRleF19d2hpbGUodD10Lm5leHQpfW4udmFsdWU9b31mdW5jdGlvbiBzKG4sdCxpLGEpe2lmKCFuLnZhbHVlKXJldHVybiEwO3ZhciBoPW4ueC1lLngsdj1uLnktZS55LGQ9YS10LGc9aCpoK3YqdjtpZihkKmQveTxnKXJldHVybiBnPGwmJigwPT09aCYmKGcrPShoPXUocikpKmgpLDA9PT12JiYoZys9KHY9dShyKSkqdiksZzxjJiYoZz1NYXRoLnNxcnQoYypnKSksZS52eCs9aCpuLnZhbHVlKm8vZyxlLnZ5Kz12Km4udmFsdWUqby9nKSwhMDtpZighKG4ubGVuZ3RofHxnPj1sKSl7KG4uZGF0YSE9PWV8fG4ubmV4dCkmJigwPT09aCYmKGcrPShoPXUocikpKmgpLDA9PT12JiYoZys9KHY9dShyKSkqdiksZzxjJiYoZz1NYXRoLnNxcnQoYypnKSkpO2Rve24uZGF0YSE9PWUmJihkPWZbbi5kYXRhLmluZGV4XSpvL2csZS52eCs9aCpkLGUudnkrPXYqZCl9d2hpbGUobj1uLm5leHQpfX1yZXR1cm4gZC5pbml0aWFsaXplPWZ1bmN0aW9uKHQsZSl7bj10LHI9ZSxnKCl9LGQuc3RyZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjppKCtuKSxnKCksZCk6YX0sZC5kaXN0YW5jZU1pbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uKm4sZCk6TWF0aC5zcXJ0KGMpfSxkLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4qbixkKTpNYXRoLnNxcnQobCl9LGQudGhldGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9bipuLGQpOk1hdGguc3FydCh5KX0sZH0sbi5mb3JjZVJhZGlhbD1mdW5jdGlvbihuLHQsZSl7dmFyIHIsdSxvLGY9aSguMSk7ZnVuY3Rpb24gYShuKXtmb3IodmFyIGk9MCxmPXIubGVuZ3RoO2k8ZjsrK2kpe3ZhciBhPXJbaV0sYz1hLngtdHx8MWUtNixsPWEueS1lfHwxZS02LGg9TWF0aC5zcXJ0KGMqYytsKmwpLHY9KG9baV0taCkqdVtpXSpuL2g7YS52eCs9Yyp2LGEudnkrPWwqdn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciB0LGU9ci5sZW5ndGg7Zm9yKHU9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHQ9MDt0PGU7Kyt0KW9bdF09K24oclt0XSx0LHIpLHVbdF09aXNOYU4ob1t0XSk/MDorZihyW3RdLHQscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1pKCtuKSksbnVsbD09dCYmKHQ9MCksbnVsbD09ZSYmKGU9MCksYS5pbml0aWFsaXplPWZ1bmN0aW9uKG4pe3I9bixjKCl9LGEuc3RyZW5ndGg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjppKCtuKSxjKCksYSk6Zn0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppKCt0KSxjKCksYSk6bn0sYS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLGEpOnR9LGEueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rbixhKTplfSxhfSxuLmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbihuKXt2YXIgdCxpPTEsdT0uMDAxLG89MS1NYXRoLnBvdyh1LDEvMzAwKSxmPTAsYT0uNixjPW5ldyBNYXAsaD1yLnRpbWVyKGcpLHY9ZS5kaXNwYXRjaCgidGljayIsImVuZCIpLGQ9ZnVuY3Rpb24oKXtsZXQgbj0xO3JldHVybigpPT4obj0oMTY2NDUyNSpuKzEwMTM5MDQyMjMpJWwpL2x9KCk7ZnVuY3Rpb24gZygpe3goKSx2LmNhbGwoInRpY2siLHQpLGk8dSYmKGguc3RvcCgpLHYuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24geChlKXt2YXIgcix1LGw9bi5sZW5ndGg7dm9pZCAwPT09ZSYmKGU9MSk7Zm9yKHZhciBoPTA7aDxlOysraClmb3IoaSs9KGYtaSkqbyxjLmZvckVhY2goKGZ1bmN0aW9uKG4pe24oaSl9KSkscj0wO3I8bDsrK3IpbnVsbD09KHU9bltyXSkuZng/dS54Kz11LnZ4Kj1hOih1Lng9dS5meCx1LnZ4PTApLG51bGw9PXUuZnk/dS55Kz11LnZ5Kj1hOih1Lnk9dS5meSx1LnZ5PTApO3JldHVybiB0fWZ1bmN0aW9uIHMoKXtmb3IodmFyIHQsZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSl7aWYoKHQ9bltlXSkuaW5kZXg9ZSxudWxsIT10LmZ4JiYodC54PXQuZngpLG51bGwhPXQuZnkmJih0Lnk9dC5meSksaXNOYU4odC54KXx8aXNOYU4odC55KSl7dmFyIGk9MTAqTWF0aC5zcXJ0KC41K2UpLHU9ZSp5O3QueD1pKk1hdGguY29zKHUpLHQueT1pKk1hdGguc2luKHUpfShpc05hTih0LnZ4KXx8aXNOYU4odC52eSkpJiYodC52eD10LnZ5PTApfX1mdW5jdGlvbiBwKHQpe3JldHVybiB0LmluaXRpYWxpemUmJnQuaW5pdGlhbGl6ZShuLGQpLHR9cmV0dXJuIG51bGw9PW4mJihuPVtdKSxzKCksdD17dGljazp4LHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0YXJ0KGcpLHR9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gaC5zdG9wKCksdH0sbm9kZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSxzKCksYy5mb3JFYWNoKHApLHQpOm59LGFscGhhOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStuLHQpOml9LGFscGhhTWluOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PStuLHQpOnV9LGFscGhhRGVjYXk6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K24sdCk6K299LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPStuLHQpOmZ9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9MS1uLHQpOjEtYX0scmFuZG9tU291cmNlOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW4sYy5mb3JFYWNoKHApLHQpOmR9LGZvcmNlOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09ZT9jLmRlbGV0ZShuKTpjLnNldChuLHAoZSkpLHQpOmMuZ2V0KG4pfSxmaW5kOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaSx1LG8sZixhLGM9MCxsPW4ubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsYz0wO2M8bDsrK2MpKG89KGk9dC0oZj1uW2NdKS54KSppKyh1PWUtZi55KSp1KTxyJiYoYT1mLHI9byk7cmV0dXJuIGF9LG9uOmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8odi5vbihuLGUpLHQpOnYub24obil9fX0sbi5mb3JjZVg9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9aSguMSk7ZnVuY3Rpb24gbyhuKXtmb3IodmFyIGksdT0wLG89dC5sZW5ndGg7dTxvOysrdSkoaT10W3VdKS52eCs9KHJbdV0taS54KSplW3VdKm59ZnVuY3Rpb24gZigpe2lmKHQpe3ZhciBpLG89dC5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGk9MDtpPG87KytpKWVbaV09aXNOYU4ocltpXT0rbih0W2ldLGksdCkpPzA6K3UodFtpXSxpLHQpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49aShudWxsPT1uPzA6K24pKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24obil7dD1uLGYoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmkoK24pLGYoKSxvKTp1fSxvLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppKCt0KSxmKCksbyk6bn0sb30sbi5mb3JjZVk9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9aSguMSk7ZnVuY3Rpb24gbyhuKXtmb3IodmFyIGksdT0wLG89dC5sZW5ndGg7dTxvOysrdSkoaT10W3VdKS52eSs9KHJbdV0taS55KSplW3VdKm59ZnVuY3Rpb24gZigpe2lmKHQpe3ZhciBpLG89dC5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGk9MDtpPG87KytpKWVbaV09aXNOYU4ocltpXT0rbih0W2ldLGksdCkpPzA6K3UodFtpXSxpLHQpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49aShudWxsPT1uPzA6K24pKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24obil7dD1uLGYoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmkoK24pLGYoKSxvKTp1fSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppKCt0KSxmKCksbyk6bn0sb30sT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpOw==","asset/d3.js":"data:application/javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZyB2Ny42LjEgQ29weXJpZ2h0IDIwMTAtMjAyMiBNaWtlIEJvc3RvY2sKIWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9uKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLG4pOm4oKHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBudWxsPT10fHxudWxsPT1uP05hTjp0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBlKHQsbil7cmV0dXJuIG51bGw9PXR8fG51bGw9PW4/TmFOOm48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIHIodCl7bGV0IHIsbyxhO2Z1bmN0aW9uIHUodCxuLGU9MCxpPXQubGVuZ3RoKXtpZihlPGkpe2lmKDAhPT1yKG4sbikpcmV0dXJuIGk7ZG97Y29uc3Qgcj1lK2k+Pj4xO28odFtyXSxuKTwwP2U9cisxOmk9cn13aGlsZShlPGkpfXJldHVybiBlfXJldHVybiAyIT09dC5sZW5ndGg/KHI9bixvPShlLHIpPT5uKHQoZSksciksYT0obixlKT0+dChuKS1lKToocj10PT09bnx8dD09PWU/dDppLG89dCxhPXQpLHtsZWZ0OnUsY2VudGVyOmZ1bmN0aW9uKHQsbixlPTAscj10Lmxlbmd0aCl7Y29uc3QgaT11KHQsbixlLHItMSk7cmV0dXJuIGk+ZSYmYSh0W2ktMV0sbik+LWEodFtpXSxuKT9pLTE6aX0scmlnaHQ6ZnVuY3Rpb24odCxuLGU9MCxpPXQubGVuZ3RoKXtpZihlPGkpe2lmKDAhPT1yKG4sbikpcmV0dXJuIGk7ZG97Y29uc3Qgcj1lK2k+Pj4xO28odFtyXSxuKTw9MD9lPXIrMTppPXJ9d2hpbGUoZTxpKX1yZXR1cm4gZX19fWZ1bmN0aW9uIGkoKXtyZXR1cm4gMH1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24qYSh0LG4pe2lmKHZvaWQgMD09PW4pZm9yKGxldCBuIG9mIHQpbnVsbCE9biYmKG49K24pPj1uJiYoeWllbGQgbik7ZWxzZXtsZXQgZT0tMTtmb3IobGV0IHIgb2YgdCludWxsIT0ocj1uKHIsKytlLHQpKSYmKHI9K3IpPj1yJiYoeWllbGQgcil9fWNvbnN0IHU9cihuKSxjPXUucmlnaHQsZj11LmxlZnQscz1yKG8pLmNlbnRlcjt2YXIgbD1jO2NvbnN0IGg9cCh2KSxkPXAoKGZ1bmN0aW9uKHQpe2NvbnN0IG49dih0KTtyZXR1cm4odCxlLHIsaSxvKT0+e24odCxlLChyPDw9MikrMCwoaTw8PTIpKzAsbzw8PTIpLG4odCxlLHIrMSxpKzEsbyksbih0LGUscisyLGkrMixvKSxuKHQsZSxyKzMsaSszLG8pfX0pKTtmdW5jdGlvbiBwKHQpe3JldHVybiBmdW5jdGlvbihuLGUscj1lKXtpZighKChlPStlKT49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgcngiKTtpZighKChyPStyKT49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgcnkiKTtsZXR7ZGF0YTppLHdpZHRoOm8saGVpZ2h0OmF9PW47aWYoISgobz1NYXRoLmZsb29yKG8pKT49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgd2lkdGgiKTtpZighKChhPU1hdGguZmxvb3Iodm9pZCAwIT09YT9hOmkubGVuZ3RoL28pKT49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgaGVpZ2h0Iik7aWYoIW98fCFhfHwhZSYmIXIpcmV0dXJuIG47Y29uc3QgdT1lJiZ0KGUpLGM9ciYmdChyKSxmPWkuc2xpY2UoKTtyZXR1cm4gdSYmYz8oZyh1LGYsaSxvLGEpLGcodSxpLGYsbyxhKSxnKHUsZixpLG8sYSkseShjLGksZixvLGEpLHkoYyxmLGksbyxhKSx5KGMsaSxmLG8sYSkpOnU/KGcodSxpLGYsbyxhKSxnKHUsZixpLG8sYSksZyh1LGksZixvLGEpKTpjJiYoeShjLGksZixvLGEpLHkoYyxmLGksbyxhKSx5KGMsaSxmLG8sYSkpLG59fWZ1bmN0aW9uIGcodCxuLGUscixpKXtmb3IobGV0IG89MCxhPXIqaTtvPGE7KXQobixlLG8sbys9ciwxKX1mdW5jdGlvbiB5KHQsbixlLHIsaSl7Zm9yKGxldCBvPTAsYT1yKmk7bzxyOysrbyl0KG4sZSxvLG8rYSxyKX1mdW5jdGlvbiB2KHQpe2NvbnN0IG49TWF0aC5mbG9vcih0KTtpZihuPT09dClyZXR1cm4gZnVuY3Rpb24odCl7Y29uc3Qgbj0yKnQrMTtyZXR1cm4oZSxyLGksbyxhKT0+e2lmKCEoKG8tPWEpPj1pKSlyZXR1cm47bGV0IHU9dCpyW2ldO2NvbnN0IGM9YSp0O2ZvcihsZXQgdD1pLG49aStjO3Q8bjt0Kz1hKXUrPXJbTWF0aC5taW4obyx0KV07Zm9yKGxldCB0PWksZj1vO3Q8PWY7dCs9YSl1Kz1yW01hdGgubWluKG8sdCtjKV0sZVt0XT11L24sdS09cltNYXRoLm1heChpLHQtYyldfX0odCk7Y29uc3QgZT10LW4scj0yKnQrMTtyZXR1cm4odCxpLG8sYSx1KT0+e2lmKCEoKGEtPXUpPj1vKSlyZXR1cm47bGV0IGM9bippW29dO2NvbnN0IGY9dSpuLHM9Zit1O2ZvcihsZXQgdD1vLG49bytmO3Q8bjt0Kz11KWMrPWlbTWF0aC5taW4oYSx0KV07Zm9yKGxldCBuPW8sbD1hO248PWw7bis9dSljKz1pW01hdGgubWluKGEsbitmKV0sdFtuXT0oYytlKihpW01hdGgubWF4KG8sbi1zKV0raVtNYXRoLm1pbihhLG4rcyldKSkvcixjLT1pW01hdGgubWF4KG8sbi1mKV19fWZ1bmN0aW9uIF8odCxuKXtsZXQgZT0wO2lmKHZvaWQgMD09PW4pZm9yKGxldCBuIG9mIHQpbnVsbCE9biYmKG49K24pPj1uJiYrK2U7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1uKGksKytyLHQpKSYmKGk9K2kpPj1pJiYrK2V9cmV0dXJuIGV9ZnVuY3Rpb24gYih0KXtyZXR1cm4gMHx0Lmxlbmd0aH1mdW5jdGlvbiBtKHQpe3JldHVybiEodD4wKX1mdW5jdGlvbiB4KHQpe3JldHVybiJvYmplY3QiIT10eXBlb2YgdHx8Imxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiB3KHQsbil7bGV0IGUscj0wLGk9MCxvPTA7aWYodm9pZCAwPT09bilmb3IobGV0IG4gb2YgdCludWxsIT1uJiYobj0rbik+PW4mJihlPW4taSxpKz1lLysrcixvKz1lKihuLWkpKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgdSBvZiB0KW51bGwhPSh1PW4odSwrK2EsdCkpJiYodT0rdSk+PXUmJihlPXUtaSxpKz1lLysrcixvKz1lKih1LWkpKX1pZihyPjEpcmV0dXJuIG8vKHItMSl9ZnVuY3Rpb24gTSh0LG4pe2NvbnN0IGU9dyh0LG4pO3JldHVybiBlP01hdGguc3FydChlKTplfWZ1bmN0aW9uIEEodCxuKXtsZXQgZSxyO2lmKHZvaWQgMD09PW4pZm9yKGNvbnN0IG4gb2YgdCludWxsIT1uJiYodm9pZCAwPT09ZT9uPj1uJiYoZT1yPW4pOihlPm4mJihlPW4pLHI8biYmKHI9bikpKTtlbHNle2xldCBpPS0xO2ZvcihsZXQgbyBvZiB0KW51bGwhPShvPW4obywrK2ksdCkpJiYodm9pZCAwPT09ZT9vPj1vJiYoZT1yPW8pOihlPm8mJihlPW8pLHI8byYmKHI9bykpKX1yZXR1cm5bZSxyXX1jbGFzcyBUe2NvbnN0cnVjdG9yKCl7dGhpcy5fcGFydGlhbHM9bmV3IEZsb2F0NjRBcnJheSgzMiksdGhpcy5fbj0wfWFkZCh0KXtjb25zdCBuPXRoaXMuX3BhcnRpYWxzO2xldCBlPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9uJiZyPDMyO3IrKyl7Y29uc3QgaT1uW3JdLG89dCtpLGE9TWF0aC5hYnModCk8TWF0aC5hYnMoaSk/dC0oby1pKTppLShvLXQpO2EmJihuW2UrK109YSksdD1vfXJldHVybiBuW2VdPXQsdGhpcy5fbj1lKzEsdGhpc312YWx1ZU9mKCl7Y29uc3QgdD10aGlzLl9wYXJ0aWFscztsZXQgbixlLHIsaT10aGlzLl9uLG89MDtpZihpPjApe2ZvcihvPXRbLS1pXTtpPjAmJihuPW8sZT10Wy0taV0sbz1uK2Uscj1lLShvLW4pLCFyKTspO2k+MCYmKHI8MCYmdFtpLTFdPDB8fHI+MCYmdFtpLTFdPjApJiYoZT0yKnIsbj1vK2UsZT09bi1vJiYobz1uKSl9cmV0dXJuIG99fWNsYXNzIEludGVybk1hcCBleHRlbmRzIE1hcHtjb25zdHJ1Y3Rvcih0LG49Til7aWYoc3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtfaW50ZXJuOnt2YWx1ZTpuZXcgTWFwfSxfa2V5Ont2YWx1ZTpufX0pLG51bGwhPXQpZm9yKGNvbnN0W24sZV1vZiB0KXRoaXMuc2V0KG4sZSl9Z2V0KHQpe3JldHVybiBzdXBlci5nZXQoUyh0aGlzLHQpKX1oYXModCl7cmV0dXJuIHN1cGVyLmhhcyhTKHRoaXMsdCkpfXNldCh0LG4pe3JldHVybiBzdXBlci5zZXQoRSh0aGlzLHQpLG4pfWRlbGV0ZSh0KXtyZXR1cm4gc3VwZXIuZGVsZXRlKGsodGhpcyx0KSl9fWNsYXNzIEludGVyblNldCBleHRlbmRzIFNldHtjb25zdHJ1Y3Rvcih0LG49Til7aWYoc3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtfaW50ZXJuOnt2YWx1ZTpuZXcgTWFwfSxfa2V5Ont2YWx1ZTpufX0pLG51bGwhPXQpZm9yKGNvbnN0IG4gb2YgdCl0aGlzLmFkZChuKX1oYXModCl7cmV0dXJuIHN1cGVyLmhhcyhTKHRoaXMsdCkpfWFkZCh0KXtyZXR1cm4gc3VwZXIuYWRkKEUodGhpcyx0KSl9ZGVsZXRlKHQpe3JldHVybiBzdXBlci5kZWxldGUoayh0aGlzLHQpKX19ZnVuY3Rpb24gUyh7X2ludGVybjp0LF9rZXk6bn0sZSl7Y29uc3Qgcj1uKGUpO3JldHVybiB0LmhhcyhyKT90LmdldChyKTplfWZ1bmN0aW9uIEUoe19pbnRlcm46dCxfa2V5Om59LGUpe2NvbnN0IHI9bihlKTtyZXR1cm4gdC5oYXMocik/dC5nZXQocik6KHQuc2V0KHIsZSksZSl9ZnVuY3Rpb24gayh7X2ludGVybjp0LF9rZXk6bn0sZSl7Y29uc3Qgcj1uKGUpO3JldHVybiB0LmhhcyhyKSYmKGU9dC5nZXQociksdC5kZWxldGUocikpLGV9ZnVuY3Rpb24gTih0KXtyZXR1cm4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdD90LnZhbHVlT2YoKTp0fWZ1bmN0aW9uIEModCl7cmV0dXJuIHR9ZnVuY3Rpb24gUCh0LC4uLm4pe3JldHVybiBJKHQsQyxDLG4pfWZ1bmN0aW9uIHoodCwuLi5uKXtyZXR1cm4gSSh0LEFycmF5LmZyb20sQyxuKX1mdW5jdGlvbiBEKHQsbil7Zm9yKGxldCBlPTEscj1uLmxlbmd0aDtlPHI7KytlKXQ9dC5mbGF0TWFwKCh0PT50LnBvcCgpLm1hcCgoKFtuLGVdKT0+Wy4uLnQsbixlXSkpKSk7cmV0dXJuIHR9ZnVuY3Rpb24gUih0LG4sLi4uZSl7cmV0dXJuIEkodCxDLG4sZSl9ZnVuY3Rpb24gRih0LG4sLi4uZSl7cmV0dXJuIEkodCxBcnJheS5mcm9tLG4sZSl9ZnVuY3Rpb24gcSh0KXtpZigxIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJkdXBsaWNhdGUga2V5Iik7cmV0dXJuIHRbMF19ZnVuY3Rpb24gSSh0LG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24gdChpLG8pe2lmKG8+PXIubGVuZ3RoKXJldHVybiBlKGkpO2NvbnN0IGE9bmV3IEludGVybk1hcCx1PXJbbysrXTtsZXQgYz0tMTtmb3IoY29uc3QgdCBvZiBpKXtjb25zdCBuPXUodCwrK2MsaSksZT1hLmdldChuKTtlP2UucHVzaCh0KTphLnNldChuLFt0XSl9Zm9yKGNvbnN0W24sZV1vZiBhKWEuc2V0KG4sdChlLG8pKTtyZXR1cm4gbihhKX0odCwwKX1mdW5jdGlvbiBPKHQsbil7cmV0dXJuIEFycmF5LmZyb20obiwobj0+dFtuXSkpfWZ1bmN0aW9uIFUodCwuLi5uKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdFtTeW1ib2wuaXRlcmF0b3JdKXRocm93IG5ldyBUeXBlRXJyb3IoInZhbHVlcyBpcyBub3QgaXRlcmFibGUiKTt0PUFycmF5LmZyb20odCk7bGV0W2VdPW47aWYoZSYmMiE9PWUubGVuZ3RofHxuLmxlbmd0aD4xKXtjb25zdCByPVVpbnQzMkFycmF5LmZyb20odCwoKHQsbik9Pm4pKTtyZXR1cm4gbi5sZW5ndGg+MT8obj1uLm1hcCgobj0+dC5tYXAobikpKSxyLnNvcnQoKCh0LGUpPT57Zm9yKGNvbnN0IHIgb2Ygbil7Y29uc3Qgbj1ZKHJbdF0scltlXSk7aWYobilyZXR1cm4gbn19KSkpOihlPXQubWFwKGUpLHIuc29ydCgoKHQsbik9PlkoZVt0XSxlW25dKSkpKSxPKHQscil9cmV0dXJuIHQuc29ydChCKGUpKX1mdW5jdGlvbiBCKHQ9bil7aWYodD09PW4pcmV0dXJuIFk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY29tcGFyZSBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybihuLGUpPT57Y29uc3Qgcj10KG4sZSk7cmV0dXJuIHJ8fDA9PT1yP3I6KDA9PT10KGUsZSkpLSgwPT09dChuLG4pKX19ZnVuY3Rpb24gWSh0LG4pe3JldHVybihudWxsPT10fHwhKHQ+PXQpKS0obnVsbD09bnx8IShuPj1uKSl8fCh0PG4/LTE6dD5uPzE6MCl9dmFyIEw9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIGoodCl7cmV0dXJuKCk9PnR9dmFyICQ9TWF0aC5zcXJ0KDUwKSxIPU1hdGguc3FydCgxMCksWD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gRyh0LG4sZSl7dmFyIHIsaSxvLGEsdT0tMTtpZihlPStlLCh0PSt0KT09PShuPStuKSYmZT4wKXJldHVyblt0XTtpZigocj1uPHQpJiYoaT10LHQ9bixuPWkpLDA9PT0oYT1WKHQsbixlKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApe2xldCBlPU1hdGgucm91bmQodC9hKSxyPU1hdGgucm91bmQobi9hKTtmb3IoZSphPHQmJisrZSxyKmE+biYmLS1yLG89bmV3IEFycmF5KGk9ci1lKzEpOysrdTxpOylvW3VdPShlK3UpKmF9ZWxzZXthPS1hO2xldCBlPU1hdGgucm91bmQodCphKSxyPU1hdGgucm91bmQobiphKTtmb3IoZS9hPHQmJisrZSxyL2E+biYmLS1yLG89bmV3IEFycmF5KGk9ci1lKzEpOysrdTxpOylvW3VdPShlK3UpL2F9cmV0dXJuIHImJm8ucmV2ZXJzZSgpLG99ZnVuY3Rpb24gVih0LG4sZSl7dmFyIHI9KG4tdCkvTWF0aC5tYXgoMCxlKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSxvPXIvTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PSQ/MTA6bz49SD81Om8+PVg/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj0kPzEwOm8+PUg/NTpvPj1YPzI6MSl9ZnVuY3Rpb24gVyh0LG4sZSl7dmFyIHI9TWF0aC5hYnMobi10KS9NYXRoLm1heCgwLGUpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApKSxvPXIvaTtyZXR1cm4gbz49JD9pKj0xMDpvPj1IP2kqPTU6bz49WCYmKGkqPTIpLG48dD8taTppfWZ1bmN0aW9uIFoodCxuLGUpe2xldCByO2Zvcig7Oyl7Y29uc3QgaT1WKHQsbixlKTtpZihpPT09cnx8MD09PWl8fCFpc0Zpbml0ZShpKSlyZXR1cm5bdCxuXTtpPjA/KHQ9TWF0aC5mbG9vcih0L2kpKmksbj1NYXRoLmNlaWwobi9pKSppKTppPDAmJih0PU1hdGguY2VpbCh0KmkpL2ksbj1NYXRoLmZsb29yKG4qaSkvaSkscj1pfX1mdW5jdGlvbiBLKHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2coXyh0KSkvTWF0aC5MTjIpKzF9ZnVuY3Rpb24gUSgpe3ZhciB0PUMsbj1BLGU9SztmdW5jdGlvbiByKHIpe0FycmF5LmlzQXJyYXkocil8fChyPUFycmF5LmZyb20ocikpO3ZhciBpLG8sYSx1PXIubGVuZ3RoLGM9bmV3IEFycmF5KHUpO2ZvcihpPTA7aTx1OysraSljW2ldPXQocltpXSxpLHIpO3ZhciBmPW4oYykscz1mWzBdLGg9ZlsxXSxkPWUoYyxzLGgpO2lmKCFBcnJheS5pc0FycmF5KGQpKXtjb25zdCB0PWgsZT0rZDtpZihuPT09QSYmKFtzLGhdPVoocyxoLGUpKSwoZD1HKHMsaCxlKSlbMF08PXMmJihhPVYocyxoLGUpKSxkW2QubGVuZ3RoLTFdPj1oKWlmKHQ+PWgmJm49PT1BKXtjb25zdCB0PVYocyxoLGUpO2lzRmluaXRlKHQpJiYodD4wP2g9KE1hdGguZmxvb3IoaC90KSsxKSp0OnQ8MCYmKGg9KE1hdGguY2VpbChoKi10KSsxKS8tdCkpfWVsc2UgZC5wb3AoKX1mb3IodmFyIHA9ZC5sZW5ndGg7ZFswXTw9czspZC5zaGlmdCgpLC0tcDtmb3IoO2RbcC0xXT5oOylkLnBvcCgpLC0tcDt2YXIgZyx5PW5ldyBBcnJheShwKzEpO2ZvcihpPTA7aTw9cDsrK2kpKGc9eVtpXT1bXSkueDA9aT4wP2RbaS0xXTpzLGcueDE9aTxwP2RbaV06aDtpZihpc0Zpbml0ZShhKSl7aWYoYT4wKWZvcihpPTA7aTx1OysraSludWxsIT0obz1jW2ldKSYmczw9byYmbzw9aCYmeVtNYXRoLm1pbihwLE1hdGguZmxvb3IoKG8tcykvYSkpXS5wdXNoKHJbaV0pO2Vsc2UgaWYoYTwwKWZvcihpPTA7aTx1OysraSlpZihudWxsIT0obz1jW2ldKSYmczw9byYmbzw9aCl7Y29uc3QgdD1NYXRoLmZsb29yKChzLW8pKmEpO3lbTWF0aC5taW4ocCx0KyhkW3RdPD1vKSldLnB1c2gocltpXSl9fWVsc2UgZm9yKGk9MDtpPHU7KytpKW51bGwhPShvPWNbaV0pJiZzPD1vJiZvPD1oJiZ5W2woZCxvLDAscCldLnB1c2gocltpXSk7cmV0dXJuIHl9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpqKG4pLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aihbdFswXSx0WzFdXSkscik6bn0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9qKEwuY2FsbCh0KSk6aih0KSxyKTplfSxyfWZ1bmN0aW9uIEoodCxuKXtsZXQgZTtpZih2b2lkIDA9PT1uKWZvcihjb25zdCBuIG9mIHQpbnVsbCE9biYmKGU8bnx8dm9pZCAwPT09ZSYmbj49bikmJihlPW4pO2Vsc2V7bGV0IHI9LTE7Zm9yKGxldCBpIG9mIHQpbnVsbCE9KGk9bihpLCsrcix0KSkmJihlPGl8fHZvaWQgMD09PWUmJmk+PWkpJiYoZT1pKX1yZXR1cm4gZX1mdW5jdGlvbiB0dCh0LG4pe2xldCBlLHI9LTEsaT0tMTtpZih2b2lkIDA9PT1uKWZvcihjb25zdCBuIG9mIHQpKytpLG51bGwhPW4mJihlPG58fHZvaWQgMD09PWUmJm4+PW4pJiYoZT1uLHI9aSk7ZWxzZSBmb3IobGV0IG8gb2YgdCludWxsIT0obz1uKG8sKytpLHQpKSYmKGU8b3x8dm9pZCAwPT09ZSYmbz49bykmJihlPW8scj1pKTtyZXR1cm4gcn1mdW5jdGlvbiBudCh0LG4pe2xldCBlO2lmKHZvaWQgMD09PW4pZm9yKGNvbnN0IG4gb2YgdCludWxsIT1uJiYoZT5ufHx2b2lkIDA9PT1lJiZuPj1uKSYmKGU9bik7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1uKGksKytyLHQpKSYmKGU+aXx8dm9pZCAwPT09ZSYmaT49aSkmJihlPWkpfXJldHVybiBlfWZ1bmN0aW9uIGV0KHQsbil7bGV0IGUscj0tMSxpPS0xO2lmKHZvaWQgMD09PW4pZm9yKGNvbnN0IG4gb2YgdCkrK2ksbnVsbCE9biYmKGU+bnx8dm9pZCAwPT09ZSYmbj49bikmJihlPW4scj1pKTtlbHNlIGZvcihsZXQgbyBvZiB0KW51bGwhPShvPW4obywrK2ksdCkpJiYoZT5vfHx2b2lkIDA9PT1lJiZvPj1vKSYmKGU9byxyPWkpO3JldHVybiByfWZ1bmN0aW9uIHJ0KHQsbixlPTAscj10Lmxlbmd0aC0xLGkpe2ZvcihpPXZvaWQgMD09PWk/WTpCKGkpO3I+ZTspe2lmKHItZT42MDApe2NvbnN0IG89ci1lKzEsYT1uLWUrMSx1PU1hdGgubG9nKG8pLGM9LjUqTWF0aC5leHAoMip1LzMpLGY9LjUqTWF0aC5zcXJ0KHUqYyooby1jKS9vKSooYS1vLzI8MD8tMToxKTtydCh0LG4sTWF0aC5tYXgoZSxNYXRoLmZsb29yKG4tYSpjL28rZikpLE1hdGgubWluKHIsTWF0aC5mbG9vcihuKyhvLWEpKmMvbytmKSksaSl9Y29uc3Qgbz10W25dO2xldCBhPWUsdT1yO2ZvcihpdCh0LGUsbiksaSh0W3JdLG8pPjAmJml0KHQsZSxyKTthPHU7KXtmb3IoaXQodCxhLHUpLCsrYSwtLXU7aSh0W2FdLG8pPDA7KSsrYTtmb3IoO2kodFt1XSxvKT4wOyktLXV9MD09PWkodFtlXSxvKT9pdCh0LGUsdSk6KCsrdSxpdCh0LHUscikpLHU8PW4mJihlPXUrMSksbjw9dSYmKHI9dS0xKX1yZXR1cm4gdH1mdW5jdGlvbiBpdCh0LG4sZSl7Y29uc3Qgcj10W25dO3Rbbl09dFtlXSx0W2VdPXJ9ZnVuY3Rpb24gb3QodCxlPW4pe2xldCByLGk9ITE7aWYoMT09PWUubGVuZ3RoKXtsZXQgbztmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB0PWUoYSk7KGk/bih0LG8pPjA6MD09PW4odCx0KSkmJihyPWEsbz10LGk9ITApfX1lbHNlIGZvcihjb25zdCBuIG9mIHQpKGk/ZShuLHIpPjA6MD09PWUobixuKSkmJihyPW4saT0hMCk7cmV0dXJuIHJ9ZnVuY3Rpb24gYXQodCxuLGUpe2lmKHI9KHQ9RmxvYXQ2NEFycmF5LmZyb20oYSh0LGUpKSkubGVuZ3RoKXtpZigobj0rbik8PTB8fHI8MilyZXR1cm4gbnQodCk7aWYobj49MSlyZXR1cm4gSih0KTt2YXIgcixpPShyLTEpKm4sbz1NYXRoLmZsb29yKGkpLHU9SihydCh0LG8pLnN1YmFycmF5KDAsbysxKSk7cmV0dXJuIHUrKG50KHQuc3ViYXJyYXkobysxKSktdSkqKGktbyl9fWZ1bmN0aW9uIHV0KHQsbixlPW8pe2lmKHI9dC5sZW5ndGgpe2lmKChuPStuKTw9MHx8cjwyKXJldHVybitlKHRbMF0sMCx0KTtpZihuPj0xKXJldHVybitlKHRbci0xXSxyLTEsdCk7dmFyIHIsaT0oci0xKSpuLGE9TWF0aC5mbG9vcihpKSx1PStlKHRbYV0sYSx0KTtyZXR1cm4gdSsoK2UodFthKzFdLGErMSx0KS11KSooaS1hKX19ZnVuY3Rpb24gY3QodCxuLGUpe2lmKHI9KHQ9RmxvYXQ2NEFycmF5LmZyb20oYSh0LGUpKSkubGVuZ3RoKXtpZigobj0rbik8PTB8fHI8MilyZXR1cm4gZXQodCk7aWYobj49MSlyZXR1cm4gdHQodCk7dmFyIHIsaT1NYXRoLmZsb29yKChyLTEpKm4pLG89cnQoVWludDMyQXJyYXkuZnJvbSh0LCgodCxuKT0+bikpLGksMCxyLTEsKChuLGUpPT5ZKHRbbl0sdFtlXSkpKTtyZXR1cm4gb3Qoby5zdWJhcnJheSgwLGkrMSksKG49PnRbbl0pKX19ZnVuY3Rpb24gZnQodCl7cmV0dXJuIEFycmF5LmZyb20oZnVuY3Rpb24qKHQpe2Zvcihjb25zdCBuIG9mIHQpeWllbGQqbn0odCkpfWZ1bmN0aW9uIHN0KHQsbil7cmV0dXJuW3Qsbl19ZnVuY3Rpb24gbHQodCxuLGUpe3Q9K3Qsbj0rbixlPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KG49dCx0PTAsMSk6aTwzPzE6K2U7Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgobi10KS9lKSksbz1uZXcgQXJyYXkoaSk7KytyPGk7KW9bcl09dCtyKmU7cmV0dXJuIG99ZnVuY3Rpb24gaHQodCxlPW4pe2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gZXQodCxlKTtsZXQgcixpPS0xLG89LTE7Zm9yKGNvbnN0IG4gb2YgdCkrK28sKGk8MD8wPT09ZShuLG4pOmUobixyKTwwKSYmKHI9bixpPW8pO3JldHVybiBpfXZhciBkdD1wdChNYXRoLnJhbmRvbSk7ZnVuY3Rpb24gcHQodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZT0wLHI9bi5sZW5ndGgpe2xldCBpPXItKGU9K2UpO2Zvcig7aTspe2NvbnN0IHI9dCgpKmktLXwwLG89bltpK2VdO25baStlXT1uW3IrZV0sbltyK2VdPW99cmV0dXJuIG59fWZ1bmN0aW9uIGd0KHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLGU9bnQodCx5dCkscj1uZXcgQXJyYXkoZSk7KytuPGU7KWZvcih2YXIgaSxvPS0xLGE9cltuXT1uZXcgQXJyYXkoaSk7KytvPGk7KWFbb109dFtvXVtuXTtyZXR1cm4gcn1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBJbnRlcm5TZXQ/dDpuZXcgSW50ZXJuU2V0KHQpfWZ1bmN0aW9uIF90KHQsbil7Y29uc3QgZT10W1N5bWJvbC5pdGVyYXRvcl0oKSxyPW5ldyBTZXQ7Zm9yKGNvbnN0IHQgb2Ygbil7Y29uc3Qgbj1idCh0KTtpZihyLmhhcyhuKSljb250aW51ZTtsZXQgaSxvO2Zvcig7KHt2YWx1ZTppLGRvbmU6b309ZS5uZXh0KCkpOyl7aWYobylyZXR1cm4hMTtjb25zdCB0PWJ0KGkpO2lmKHIuYWRkKHQpLE9iamVjdC5pcyhuLHQpKWJyZWFrfX1yZXR1cm4hMH1mdW5jdGlvbiBidCh0KXtyZXR1cm4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdD90LnZhbHVlT2YoKTp0fWZ1bmN0aW9uIG10KHQpe3JldHVybiB0fXZhciB4dD0xZS02O2Z1bmN0aW9uIHd0KHQpe3JldHVybiJ0cmFuc2xhdGUoIit0KyIsMCkifWZ1bmN0aW9uIE10KHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3QrIikifWZ1bmN0aW9uIEF0KHQpe3JldHVybiBuPT4rdChuKX1mdW5jdGlvbiBUdCh0LG4pe3JldHVybiBuPU1hdGgubWF4KDAsdC5iYW5kd2lkdGgoKS0yKm4pLzIsdC5yb3VuZCgpJiYobj1NYXRoLnJvdW5kKG4pKSxlPT4rdChlKStufWZ1bmN0aW9uIFN0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEV0KHQsbil7dmFyIGU9W10scj1udWxsLGk9bnVsbCxvPTYsYT02LHU9MyxjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xPzA6LjUsZj0xPT09dHx8ND09PXQ/LTE6MSxzPTQ9PT10fHwyPT09dD8ieCI6InkiLGw9MT09PXR8fDM9PT10P3d0Ok10O2Z1bmN0aW9uIGgoaCl7dmFyIGQ9bnVsbD09cj9uLnRpY2tzP24udGlja3MuYXBwbHkobixlKTpuLmRvbWFpbigpOnIscD1udWxsPT1pP24udGlja0Zvcm1hdD9uLnRpY2tGb3JtYXQuYXBwbHkobixlKTptdDppLGc9TWF0aC5tYXgobywwKSt1LHk9bi5yYW5nZSgpLHY9K3lbMF0rYyxfPSt5W3kubGVuZ3RoLTFdK2MsYj0obi5iYW5kd2lkdGg/VHQ6QXQpKG4uY29weSgpLGMpLG09aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLHg9bS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksdz1tLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGQsbikub3JkZXIoKSxNPXcuZXhpdCgpLEE9dy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFQ9dy5zZWxlY3QoImxpbmUiKSxTPXcuc2VsZWN0KCJ0ZXh0Iik7eD14Lm1lcmdlKHguZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLHc9dy5tZXJnZShBKSxUPVQubWVyZ2UoQS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHMrIjIiLGYqbykpLFM9Uy5tZXJnZShBLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHMsZipnKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09bSYmKHg9eC50cmFuc2l0aW9uKGgpLHc9dy50cmFuc2l0aW9uKGgpLFQ9VC50cmFuc2l0aW9uKGgpLFM9Uy50cmFuc2l0aW9uKGgpLE09TS50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLHh0KS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1iKHQpKT9sKHQrYyk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLEEuYXR0cigib3BhY2l0eSIseHQpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGwoKG4mJmlzRmluaXRlKG49bih0KSk/bjpiKHQpKStjKX0pKSksTS5yZW1vdmUoKSx4LmF0dHIoImQiLDQ9PT10fHwyPT09dD9hPyJNIitmKmErIiwiK3YrIkgiK2MrIlYiK18rIkgiK2YqYToiTSIrYysiLCIrdisiViIrXzphPyJNIit2KyIsIitmKmErIlYiK2MrIkgiK18rIlYiK2YqYToiTSIrdisiLCIrYysiSCIrXyksdy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbChiKHQpK2MpfSkpLFQuYXR0cihzKyIyIixmKm8pLFMuYXR0cihzLGYqZykudGV4dChwKSxtLmZpbHRlcihTdCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksbS5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGU9QXJyYXkuZnJvbShhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P1tdOkFycmF5LmZyb20odCksaCk6ZS5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOkFycmF5LmZyb20odCksaCk6ciYmci5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K3QsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGgpOnV9LGgub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LGgpOmN9LGh9dmFyIGt0PXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIE50KCl7Zm9yKHZhciB0LG49MCxlPWFyZ3VtZW50cy5sZW5ndGgscj17fTtuPGU7KytuKXtpZighKHQ9YXJndW1lbnRzW25dKyIiKXx8dCBpbiByfHwvW1xzLl0vLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7clt0XT1bXX1yZXR1cm4gbmV3IEN0KHIpfWZ1bmN0aW9uIEN0KHQpe3RoaXMuXz10fWZ1bmN0aW9uIFB0KHQsbil7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9IiIscj10LmluZGV4T2YoIi4iKTtpZihyPj0wJiYoZT10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQmJiFuLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiB6dCh0LG4pe2Zvcih2YXIgZSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChlPXRbcl0pLm5hbWU9PT1uKXJldHVybiBlLnZhbHVlfWZ1bmN0aW9uIER0KHQsbixlKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09bil7dFtyXT1rdCx0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9ZSYmdC5wdXNoKHtuYW1lOm4sdmFsdWU6ZX0pLHR9Q3QucHJvdG90eXBlPU50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q3Qsb246ZnVuY3Rpb24odCxuKXt2YXIgZSxyPXRoaXMuXyxpPVB0KHQrIiIsciksbz0tMSxhPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9biYmImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK24pO2Zvcig7KytvPGE7KWlmKGU9KHQ9aVtvXSkudHlwZSlyW2VdPUR0KHJbZV0sdC5uYW1lLG4pO2Vsc2UgaWYobnVsbD09bilmb3IoZSBpbiByKXJbZV09RHQocltlXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288YTspaWYoKGU9KHQ9aVtvXSkudHlwZSkmJihlPXp0KHJbZV0sdC5uYW1lKSkpcmV0dXJuIGV9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxuPXRoaXMuXztmb3IodmFyIGUgaW4gbil0W2VdPW5bZV0uc2xpY2UoKTtyZXR1cm4gbmV3IEN0KHQpfSxjYWxsOmZ1bmN0aW9uKHQsbil7aWYoKGU9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgZSxyLGk9bmV3IEFycmF5KGUpLG89MDtvPGU7KytvKWlbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLGU9KHI9dGhpcy5fW3RdKS5sZW5ndGg7bzxlOysrbylyW29dLnZhbHVlLmFwcGx5KG4saSl9LGFwcGx5OmZ1bmN0aW9uKHQsbixlKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldLnZhbHVlLmFwcGx5KG4sZSl9fTt2YXIgUnQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEZ0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpSdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIHF0KHQpe3ZhciBuPXQrPSIiLGU9bi5pbmRleE9mKCI6Iik7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0obj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLEZ0Lmhhc093blByb3BlcnR5KG4pP3tzcGFjZTpGdFtuXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIEl0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09UnQmJm4uZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVJ0P24uY3JlYXRlRWxlbWVudCh0KTpuLmNyZWF0ZUVsZW1lbnROUyhlLHQpfX1mdW5jdGlvbiBPdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBVdCh0KXt2YXIgbj1xdCh0KTtyZXR1cm4obi5sb2NhbD9PdDpJdCkobil9ZnVuY3Rpb24gQnQoKXt9ZnVuY3Rpb24gWXQodCl7cmV0dXJuIG51bGw9PXQ/QnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBMdCh0KXtyZXR1cm4gbnVsbD09dD9bXTpBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBqdCgpe3JldHVybltdfWZ1bmN0aW9uICR0KHQpe3JldHVybiBudWxsPT10P2p0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gSHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gWHQodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLm1hdGNoZXModCl9fXZhciBHdD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBWdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBXdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIFp0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gS3QodCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gUXQodCxuKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPW59ZnVuY3Rpb24gSnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIHRuKHQsbixlLHIsaSxvKXtmb3IodmFyIGEsdT0wLGM9bi5sZW5ndGgsZj1vLmxlbmd0aDt1PGY7Kyt1KShhPW5bdV0pPyhhLl9fZGF0YV9fPW9bdV0sclt1XT1hKTplW3VdPW5ldyBRdCh0LG9bdV0pO2Zvcig7dTxjOysrdSkoYT1uW3VdKSYmKGlbdV09YSl9ZnVuY3Rpb24gbm4odCxuLGUscixpLG8sYSl7dmFyIHUsYyxmLHM9bmV3IE1hcCxsPW4ubGVuZ3RoLGg9by5sZW5ndGgsZD1uZXcgQXJyYXkobCk7Zm9yKHU9MDt1PGw7Kyt1KShjPW5bdV0pJiYoZFt1XT1mPWEuY2FsbChjLGMuX19kYXRhX18sdSxuKSsiIixzLmhhcyhmKT9pW3VdPWM6cy5zZXQoZixjKSk7Zm9yKHU9MDt1PGg7Kyt1KWY9YS5jYWxsKHQsb1t1XSx1LG8pKyIiLChjPXMuZ2V0KGYpKT8oclt1XT1jLGMuX19kYXRhX189b1t1XSxzLmRlbGV0ZShmKSk6ZVt1XT1uZXcgUXQodCxvW3VdKTtmb3IodT0wO3U8bDsrK3UpKGM9blt1XSkmJnMuZ2V0KGRbdV0pPT09YyYmKGlbdV09Yyl9ZnVuY3Rpb24gZW4odCl7cmV0dXJuIHQuX19kYXRhX199ZnVuY3Rpb24gcm4odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIG9uKHQsbil7cmV0dXJuIHQ8bj8tMTp0Pm4/MTp0Pj1uPzA6TmFOfWZ1bmN0aW9uIGFuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB1bih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGNuKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gZm4odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19ZnVuY3Rpb24gc24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIGxuKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIGhuKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld31mdW5jdGlvbiBkbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBwbih0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4sZSl9fWZ1bmN0aW9uIGduKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsZSl9fWZ1bmN0aW9uIHluKHQsbil7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuKXx8aG4odCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUobil9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIF9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1ufX1mdW5jdGlvbiBibih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1lfX1mdW5jdGlvbiBtbih0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24geG4odCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgd24odCl9ZnVuY3Rpb24gd24odCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPW1uKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gTW4odCxuKXtmb3IodmFyIGU9eG4odCkscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyllLmFkZChuW3JdKX1mdW5jdGlvbiBBbih0LG4pe2Zvcih2YXIgZT14bih0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUucmVtb3ZlKG5bcl0pfWZ1bmN0aW9uIFRuKHQpe3JldHVybiBmdW5jdGlvbigpe01uKHRoaXMsdCl9fWZ1bmN0aW9uIFNuKHQpe3JldHVybiBmdW5jdGlvbigpe0FuKHRoaXMsdCl9fWZ1bmN0aW9uIEVuKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7KG4uYXBwbHkodGhpcyxhcmd1bWVudHMpP01uOkFuKSh0aGlzLHQpfX1mdW5jdGlvbiBrbigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gTm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBDbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gUG4oKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB6bih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBEbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uPyIiOm59fWZ1bmN0aW9uIFJuKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEZuKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcW4oKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBJbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIE9uKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLG49dGhpcy5wYXJlbnROb2RlO3JldHVybiBuP24uaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBVbigpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxuPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gbj9uLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gQm4odCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKG49dC5zbGljZShlKzEpLHQ9dC5zbGljZSgwLGUpKSx7dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gWW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX29uO2lmKG4pe2Zvcih2YXIgZSxyPTAsaT0tMSxvPW4ubGVuZ3RoO3I8bzsrK3IpZT1uW3JdLHQudHlwZSYmZS50eXBlIT09dC50eXBlfHxlLm5hbWUhPT10Lm5hbWU/blsrK2ldPWU6dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUudHlwZSxlLmxpc3RlbmVyLGUub3B0aW9ucyk7KytpP24ubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIExuKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixpPXRoaXMuX19vbixvPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXt0LmNhbGwodGhpcyxuLHRoaXMuX19kYXRhX18pfX0obik7aWYoaSlmb3IodmFyIGE9MCx1PWkubGVuZ3RoO2E8dTsrK2EpaWYoKHI9aVthXSkudHlwZT09PXQudHlwZSYmci5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoci50eXBlLHIubGlzdGVuZXIsci5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoci50eXBlLHIubGlzdGVuZXI9byxyLm9wdGlvbnM9ZSksdm9pZChyLnZhbHVlPW4pO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsbyxlKSxyPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTpuLGxpc3RlbmVyOm8sb3B0aW9uczplfSxpP2kucHVzaChyKTp0aGlzLl9fb249W3JdfX1mdW5jdGlvbiBqbih0LG4sZSl7dmFyIHI9aG4odCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkobixlKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KGkuaW5pdEV2ZW50KG4sZS5idWJibGVzLGUuY2FuY2VsYWJsZSksaS5kZXRhaWw9ZS5kZXRhaWwpOmkuaW5pdEV2ZW50KG4sITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gJG4odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gam4odGhpcyx0LG4pfX1mdW5jdGlvbiBIbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBqbih0aGlzLHQsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1RdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlF0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsbil9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19LHduLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWVzLmluZGV4T2YodCk7bj49MCYmKHRoaXMuX25hbWVzLnNwbGljZShuLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIFhuPVtudWxsXTtmdW5jdGlvbiBHbih0LG4pe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bn1mdW5jdGlvbiBWbigpe3JldHVybiBuZXcgR24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxYbil9ZnVuY3Rpb24gV24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBHbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEduKFtbdF1dLFhuKX1Hbi5wcm90b3R5cGU9Vm4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpHbixzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVl0KHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLGEsdT1uW2ldLGM9dS5sZW5ndGgsZj1yW2ldPW5ldyBBcnJheShjKSxzPTA7czxjOysrcykobz11W3NdKSYmKGE9dC5jYWxsKG8sby5fX2RhdGFfXyxzLHUpKSYmKCJfX2RhdGFfXyJpbiBvJiYoYS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxmW3NdPWEpO3JldHVybiBuZXcgR24ocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEx0KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KHQpOiR0KHQpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPVtdLGk9W10sbz0wO288ZTsrK28pZm9yKHZhciBhLHU9bltvXSxjPXUubGVuZ3RoLGY9MDtmPGM7KytmKShhPXVbZl0pJiYoci5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sZix1KSksaS5wdXNoKGEpKTtyZXR1cm4gbmV3IEduKHIsaSl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT10P1Z0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBHdC5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90Olh0KHQpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT10P1p0OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXdC5jYWxsKHRoaXMuY2hpbGRyZW4sdCl9fSgiZnVuY3Rpb24iPT10eXBlb2YgdD90Olh0KHQpKSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SHQodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sYT1uW2ldLHU9YS5sZW5ndGgsYz1yW2ldPVtdLGY9MDtmPHU7KytmKShvPWFbZl0pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGYsYSkmJmMucHVzaChvKTtyZXR1cm4gbmV3IEduKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLGVuKTt2YXIgZT1uP25uOnRuLHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SnQodCkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSx1PW5ldyBBcnJheShvKSxjPW5ldyBBcnJheShvKSxmPTA7ZjxvOysrZil7dmFyIHM9cltmXSxsPWlbZl0saD1sLmxlbmd0aCxkPXJuKHQuY2FsbChzLHMmJnMuX19kYXRhX18sZixyKSkscD1kLmxlbmd0aCxnPXVbZl09bmV3IEFycmF5KHApLHk9YVtmXT1uZXcgQXJyYXkocCksdj1jW2ZdPW5ldyBBcnJheShoKTtlKHMsbCxnLHksdixkLG4pO2Zvcih2YXIgXyxiLG09MCx4PTA7bTxwOysrbSlpZihfPWdbbV0pe2ZvcihtPj14JiYoeD1tKzEpOyEoYj15W3hdKSYmKyt4PHA7KTtfLl9uZXh0PWJ8fG51bGx9fXJldHVybihhPW5ldyBHbihhLHIpKS5fZW50ZXI9dSxhLl9leGl0PWMsYX0sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEduKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKEt0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgR24odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChLdCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxuLGUpe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8ocj10KHIpKSYmKHI9ci5zZWxlY3Rpb24oKSk6cj1yLmFwcGVuZCh0KyIiKSxudWxsIT1uJiYoaT1uKGkpKSYmKGk9aS5zZWxlY3Rpb24oKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dCxlPXRoaXMuX2dyb3VwcyxyPW4uX2dyb3VwcyxpPWUubGVuZ3RoLG89ci5sZW5ndGgsYT1NYXRoLm1pbihpLG8pLHU9bmV3IEFycmF5KGkpLGM9MDtjPGE7KytjKWZvcih2YXIgZixzPWVbY10sbD1yW2NdLGg9cy5sZW5ndGgsZD11W2NdPW5ldyBBcnJheShoKSxwPTA7cDxoOysrcCkoZj1zW3BdfHxsW3BdKSYmKGRbcF09Zik7Zm9yKDtjPGk7KytjKXVbY109ZVtjXTtyZXR1cm4gbmV3IEduKHUsdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0tMSxlPXQubGVuZ3RoOysrbjxlOylmb3IodmFyIHIsaT10W25dLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKTohbi0hZX10fHwodD1vbik7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXtmb3IodmFyIGEsdT1lW29dLGM9dS5sZW5ndGgsZj1pW29dPW5ldyBBcnJheShjKSxzPTA7czxjOysrcykoYT11W3NdKSYmKGZbc109YSk7Zi5zb3J0KG4pfXJldHVybiBuZXcgR24oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPTAsZT10Lmxlbmd0aDtuPGU7KytuKWZvcih2YXIgcj10W25dLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPXJbaV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe2xldCB0PTA7Zm9yKGNvbnN0IG4gb2YgdGhpcykrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIGksbz1uW2VdLGE9MCx1PW8ubGVuZ3RoO2E8dTsrK2EpKGk9b1thXSkmJnQuY2FsbChpLGkuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LG4pe3ZhciBlPXF0KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIGUubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnIuZ2V0QXR0cmlidXRlKGUpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PW4/ZS5sb2NhbD91bjphbjoiZnVuY3Rpb24iPT10eXBlb2Ygbj9lLmxvY2FsP2xuOnNuOmUubG9jYWw/Zm46Y24pKGUsbikpfSxzdHlsZTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/ZG46ImZ1bmN0aW9uIj09dHlwZW9mIG4/Z246cG4pKHQsbixudWxsPT1lPyIiOmUpKTp5bih0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj92bjoiZnVuY3Rpb24iPT10eXBlb2Ygbj9ibjpfbikodCxuKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1tbih0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj14bih0aGlzLm5vZGUoKSksaT0tMSxvPWUubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9FbjpuP1RuOlNuKShlLG4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9rbjooImZ1bmN0aW9uIj09dHlwZW9mIHQ/Q246Tm4pKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9QbjooImZ1bmN0aW9uIj09dHlwZW9mIHQ/RG46em4pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChSbil9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChGbil9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlV0KHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbih0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6VXQodCkscj1udWxsPT1uP3FuOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246WXQobik7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goSW4pfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9VbjpPbil9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbz1Cbih0KyIiKSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHU9bj9MbjpZbixyPTA7cjxhOysrcil0aGlzLmVhY2godShvW3JdLG4sZSkpO3JldHVybiB0aGlzfXZhciB1PXRoaXMubm9kZSgpLl9fb247aWYodSlmb3IodmFyIGMsZj0wLHM9dS5sZW5ndGg7ZjxzOysrZilmb3Iocj0wLGM9dVtmXTtyPGE7KytyKWlmKChpPW9bcl0pLnR5cGU9PT1jLnR5cGUmJmkubmFtZT09PWMubmFtZSlyZXR1cm4gYy52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9IbjokbikodCxuKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0wLGU9dC5sZW5ndGg7bjxlOysrbilmb3IodmFyIHIsaT10W25dLG89MCxhPWkubGVuZ3RoO288YTsrK28pKHI9aVtvXSkmJih5aWVsZCByKX19O3ZhciBabj0wO2Z1bmN0aW9uIEtuKCl7cmV0dXJuIG5ldyBRbn1mdW5jdGlvbiBRbigpe3RoaXMuXz0iQCIrKCsrWm4pLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBKbih0KXtsZXQgbjtmb3IoO249dC5zb3VyY2VFdmVudDspdD1uO3JldHVybiB0fWZ1bmN0aW9uIHRlKHQsbil7aWYodD1Kbih0KSx2b2lkIDA9PT1uJiYobj10LmN1cnJlbnRUYXJnZXQpLG4pe3ZhciBlPW4ub3duZXJTVkdFbGVtZW50fHxuO2lmKGUuY3JlYXRlU1ZHUG9pbnQpe3ZhciByPWUuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PXQuY2xpZW50WCxyLnk9dC5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybShuLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX1pZihuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLW4uY2xpZW50VG9wXX19cmV0dXJuW3QucGFnZVgsdC5wYWdlWV19UW4ucHJvdG90eXBlPUtuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UW4sZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl87IShuIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbbl19LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiB0W3RoaXMuX109bn0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07Y29uc3QgbmU9e3Bhc3NpdmU6ITF9LGVlPXtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9O2Z1bmN0aW9uIHJlKHQpe3Quc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaWUodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gb2UodCl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1Xbih0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLGllLGVlKTsib25zZWxlY3RzdGFydCJpbiBuP2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLGllLGVlKToobi5fX25vc2VsZWN0PW4uc3R5bGUuTW96VXNlclNlbGVjdCxuLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBhZSh0LG4pe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9V24odCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtuJiYoci5vbigiY2xpY2suZHJhZyIsaWUsZWUpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5vbigiY2xpY2suZHJhZyIsbnVsbCl9KSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gZT9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWUuX19ub3NlbGVjdCxkZWxldGUgZS5fX25vc2VsZWN0KX12YXIgdWU9dD0+KCk9PnQ7ZnVuY3Rpb24gY2UodCx7c291cmNlRXZlbnQ6bixzdWJqZWN0OmUsdGFyZ2V0OnIsaWRlbnRpZmllcjppLGFjdGl2ZTpvLHg6YSx5OnUsZHg6YyxkeTpmLGRpc3BhdGNoOnN9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc3ViamVjdDp7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxpZGVudGlmaWVyOnt2YWx1ZTppLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxhY3RpdmU6e3ZhbHVlOm8sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHg6e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHk6e3ZhbHVlOnUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LGR4Ont2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxkeTp7dmFsdWU6ZixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sXzp7dmFsdWU6c319KX1mdW5jdGlvbiBmZSh0KXtyZXR1cm4hdC5jdHJsS2V5JiYhdC5idXR0b259ZnVuY3Rpb24gc2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGxlKHQsbil7cmV0dXJuIG51bGw9PW4/e3g6dC54LHk6dC55fTpufWZ1bmN0aW9uIGhlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGRlKHQsbixlKXt0LnByb3RvdHlwZT1uLnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBwZSh0LG4pe3ZhciBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX1mdW5jdGlvbiBnZSgpe31jZS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgeWU9LjcsdmU9MS95ZSxfZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsYmU9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLG1lPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIseGU9L14jKFswLTlhLWZdezMsOH0pJC8sd2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7X2V9LCR7X2V9LCR7X2V9XFwpJGApLE1lPW5ldyBSZWdFeHAoYF5yZ2JcXCgke21lfSwke21lfSwke21lfVxcKSRgKSxBZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7X2V9LCR7X2V9LCR7X2V9LCR7YmV9XFwpJGApLFRlPW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHttZX0sJHttZX0sJHttZX0sJHtiZX1cXCkkYCksU2U9bmV3IFJlZ0V4cChgXmhzbFxcKCR7YmV9LCR7bWV9LCR7bWV9XFwpJGApLEVlPW5ldyBSZWdFeHAoYF5oc2xhXFwoJHtiZX0sJHttZX0sJHttZX0sJHtiZX1cXCkkYCksa2U9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gTmUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBDZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFBlKHQpe3ZhciBuLGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChuPXhlLmV4ZWModCkpPyhlPW5bMV0ubGVuZ3RoLG49cGFyc2VJbnQoblsxXSwxNiksNj09PWU/emUobik6Mz09PWU/bmV3IHFlKG4+PjgmMTV8bj4+NCYyNDAsbj4+NCYxNXwyNDAmbiwoMTUmbik8PDR8MTUmbiwxKTo4PT09ZT9EZShuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LCgyNTUmbikvMjU1KTo0PT09ZT9EZShuPj4xMiYxNXxuPj44JjI0MCxuPj44JjE1fG4+PjQmMjQwLG4+PjQmMTV8MjQwJm4sKCgxNSZuKTw8NHwxNSZuKS8yNTUpOm51bGwpOihuPXdlLmV4ZWModCkpP25ldyBxZShuWzFdLG5bMl0sblszXSwxKToobj1NZS5leGVjKHQpKT9uZXcgcWUoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsMSk6KG49QWUuZXhlYyh0KSk/RGUoblsxXSxuWzJdLG5bM10sbls0XSk6KG49VGUuZXhlYyh0KSk/RGUoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsbls0XSk6KG49U2UuZXhlYyh0KSk/TGUoblsxXSxuWzJdLzEwMCxuWzNdLzEwMCwxKToobj1FZS5leGVjKHQpKT9MZShuWzFdLG5bMl0vMTAwLG5bM10vMTAwLG5bNF0pOmtlLmhhc093blByb3BlcnR5KHQpP3plKGtlW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgcWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB6ZSh0KXtyZXR1cm4gbmV3IHFlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBEZSh0LG4sZSxyKXtyZXR1cm4gcjw9MCYmKHQ9bj1lPU5hTiksbmV3IHFlKHQsbixlLHIpfWZ1bmN0aW9uIFJlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZ2V8fCh0PVBlKHQpKSx0P25ldyBxZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgcWV9ZnVuY3Rpb24gRmUodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1JlKHQpOm5ldyBxZSh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gcWUodCxuLGUscil7dGhpcy5yPSt0LHRoaXMuZz0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIEllKCl7cmV0dXJuYCMke1llKHRoaXMucil9JHtZZSh0aGlzLmcpfSR7WWUodGhpcy5iKX1gfWZ1bmN0aW9uIE9lKCl7Y29uc3QgdD1VZSh0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT10PyJyZ2IoIjoicmdiYSgifSR7QmUodGhpcy5yKX0sICR7QmUodGhpcy5nKX0sICR7QmUodGhpcy5iKX0kezE9PT10PyIpIjpgLCAke3R9KWB9YH1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gaXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpfWZ1bmN0aW9uIEJlKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSl9ZnVuY3Rpb24gWWUodCl7cmV0dXJuKCh0PUJlKHQpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIExlKHQsbixlLHIpe3JldHVybiByPD0wP3Q9bj1lPU5hTjplPD0wfHxlPj0xP3Q9bj1OYU46bjw9MCYmKHQ9TmFOKSxuZXcgSGUodCxuLGUscil9ZnVuY3Rpb24gamUodCl7aWYodCBpbnN0YW5jZW9mIEhlKXJldHVybiBuZXcgSGUodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgZ2V8fCh0PVBlKHQpKSwhdClyZXR1cm4gbmV3IEhlO2lmKHQgaW5zdGFuY2VvZiBIZSlyZXR1cm4gdDt2YXIgbj0odD10LnJnYigpKS5yLzI1NSxlPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4obixlLHIpLG89TWF0aC5tYXgobixlLHIpLGE9TmFOLHU9by1pLGM9KG8raSkvMjtyZXR1cm4gdT8oYT1uPT09bz8oZS1yKS91KzYqKGU8cik6ZT09PW8/KHItbikvdSsyOihuLWUpL3UrNCx1Lz1jPC41P28raToyLW8taSxhKj02MCk6dT1jPjAmJmM8MT8wOmEsbmV3IEhlKGEsdSxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gJGUodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2plKHQpOm5ldyBIZSh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gSGUodCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFhlKHQpe3JldHVybih0PSh0fHwwKSUzNjApPDA/dCszNjA6dH1mdW5jdGlvbiBHZSh0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLHR8fDApKX1mdW5jdGlvbiBWZSh0LG4sZSl7cmV0dXJuIDI1NSoodDw2MD9uKyhlLW4pKnQvNjA6dDwxODA/ZTp0PDI0MD9uKyhlLW4pKigyNDAtdCkvNjA6bil9ZGUoZ2UsUGUse2NvcHkodCl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyx0KX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6TmUsZm9ybWF0SGV4Ok5lLGZvcm1hdEhleDg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBqZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkNlLHRvU3RyaW5nOkNlfSksZGUocWUsRmUscGUoZ2Use2JyaWdodGVyKHQpe3JldHVybiB0PW51bGw9PXQ/dmU6TWF0aC5wb3codmUsdCksbmV3IHFlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gdD1udWxsPT10P3llOk1hdGgucG93KHllLHQpLG5ldyBxZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IHFlKEJlKHRoaXMuciksQmUodGhpcy5nKSxCZSh0aGlzLmIpLFVlKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6SWUsZm9ybWF0SGV4OkllLGZvcm1hdEhleDg6ZnVuY3Rpb24oKXtyZXR1cm5gIyR7WWUodGhpcy5yKX0ke1llKHRoaXMuZyl9JHtZZSh0aGlzLmIpfSR7WWUoMjU1Kihpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSl9YH0sZm9ybWF0UmdiOk9lLHRvU3RyaW5nOk9lfSkpLGRlKEhlLCRlLHBlKGdlLHticmlnaHRlcih0KXtyZXR1cm4gdD1udWxsPT10P3ZlOk1hdGgucG93KHZlLHQpLG5ldyBIZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcih0KXtyZXR1cm4gdD1udWxsPT10P3llOk1hdGgucG93KHllLHQpLG5ldyBIZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksbj1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxyPWUrKGU8LjU/ZToxLWUpKm4saT0yKmUtcjtyZXR1cm4gbmV3IHFlKFZlKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLFZlKHQsaSxyKSxWZSh0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGNsYW1wKCl7cmV0dXJuIG5ldyBIZShYZSh0aGlzLmgpLEdlKHRoaXMucyksR2UodGhpcy5sKSxVZSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IHQ9VWUodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09dD8iaHNsKCI6ImhzbGEoIn0ke1hlKHRoaXMuaCl9LCAkezEwMCpHZSh0aGlzLnMpfSUsICR7MTAwKkdlKHRoaXMubCl9JSR7MT09PXQ/IikiOmAsICR7dH0pYH1gfX0pKTtjb25zdCBXZT1NYXRoLlBJLzE4MCxaZT0xODAvTWF0aC5QSSxLZT0uOTY0MjIsUWU9LjgyNTIxLEplPTQvMjksdHI9Ni8yOSxucj0zKnRyKnRyO2Z1bmN0aW9uIGVyKHQpe2lmKHQgaW5zdGFuY2VvZiBpcilyZXR1cm4gbmV3IGlyKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGxyKXJldHVybiBocih0KTt0IGluc3RhbmNlb2YgcWV8fCh0PVJlKHQpKTt2YXIgbixlLHI9Y3IodC5yKSxpPWNyKHQuZyksbz1jcih0LmIpLGE9b3IoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSpvKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1vP249ZT1hOihuPW9yKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqbykvS2UpLGU9b3IoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMypvKS9RZSkpLG5ldyBpcigxMTYqYS0xNiw1MDAqKG4tYSksMjAwKihhLWUpLHQub3BhY2l0eSl9ZnVuY3Rpb24gcnIodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2VyKHQpOm5ldyBpcih0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gaXIodCxuLGUscil7dGhpcy5sPSt0LHRoaXMuYT0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIG9yKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQvbnIrSmV9ZnVuY3Rpb24gYXIodCl7cmV0dXJuIHQ+dHI/dCp0KnQ6bnIqKHQtSmUpfWZ1bmN0aW9uIHVyKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gY3IodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gZnIodCl7aWYodCBpbnN0YW5jZW9mIGxyKXJldHVybiBuZXcgbHIodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgaXJ8fCh0PWVyKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgbHIoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBuPU1hdGguYXRhbjIodC5iLHQuYSkqWmU7cmV0dXJuIG5ldyBscihuPDA/biszNjA6bixNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBzcih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnIodCk6bmV3IGxyKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBscih0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5jPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gaHIodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IGlyKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgbj10LmgqV2U7cmV0dXJuIG5ldyBpcih0LmwsTWF0aC5jb3MobikqdC5jLE1hdGguc2luKG4pKnQuYyx0Lm9wYWNpdHkpfWRlKGlyLHJyLHBlKGdlLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IGlyKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiBuZXcgaXIodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsbj1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLGU9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IHFlKHVyKDMuMTMzODU2MSoobj1LZSphcihuKSktMS42MTY4NjY3Kih0PTEqYXIodCkpLS40OTA2MTQ2KihlPVFlKmFyKGUpKSksdXIoLS45Nzg3Njg0Km4rMS45MTYxNDE1KnQrLjAzMzQ1NCplKSx1ciguMDcxOTQ1MypuLS4yMjg5OTE0KnQrMS40MDUyNDI3KmUpLHRoaXMub3BhY2l0eSl9fSkpLGRlKGxyLHNyLHBlKGdlLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IGxyKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiBuZXcgbHIodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gaHIodGhpcykucmdiKCl9fSkpO3ZhciBkcj0tLjE0ODYxLHByPTEuNzgyNzcsZ3I9LS4yOTIyNyx5cj0tLjkwNjQ5LHZyPTEuOTcyOTQsX3I9dnIqeXIsYnI9dnIqcHIsbXI9cHIqZ3IteXIqZHI7ZnVuY3Rpb24geHIodCl7aWYodCBpbnN0YW5jZW9mIE1yKXJldHVybiBuZXcgTXIodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgcWV8fCh0PVJlKHQpKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT0obXIqcitfcipuLWJyKmUpLyhtcitfci1iciksbz1yLWksYT0odnIqKGUtaSktZ3IqbykveXIsdT1NYXRoLnNxcnQoYSphK28qbykvKHZyKmkqKDEtaSkpLGM9dT9NYXRoLmF0YW4yKGEsbykqWmUtMTIwOk5hTjtyZXR1cm4gbmV3IE1yKGM8MD9jKzM2MDpjLHUsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHdyKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94cih0KTpuZXcgTXIodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIE1yKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBBcih0LG4sZSxyLGkpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSpuKyg0LTYqbyszKmEpKmUrKDErMyp0KzMqby0zKmEpKnIrYSppKS82fWZ1bmN0aW9uIFRyKHQpe3ZhciBuPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWU8PTA/ZT0wOmU+PTE/KGU9MSxuLTEpOk1hdGguZmxvb3IoZSpuKSxpPXRbcl0sbz10W3IrMV0sYT1yPjA/dFtyLTFdOjIqaS1vLHU9cjxuLTE/dFtyKzJdOjIqby1pO3JldHVybiBBcigoZS1yL24pKm4sYSxpLG8sdSl9fWZ1bmN0aW9uIFNyKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqbiksaT10WyhyK24tMSklbl0sbz10W3Ilbl0sYT10WyhyKzEpJW5dLHU9dFsocisyKSVuXTtyZXR1cm4gQXIoKGUtci9uKSpuLGksbyxhLHUpfX1kZShNcix3cixwZShnZSx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9bnVsbD09dD92ZTpNYXRoLnBvdyh2ZSx0KSxuZXcgTXIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIHQ9bnVsbD09dD95ZTpNYXRoLnBvdyh5ZSx0KSxuZXcgTXIodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKldlLG49K3RoaXMubCxlPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqbiooMS1uKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBxZSgyNTUqKG4rZSooZHIqcitwcippKSksMjU1KihuK2UqKGdyKnIreXIqaSkpLDI1NSoobitlKih2cipyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIEVyPXQ9PigpPT50O2Z1bmN0aW9uIGtyKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0K2Uqbn19ZnVuY3Rpb24gTnIodCxuKXt2YXIgZT1uLXQ7cmV0dXJuIGU/a3IodCxlPjE4MHx8ZTwtMTgwP2UtMzYwKk1hdGgucm91bmQoZS8zNjApOmUpOkVyKGlzTmFOKHQpP246dCl9ZnVuY3Rpb24gQ3IodCl7cmV0dXJuIDE9PSh0PSt0KT9QcjpmdW5jdGlvbihuLGUpe3JldHVybiBlLW4/ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0PU1hdGgucG93KHQsZSksbj1NYXRoLnBvdyhuLGUpLXQsZT0xL2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrcipuLGUpfX0obixlLHQpOkVyKGlzTmFOKG4pP2U6bil9fWZ1bmN0aW9uIFByKHQsbil7dmFyIGU9bi10O3JldHVybiBlP2tyKHQsZSk6RXIoaXNOYU4odCk/bjp0KX12YXIgenI9ZnVuY3Rpb24gdChuKXt2YXIgZT1DcihuKTtmdW5jdGlvbiByKHQsbil7dmFyIHI9ZSgodD1GZSh0KSkuciwobj1GZShuKSkuciksaT1lKHQuZyxuLmcpLG89ZSh0LmIsbi5iKSxhPVByKHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5yPXIobiksdC5nPWkobiksdC5iPW8obiksdC5vcGFjaXR5PWEobiksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBEcih0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGUscixpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHU9bmV3IEFycmF5KGkpO2ZvcihlPTA7ZTxpOysrZSlyPUZlKG5bZV0pLG9bZV09ci5yfHwwLGFbZV09ci5nfHwwLHVbZV09ci5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHU9dCh1KSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPW8odCksci5nPWEodCksci5iPXUodCkscisiIn19fXZhciBScj1EcihUciksRnI9RHIoU3IpO2Z1bmN0aW9uIHFyKHQsbil7bnx8KG49W10pO3ZhciBlLHI9dD9NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPW4uc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGU9MDtlPHI7KytlKWlbZV09dFtlXSooMS1vKStuW2VdKm87cmV0dXJuIGl9fWZ1bmN0aW9uIElyKHQpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcodCkmJiEodCBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBPcih0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPUhyKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKWFbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKWFbZV09b1tlXSh0KTtyZXR1cm4gYX19ZnVuY3Rpb24gVXIodCxuKXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gdD0rdCxuPStuLGZ1bmN0aW9uKHIpe3JldHVybiBlLnNldFRpbWUodCooMS1yKStuKnIpLGV9fWZ1bmN0aW9uIEJyKHQsbil7cmV0dXJuIHQ9K3Qsbj0rbixmdW5jdGlvbihlKXtyZXR1cm4gdCooMS1lKStuKmV9fWZ1bmN0aW9uIFlyKHQsbil7dmFyIGUscj17fSxpPXt9O2ZvcihlIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBufHwobj17fSksbillIGluIHQ/cltlXT1Icih0W2VdLG5bZV0pOmlbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGUgaW4gcilpW2VdPXJbZV0odCk7cmV0dXJuIGl9fXZhciBMcj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csanI9bmV3IFJlZ0V4cChMci5zb3VyY2UsImciKTtmdW5jdGlvbiAkcih0LG4pe3ZhciBlLHIsaSxvPUxyLmxhc3RJbmRleD1qci5sYXN0SW5kZXg9MCxhPS0xLHU9W10sYz1bXTtmb3IodCs9IiIsbis9IiI7KGU9THIuZXhlYyh0KSkmJihyPWpyLmV4ZWMobikpOykoaT1yLmluZGV4KT5vJiYoaT1uLnNsaWNlKG8saSksdVthXT91W2FdKz1pOnVbKythXT1pKSwoZT1lWzBdKT09PShyPXJbMF0pP3VbYV0/dVthXSs9cjp1WysrYV09cjoodVsrK2FdPW51bGwsYy5wdXNoKHtpOmEseDpCcihlLHIpfSkpLG89anIubGFzdEluZGV4O3JldHVybiBvPG4ubGVuZ3RoJiYoaT1uLnNsaWNlKG8pLHVbYV0/dVthXSs9aTp1WysrYV09aSksdS5sZW5ndGg8Mj9jWzBdP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChuKSsiIn19KGNbMF0ueCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fShuKToobj1jLmxlbmd0aCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wO3I8bjsrK3IpdVsoZT1jW3JdKS5pXT1lLngodCk7cmV0dXJuIHUuam9pbigiIil9KX1mdW5jdGlvbiBIcih0LG4pe3ZhciBlLHI9dHlwZW9mIG47cmV0dXJuIG51bGw9PW58fCJib29sZWFuIj09PXI/RXIobik6KCJudW1iZXIiPT09cj9Ccjoic3RyaW5nIj09PXI/KGU9UGUobikpPyhuPWUsenIpOiRyOm4gaW5zdGFuY2VvZiBQZT96cjpuIGluc3RhbmNlb2YgRGF0ZT9VcjpJcihuKT9xcjpBcnJheS5pc0FycmF5KG4pP09yOiJmdW5jdGlvbiIhPXR5cGVvZiBuLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBuLnRvU3RyaW5nfHxpc05hTihuKT9ZcjpCcikodCxuKX1mdW5jdGlvbiBYcih0LG4pe3JldHVybiB0PSt0LG49K24sZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQodCooMS1lKStuKmUpfX12YXIgR3IsVnI9MTgwL01hdGguUEksV3I9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gWnIodCxuLGUscixpLG8pe3ZhciBhLHUsYztyZXR1cm4oYT1NYXRoLnNxcnQodCp0K24qbikpJiYodC89YSxuLz1hKSwoYz10KmUrbipyKSYmKGUtPXQqYyxyLT1uKmMpLCh1PU1hdGguc3FydChlKmUrcipyKSkmJihlLz11LHIvPXUsYy89dSksdCpyPG4qZSYmKHQ9LXQsbj0tbixjPS1jLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKG4sdCkqVnIsc2tld1g6TWF0aC5hdGFuKGMpKlZyLHNjYWxlWDphLHNjYWxlWTp1fX1mdW5jdGlvbiBLcih0LG4sZSxyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgdT1bXSxjPVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQscixpLG8sYSx1KXtpZih0IT09aXx8ciE9PW8pe3ZhciBjPWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxuLG51bGwsZSk7dS5wdXNoKHtpOmMtNCx4OkJyKHQsaSl9LHtpOmMtMix4OkJyKHIsbyl9KX1lbHNlKGl8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK2krbitvK2UpfShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksdSxjKSxmdW5jdGlvbih0LG4sZSxvKXt0IT09bj8odC1uPjE4MD9uKz0zNjA6bi10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOmUucHVzaChpKGUpKyJyb3RhdGUoIixudWxsLHIpLTIseDpCcih0LG4pfSkpOm4mJmUucHVzaChpKGUpKyJyb3RhdGUoIituK3IpfShvLnJvdGF0ZSxhLnJvdGF0ZSx1LGMpLGZ1bmN0aW9uKHQsbixlLG8pe3QhPT1uP28ucHVzaCh7aTplLnB1c2goaShlKSsic2tld1goIixudWxsLHIpLTIseDpCcih0LG4pfSk6biYmZS5wdXNoKGkoZSkrInNrZXdYKCIrbityKX0oby5za2V3WCxhLnNrZXdYLHUsYyksZnVuY3Rpb24odCxuLGUscixvLGEpe2lmKHQhPT1lfHxuIT09cil7dmFyIHU9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTp1LTQseDpCcih0LGUpfSx7aTp1LTIseDpCcihuLHIpfSl9ZWxzZSAxPT09ZSYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK2UrIiwiK3IrIikiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVksdSxjKSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxyPWMubGVuZ3RoOysrZTxyOyl1WyhuPWNbZV0pLmldPW4ueCh0KTtyZXR1cm4gdS5qb2luKCIiKX19fXZhciBRcj1LcigoZnVuY3Rpb24odCl7Y29uc3Qgbj1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KSh0KyIiKTtyZXR1cm4gbi5pc0lkZW50aXR5P1dyOlpyKG4uYSxuLmIsbi5jLG4uZCxuLmUsbi5mKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLEpyPUtyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9XcjooR3J8fChHcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxHci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9R3IudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/WnIoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6V3IpfSksIiwgIiwiKSIsIikiKTtmdW5jdGlvbiB0aSh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn12YXIgbmk9ZnVuY3Rpb24gdChuLGUscil7ZnVuY3Rpb24gaSh0LGkpe3ZhciBvLGEsdT10WzBdLGM9dFsxXSxmPXRbMl0scz1pWzBdLGw9aVsxXSxoPWlbMl0sZD1zLXUscD1sLWMsZz1kKmQrcCpwO2lmKGc8MWUtMTIpYT1NYXRoLmxvZyhoL2YpL24sbz1mdW5jdGlvbih0KXtyZXR1cm5bdSt0KmQsYyt0KnAsZipNYXRoLmV4cChuKnQqYSldfTtlbHNle3ZhciB5PU1hdGguc3FydChnKSx2PShoKmgtZipmK3IqZykvKDIqZiplKnkpLF89KGgqaC1mKmYtcipnKS8oMipoKmUqeSksYj1NYXRoLmxvZyhNYXRoLnNxcnQodip2KzEpLXYpLG09TWF0aC5sb2coTWF0aC5zcXJ0KF8qXysxKS1fKTthPShtLWIpL24sbz1mdW5jdGlvbih0KXt2YXIgcj10KmEsaT10aShiKSxvPWYvKGUqeSkqKGkqZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfShuKnIrYiktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGIpKTtyZXR1cm5bdStvKmQsYytvKnAsZippL3RpKG4qcitiKV19fXJldHVybiBvLmR1cmF0aW9uPTFlMyphKm4vTWF0aC5TUVJUMixvfXJldHVybiBpLnJobz1mdW5jdGlvbihuKXt2YXIgZT1NYXRoLm1heCguMDAxLCtuKSxyPWUqZTtyZXR1cm4gdChlLHIscipyKX0saX0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIGVpKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49JGUobikpLmgsKGU9JGUoZSkpLmgpLGk9UHIobi5zLGUucyksbz1QcihuLmwsZS5sKSxhPVByKG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5zPWkodCksbi5sPW8odCksbi5vcGFjaXR5PWEodCksbisiIn19fXZhciByaT1laShOciksaWk9ZWkoUHIpO2Z1bmN0aW9uIG9pKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49c3IobikpLmgsKGU9c3IoZSkpLmgpLGk9UHIobi5jLGUuYyksbz1QcihuLmwsZS5sKSxhPVByKG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5jPWkodCksbi5sPW8odCksbi5vcGFjaXR5PWEodCksbisiIn19fXZhciBhaT1vaShOciksdWk9b2koUHIpO2Z1bmN0aW9uIGNpKHQpe3JldHVybiBmdW5jdGlvbiBuKGUpe2Z1bmN0aW9uIHIobixyKXt2YXIgaT10KChuPXdyKG4pKS5oLChyPXdyKHIpKS5oKSxvPVByKG4ucyxyLnMpLGE9UHIobi5sLHIubCksdT1QcihuLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1pKHQpLG4ucz1vKHQpLG4ubD1hKE1hdGgucG93KHQsZSkpLG4ub3BhY2l0eT11KHQpLG4rIiJ9fXJldHVybiBlPStlLHIuZ2FtbWE9bixyfSgxKX12YXIgZmk9Y2koTnIpLHNpPWNpKFByKTtmdW5jdGlvbiBsaSh0LG4pe3ZvaWQgMD09PW4mJihuPXQsdD1Icik7Zm9yKHZhciBlPTAscj1uLmxlbmd0aC0xLGk9blswXSxvPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KW9bZV09dChpLGk9blsrK2VdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49TWF0aC5tYXgoMCxNYXRoLm1pbihyLTEsTWF0aC5mbG9vcih0Kj1yKSkpO3JldHVybiBvW25dKHQtbil9fXZhciBoaSxkaSxwaT0wLGdpPTAseWk9MCx2aT0wLF9pPTAsYmk9MCxtaT0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx4aT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiB3aSgpe3JldHVybiBfaXx8KHhpKE1pKSxfaT1taS5ub3coKStiaSl9ZnVuY3Rpb24gTWkoKXtfaT0wfWZ1bmN0aW9uIEFpKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBUaSh0LG4sZSl7dmFyIHI9bmV3IEFpO3JldHVybiByLnJlc3RhcnQodCxuLGUpLHJ9ZnVuY3Rpb24gU2koKXt3aSgpLCsrcGk7Zm9yKHZhciB0LG49aGk7bjspKHQ9X2ktbi5fdGltZSk+PTAmJm4uX2NhbGwuY2FsbCh2b2lkIDAsdCksbj1uLl9uZXh0Oy0tcGl9ZnVuY3Rpb24gRWkoKXtfaT0odmk9bWkubm93KCkpK2JpLHBpPWdpPTA7dHJ5e1NpKCl9ZmluYWxseXtwaT0wLGZ1bmN0aW9uKCl7dmFyIHQsbixlPWhpLHI9MS8wO2Zvcig7ZTspZS5fY2FsbD8ocj5lLl90aW1lJiYocj1lLl90aW1lKSx0PWUsZT1lLl9uZXh0KToobj1lLl9uZXh0LGUuX25leHQ9bnVsbCxlPXQ/dC5fbmV4dD1uOmhpPW4pO2RpPXQsTmkocil9KCksX2k9MH19ZnVuY3Rpb24ga2koKXt2YXIgdD1taS5ub3coKSxuPXQtdmk7bj4xZTMmJihiaS09bix2aT10KX1mdW5jdGlvbiBOaSh0KXtwaXx8KGdpJiYoZ2k9Y2xlYXJUaW1lb3V0KGdpKSksdC1faT4yND8odDwxLzAmJihnaT1zZXRUaW1lb3V0KEVpLHQtbWkubm93KCktYmkpKSx5aSYmKHlpPWNsZWFySW50ZXJ2YWwoeWkpKSk6KHlpfHwodmk9bWkubm93KCkseWk9c2V0SW50ZXJ2YWwoa2ksMWUzKSkscGk9MSx4aShFaSkpKX1mdW5jdGlvbiBDaSh0LG4sZSl7dmFyIHI9bmV3IEFpO3JldHVybiBuPW51bGw9PW4/MDorbixyLnJlc3RhcnQoKGU9PntyLnN0b3AoKSx0KGUrbil9KSxuLGUpLHJ9QWkucHJvdG90eXBlPVRpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QWkscmVzdGFydDpmdW5jdGlvbih0LG4sZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtlPShudWxsPT1lP3dpKCk6K2UpKyhudWxsPT1uPzA6K24pLHRoaXMuX25leHR8fGRpPT09dGhpc3x8KGRpP2RpLl9uZXh0PXRoaXM6aGk9dGhpcyxkaT10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1lLE5pKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLE5pKCkpfX07dmFyIFBpPU50KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLHppPVtdO2Z1bmN0aW9uIERpKHQsbixlLHIsaSxvKXt2YXIgYT10Ll9fdHJhbnNpdGlvbjtpZihhKXtpZihlIGluIGEpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpPXQuX190cmFuc2l0aW9uO2Z1bmN0aW9uIG8odCl7ZS5zdGF0ZT0xLGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD10JiZhKHQtZS5kZWxheSl9ZnVuY3Rpb24gYShvKXt2YXIgZixzLGwsaDtpZigxIT09ZS5zdGF0ZSlyZXR1cm4gYygpO2ZvcihmIGluIGkpaWYoKGg9aVtmXSkubmFtZT09PWUubmFtZSl7aWYoMz09PWguc3RhdGUpcmV0dXJuIENpKGEpOzQ9PT1oLnN0YXRlPyhoLnN0YXRlPTYsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW2ZdKTorZjxuJiYoaC5zdGF0ZT02LGgudGltZXIuc3RvcCgpLGgub24uY2FsbCgiY2FuY2VsIix0LHQuX19kYXRhX18saC5pbmRleCxoLmdyb3VwKSxkZWxldGUgaVtmXSl9aWYoQ2koKGZ1bmN0aW9uKCl7Mz09PWUuc3RhdGUmJihlLnN0YXRlPTQsZS50aW1lci5yZXN0YXJ0KHUsZS5kZWxheSxlLnRpbWUpLHUobykpfSkpLGUuc3RhdGU9MixlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSwyPT09ZS5zdGF0ZSl7Zm9yKGUuc3RhdGU9MyxyPW5ldyBBcnJheShsPWUudHdlZW4ubGVuZ3RoKSxmPTAscz0tMTtmPGw7KytmKShoPWUudHdlZW5bZl0udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrc109aCk7ci5sZW5ndGg9cysxfX1mdW5jdGlvbiB1KG4pe2Zvcih2YXIgaT1uPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxuL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQoYyksZS5zdGF0ZT01LDEpLG89LTEsYT1yLmxlbmd0aDsrK288YTspcltvXS5jYWxsKHQsaSk7NT09PWUuc3RhdGUmJihlLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksYygpKX1mdW5jdGlvbiBjKCl7Zm9yKHZhciByIGluIGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtuXSxpKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259aVtuXT1lLGUudGltZXI9VGkobywwLGUudGltZSl9KHQsZSx7bmFtZTpuLGluZGV4OnIsZ3JvdXA6aSxvbjpQaSx0d2Vlbjp6aSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9ZnVuY3Rpb24gUmkodCxuKXt2YXIgZT1xaSh0LG4pO2lmKGUuc3RhdGU+MCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEZpKHQsbil7dmFyIGU9cWkodCxuKTtpZihlLnN0YXRlPjMpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIGV9ZnVuY3Rpb24gcWkodCxuKXt2YXIgZT10Ll9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbbl0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gZX1mdW5jdGlvbiBJaSh0LG4pe3ZhciBlLHIsaSxvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKGkgaW4gbj1udWxsPT1uP251bGw6bisiIixvKShlPW9baV0pLm5hbWU9PT1uPyhyPWUuc3RhdGU+MiYmZS5zdGF0ZTw1LGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxlLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxkZWxldGUgb1tpXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIE9pKHQsbil7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1GaSh0aGlzLHQpLG89aS50d2VlbjtpZihvIT09ZSlmb3IodmFyIGE9MCx1PShyPWU9bykubGVuZ3RoO2E8dTsrK2EpaWYoclthXS5uYW1lPT09bil7KHI9ci5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIFVpKHQsbixlKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1GaSh0aGlzLHQpLGE9by50d2VlbjtpZihhIT09cil7aT0ocj1hKS5zbGljZSgpO2Zvcih2YXIgdT17bmFtZTpuLHZhbHVlOmV9LGM9MCxmPWkubGVuZ3RoO2M8ZjsrK2MpaWYoaVtjXS5uYW1lPT09bil7aVtjXT11O2JyZWFrfWM9PT1mJiZpLnB1c2godSl9by50d2Vlbj1pfX1mdW5jdGlvbiBCaSh0LG4sZSl7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1GaSh0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW25dPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBxaSh0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBZaSh0LG4pe3ZhciBlO3JldHVybigibnVtYmVyIj09dHlwZW9mIG4/QnI6biBpbnN0YW5jZW9mIFBlP3pyOihlPVBlKG4pKT8obj1lLHpyKTokcikodCxuKX1mdW5jdGlvbiBMaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gamkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiAkaSh0LG4sZSl7dmFyIHIsaSxvPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIGE9PT1vP251bGw6YT09PXI/aTppPW4ocj1hLGUpfX1mdW5jdGlvbiBIaSh0LG4sZSl7dmFyIHIsaSxvPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBhPT09bz9udWxsOmE9PT1yP2k6aT1uKHI9YSxlKX19ZnVuY3Rpb24gWGkodCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1LGM9ZSh0aGlzKTtpZihudWxsIT1jKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PSh1PWMrIiIpP251bGw6YT09PXImJnU9PT1pP286KGk9dSxvPW4ocj1hLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gR2kodCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx1LGM9ZSh0aGlzKTtpZihudWxsIT1jKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT0odT1jKyIiKT9udWxsOmE9PT1yJiZ1PT09aT9vOihpPXUsbz1uKHI9YSxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBWaSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZSh0LG4uY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gV2kodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbi5jYWxsKHRoaXMsZSkpfX1mdW5jdGlvbiBaaSh0LG4pe3ZhciBlLHI7ZnVuY3Rpb24gaSgpe3ZhciBpPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKGU9KHI9aSkmJldpKHQsaSkpLGV9cmV0dXJuIGkuX3ZhbHVlPW4saX1mdW5jdGlvbiBLaSh0LG4pe3ZhciBlLHI7ZnVuY3Rpb24gaSgpe3ZhciBpPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKGU9KHI9aSkmJlZpKHQsaSkpLGV9cmV0dXJuIGkuX3ZhbHVlPW4saX1mdW5jdGlvbiBRaSh0LG4pe3JldHVybiBmdW5jdGlvbigpe1JpKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBKaSh0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7UmkodGhpcyx0KS5kZWxheT1ufX1mdW5jdGlvbiB0byh0LG4pe3JldHVybiBmdW5jdGlvbigpe0ZpKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBubyh0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7RmkodGhpcyx0KS5kdXJhdGlvbj1ufX1mdW5jdGlvbiBlbyh0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtGaSh0aGlzLHQpLmVhc2U9bn19ZnVuY3Rpb24gcm8odCxuLGUpe3ZhciByLGksbz1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KSl9KG4pP1JpOkZpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyx0KSx1PWEub247dSE9PXImJihpPShyPXUpLmNvcHkoKSkub24obixlKSxhLm9uPWl9fXZhciBpbz1Wbi5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gb28odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gYW8odCxuLGUpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbi5jYWxsKHRoaXMsciksZSl9fWZ1bmN0aW9uIHVvKHQsbixlKXt2YXIgcixpO2Z1bmN0aW9uIG8oKXt2YXIgbz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihyPShpPW8pJiZhbyh0LG8sZSkpLHJ9cmV0dXJuIG8uX3ZhbHVlPW4sb31mdW5jdGlvbiBjbyh0KXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gZm8odCl7dmFyIG4sZTtmdW5jdGlvbiByKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1lJiYobj0oZT1yKSYmY28ocikpLG59cmV0dXJuIHIuX3ZhbHVlPXQscn12YXIgc289MDtmdW5jdGlvbiBsbyh0LG4sZSxyKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPW4sdGhpcy5fbmFtZT1lLHRoaXMuX2lkPXJ9ZnVuY3Rpb24gaG8odCl7cmV0dXJuIFZuKCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiBwbygpe3JldHVybisrc299dmFyIGdvPVZuLnByb3RvdHlwZTtsby5wcm90b3R5cGU9aG8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpsbyxzZWxlY3Q6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ZdCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgdSxjLGY9clthXSxzPWYubGVuZ3RoLGw9b1thXT1uZXcgQXJyYXkocyksaD0wO2g8czsrK2gpKHU9ZltoXSkmJihjPXQuY2FsbCh1LHUuX19kYXRhX18saCxmKSkmJigiX19kYXRhX18iaW4gdSYmKGMuX19kYXRhX189dS5fX2RhdGFfXyksbFtoXT1jLERpKGxbaF0sbixlLGgsbCxxaSh1LGUpKSk7cmV0dXJuIG5ldyBsbyhvLHRoaXMuX3BhcmVudHMsbixlKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9JHQodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPVtdLGE9W10sdT0wO3U8aTsrK3UpZm9yKHZhciBjLGY9clt1XSxzPWYubGVuZ3RoLGw9MDtsPHM7KytsKWlmKGM9ZltsXSl7Zm9yKHZhciBoLGQ9dC5jYWxsKGMsYy5fX2RhdGFfXyxsLGYpLHA9cWkoYyxlKSxnPTAseT1kLmxlbmd0aDtnPHk7KytnKShoPWRbZ10pJiZEaShoLG4sZSxnLGQscCk7by5wdXNoKGQpLGEucHVzaChjKX1yZXR1cm4gbmV3IGxvKG8sYSxuLGUpfSxzZWxlY3RDaGlsZDpnby5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpnby5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUh0KHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLGE9bltpXSx1PWEubGVuZ3RoLGM9cltpXT1bXSxmPTA7Zjx1OysrZikobz1hW2ZdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxmLGEpJiZjLnB1c2gobyk7cmV0dXJuIG5ldyBsbyhyLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uKHQpe2lmKHQuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSxhPW5ldyBBcnJheShyKSx1PTA7dTxvOysrdSlmb3IodmFyIGMsZj1uW3VdLHM9ZVt1XSxsPWYubGVuZ3RoLGg9YVt1XT1uZXcgQXJyYXkobCksZD0wO2Q8bDsrK2QpKGM9ZltkXXx8c1tkXSkmJihoW2RdPWMpO2Zvcig7dTxyOysrdSlhW3VdPW5bdV07cmV0dXJuIG5ldyBsbyhhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgaW8odGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPXBvKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEsdT1yW29dLGM9dS5sZW5ndGgsZj0wO2Y8YzsrK2YpaWYoYT11W2ZdKXt2YXIgcz1xaShhLG4pO0RpKGEsdCxlLGYsdSx7dGltZTpzLnRpbWUrcy5kZWxheStzLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246cy5kdXJhdGlvbixlYXNlOnMuZWFzZX0pfXJldHVybiBuZXcgbG8ocix0aGlzLl9wYXJlbnRzLHQsZSl9LGNhbGw6Z28uY2FsbCxub2Rlczpnby5ub2Rlcyxub2RlOmdvLm5vZGUsc2l6ZTpnby5zaXplLGVtcHR5OmdvLmVtcHR5LGVhY2g6Z28uZWFjaCxvbjpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/cWkodGhpcy5ub2RlKCksZSkub24ub24odCk6dGhpcy5lYWNoKHJvKGUsdCxuKSl9LGF0dHI6ZnVuY3Rpb24odCxuKXt2YXIgZT1xdCh0KSxyPSJ0cmFuc2Zvcm0iPT09ZT9KcjpZaTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2Ygbj8oZS5sb2NhbD9HaTpYaSkoZSxyLEJpKHRoaXMsImF0dHIuIit0LG4pKTpudWxsPT1uPyhlLmxvY2FsP2ppOkxpKShlKTooZS5sb2NhbD9IaTokaSkoZSxyLG4pKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsbil7dmFyIGU9ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjt2YXIgcj1xdCh0KTtyZXR1cm4gdGhpcy50d2VlbihlLChyLmxvY2FsP1ppOktpKShyLG4pKX0sc3R5bGU6ZnVuY3Rpb24odCxuLGUpe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP1FyOllpO3JldHVybiBudWxsPT1uP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsbil7dmFyIGUscixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXluKHRoaXMsdCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSx5bih0aGlzLHQpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09ZSYmYT09PXI/aTppPW4oZT1vLHI9YSl9fSh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxvbyh0KSk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT15bih0aGlzLHQpLHU9ZSh0aGlzKSxjPXUrIiI7cmV0dXJuIG51bGw9PXUmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9dT15bih0aGlzLHQpKSxhPT09Yz9udWxsOmE9PT1yJiZjPT09aT9vOihpPWMsbz1uKHI9YSx1KSl9fSh0LHIsQmkodGhpcywic3R5bGUuIit0LG4pKSkuZWFjaChmdW5jdGlvbih0LG4pe3ZhciBlLHIsaSxvLGE9InN0eWxlLiIrbix1PSJlbmQuIithO3JldHVybiBmdW5jdGlvbigpe3ZhciBjPUZpKHRoaXMsdCksZj1jLm9uLHM9bnVsbD09Yy52YWx1ZVthXT9vfHwobz1vbyhuKSk6dm9pZCAwO2Y9PT1lJiZpPT09c3x8KHI9KGU9ZikuY29weSgpKS5vbih1LGk9cyksYy5vbj1yfX0odGhpcy5faWQsdCkpOnRoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG89ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT15bih0aGlzLHQpO3JldHVybiBhPT09bz9udWxsOmE9PT1yP2k6aT1uKHI9YSxlKX19KHQscixuKSxlKS5vbigiZW5kLnN0eWxlLiIrdCxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocix1byh0LG4sbnVsbD09ZT8iIjplKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1uPyIiOm59fShCaSh0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbih0KXt2YXIgbj0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sZm8odCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PXQpcmV0dXJuO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9cWkodGhpcy5ub2RlKCksZSkudHdlZW4sbz0wLGE9aS5sZW5ndGg7bzxhOysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP09pOlVpKShlLHQsbikpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P1FpOkppKShuLHQpKTpxaSh0aGlzLm5vZGUoKSxuKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD90bzpubykobix0KSk6cWkodGhpcy5ub2RlKCksbikuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGVvKG4sdCkpOnFpKHRoaXMubm9kZSgpLG4pLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO0ZpKHRoaXMsdCkuZWFzZT1lfX0odGhpcy5faWQsdCkpfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgdCxuLGU9dGhpcyxyPWUuX2lkLGk9ZS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGEpe3ZhciB1PXt2YWx1ZTphfSxjPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taSYmbygpfX07ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPUZpKHRoaXMsciksaT1lLm9uO2khPT10JiYoKG49KHQ9aSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHUpLG4uXy5pbnRlcnJ1cHQucHVzaCh1KSxuLl8uZW5kLnB1c2goYykpLGUub249bn0pKSwwPT09aSYmbygpfSkpfSxbU3ltYm9sLml0ZXJhdG9yXTpnb1tTeW1ib2wuaXRlcmF0b3JdfTtmdW5jdGlvbiB5byh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn1mdW5jdGlvbiB2byh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn12YXIgX289ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSxibz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSxtbz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LG4pOjItTWF0aC5wb3coMi10LG4pKS8yfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSx4bz1NYXRoLlBJLHdvPXhvLzI7ZnVuY3Rpb24gTW8odCl7cmV0dXJuKDEtTWF0aC5jb3MoeG8qdCkpLzJ9ZnVuY3Rpb24gQW8odCl7cmV0dXJuIDEuMDAwOTc3NTE3MTA2NTQ5NCooTWF0aC5wb3coMiwtMTAqdCktLjAwMDk3NjU2MjUpfWZ1bmN0aW9uIFRvKHQpe3JldHVybigodCo9Mik8PTE/QW8oMS10KToyLUFvKHQtMSkpLzJ9ZnVuY3Rpb24gU28odCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIEVvPTQvMTEsa289Ny41NjI1O2Z1bmN0aW9uIE5vKHQpe3JldHVybih0PSt0KTxFbz9rbyp0KnQ6dDwuNzI3MjcyNzI3MjcyNzI3Mz9rbyoodC09LjU0NTQ1NDU0NTQ1NDU0NTQpKnQrLjc1OnQ8LjkwOTA5MDkwOTA5MDkwOTE/a28qKHQtPS44MTgxODE4MTgxODE4MTgyKSp0Ky45Mzc1OmtvKih0LT0uOTU0NTQ1NDU0NTQ1NDU0NikqdCsuOTg0Mzc1fXZhciBDbz0xLjcwMTU4LFBvPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4odD0rdCkqdCoobioodC0xKSt0KX1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KENvKSx6bz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuLS10KnQqKCh0KzEpKm4rdCkrMX1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KENvKSxEbz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKG4rMSkqdC1uKToodC09MikqdCooKG4rMSkqdCtuKSsyKS8yfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oQ28pLFJvPTIqTWF0aC5QSSxGbz1mdW5jdGlvbiB0KG4sZSl7dmFyIHI9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1Sbyk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbipBbygtIC0tdCkqTWF0aC5zaW4oKHItdCkvZSl9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4sZSpSbyl9LGkucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl9LGl9KDEsLjMpLHFvPWZ1bmN0aW9uIHQobixlKXt2YXIgcj1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPVJvKTtmdW5jdGlvbiBpKHQpe3JldHVybiAxLW4qQW8odD0rdCkqTWF0aC5zaW4oKHQrcikvZSl9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4sZSpSbyl9LGkucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl9LGl9KDEsLjMpLElvPWZ1bmN0aW9uIHQobixlKXt2YXIgcj1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPVJvKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9uKkFvKC10KSpNYXRoLnNpbigoci10KS9lKToyLW4qQW8odCkqTWF0aC5zaW4oKHIrdCkvZSkpLzJ9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4sZSpSbyl9LGkucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl9LGl9KDEsLjMpLE9vPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp2b307ZnVuY3Rpb24gVW8odCxuKXtmb3IodmFyIGU7IShlPXQuX190cmFuc2l0aW9uKXx8IShlPWVbbl0pOylpZighKHQ9dC5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtufSBub3QgZm91bmRgKTtyZXR1cm4gZX1Wbi5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7SWkodGhpcyx0KX0pKX0sVm4ucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIG4sZTt0IGluc3RhbmNlb2YgbG8/KG49dC5faWQsdD10Ll9uYW1lKToobj1wbygpLChlPU9vKS50aW1lPXdpKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSx1PXJbb10sYz11Lmxlbmd0aCxmPTA7ZjxjOysrZikoYT11W2ZdKSYmRGkoYSx0LG4sZix1LGV8fFVvKGEsbikpO3JldHVybiBuZXcgbG8ocix0aGlzLl9wYXJlbnRzLHQsbil9O3ZhciBCbz1bbnVsbF07dmFyIFlvPXQ9PigpPT50O2Z1bmN0aW9uIExvKHQse3NvdXJjZUV2ZW50Om4sdGFyZ2V0OmUsc2VsZWN0aW9uOnIsbW9kZTppLGRpc3BhdGNoOm99KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzZWxlY3Rpb246e3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LG1vZGU6e3ZhbHVlOmksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOm99fSl9ZnVuY3Rpb24gam8odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiAkbyh0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgSG89e25hbWU6ImRyYWcifSxYbz17bmFtZToic3BhY2UifSxHbz17bmFtZToiaGFuZGxlIn0sVm89e25hbWU6ImNlbnRlciJ9O2NvbnN0e2FiczpXbyxtYXg6Wm8sbWluOktvfT1NYXRoO2Z1bmN0aW9uIFFvKHQpe3JldHVyblsrdFswXSwrdFsxXV19ZnVuY3Rpb24gSm8odCl7cmV0dXJuW1FvKHRbMF0pLFFvKHRbMV0pXX12YXIgdGE9e25hbWU6IngiLGhhbmRsZXM6WyJ3IiwiZSJdLm1hcChjYSksaW5wdXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD9udWxsOltbK3RbMF0sblswXVsxXV0sWyt0WzFdLG5bMV1bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX19LG5hPXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAoY2EpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PXQ/bnVsbDpbW25bMF1bMF0sK3RbMF1dLFtuWzFdWzBdLCt0WzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19fSxlYT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoY2EpLGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P251bGw6Sm8odCl9LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHJhPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxpYT17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0sb2E9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LGFhPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHVhPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9O2Z1bmN0aW9uIGNhKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIGZhKHQpe3JldHVybiF0LmN0cmxLZXkmJiF0LmJ1dHRvbn1mdW5jdGlvbiBzYSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGxhKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGhhKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gZGEodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBwYSh0KXt2YXIgbixlPXNhLHI9ZmEsaT1sYSxvPSEwLGE9TnQoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSx1PTY7ZnVuY3Rpb24gYyhuKXt2YXIgZT1uLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbY2EoIm92ZXJsYXkiKV0pO2UuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIscmEub3ZlcmxheSkubWVyZ2UoZSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1oYSh0aGlzKS5leHRlbnQ7V24odGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSkpLG4uc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbY2EoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIscmEuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIHI9bi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKHQuaGFuZGxlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pKTtyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KSkuYXR0cigiY3Vyc29yIiwoZnVuY3Rpb24odCl7cmV0dXJuIHJhW3QudHlwZV19KSksbi5lYWNoKGYpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixoKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuYnJ1c2giLGgpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGQpLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIscCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGYoKXt2YXIgdD1Xbih0aGlzKSxuPWhhKHRoaXMpLnNlbGVjdGlvbjtuPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixuWzBdWzBdKS5hdHRyKCJ5IixuWzBdWzFdKS5hdHRyKCJ3aWR0aCIsblsxXVswXS1uWzBdWzBdKS5hdHRyKCJoZWlnaHQiLG5bMV1bMV0tblswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP25bMV1bMF0tdS8yOm5bMF1bMF0tdS8yfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/blsxXVsxXS11LzI6blswXVsxXS11LzJ9KSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9uWzFdWzBdLW5bMF1bMF0rdTp1fSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP25bMV1bMV0tblswXVsxXSt1OnV9KSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBzKHQsbixlKXt2YXIgcj10Ll9fYnJ1c2guZW1pdHRlcjtyZXR1cm4hcnx8ZSYmci5jbGVhbj9uZXcgbCh0LG4sZSk6cn1mdW5jdGlvbiBsKHQsbixlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wLHRoaXMuY2xlYW49ZX1mdW5jdGlvbiBoKGUpe2lmKCghbnx8ZS50b3VjaGVzKSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBpLGEsdSxjLGwsaCxkLHAsZyx5LHYsXz10aGlzLGI9ZS50YXJnZXQuX19kYXRhX18udHlwZSxtPSJzZWxlY3Rpb24iPT09KG8mJmUubWV0YUtleT9iPSJvdmVybGF5IjpiKT9IbzpvJiZlLmFsdEtleT9WbzpHbyx4PXQ9PT1uYT9udWxsOmFhW2JdLHc9dD09PXRhP251bGw6dWFbYl0sTT1oYShfKSxBPU0uZXh0ZW50LFQ9TS5zZWxlY3Rpb24sUz1BWzBdWzBdLEU9QVswXVsxXSxrPUFbMV1bMF0sTj1BWzFdWzFdLEM9MCxQPTAsej14JiZ3JiZvJiZlLnNoaWZ0S2V5LEQ9QXJyYXkuZnJvbShlLnRvdWNoZXN8fFtlXSwodD0+e2NvbnN0IG49dC5pZGVudGlmaWVyO3JldHVybih0PXRlKHQsXykpLnBvaW50MD10LnNsaWNlKCksdC5pZGVudGlmaWVyPW4sdH0pKTtJaShfKTt2YXIgUj1zKF8sYXJndW1lbnRzLCEwKS5iZWZvcmVzdGFydCgpO2lmKCJvdmVybGF5Ij09PWIpe1QmJihnPSEwKTtjb25zdCBuPVtEWzBdLERbMV18fERbMF1dO00uc2VsZWN0aW9uPVQ9W1tpPXQ9PT1uYT9TOktvKG5bMF1bMF0sblsxXVswXSksdT10PT09dGE/RTpLbyhuWzBdWzFdLG5bMV1bMV0pXSxbbD10PT09bmE/azpabyhuWzBdWzBdLG5bMV1bMF0pLGQ9dD09PXRhP046Wm8oblswXVsxXSxuWzFdWzFdKV1dLEQubGVuZ3RoPjEmJlUoZSl9ZWxzZSBpPVRbMF1bMF0sdT1UWzBdWzFdLGw9VFsxXVswXSxkPVRbMV1bMV07YT1pLGM9dSxoPWwscD1kO3ZhciBGPVduKF8pLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLHE9Ri5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixyYVtiXSk7aWYoZS50b3VjaGVzKVIubW92ZWQ9TyxSLmVuZGVkPUI7ZWxzZXt2YXIgST1XbihlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLE8sITApLm9uKCJtb3VzZXVwLmJydXNoIixCLCEwKTtvJiZJLm9uKCJrZXlkb3duLmJydXNoIixZLCEwKS5vbigia2V5dXAuYnJ1c2giLEwsITApLG9lKGUudmlldyl9Zi5jYWxsKF8pLFIuc3RhcnQoZSxtLm5hbWUpfWZ1bmN0aW9uIE8odCl7Zm9yKGNvbnN0IG4gb2YgdC5jaGFuZ2VkVG91Y2hlc3x8W3RdKWZvcihjb25zdCB0IG9mIEQpdC5pZGVudGlmaWVyPT09bi5pZGVudGlmaWVyJiYodC5jdXI9dGUobixfKSk7aWYoeiYmIXkmJiF2JiYxPT09RC5sZW5ndGgpe2NvbnN0IHQ9RFswXTtXbyh0LmN1clswXS10WzBdKT5Xbyh0LmN1clsxXS10WzFdKT92PSEwOnk9ITB9Zm9yKGNvbnN0IHQgb2YgRCl0LmN1ciYmKHRbMF09dC5jdXJbMF0sdFsxXT10LmN1clsxXSk7Zz0hMCwkbyh0KSxVKHQpfWZ1bmN0aW9uIFUodCl7Y29uc3Qgbj1EWzBdLGU9bi5wb2ludDA7dmFyIHI7c3dpdGNoKEM9blswXS1lWzBdLFA9blsxXS1lWzFdLG0pe2Nhc2UgWG86Y2FzZSBIbzp4JiYoQz1abyhTLWksS28oay1sLEMpKSxhPWkrQyxoPWwrQyksdyYmKFA9Wm8oRS11LEtvKE4tZCxQKSksYz11K1AscD1kK1ApO2JyZWFrO2Nhc2UgR286RFsxXT8oeCYmKGE9Wm8oUyxLbyhrLERbMF1bMF0pKSxoPVpvKFMsS28oayxEWzFdWzBdKSkseD0xKSx3JiYoYz1abyhFLEtvKE4sRFswXVsxXSkpLHA9Wm8oRSxLbyhOLERbMV1bMV0pKSx3PTEpKTooeDwwPyhDPVpvKFMtaSxLbyhrLWksQykpLGE9aStDLGg9bCk6eD4wJiYoQz1abyhTLWwsS28oay1sLEMpKSxhPWksaD1sK0MpLHc8MD8oUD1abyhFLXUsS28oTi11LFApKSxjPXUrUCxwPWQpOnc+MCYmKFA9Wm8oRS1kLEtvKE4tZCxQKSksYz11LHA9ZCtQKSk7YnJlYWs7Y2FzZSBWbzp4JiYoYT1abyhTLEtvKGssaS1DKngpKSxoPVpvKFMsS28oayxsK0MqeCkpKSx3JiYoYz1abyhFLEtvKE4sdS1QKncpKSxwPVpvKEUsS28oTixkK1AqdykpKX1oPGEmJih4Kj0tMSxyPWksaT1sLGw9cixyPWEsYT1oLGg9cixiIGluIGlhJiZxLmF0dHIoImN1cnNvciIscmFbYj1pYVtiXV0pKSxwPGMmJih3Kj0tMSxyPXUsdT1kLGQ9cixyPWMsYz1wLHA9cixiIGluIG9hJiZxLmF0dHIoImN1cnNvciIscmFbYj1vYVtiXV0pKSxNLnNlbGVjdGlvbiYmKFQ9TS5zZWxlY3Rpb24pLHkmJihhPVRbMF1bMF0saD1UWzFdWzBdKSx2JiYoYz1UWzBdWzFdLHA9VFsxXVsxXSksVFswXVswXT09PWEmJlRbMF1bMV09PT1jJiZUWzFdWzBdPT09aCYmVFsxXVsxXT09PXB8fChNLnNlbGVjdGlvbj1bW2EsY10sW2gscF1dLGYuY2FsbChfKSxSLmJydXNoKHQsbS5uYW1lKSl9ZnVuY3Rpb24gQih0KXtpZihqbyh0KSx0LnRvdWNoZXMpe2lmKHQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO24mJmNsZWFyVGltZW91dChuKSxuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bj1udWxsfSksNTAwKX1lbHNlIGFlKHQudmlldyxnKSxJLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtGLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikscS5hdHRyKCJjdXJzb3IiLHJhLm92ZXJsYXkpLE0uc2VsZWN0aW9uJiYoVD1NLnNlbGVjdGlvbiksZGEoVCkmJihNLnNlbGVjdGlvbj1udWxsLGYuY2FsbChfKSksUi5lbmQodCxtLm5hbWUpfWZ1bmN0aW9uIFkodCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSAxNjp6PXgmJnc7YnJlYWs7Y2FzZSAxODptPT09R28mJih4JiYobD1oLUMqeCxpPWErQyp4KSx3JiYoZD1wLVAqdyx1PWMrUCp3KSxtPVZvLFUodCkpO2JyZWFrO2Nhc2UgMzI6bSE9PUdvJiZtIT09Vm98fCh4PDA/bD1oLUM6eD4wJiYoaT1hLUMpLHc8MD9kPXAtUDp3PjAmJih1PWMtUCksbT1YbyxxLmF0dHIoImN1cnNvciIscmEuc2VsZWN0aW9uKSxVKHQpKTticmVhaztkZWZhdWx0OnJldHVybn0kbyh0KX1mdW5jdGlvbiBMKHQpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgMTY6eiYmKHk9dj16PSExLFUodCkpO2JyZWFrO2Nhc2UgMTg6bT09PVZvJiYoeDwwP2w9aDp4PjAmJihpPWEpLHc8MD9kPXA6dz4wJiYodT1jKSxtPUdvLFUodCkpO2JyZWFrO2Nhc2UgMzI6bT09PVhvJiYodC5hbHRLZXk/KHgmJihsPWgtQyp4LGk9YStDKngpLHcmJihkPXAtUCp3LHU9YytQKncpLG09Vm8pOih4PDA/bD1oOng+MCYmKGk9YSksdzwwP2Q9cDp3PjAmJih1PWMpLG09R28pLHEuYXR0cigiY3Vyc29yIixyYVtiXSksVSh0KSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59JG8odCl9fWZ1bmN0aW9uIGQodCl7cyh0aGlzLGFyZ3VtZW50cykubW92ZWQodCl9ZnVuY3Rpb24gcCh0KXtzKHRoaXMsYXJndW1lbnRzKS5lbmRlZCh0KX1mdW5jdGlvbiBnKCl7dmFyIG49dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBuLmV4dGVudD1KbyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksbi5kaW09dCxufXJldHVybiBjLm1vdmU9ZnVuY3Rpb24obixlLHIpe24udHdlZW4/bi5vbigic3RhcnQuYnJ1c2giLChmdW5jdGlvbih0KXtzKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KHQpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24odCl7cyh0aGlzLGFyZ3VtZW50cykuZW5kKHQpfSkpLnR3ZWVuKCJicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPW4uX19icnVzaCxpPXMobixhcmd1bWVudHMpLG89ci5zZWxlY3Rpb24sYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsci5leHRlbnQpLHU9SHIobyxhKTtmdW5jdGlvbiBjKHQpe3Iuc2VsZWN0aW9uPTE9PT10JiZudWxsPT09YT9udWxsOnUodCksZi5jYWxsKG4pLGkuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PW8mJm51bGwhPT1hP2M6YygxKX0pKTpuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPWFyZ3VtZW50cyxvPW4uX19icnVzaCxhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseShuLGkpOmUsby5leHRlbnQpLHU9cyhuLGkpLmJlZm9yZXN0YXJ0KCk7SWkobiksby5zZWxlY3Rpb249bnVsbD09PWE/bnVsbDphLGYuY2FsbChuKSx1LnN0YXJ0KHIpLmJydXNoKHIpLmVuZChyKX0pKX0sYy5jbGVhcj1mdW5jdGlvbih0LG4pe2MubW92ZSh0LG51bGwsbil9LGwucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0Iix0LG4pKTp0aGlzLmVtaXQoImJydXNoIix0KSx0aGlzfSxicnVzaDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmVtaXQoImJydXNoIix0LG4pLHRoaXN9LGVuZDpmdW5jdGlvbih0LG4pe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIsdCxuKSksdGhpc30sZW1pdDpmdW5jdGlvbihuLGUscil7dmFyIGk9V24odGhpcy50aGF0KS5kYXR1bSgpO2EuY2FsbChuLHRoaXMudGhhdCxuZXcgTG8obix7c291cmNlRXZlbnQ6ZSx0YXJnZXQ6YyxzZWxlY3Rpb246dC5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pLG1vZGU6cixkaXNwYXRjaDphfSksaSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OllvKEpvKHQpKSxjKTplfSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OllvKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpZbyghIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxjKTp1fSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hIXQsYyk6b30sYy5vbj1mdW5jdGlvbigpe3ZhciB0PWEub24uYXBwbHkoYSxhcmd1bWVudHMpO3JldHVybiB0PT09YT9jOnR9LGN9dmFyIGdhPU1hdGguYWJzLHlhPU1hdGguY29zLHZhPU1hdGguc2luLF9hPU1hdGguUEksYmE9X2EvMixtYT0yKl9hLHhhPU1hdGgubWF4LHdhPTFlLTEyO2Z1bmN0aW9uIE1hKHQsbil7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDpuLXR9LCgobixlKT0+dCtlKSl9ZnVuY3Rpb24gQWEodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHQobi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUsZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpfX1mdW5jdGlvbiBUYSh0LG4pe3ZhciBlPTAscj1udWxsLGk9bnVsbCxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgdSxjPWEubGVuZ3RoLGY9bmV3IEFycmF5KGMpLHM9TWEoMCxjKSxsPW5ldyBBcnJheShjKmMpLGg9bmV3IEFycmF5KGMpLGQ9MDthPUZsb2F0NjRBcnJheS5mcm9tKHtsZW5ndGg6YypjfSxuPyh0LG4pPT5hW24lY11bbi9jfDBdOih0LG4pPT5hW24vY3wwXVtuJWNdKTtmb3IobGV0IG49MDtuPGM7KytuKXtsZXQgZT0wO2ZvcihsZXQgcj0wO3I8YzsrK3IpZSs9YVtuKmMrcl0rdCphW3IqYytuXTtkKz1mW25dPWV9dT0oZD14YSgwLG1hLWUqYykvZCk/ZTptYS9jO3tsZXQgbj0wO3ImJnMuc29ydCgoKHQsbik9PnIoZlt0XSxmW25dKSkpO2Zvcihjb25zdCBlIG9mIHMpe2NvbnN0IHI9bjtpZih0KXtjb25zdCB0PU1hKDErfmMsYykuZmlsdGVyKCh0PT50PDA/YVt+dCpjK2VdOmFbZSpjK3RdKSk7aSYmdC5zb3J0KCgodCxuKT0+aSh0PDA/LWFbfnQqYytlXTphW2UqYyt0XSxuPDA/LWFbfm4qYytlXTphW2UqYytuXSkpKTtmb3IoY29uc3QgciBvZiB0KWlmKHI8MCl7KGxbfnIqYytlXXx8KGxbfnIqYytlXT17c291cmNlOm51bGwsdGFyZ2V0Om51bGx9KSkudGFyZ2V0PXtpbmRleDplLHN0YXJ0QW5nbGU6bixlbmRBbmdsZTpuKz1hW35yKmMrZV0qZCx2YWx1ZTphW35yKmMrZV19fWVsc2V7KGxbZSpjK3JdfHwobFtlKmMrcl09e3NvdXJjZTpudWxsLHRhcmdldDpudWxsfSkpLnNvdXJjZT17aW5kZXg6ZSxzdGFydEFuZ2xlOm4sZW5kQW5nbGU6bis9YVtlKmMrcl0qZCx2YWx1ZTphW2UqYytyXX19aFtlXT17aW5kZXg6ZSxzdGFydEFuZ2xlOnIsZW5kQW5nbGU6bix2YWx1ZTpmW2VdfX1lbHNle2NvbnN0IHQ9TWEoMCxjKS5maWx0ZXIoKHQ9PmFbZSpjK3RdfHxhW3QqYytlXSkpO2kmJnQuc29ydCgoKHQsbik9PmkoYVtlKmMrdF0sYVtlKmMrbl0pKSk7Zm9yKGNvbnN0IHIgb2YgdCl7bGV0IHQ7aWYoZTxyPyh0PWxbZSpjK3JdfHwobFtlKmMrcl09e3NvdXJjZTpudWxsLHRhcmdldDpudWxsfSksdC5zb3VyY2U9e2luZGV4OmUsc3RhcnRBbmdsZTpuLGVuZEFuZ2xlOm4rPWFbZSpjK3JdKmQsdmFsdWU6YVtlKmMrcl19KToodD1sW3IqYytlXXx8KGxbcipjK2VdPXtzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbH0pLHQudGFyZ2V0PXtpbmRleDplLHN0YXJ0QW5nbGU6bixlbmRBbmdsZTpuKz1hW2UqYytyXSpkLHZhbHVlOmFbZSpjK3JdfSxlPT09ciYmKHQuc291cmNlPXQudGFyZ2V0KSksdC5zb3VyY2UmJnQudGFyZ2V0JiZ0LnNvdXJjZS52YWx1ZTx0LnRhcmdldC52YWx1ZSl7Y29uc3Qgbj10LnNvdXJjZTt0LnNvdXJjZT10LnRhcmdldCx0LnRhcmdldD1ufX1oW2VdPXtpbmRleDplLHN0YXJ0QW5nbGU6cixlbmRBbmdsZTpuLHZhbHVlOmZbZV19fW4rPXV9fXJldHVybihsPU9iamVjdC52YWx1ZXMobCkpLmdyb3Vwcz1oLG8/bC5zb3J0KG8pOmx9cmV0dXJuIGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9eGEoMCx0KSxhKTplfSxhLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxhKTppfSxhLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1udWxsOihvPUFhKHQpKS5fPXQsYSk6byYmby5ffSxhfWNvbnN0IFNhPU1hdGguUEksRWE9MipTYSxrYT0xZS02LE5hPUVhLWthO2Z1bmN0aW9uIENhKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gUGEoKXtyZXR1cm4gbmV3IENhfUNhLnByb3RvdHlwZT1QYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkNhLG1vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rbil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStuKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArbisiLCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK24rIiwiKyArZSsiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LG4sZSxyLGkpe3Q9K3Qsbj0rbixlPStlLHI9K3IsaT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHU9ZS10LGM9ci1uLGY9by10LHM9YS1uLGw9ZipmK3MqcztpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2UgaWYobD5rYSlpZihNYXRoLmFicyhzKnUtYypmKT5rYSYmaSl7dmFyIGg9ZS1vLGQ9ci1hLHA9dSp1K2MqYyxnPWgqaCtkKmQseT1NYXRoLnNxcnQocCksdj1NYXRoLnNxcnQobCksXz1pKk1hdGgudGFuKChTYS1NYXRoLmFjb3MoKHArbC1nKS8oMip5KnYpKSkvMiksYj1fL3YsbT1fL3k7TWF0aC5hYnMoYi0xKT5rYSYmKHRoaXMuXys9IkwiKyh0K2IqZikrIiwiKyhuK2IqcykpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhzKmg+ZipkKSsiLCIrKHRoaXMuX3gxPXQrbSp1KSsiLCIrKHRoaXMuX3kxPW4rbSpjKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxuLGUscixpLG8pe3Q9K3Qsbj0rbixvPSEhbzt2YXIgYT0oZT0rZSkqTWF0aC5jb3MociksdT1lKk1hdGguc2luKHIpLGM9dCthLGY9bit1LHM9MV5vLGw9bz9yLWk6aS1yO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitlKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrYysiLCIrZjooTWF0aC5hYnModGhpcy5feDEtYyk+a2F8fE1hdGguYWJzKHRoaXMuX3kxLWYpPmthKSYmKHRoaXMuXys9IkwiK2MrIiwiK2YpLGUmJihsPDAmJihsPWwlRWErRWEpLGw+TmE/dGhpcy5fKz0iQSIrZSsiLCIrZSsiLDAsMSwiK3MrIiwiKyh0LWEpKyIsIisobi11KSsiQSIrZSsiLCIrZSsiLDAsMSwiK3MrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPWYpOmw+a2EmJih0aGlzLl8rPSJBIitlKyIsIitlKyIsMCwiKyArKGw+PVNhKSsiLCIrcysiLCIrKHRoaXMuX3gxPXQrZSpNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1uK2UqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKSsiaCIrICtlKyJ2IisgK3IrImgiKy1lKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIHphPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBEYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gUmEodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIEZhKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBxYSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gSWEodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBPYSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBVYSgpe3JldHVybiAwfWZ1bmN0aW9uIEJhKCl7cmV0dXJuIDEwfWZ1bmN0aW9uIFlhKHQpe3ZhciBuPVJhLGU9RmEscj1xYSxpPXFhLG89SWEsYT1PYSx1PVVhLGM9bnVsbDtmdW5jdGlvbiBmKCl7dmFyIGYscz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9dS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixkPXphLmNhbGwoYXJndW1lbnRzKSxwPStyLmFwcGx5KHRoaXMsKGRbMF09cyxkKSksZz1vLmFwcGx5KHRoaXMsZCktYmEseT1hLmFwcGx5KHRoaXMsZCktYmEsdj0raS5hcHBseSh0aGlzLChkWzBdPWwsZCkpLF89by5hcHBseSh0aGlzLGQpLWJhLGI9YS5hcHBseSh0aGlzLGQpLWJhO2lmKGN8fChjPWY9UGEoKSksaD53YSYmKGdhKHktZyk+MipoK3dhP3k+Zz8oZys9aCx5LT1oKTooZy09aCx5Kz1oKTpnPXk9KGcreSkvMixnYShiLV8pPjIqaCt3YT9iPl8/KF8rPWgsYi09aCk6KF8tPWgsYis9aCk6Xz1iPShfK2IpLzIpLGMubW92ZVRvKHAqeWEoZykscCp2YShnKSksYy5hcmMoMCwwLHAsZyx5KSxnIT09X3x8eSE9PWIpaWYodCl7dmFyIG09K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHg9di1tLHc9KF8rYikvMjtjLnF1YWRyYXRpY0N1cnZlVG8oMCwwLHgqeWEoXykseCp2YShfKSksYy5saW5lVG8odip5YSh3KSx2KnZhKHcpKSxjLmxpbmVUbyh4KnlhKGIpLHgqdmEoYikpfWVsc2UgYy5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCx2KnlhKF8pLHYqdmEoXykpLGMuYXJjKDAsMCx2LF8sYik7aWYoYy5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwKnlhKGcpLHAqdmEoZykpLGMuY2xvc2VQYXRoKCksZilyZXR1cm4gYz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIHQmJihmLmhlYWRSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpEYSgrbiksZik6dH0pLGYucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEYSgrdCksZik6cn0sZi5zb3VyY2VSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEYSgrdCksZik6cn0sZi50YXJnZXRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEYSgrdCksZik6aX0sZi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RGEoK3QpLGYpOm99LGYuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEYSgrdCksZik6YX0sZi5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRhKCt0KSxmKTp1fSxmLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGYpOm59LGYudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsZik6ZX0sZi5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PXQ/bnVsbDp0LGYpOmN9LGZ9dmFyIExhPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBqYSh0LG4pe3JldHVybiB0LW59dmFyICRhPXQ9PigpPT50O2Z1bmN0aW9uIEhhKHQsbil7Zm9yKHZhciBlLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoZT1YYSh0LG5bcl0pKXJldHVybiBlO3JldHVybiAwfWZ1bmN0aW9uIFhhKHQsbil7Zm9yKHZhciBlPW5bMF0scj1uWzFdLGk9LTEsbz0wLGE9dC5sZW5ndGgsdT1hLTE7bzxhO3U9bysrKXt2YXIgYz10W29dLGY9Y1swXSxzPWNbMV0sbD10W3VdLGg9bFswXSxkPWxbMV07aWYoR2EoYyxsLG4pKXJldHVybiAwO3M+ciE9ZD5yJiZlPChoLWYpKihyLXMpLyhkLXMpK2YmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBHYSh0LG4sZSl7dmFyIHIsaSxvLGE7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oblswXS10WzBdKSooZVsxXS10WzFdKT09KGVbMF0tdFswXSkqKG5bMV0tdFsxXSl9KHQsbixlKSYmKGk9dFtyPSsodFswXT09PW5bMF0pXSxvPWVbcl0sYT1uW3JdLGk8PW8mJm88PWF8fGE8PW8mJm88PWkpfWZ1bmN0aW9uIFZhKCl7fXZhciBXYT1bW10sW1tbMSwxLjVdLFsuNSwxXV1dLFtbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsuNSwxXV1dLFtbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWy41LDFdXSxbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLC41XSxbMSwxLjVdXV0sW1tbMSwuNV0sWy41LDFdXV0sW1tbLjUsMV0sWzEsLjVdXV0sW1tbMSwxLjVdLFsxLC41XV1dLFtbWy41LDFdLFsxLC41XV0sW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbMSwuNV1dXSxbW1suNSwxXSxbMS41LDFdXV0sW1tbMSwxLjVdLFsxLjUsMV1dXSxbW1suNSwxXSxbMSwxLjVdXV0sW11dO2Z1bmN0aW9uIFphKCl7dmFyIHQ9MSxuPTEsZT1LLHI9dTtmdW5jdGlvbiBpKHQpe3ZhciBuPWUodCk7aWYoQXJyYXkuaXNBcnJheShuKSluPW4uc2xpY2UoKS5zb3J0KGphKTtlbHNle2NvbnN0IGU9QSh0KSxyPVcoZVswXSxlWzFdLG4pO249RyhNYXRoLmZsb29yKGVbMF0vcikqcixNYXRoLmZsb29yKGVbMV0vci0xKSpyLG4pfXJldHVybiBuLm1hcCgobj0+byh0LG4pKSl9ZnVuY3Rpb24gbyhlLGkpe3ZhciBvPVtdLHU9W107cmV0dXJuIGZ1bmN0aW9uKGUscixpKXt2YXIgbyx1LGMsZixzLGwsaD1uZXcgQXJyYXksZD1uZXcgQXJyYXk7bz11PS0xLGY9ZVswXT49cixXYVtmPDwxXS5mb3JFYWNoKHApO2Zvcig7KytvPHQtMTspYz1mLGY9ZVtvKzFdPj1yLFdhW2N8Zjw8MV0uZm9yRWFjaChwKTtXYVtmPDwwXS5mb3JFYWNoKHApO2Zvcig7Kyt1PG4tMTspe2ZvcihvPS0xLGY9ZVt1KnQrdF0+PXIscz1lW3UqdF0+PXIsV2FbZjw8MXxzPDwyXS5mb3JFYWNoKHApOysrbzx0LTE7KWM9ZixmPWVbdSp0K3QrbysxXT49cixsPXMscz1lW3UqdCtvKzFdPj1yLFdhW2N8Zjw8MXxzPDwyfGw8PDNdLmZvckVhY2gocCk7V2FbZnxzPDwzXS5mb3JFYWNoKHApfW89LTEscz1lW3UqdF0+PXIsV2Fbczw8Ml0uZm9yRWFjaChwKTtmb3IoOysrbzx0LTE7KWw9cyxzPWVbdSp0K28rMV0+PXIsV2Fbczw8MnxsPDwzXS5mb3JFYWNoKHApO2Z1bmN0aW9uIHAodCl7dmFyIG4sZSxyPVt0WzBdWzBdK28sdFswXVsxXSt1XSxjPVt0WzFdWzBdK28sdFsxXVsxXSt1XSxmPWEocikscz1hKGMpOyhuPWRbZl0pPyhlPWhbc10pPyhkZWxldGUgZFtuLmVuZF0sZGVsZXRlIGhbZS5zdGFydF0sbj09PWU/KG4ucmluZy5wdXNoKGMpLGkobi5yaW5nKSk6aFtuLnN0YXJ0XT1kW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGRbbi5lbmRdLG4ucmluZy5wdXNoKGMpLGRbbi5lbmQ9c109bik6KG49aFtzXSk/KGU9ZFtmXSk/KGRlbGV0ZSBoW24uc3RhcnRdLGRlbGV0ZSBkW2UuZW5kXSxuPT09ZT8obi5yaW5nLnB1c2goYyksaShuLnJpbmcpKTpoW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgaFtuLnN0YXJ0XSxuLnJpbmcudW5zaGlmdChyKSxoW24uc3RhcnQ9Zl09bik6aFtmXT1kW3NdPXtzdGFydDpmLGVuZDpzLHJpbmc6W3IsY119fVdhW3M8PDNdLmZvckVhY2gocCl9KGUsaSwoZnVuY3Rpb24odCl7cih0LGUsaSksZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aCxyPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrbjxlOylyKz10W24tMV1bMV0qdFtuXVswXS10W24tMV1bMF0qdFtuXVsxXTtyZXR1cm4gcn0odCk+MD9vLnB1c2goW3RdKTp1LnB1c2godCl9KSksdS5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0wLHI9by5sZW5ndGg7ZTxyOysrZSlpZigtMSE9PUhhKChuPW9bZV0pWzBdLHQpKXJldHVybiB2b2lkIG4ucHVzaCh0KX0pKSx7dHlwZToiTXVsdGlQb2x5Z29uIix2YWx1ZTppLGNvb3JkaW5hdGVzOm99fWZ1bmN0aW9uIGEobil7cmV0dXJuIDIqblswXStuWzFdKih0KzEpKjR9ZnVuY3Rpb24gdShlLHIsaSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbyxhPWVbMF0sdT1lWzFdLGM9MHxhLGY9MHx1LHM9cltmKnQrY107YT4wJiZhPHQmJmM9PT1hJiYobz1yW2YqdCtjLTFdLGVbMF09YSsoaS1vKS8ocy1vKS0uNSksdT4wJiZ1PG4mJmY9PT11JiYobz1yWyhmLTEpKnQrY10sZVsxXT11KyhpLW8pLyhzLW8pLS41KX0pKX1yZXR1cm4gaS5jb250b3VyPW8saS5zaXplPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVyblt0LG5dO3ZhciByPU1hdGguZmxvb3IoZVswXSksbz1NYXRoLmZsb29yKGVbMV0pO2lmKCEocj49MCYmbz49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1yLG49byxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpPyRhKExhLmNhbGwodCkpOiRhKHQpLGkpOmV9LGkuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQ/dTpWYSxpKTpyPT09dX0saX1mdW5jdGlvbiBLYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBRYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBKYSgpe3JldHVybiAxfWNvbnN0IHR1PTEzNDIxNzcyOTtmdW5jdGlvbiBudSh0LG4sZSxyLGkpe2xldCBvLGEsdSxjLGY9blswXSxzPXJbMF0sbD0wLGg9MDtzPmY9PXM+LWY/KG89ZixmPW5bKytsXSk6KG89cyxzPXJbKytoXSk7bGV0IGQ9MDtpZihsPHQmJmg8ZSlmb3Iocz5mPT1zPi1mPyhhPWYrbyx1PW8tKGEtZiksZj1uWysrbF0pOihhPXMrbyx1PW8tKGEtcykscz1yWysraF0pLG89YSwwIT09dSYmKGlbZCsrXT11KTtsPHQmJmg8ZTspcz5mPT1zPi1mPyhhPW8rZixjPWEtbyx1PW8tKGEtYykrKGYtYyksZj1uWysrbF0pOihhPW8rcyxjPWEtbyx1PW8tKGEtYykrKHMtYykscz1yWysraF0pLG89YSwwIT09dSYmKGlbZCsrXT11KTtmb3IoO2w8dDspYT1vK2YsYz1hLW8sdT1vLShhLWMpKyhmLWMpLGY9blsrK2xdLG89YSwwIT09dSYmKGlbZCsrXT11KTtmb3IoO2g8ZTspYT1vK3MsYz1hLW8sdT1vLShhLWMpKyhzLWMpLHM9clsrK2hdLG89YSwwIT09dSYmKGlbZCsrXT11KTtyZXR1cm4gMD09PW8mJjAhPT1kfHwoaVtkKytdPW8pLGR9ZnVuY3Rpb24gZXUodCl7cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkodCl9Y29uc3QgcnU9ZXUoNCksaXU9ZXUoOCksb3U9ZXUoMTIpLGF1PWV1KDE2KSx1dT1ldSg0KTtmdW5jdGlvbiBjdSh0LG4sZSxyLGksbyl7Y29uc3QgYT0obi1vKSooZS1pKSx1PSh0LWkpKihyLW8pLGM9YS11O2lmKDA9PT1hfHwwPT09dXx8YT4wIT11PjApcmV0dXJuIGM7Y29uc3QgZj1NYXRoLmFicyhhK3UpO3JldHVybiBNYXRoLmFicyhjKT49MzMzMDY2OTA3Mzg3NTQ3MTZlLTMyKmY/YzotZnVuY3Rpb24odCxuLGUscixpLG8sYSl7bGV0IHUsYyxmLHMsbCxoLGQscCxnLHksdixfLGIsbSx4LHcsTSxBO2NvbnN0IFQ9dC1pLFM9ZS1pLEU9bi1vLGs9ci1vO209VCprLGg9dHUqVCxkPWgtKGgtVCkscD1ULWQsaD10dSprLGc9aC0oaC1rKSx5PWstZyx4PXAqeS0obS1kKmctcCpnLWQqeSksdz1FKlMsaD10dSpFLGQ9aC0oaC1FKSxwPUUtZCxoPXR1KlMsZz1oLShoLVMpLHk9Uy1nLE09cCp5LSh3LWQqZy1wKmctZCp5KSx2PXgtTSxsPXgtdixydVswXT14LSh2K2wpKyhsLU0pLF89bSt2LGw9Xy1tLGI9bS0oXy1sKSsodi1sKSx2PWItdyxsPWItdixydVsxXT1iLSh2K2wpKyhsLXcpLEE9Xyt2LGw9QS1fLHJ1WzJdPV8tKEEtbCkrKHYtbCkscnVbM109QTtsZXQgTj1mdW5jdGlvbih0LG4pe2xldCBlPW5bMF07Zm9yKGxldCByPTE7cjx0O3IrKyllKz1uW3JdO3JldHVybiBlfSg0LHJ1KSxDPTIyMjA0NDYwNDkyNTAzMTQ2ZS0zMiphO2lmKE4+PUN8fC1OPj1DKXJldHVybiBOO2lmKGw9dC1ULHU9dC0oVCtsKSsobC1pKSxsPWUtUyxmPWUtKFMrbCkrKGwtaSksbD1uLUUsYz1uLShFK2wpKyhsLW8pLGw9ci1rLHM9ci0oaytsKSsobC1vKSwwPT09dSYmMD09PWMmJjA9PT1mJiYwPT09cylyZXR1cm4gTjtpZihDPTExMDkzMzU2NDc5NjcwNDg3ZS00NyphKzMzMzA2NjkwNzM4NzU0NzA2ZS0zMipNYXRoLmFicyhOKSxOKz1UKnMrayp1LShFKmYrUypjKSxOPj1DfHwtTj49QylyZXR1cm4gTjttPXUqayxoPXR1KnUsZD1oLShoLXUpLHA9dS1kLGg9dHUqayxnPWgtKGgtaykseT1rLWcseD1wKnktKG0tZCpnLXAqZy1kKnkpLHc9YypTLGg9dHUqYyxkPWgtKGgtYykscD1jLWQsaD10dSpTLGc9aC0oaC1TKSx5PVMtZyxNPXAqeS0ody1kKmctcCpnLWQqeSksdj14LU0sbD14LXYsdXVbMF09eC0oditsKSsobC1NKSxfPW0rdixsPV8tbSxiPW0tKF8tbCkrKHYtbCksdj1iLXcsbD1iLXYsdXVbMV09Yi0oditsKSsobC13KSxBPV8rdixsPUEtXyx1dVsyXT1fLShBLWwpKyh2LWwpLHV1WzNdPUE7Y29uc3QgUD1udSg0LHJ1LDQsdXUsaXUpO209VCpzLGg9dHUqVCxkPWgtKGgtVCkscD1ULWQsaD10dSpzLGc9aC0oaC1zKSx5PXMtZyx4PXAqeS0obS1kKmctcCpnLWQqeSksdz1FKmYsaD10dSpFLGQ9aC0oaC1FKSxwPUUtZCxoPXR1KmYsZz1oLShoLWYpLHk9Zi1nLE09cCp5LSh3LWQqZy1wKmctZCp5KSx2PXgtTSxsPXgtdix1dVswXT14LSh2K2wpKyhsLU0pLF89bSt2LGw9Xy1tLGI9bS0oXy1sKSsodi1sKSx2PWItdyxsPWItdix1dVsxXT1iLSh2K2wpKyhsLXcpLEE9Xyt2LGw9QS1fLHV1WzJdPV8tKEEtbCkrKHYtbCksdXVbM109QTtjb25zdCB6PW51KFAsaXUsNCx1dSxvdSk7bT11KnMsaD10dSp1LGQ9aC0oaC11KSxwPXUtZCxoPXR1KnMsZz1oLShoLXMpLHk9cy1nLHg9cCp5LShtLWQqZy1wKmctZCp5KSx3PWMqZixoPXR1KmMsZD1oLShoLWMpLHA9Yy1kLGg9dHUqZixnPWgtKGgtZikseT1mLWcsTT1wKnktKHctZCpnLXAqZy1kKnkpLHY9eC1NLGw9eC12LHV1WzBdPXgtKHYrbCkrKGwtTSksXz1tK3YsbD1fLW0sYj1tLShfLWwpKyh2LWwpLHY9Yi13LGw9Yi12LHV1WzFdPWItKHYrbCkrKGwtdyksQT1fK3YsbD1BLV8sdXVbMl09Xy0oQS1sKSsodi1sKSx1dVszXT1BO2NvbnN0IEQ9bnUoeixvdSw0LHV1LGF1KTtyZXR1cm4gYXVbRC0xXX0odCxuLGUscixpLG8sZil9Y29uc3QgZnU9TWF0aC5wb3coMiwtNTIpLHN1PW5ldyBVaW50MzJBcnJheSg1MTIpO2NsYXNzIGx1e3N0YXRpYyBmcm9tKHQsbj12dSxlPV91KXtjb25zdCByPXQubGVuZ3RoLGk9bmV3IEZsb2F0NjRBcnJheSgyKnIpO2ZvcihsZXQgbz0wO288cjtvKyspe2NvbnN0IHI9dFtvXTtpWzIqb109bihyKSxpWzIqbysxXT1lKHIpfXJldHVybiBuZXcgbHUoaSl9Y29uc3RydWN0b3IodCl7Y29uc3Qgbj10Lmxlbmd0aD4+MTtpZihuPjAmJiJudW1iZXIiIT10eXBlb2YgdFswXSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGNvb3JkcyB0byBjb250YWluIG51bWJlcnMuIik7dGhpcy5jb29yZHM9dDtjb25zdCBlPU1hdGgubWF4KDIqbi01LDApO3RoaXMuX3RyaWFuZ2xlcz1uZXcgVWludDMyQXJyYXkoMyplKSx0aGlzLl9oYWxmZWRnZXM9bmV3IEludDMyQXJyYXkoMyplKSx0aGlzLl9oYXNoU2l6ZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KG4pKSx0aGlzLl9odWxsUHJldj1uZXcgVWludDMyQXJyYXkobiksdGhpcy5faHVsbE5leHQ9bmV3IFVpbnQzMkFycmF5KG4pLHRoaXMuX2h1bGxUcmk9bmV3IFVpbnQzMkFycmF5KG4pLHRoaXMuX2h1bGxIYXNoPW5ldyBJbnQzMkFycmF5KHRoaXMuX2hhc2hTaXplKS5maWxsKC0xKSx0aGlzLl9pZHM9bmV3IFVpbnQzMkFycmF5KG4pLHRoaXMuX2Rpc3RzPW5ldyBGbG9hdDY0QXJyYXkobiksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtjb25zdHtjb29yZHM6dCxfaHVsbFByZXY6bixfaHVsbE5leHQ6ZSxfaHVsbFRyaTpyLF9odWxsSGFzaDppfT10aGlzLG89dC5sZW5ndGg+PjE7bGV0IGE9MS8wLHU9MS8wLGM9LTEvMCxmPS0xLzA7Zm9yKGxldCBuPTA7bjxvO24rKyl7Y29uc3QgZT10WzIqbl0scj10WzIqbisxXTtlPGEmJihhPWUpLHI8dSYmKHU9ciksZT5jJiYoYz1lKSxyPmYmJihmPXIpLHRoaXMuX2lkc1tuXT1ufWNvbnN0IHM9KGErYykvMixsPSh1K2YpLzI7bGV0IGgsZCxwLGc9MS8wO2ZvcihsZXQgbj0wO248bztuKyspe2NvbnN0IGU9aHUocyxsLHRbMipuXSx0WzIqbisxXSk7ZTxnJiYoaD1uLGc9ZSl9Y29uc3QgeT10WzIqaF0sdj10WzIqaCsxXTtnPTEvMDtmb3IobGV0IG49MDtuPG87bisrKXtpZihuPT09aCljb250aW51ZTtjb25zdCBlPWh1KHksdix0WzIqbl0sdFsyKm4rMV0pO2U8ZyYmZT4wJiYoZD1uLGc9ZSl9bGV0IF89dFsyKmRdLGI9dFsyKmQrMV0sbT0xLzA7Zm9yKGxldCBuPTA7bjxvO24rKyl7aWYobj09PWh8fG49PT1kKWNvbnRpbnVlO2NvbnN0IGU9cHUoeSx2LF8sYix0WzIqbl0sdFsyKm4rMV0pO2U8bSYmKHA9bixtPWUpfWxldCB4PXRbMipwXSx3PXRbMipwKzFdO2lmKG09PT0xLzApe2ZvcihsZXQgbj0wO248bztuKyspdGhpcy5fZGlzdHNbbl09dFsyKm5dLXRbMF18fHRbMipuKzFdLXRbMV07Z3UodGhpcy5faWRzLHRoaXMuX2Rpc3RzLDAsby0xKTtjb25zdCBuPW5ldyBVaW50MzJBcnJheShvKTtsZXQgZT0wO2ZvcihsZXQgdD0wLHI9LTEvMDt0PG87dCsrKXtjb25zdCBpPXRoaXMuX2lkc1t0XTt0aGlzLl9kaXN0c1tpXT5yJiYobltlKytdPWkscj10aGlzLl9kaXN0c1tpXSl9cmV0dXJuIHRoaXMuaHVsbD1uLnN1YmFycmF5KDAsZSksdGhpcy50cmlhbmdsZXM9bmV3IFVpbnQzMkFycmF5KDApLHZvaWQodGhpcy5oYWxmZWRnZXM9bmV3IFVpbnQzMkFycmF5KDApKX1pZihjdSh5LHYsXyxiLHgsdyk8MCl7Y29uc3QgdD1kLG49XyxlPWI7ZD1wLF89eCxiPXcscD10LHg9bix3PWV9Y29uc3QgTT1mdW5jdGlvbih0LG4sZSxyLGksbyl7Y29uc3QgYT1lLXQsdT1yLW4sYz1pLXQsZj1vLW4scz1hKmErdSp1LGw9YypjK2YqZixoPS41LyhhKmYtdSpjKTtyZXR1cm57eDp0KyhmKnMtdSpsKSpoLHk6bisoYSpsLWMqcykqaH19KHksdixfLGIseCx3KTt0aGlzLl9jeD1NLngsdGhpcy5fY3k9TS55O2ZvcihsZXQgbj0wO248bztuKyspdGhpcy5fZGlzdHNbbl09aHUodFsyKm5dLHRbMipuKzFdLE0ueCxNLnkpO2d1KHRoaXMuX2lkcyx0aGlzLl9kaXN0cywwLG8tMSksdGhpcy5faHVsbFN0YXJ0PWg7bGV0IEE9MztlW2hdPW5bcF09ZCxlW2RdPW5baF09cCxlW3BdPW5bZF09aCxyW2hdPTAscltkXT0xLHJbcF09MixpLmZpbGwoLTEpLGlbdGhpcy5faGFzaEtleSh5LHYpXT1oLGlbdGhpcy5faGFzaEtleShfLGIpXT1kLGlbdGhpcy5faGFzaEtleSh4LHcpXT1wLHRoaXMudHJpYW5nbGVzTGVuPTAsdGhpcy5fYWRkVHJpYW5nbGUoaCxkLHAsLTEsLTEsLTEpO2ZvcihsZXQgbyxhLHU9MDt1PHRoaXMuX2lkcy5sZW5ndGg7dSsrKXtjb25zdCBjPXRoaXMuX2lkc1t1XSxmPXRbMipjXSxzPXRbMipjKzFdO2lmKHU+MCYmTWF0aC5hYnMoZi1vKTw9ZnUmJk1hdGguYWJzKHMtYSk8PWZ1KWNvbnRpbnVlO2lmKG89ZixhPXMsYz09PWh8fGM9PT1kfHxjPT09cCljb250aW51ZTtsZXQgbD0wO2ZvcihsZXQgdD0wLG49dGhpcy5faGFzaEtleShmLHMpO3Q8dGhpcy5faGFzaFNpemUmJihsPWlbKG4rdCkldGhpcy5faGFzaFNpemVdLC0xPT09bHx8bD09PWVbbF0pO3QrKyk7bD1uW2xdO2xldCBnLHk9bDtmb3IoO2c9ZVt5XSxjdShmLHMsdFsyKnldLHRbMip5KzFdLHRbMipnXSx0WzIqZysxXSk+PTA7KWlmKHk9Zyx5PT09bCl7eT0tMTticmVha31pZigtMT09PXkpY29udGludWU7bGV0IHY9dGhpcy5fYWRkVHJpYW5nbGUoeSxjLGVbeV0sLTEsLTEsclt5XSk7cltjXT10aGlzLl9sZWdhbGl6ZSh2KzIpLHJbeV09dixBKys7bGV0IF89ZVt5XTtmb3IoO2c9ZVtfXSxjdShmLHMsdFsyKl9dLHRbMipfKzFdLHRbMipnXSx0WzIqZysxXSk8MDspdj10aGlzLl9hZGRUcmlhbmdsZShfLGMsZyxyW2NdLC0xLHJbX10pLHJbY109dGhpcy5fbGVnYWxpemUodisyKSxlW19dPV8sQS0tLF89ZztpZih5PT09bClmb3IoO2c9blt5XSxjdShmLHMsdFsyKmddLHRbMipnKzFdLHRbMip5XSx0WzIqeSsxXSk8MDspdj10aGlzLl9hZGRUcmlhbmdsZShnLGMseSwtMSxyW3ldLHJbZ10pLHRoaXMuX2xlZ2FsaXplKHYrMikscltnXT12LGVbeV09eSxBLS0seT1nO3RoaXMuX2h1bGxTdGFydD1uW2NdPXksZVt5XT1uW19dPWMsZVtjXT1fLGlbdGhpcy5faGFzaEtleShmLHMpXT1jLGlbdGhpcy5faGFzaEtleSh0WzIqeV0sdFsyKnkrMV0pXT15fXRoaXMuaHVsbD1uZXcgVWludDMyQXJyYXkoQSk7Zm9yKGxldCB0PTAsbj10aGlzLl9odWxsU3RhcnQ7dDxBO3QrKyl0aGlzLmh1bGxbdF09bixuPWVbbl07dGhpcy50cmlhbmdsZXM9dGhpcy5fdHJpYW5nbGVzLnN1YmFycmF5KDAsdGhpcy50cmlhbmdsZXNMZW4pLHRoaXMuaGFsZmVkZ2VzPXRoaXMuX2hhbGZlZGdlcy5zdWJhcnJheSgwLHRoaXMudHJpYW5nbGVzTGVuKX1faGFzaEtleSh0LG4pe3JldHVybiBNYXRoLmZsb29yKGZ1bmN0aW9uKHQsbil7Y29uc3QgZT10LyhNYXRoLmFicyh0KStNYXRoLmFicyhuKSk7cmV0dXJuKG4+MD8zLWU6MStlKS80fSh0LXRoaXMuX2N4LG4tdGhpcy5fY3kpKnRoaXMuX2hhc2hTaXplKSV0aGlzLl9oYXNoU2l6ZX1fbGVnYWxpemUodCl7Y29uc3R7X3RyaWFuZ2xlczpuLF9oYWxmZWRnZXM6ZSxjb29yZHM6cn09dGhpcztsZXQgaT0wLG89MDtmb3IoOzspe2NvbnN0IGE9ZVt0XSx1PXQtdCUzO2lmKG89dSsodCsyKSUzLC0xPT09YSl7aWYoMD09PWkpYnJlYWs7dD1zdVstLWldO2NvbnRpbnVlfWNvbnN0IGM9YS1hJTMsZj11Kyh0KzEpJTMscz1jKyhhKzIpJTMsbD1uW29dLGg9blt0XSxkPW5bZl0scD1uW3NdO2lmKGR1KHJbMipsXSxyWzIqbCsxXSxyWzIqaF0sclsyKmgrMV0sclsyKmRdLHJbMipkKzFdLHJbMipwXSxyWzIqcCsxXSkpe25bdF09cCxuW2FdPWw7Y29uc3Qgcj1lW3NdO2lmKC0xPT09cil7bGV0IG49dGhpcy5faHVsbFN0YXJ0O2Rve2lmKHRoaXMuX2h1bGxUcmlbbl09PT1zKXt0aGlzLl9odWxsVHJpW25dPXQ7YnJlYWt9bj10aGlzLl9odWxsUHJldltuXX13aGlsZShuIT09dGhpcy5faHVsbFN0YXJ0KX10aGlzLl9saW5rKHQsciksdGhpcy5fbGluayhhLGVbb10pLHRoaXMuX2xpbmsobyxzKTtjb25zdCB1PWMrKGErMSklMztpPHN1Lmxlbmd0aCYmKHN1W2krK109dSl9ZWxzZXtpZigwPT09aSlicmVhazt0PXN1Wy0taV19fXJldHVybiBvfV9saW5rKHQsbil7dGhpcy5faGFsZmVkZ2VzW3RdPW4sLTEhPT1uJiYodGhpcy5faGFsZmVkZ2VzW25dPXQpfV9hZGRUcmlhbmdsZSh0LG4sZSxyLGksbyl7Y29uc3QgYT10aGlzLnRyaWFuZ2xlc0xlbjtyZXR1cm4gdGhpcy5fdHJpYW5nbGVzW2FdPXQsdGhpcy5fdHJpYW5nbGVzW2ErMV09bix0aGlzLl90cmlhbmdsZXNbYSsyXT1lLHRoaXMuX2xpbmsoYSxyKSx0aGlzLl9saW5rKGErMSxpKSx0aGlzLl9saW5rKGErMixvKSx0aGlzLnRyaWFuZ2xlc0xlbis9MyxhfX1mdW5jdGlvbiBodSh0LG4sZSxyKXtjb25zdCBpPXQtZSxvPW4tcjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBkdSh0LG4sZSxyLGksbyxhLHUpe2NvbnN0IGM9dC1hLGY9bi11LHM9ZS1hLGw9ci11LGg9aS1hLGQ9by11LHA9cypzK2wqbCxnPWgqaCtkKmQ7cmV0dXJuIGMqKGwqZy1wKmQpLWYqKHMqZy1wKmgpKyhjKmMrZipmKSoocypkLWwqaCk8MH1mdW5jdGlvbiBwdSh0LG4sZSxyLGksbyl7Y29uc3QgYT1lLXQsdT1yLW4sYz1pLXQsZj1vLW4scz1hKmErdSp1LGw9YypjK2YqZixoPS41LyhhKmYtdSpjKSxkPShmKnMtdSpsKSpoLHA9KGEqbC1jKnMpKmg7cmV0dXJuIGQqZCtwKnB9ZnVuY3Rpb24gZ3UodCxuLGUscil7aWYoci1lPD0yMClmb3IobGV0IGk9ZSsxO2k8PXI7aSsrKXtjb25zdCByPXRbaV0sbz1uW3JdO2xldCBhPWktMTtmb3IoO2E+PWUmJm5bdFthXV0+bzspdFthKzFdPXRbYS0tXTt0W2ErMV09cn1lbHNle2xldCBpPWUrMSxvPXI7eXUodCxlK3I+PjEsaSksblt0W2VdXT5uW3Rbcl1dJiZ5dSh0LGUsciksblt0W2ldXT5uW3Rbcl1dJiZ5dSh0LGksciksblt0W2VdXT5uW3RbaV1dJiZ5dSh0LGUsaSk7Y29uc3QgYT10W2ldLHU9blthXTtmb3IoOzspe2Rve2krK313aGlsZShuW3RbaV1dPHUpO2Rve28tLX13aGlsZShuW3Rbb11dPnUpO2lmKG88aSlicmVhazt5dSh0LGksbyl9dFtlKzFdPXRbb10sdFtvXT1hLHItaSsxPj1vLWU/KGd1KHQsbixpLHIpLGd1KHQsbixlLG8tMSkpOihndSh0LG4sZSxvLTEpLGd1KHQsbixpLHIpKX19ZnVuY3Rpb24geXUodCxuLGUpe2NvbnN0IHI9dFtuXTt0W25dPXRbZV0sdFtlXT1yfWZ1bmN0aW9uIHZ1KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIF91KHQpe3JldHVybiB0WzFdfWNvbnN0IGJ1PTFlLTY7Y2xhc3MgbXV7Y29uc3RydWN0b3IoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1tb3ZlVG8odCxuKXt0aGlzLl8rPWBNJHt0aGlzLl94MD10aGlzLl94MT0rdH0sJHt0aGlzLl95MD10aGlzLl95MT0rbn1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX1saW5lVG8odCxuKXt0aGlzLl8rPWBMJHt0aGlzLl94MT0rdH0sJHt0aGlzLl95MT0rbn1gfWFyYyh0LG4sZSl7Y29uc3Qgcj0odD0rdCkrKGU9K2UpLGk9bj0rbjtpZihlPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXMiKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz1gTSR7cn0sJHtpfWA6KE1hdGguYWJzKHRoaXMuX3gxLXIpPmJ1fHxNYXRoLmFicyh0aGlzLl95MS1pKT5idSkmJih0aGlzLl8rPSJMIityKyIsIitpKSxlJiYodGhpcy5fKz1gQSR7ZX0sJHtlfSwwLDEsMSwke3QtZX0sJHtufUEke2V9LCR7ZX0sMCwxLDEsJHt0aGlzLl94MT1yfSwke3RoaXMuX3kxPWl9YCl9cmVjdCh0LG4sZSxyKXt0aGlzLl8rPWBNJHt0aGlzLl94MD10aGlzLl94MT0rdH0sJHt0aGlzLl95MD10aGlzLl95MT0rbn1oJHsrZX12JHsrcn1oJHstZX1aYH12YWx1ZSgpe3JldHVybiB0aGlzLl98fG51bGx9fWNsYXNzIHh1e2NvbnN0cnVjdG9yKCl7dGhpcy5fPVtdfW1vdmVUbyh0LG4pe3RoaXMuXy5wdXNoKFt0LG5dKX1jbG9zZVBhdGgoKXt0aGlzLl8ucHVzaCh0aGlzLl9bMF0uc2xpY2UoKSl9bGluZVRvKHQsbil7dGhpcy5fLnB1c2goW3Qsbl0pfXZhbHVlKCl7cmV0dXJuIHRoaXMuXy5sZW5ndGg/dGhpcy5fOm51bGx9fWNsYXNzIHd1e2NvbnN0cnVjdG9yKHQsW24sZSxyLGldPVswLDAsOTYwLDUwMF0pe2lmKCEoKHI9K3IpPj0obj0rbikmJihpPStpKT49KGU9K2UpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYm91bmRzIik7dGhpcy5kZWxhdW5heT10LHRoaXMuX2NpcmN1bWNlbnRlcnM9bmV3IEZsb2F0NjRBcnJheSgyKnQucG9pbnRzLmxlbmd0aCksdGhpcy52ZWN0b3JzPW5ldyBGbG9hdDY0QXJyYXkoMip0LnBvaW50cy5sZW5ndGgpLHRoaXMueG1heD1yLHRoaXMueG1pbj1uLHRoaXMueW1heD1pLHRoaXMueW1pbj1lLHRoaXMuX2luaXQoKX11cGRhdGUoKXtyZXR1cm4gdGhpcy5kZWxhdW5heS51cGRhdGUoKSx0aGlzLl9pbml0KCksdGhpc31faW5pdCgpe2NvbnN0e2RlbGF1bmF5Ontwb2ludHM6dCxodWxsOm4sdHJpYW5nbGVzOmV9LHZlY3RvcnM6cn09dGhpcyxpPXRoaXMuY2lyY3VtY2VudGVycz10aGlzLl9jaXJjdW1jZW50ZXJzLnN1YmFycmF5KDAsZS5sZW5ndGgvMyoyKTtmb3IobGV0IG4scixvPTAsYT0wLHU9ZS5sZW5ndGg7bzx1O28rPTMsYSs9Mil7Y29uc3QgdT0yKmVbb10sYz0yKmVbbysxXSxmPTIqZVtvKzJdLHM9dFt1XSxsPXRbdSsxXSxoPXRbY10sZD10W2MrMV0scD10W2ZdLGc9dFtmKzFdLHk9aC1zLHY9ZC1sLF89cC1zLGI9Zy1sLG09MiooeSpiLXYqXyk7aWYoTWF0aC5hYnMobSk8MWUtOSl7bGV0IGk9MWU5O2NvbnN0IG89MiplWzBdO2kqPU1hdGguc2lnbigodFtvXS1zKSpiLSh0W28rMV0tbCkqXyksbj0ocytwKS8yLWkqYixyPShsK2cpLzIraSpffWVsc2V7Y29uc3QgdD0xL20sZT15Knkrdip2LGk9XypfK2IqYjtuPXMrKGIqZS12KmkpKnQscj1sKyh5KmktXyplKSp0fWlbYV09bixpW2ErMV09cn1sZXQgbyxhLHUsYz1uW24ubGVuZ3RoLTFdLGY9NCpjLHM9dFsyKmNdLGw9dFsyKmMrMV07ci5maWxsKDApO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7KytlKWM9bltlXSxvPWYsYT1zLHU9bCxmPTQqYyxzPXRbMipjXSxsPXRbMipjKzFdLHJbbysyXT1yW2ZdPXUtbCxyW28rM109cltmKzFdPXMtYX1yZW5kZXIodCl7Y29uc3Qgbj1udWxsPT10P3Q9bmV3IG11OnZvaWQgMCx7ZGVsYXVuYXk6e2hhbGZlZGdlczplLGluZWRnZXM6cixodWxsOml9LGNpcmN1bWNlbnRlcnM6byx2ZWN0b3JzOmF9PXRoaXM7aWYoaS5sZW5ndGg8PTEpcmV0dXJuIG51bGw7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7KytuKXtjb25zdCByPWVbbl07aWYocjxuKWNvbnRpbnVlO2NvbnN0IGk9MipNYXRoLmZsb29yKG4vMyksYT0yKk1hdGguZmxvb3Ioci8zKSx1PW9baV0sYz1vW2krMV0sZj1vW2FdLHM9b1thKzFdO3RoaXMuX3JlbmRlclNlZ21lbnQodSxjLGYscyx0KX1sZXQgdSxjPWlbaS5sZW5ndGgtMV07Zm9yKGxldCBuPTA7bjxpLmxlbmd0aDsrK24pe3U9YyxjPWlbbl07Y29uc3QgZT0yKk1hdGguZmxvb3IocltjXS8zKSxmPW9bZV0scz1vW2UrMV0sbD00KnUsaD10aGlzLl9wcm9qZWN0KGYscyxhW2wrMl0sYVtsKzNdKTtoJiZ0aGlzLl9yZW5kZXJTZWdtZW50KGYscyxoWzBdLGhbMV0sdCl9cmV0dXJuIG4mJm4udmFsdWUoKX1yZW5kZXJCb3VuZHModCl7Y29uc3Qgbj1udWxsPT10P3Q9bmV3IG11OnZvaWQgMDtyZXR1cm4gdC5yZWN0KHRoaXMueG1pbix0aGlzLnltaW4sdGhpcy54bWF4LXRoaXMueG1pbix0aGlzLnltYXgtdGhpcy55bWluKSxuJiZuLnZhbHVlKCl9cmVuZGVyQ2VsbCh0LG4pe2NvbnN0IGU9bnVsbD09bj9uPW5ldyBtdTp2b2lkIDAscj10aGlzLl9jbGlwKHQpO2lmKG51bGw9PT1yfHwhci5sZW5ndGgpcmV0dXJuO24ubW92ZVRvKHJbMF0sclsxXSk7bGV0IGk9ci5sZW5ndGg7Zm9yKDtyWzBdPT09cltpLTJdJiZyWzFdPT09cltpLTFdJiZpPjE7KWktPTI7Zm9yKGxldCB0PTI7dDxpO3QrPTIpclt0XT09PXJbdC0yXSYmclt0KzFdPT09clt0LTFdfHxuLmxpbmVUbyhyW3RdLHJbdCsxXSk7cmV0dXJuIG4uY2xvc2VQYXRoKCksZSYmZS52YWx1ZSgpfSpjZWxsUG9seWdvbnMoKXtjb25zdHtkZWxhdW5heTp7cG9pbnRzOnR9fT10aGlzO2ZvcihsZXQgbj0wLGU9dC5sZW5ndGgvMjtuPGU7KytuKXtjb25zdCB0PXRoaXMuY2VsbFBvbHlnb24obik7dCYmKHQuaW5kZXg9bix5aWVsZCB0KX19Y2VsbFBvbHlnb24odCl7Y29uc3Qgbj1uZXcgeHU7cmV0dXJuIHRoaXMucmVuZGVyQ2VsbCh0LG4pLG4udmFsdWUoKX1fcmVuZGVyU2VnbWVudCh0LG4sZSxyLGkpe2xldCBvO2NvbnN0IGE9dGhpcy5fcmVnaW9uY29kZSh0LG4pLHU9dGhpcy5fcmVnaW9uY29kZShlLHIpOzA9PT1hJiYwPT09dT8oaS5tb3ZlVG8odCxuKSxpLmxpbmVUbyhlLHIpKToobz10aGlzLl9jbGlwU2VnbWVudCh0LG4sZSxyLGEsdSkpJiYoaS5tb3ZlVG8ob1swXSxvWzFdKSxpLmxpbmVUbyhvWzJdLG9bM10pKX1jb250YWlucyh0LG4sZSl7cmV0dXJuKG49K24pPT1uJiYoZT0rZSk9PWUmJnRoaXMuZGVsYXVuYXkuX3N0ZXAodCxuLGUpPT09dH0qbmVpZ2hib3JzKHQpe2NvbnN0IG49dGhpcy5fY2xpcCh0KTtpZihuKWZvcihjb25zdCBlIG9mIHRoaXMuZGVsYXVuYXkubmVpZ2hib3JzKHQpKXtjb25zdCB0PXRoaXMuX2NsaXAoZSk7aWYodCl0OmZvcihsZXQgcj0wLGk9bi5sZW5ndGg7cjxpO3IrPTIpZm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bys9MilpZihuW3JdPT10W29dJiZuW3IrMV09PXRbbysxXSYmblsocisyKSVpXT09dFsobythLTIpJWFdJiZuWyhyKzMpJWldPT10WyhvK2EtMSklYV0pe3lpZWxkIGU7YnJlYWsgdH19fV9jZWxsKHQpe2NvbnN0e2NpcmN1bWNlbnRlcnM6bixkZWxhdW5heTp7aW5lZGdlczplLGhhbGZlZGdlczpyLHRyaWFuZ2xlczppfX09dGhpcyxvPWVbdF07aWYoLTE9PT1vKXJldHVybiBudWxsO2NvbnN0IGE9W107bGV0IHU9bztkb3tjb25zdCBlPU1hdGguZmxvb3IodS8zKTtpZihhLnB1c2goblsyKmVdLG5bMiplKzFdKSx1PXUlMz09Mj91LTI6dSsxLGlbdV0hPT10KWJyZWFrO3U9clt1XX13aGlsZSh1IT09byYmLTEhPT11KTtyZXR1cm4gYX1fY2xpcCh0KXtpZigwPT09dCYmMT09PXRoaXMuZGVsYXVuYXkuaHVsbC5sZW5ndGgpcmV0dXJuW3RoaXMueG1heCx0aGlzLnltaW4sdGhpcy54bWF4LHRoaXMueW1heCx0aGlzLnhtaW4sdGhpcy55bWF4LHRoaXMueG1pbix0aGlzLnltaW5dO2NvbnN0IG49dGhpcy5fY2VsbCh0KTtpZihudWxsPT09bilyZXR1cm4gbnVsbDtjb25zdHt2ZWN0b3JzOmV9PXRoaXMscj00KnQ7cmV0dXJuIGVbcl18fGVbcisxXT90aGlzLl9jbGlwSW5maW5pdGUodCxuLGVbcl0sZVtyKzFdLGVbcisyXSxlW3IrM10pOnRoaXMuX2NsaXBGaW5pdGUodCxuKX1fY2xpcEZpbml0ZSh0LG4pe2NvbnN0IGU9bi5sZW5ndGg7bGV0IHIsaSxvLGEsdT1udWxsLGM9bltlLTJdLGY9bltlLTFdLHM9dGhpcy5fcmVnaW9uY29kZShjLGYpLGw9MDtmb3IobGV0IGg9MDtoPGU7aCs9MilpZihyPWMsaT1mLGM9bltoXSxmPW5baCsxXSxvPXMscz10aGlzLl9yZWdpb25jb2RlKGMsZiksMD09PW8mJjA9PT1zKWE9bCxsPTAsdT91LnB1c2goYyxmKTp1PVtjLGZdO2Vsc2V7bGV0IG4sZSxoLGQscDtpZigwPT09byl7aWYobnVsbD09PShuPXRoaXMuX2NsaXBTZWdtZW50KHIsaSxjLGYsbyxzKSkpY29udGludWU7W2UsaCxkLHBdPW59ZWxzZXtpZihudWxsPT09KG49dGhpcy5fY2xpcFNlZ21lbnQoYyxmLHIsaSxzLG8pKSljb250aW51ZTtbZCxwLGUsaF09bixhPWwsbD10aGlzLl9lZGdlY29kZShlLGgpLGEmJmwmJnRoaXMuX2VkZ2UodCxhLGwsdSx1Lmxlbmd0aCksdT91LnB1c2goZSxoKTp1PVtlLGhdfWE9bCxsPXRoaXMuX2VkZ2Vjb2RlKGQscCksYSYmbCYmdGhpcy5fZWRnZSh0LGEsbCx1LHUubGVuZ3RoKSx1P3UucHVzaChkLHApOnU9W2QscF19aWYodSlhPWwsbD10aGlzLl9lZGdlY29kZSh1WzBdLHVbMV0pLGEmJmwmJnRoaXMuX2VkZ2UodCxhLGwsdSx1Lmxlbmd0aCk7ZWxzZSBpZih0aGlzLmNvbnRhaW5zKHQsKHRoaXMueG1pbit0aGlzLnhtYXgpLzIsKHRoaXMueW1pbit0aGlzLnltYXgpLzIpKXJldHVyblt0aGlzLnhtYXgsdGhpcy55bWluLHRoaXMueG1heCx0aGlzLnltYXgsdGhpcy54bWluLHRoaXMueW1heCx0aGlzLnhtaW4sdGhpcy55bWluXTtyZXR1cm4gdX1fY2xpcFNlZ21lbnQodCxuLGUscixpLG8pe2Zvcig7Oyl7aWYoMD09PWkmJjA9PT1vKXJldHVyblt0LG4sZSxyXTtpZihpJm8pcmV0dXJuIG51bGw7bGV0IGEsdSxjPWl8fG87OCZjPyhhPXQrKGUtdCkqKHRoaXMueW1heC1uKS8oci1uKSx1PXRoaXMueW1heCk6NCZjPyhhPXQrKGUtdCkqKHRoaXMueW1pbi1uKS8oci1uKSx1PXRoaXMueW1pbik6MiZjPyh1PW4rKHItbikqKHRoaXMueG1heC10KS8oZS10KSxhPXRoaXMueG1heCk6KHU9bisoci1uKSoodGhpcy54bWluLXQpLyhlLXQpLGE9dGhpcy54bWluKSxpPyh0PWEsbj11LGk9dGhpcy5fcmVnaW9uY29kZSh0LG4pKTooZT1hLHI9dSxvPXRoaXMuX3JlZ2lvbmNvZGUoZSxyKSl9fV9jbGlwSW5maW5pdGUodCxuLGUscixpLG8pe2xldCBhLHU9QXJyYXkuZnJvbShuKTtpZigoYT10aGlzLl9wcm9qZWN0KHVbMF0sdVsxXSxlLHIpKSYmdS51bnNoaWZ0KGFbMF0sYVsxXSksKGE9dGhpcy5fcHJvamVjdCh1W3UubGVuZ3RoLTJdLHVbdS5sZW5ndGgtMV0saSxvKSkmJnUucHVzaChhWzBdLGFbMV0pLHU9dGhpcy5fY2xpcEZpbml0ZSh0LHUpKWZvcihsZXQgbixlPTAscj11Lmxlbmd0aCxpPXRoaXMuX2VkZ2Vjb2RlKHVbci0yXSx1W3ItMV0pO2U8cjtlKz0yKW49aSxpPXRoaXMuX2VkZ2Vjb2RlKHVbZV0sdVtlKzFdKSxuJiZpJiYoZT10aGlzLl9lZGdlKHQsbixpLHUsZSkscj11Lmxlbmd0aCk7ZWxzZSB0aGlzLmNvbnRhaW5zKHQsKHRoaXMueG1pbit0aGlzLnhtYXgpLzIsKHRoaXMueW1pbit0aGlzLnltYXgpLzIpJiYodT1bdGhpcy54bWluLHRoaXMueW1pbix0aGlzLnhtYXgsdGhpcy55bWluLHRoaXMueG1heCx0aGlzLnltYXgsdGhpcy54bWluLHRoaXMueW1heF0pO3JldHVybiB1fV9lZGdlKHQsbixlLHIsaSl7Zm9yKDtuIT09ZTspe2xldCBlLG87c3dpdGNoKG4pe2Nhc2UgNTpuPTQ7Y29udGludWU7Y2FzZSA0Om49NixlPXRoaXMueG1heCxvPXRoaXMueW1pbjticmVhaztjYXNlIDY6bj0yO2NvbnRpbnVlO2Nhc2UgMjpuPTEwLGU9dGhpcy54bWF4LG89dGhpcy55bWF4O2JyZWFrO2Nhc2UgMTA6bj04O2NvbnRpbnVlO2Nhc2UgODpuPTksZT10aGlzLnhtaW4sbz10aGlzLnltYXg7YnJlYWs7Y2FzZSA5Om49MTtjb250aW51ZTtjYXNlIDE6bj01LGU9dGhpcy54bWluLG89dGhpcy55bWlufXJbaV09PT1lJiZyW2krMV09PT1vfHwhdGhpcy5jb250YWlucyh0LGUsbyl8fChyLnNwbGljZShpLDAsZSxvKSxpKz0yKX1pZihyLmxlbmd0aD40KWZvcihsZXQgdD0wO3Q8ci5sZW5ndGg7dCs9Mil7Y29uc3Qgbj0odCsyKSVyLmxlbmd0aCxlPSh0KzQpJXIubGVuZ3RoOyhyW3RdPT09cltuXSYmcltuXT09PXJbZV18fHJbdCsxXT09PXJbbisxXSYmcltuKzFdPT09cltlKzFdKSYmKHIuc3BsaWNlKG4sMiksdC09Mil9cmV0dXJuIGl9X3Byb2plY3QodCxuLGUscil7bGV0IGksbyxhLHU9MS8wO2lmKHI8MCl7aWYobjw9dGhpcy55bWluKXJldHVybiBudWxsOyhpPSh0aGlzLnltaW4tbikvcik8dSYmKGE9dGhpcy55bWluLG89dCsodT1pKSplKX1lbHNlIGlmKHI+MCl7aWYobj49dGhpcy55bWF4KXJldHVybiBudWxsOyhpPSh0aGlzLnltYXgtbikvcik8dSYmKGE9dGhpcy55bWF4LG89dCsodT1pKSplKX1pZihlPjApe2lmKHQ+PXRoaXMueG1heClyZXR1cm4gbnVsbDsoaT0odGhpcy54bWF4LXQpL2UpPHUmJihvPXRoaXMueG1heCxhPW4rKHU9aSkqcil9ZWxzZSBpZihlPDApe2lmKHQ8PXRoaXMueG1pbilyZXR1cm4gbnVsbDsoaT0odGhpcy54bWluLXQpL2UpPHUmJihvPXRoaXMueG1pbixhPW4rKHU9aSkqcil9cmV0dXJuW28sYV19X2VkZ2Vjb2RlKHQsbil7cmV0dXJuKHQ9PT10aGlzLnhtaW4/MTp0PT09dGhpcy54bWF4PzI6MCl8KG49PT10aGlzLnltaW4/NDpuPT09dGhpcy55bWF4Pzg6MCl9X3JlZ2lvbmNvZGUodCxuKXtyZXR1cm4odDx0aGlzLnhtaW4/MTp0PnRoaXMueG1heD8yOjApfChuPHRoaXMueW1pbj80Om4+dGhpcy55bWF4Pzg6MCl9fWNvbnN0IE11PTIqTWF0aC5QSSxBdT1NYXRoLnBvdztmdW5jdGlvbiBUdSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBTdSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBFdSh0LG4sZSl7cmV0dXJuW3QrTWF0aC5zaW4odCtuKSplLG4rTWF0aC5jb3ModC1uKSplXX1jbGFzcyBrdXtzdGF0aWMgZnJvbSh0LG49VHUsZT1TdSxyKXtyZXR1cm4gbmV3IGt1KCJsZW5ndGgiaW4gdD9mdW5jdGlvbih0LG4sZSxyKXtjb25zdCBpPXQubGVuZ3RoLG89bmV3IEZsb2F0NjRBcnJheSgyKmkpO2ZvcihsZXQgYT0wO2E8aTsrK2Epe2NvbnN0IGk9dFthXTtvWzIqYV09bi5jYWxsKHIsaSxhLHQpLG9bMiphKzFdPWUuY2FsbChyLGksYSx0KX1yZXR1cm4gb30odCxuLGUscik6RmxvYXQ2NEFycmF5LmZyb20oZnVuY3Rpb24qKHQsbixlLHIpe2xldCBpPTA7Zm9yKGNvbnN0IG8gb2YgdCl5aWVsZCBuLmNhbGwocixvLGksdCkseWllbGQgZS5jYWxsKHIsbyxpLHQpLCsraX0odCxuLGUscikpKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLl9kZWxhdW5hdG9yPW5ldyBsdSh0KSx0aGlzLmluZWRnZXM9bmV3IEludDMyQXJyYXkodC5sZW5ndGgvMiksdGhpcy5faHVsbEluZGV4PW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoLzIpLHRoaXMucG9pbnRzPXRoaXMuX2RlbGF1bmF0b3IuY29vcmRzLHRoaXMuX2luaXQoKX11cGRhdGUoKXtyZXR1cm4gdGhpcy5fZGVsYXVuYXRvci51cGRhdGUoKSx0aGlzLl9pbml0KCksdGhpc31faW5pdCgpe2NvbnN0IHQ9dGhpcy5fZGVsYXVuYXRvcixuPXRoaXMucG9pbnRzO2lmKHQuaHVsbCYmdC5odWxsLmxlbmd0aD4yJiZmdW5jdGlvbih0KXtjb25zdHt0cmlhbmdsZXM6bixjb29yZHM6ZX09dDtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrPTMpe2NvbnN0IHI9MipuW3RdLGk9MipuW3QrMV0sbz0yKm5bdCsyXTtpZigoZVtvXS1lW3JdKSooZVtpKzFdLWVbcisxXSktKGVbaV0tZVtyXSkqKGVbbysxXS1lW3IrMV0pPjFlLTEwKXJldHVybiExfXJldHVybiEwfSh0KSl7dGhpcy5jb2xsaW5lYXI9SW50MzJBcnJheS5mcm9tKHtsZW5ndGg6bi5sZW5ndGgvMn0sKCh0LG4pPT5uKSkuc29ydCgoKHQsZSk9Pm5bMip0XS1uWzIqZV18fG5bMip0KzFdLW5bMiplKzFdKSk7Y29uc3QgdD10aGlzLmNvbGxpbmVhclswXSxlPXRoaXMuY29sbGluZWFyW3RoaXMuY29sbGluZWFyLmxlbmd0aC0xXSxyPVtuWzIqdF0sblsyKnQrMV0sblsyKmVdLG5bMiplKzFdXSxpPTFlLTgqTWF0aC5oeXBvdChyWzNdLXJbMV0sclsyXS1yWzBdKTtmb3IobGV0IHQ9MCxlPW4ubGVuZ3RoLzI7dDxlOysrdCl7Y29uc3QgZT1FdShuWzIqdF0sblsyKnQrMV0saSk7blsyKnRdPWVbMF0sblsyKnQrMV09ZVsxXX10aGlzLl9kZWxhdW5hdG9yPW5ldyBsdShuKX1lbHNlIGRlbGV0ZSB0aGlzLmNvbGxpbmVhcjtjb25zdCBlPXRoaXMuaGFsZmVkZ2VzPXRoaXMuX2RlbGF1bmF0b3IuaGFsZmVkZ2VzLHI9dGhpcy5odWxsPXRoaXMuX2RlbGF1bmF0b3IuaHVsbCxpPXRoaXMudHJpYW5nbGVzPXRoaXMuX2RlbGF1bmF0b3IudHJpYW5nbGVzLG89dGhpcy5pbmVkZ2VzLmZpbGwoLTEpLGE9dGhpcy5faHVsbEluZGV4LmZpbGwoLTEpO2ZvcihsZXQgdD0wLG49ZS5sZW5ndGg7dDxuOysrdCl7Y29uc3Qgbj1pW3QlMz09Mj90LTI6dCsxXTstMSE9PWVbdF0mJi0xIT09b1tuXXx8KG9bbl09dCl9Zm9yKGxldCB0PTAsbj1yLmxlbmd0aDt0PG47Kyt0KWFbclt0XV09dDtyLmxlbmd0aDw9MiYmci5sZW5ndGg+MCYmKHRoaXMudHJpYW5nbGVzPW5ldyBJbnQzMkFycmF5KDMpLmZpbGwoLTEpLHRoaXMuaGFsZmVkZ2VzPW5ldyBJbnQzMkFycmF5KDMpLmZpbGwoLTEpLHRoaXMudHJpYW5nbGVzWzBdPXJbMF0sb1tyWzBdXT0xLDI9PT1yLmxlbmd0aCYmKG9bclsxXV09MCx0aGlzLnRyaWFuZ2xlc1sxXT1yWzFdLHRoaXMudHJpYW5nbGVzWzJdPXJbMV0pKX12b3Jvbm9pKHQpe3JldHVybiBuZXcgd3UodGhpcyx0KX0qbmVpZ2hib3JzKHQpe2NvbnN0e2luZWRnZXM6bixodWxsOmUsX2h1bGxJbmRleDpyLGhhbGZlZGdlczppLHRyaWFuZ2xlczpvLGNvbGxpbmVhcjphfT10aGlzO2lmKGEpe2NvbnN0IG49YS5pbmRleE9mKHQpO3JldHVybiBuPjAmJih5aWVsZCBhW24tMV0pLHZvaWQobjxhLmxlbmd0aC0xJiYoeWllbGQgYVtuKzFdKSl9Y29uc3QgdT1uW3RdO2lmKC0xPT09dSlyZXR1cm47bGV0IGM9dSxmPS0xO2Rve2lmKHlpZWxkIGY9b1tjXSxjPWMlMz09Mj9jLTI6YysxLG9bY10hPT10KXJldHVybjtpZihjPWlbY10sLTE9PT1jKXtjb25zdCBuPWVbKHJbdF0rMSklZS5sZW5ndGhdO3JldHVybiB2b2lkKG4hPT1mJiYoeWllbGQgbikpfX13aGlsZShjIT09dSl9ZmluZCh0LG4sZT0wKXtpZigodD0rdCkhPXR8fChuPStuKSE9bilyZXR1cm4tMTtjb25zdCByPWU7bGV0IGk7Zm9yKDsoaT10aGlzLl9zdGVwKGUsdCxuKSk+PTAmJmkhPT1lJiZpIT09cjspZT1pO3JldHVybiBpfV9zdGVwKHQsbixlKXtjb25zdHtpbmVkZ2VzOnIsaHVsbDppLF9odWxsSW5kZXg6byxoYWxmZWRnZXM6YSx0cmlhbmdsZXM6dSxwb2ludHM6Y309dGhpcztpZigtMT09PXJbdF18fCFjLmxlbmd0aClyZXR1cm4odCsxKSUoYy5sZW5ndGg+PjEpO2xldCBmPXQscz1BdShuLWNbMip0XSwyKStBdShlLWNbMip0KzFdLDIpO2NvbnN0IGw9clt0XTtsZXQgaD1sO2Rve2xldCByPXVbaF07Y29uc3QgbD1BdShuLWNbMipyXSwyKStBdShlLWNbMipyKzFdLDIpO2lmKGw8cyYmKHM9bCxmPXIpLGg9aCUzPT0yP2gtMjpoKzEsdVtoXSE9PXQpYnJlYWs7aWYoaD1hW2hdLC0xPT09aCl7aWYoaD1pWyhvW3RdKzEpJWkubGVuZ3RoXSxoIT09ciYmQXUobi1jWzIqaF0sMikrQXUoZS1jWzIqaCsxXSwyKTxzKXJldHVybiBoO2JyZWFrfX13aGlsZShoIT09bCk7cmV0dXJuIGZ9cmVuZGVyKHQpe2NvbnN0IG49bnVsbD09dD90PW5ldyBtdTp2b2lkIDAse3BvaW50czplLGhhbGZlZGdlczpyLHRyaWFuZ2xlczppfT10aGlzO2ZvcihsZXQgbj0wLG89ci5sZW5ndGg7bjxvOysrbil7Y29uc3Qgbz1yW25dO2lmKG88biljb250aW51ZTtjb25zdCBhPTIqaVtuXSx1PTIqaVtvXTt0Lm1vdmVUbyhlW2FdLGVbYSsxXSksdC5saW5lVG8oZVt1XSxlW3UrMV0pfXJldHVybiB0aGlzLnJlbmRlckh1bGwodCksbiYmbi52YWx1ZSgpfXJlbmRlclBvaW50cyh0LG4pe3ZvaWQgMCE9PW58fHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm1vdmVUb3x8KG49dCx0PW51bGwpLG49bnVsbD09bj8yOituO2NvbnN0IGU9bnVsbD09dD90PW5ldyBtdTp2b2lkIDAse3BvaW50czpyfT10aGlzO2ZvcihsZXQgZT0wLGk9ci5sZW5ndGg7ZTxpO2UrPTIpe2NvbnN0IGk9cltlXSxvPXJbZSsxXTt0Lm1vdmVUbyhpK24sbyksdC5hcmMoaSxvLG4sMCxNdSl9cmV0dXJuIGUmJmUudmFsdWUoKX1yZW5kZXJIdWxsKHQpe2NvbnN0IG49bnVsbD09dD90PW5ldyBtdTp2b2lkIDAse2h1bGw6ZSxwb2ludHM6cn09dGhpcyxpPTIqZVswXSxvPWUubGVuZ3RoO3QubW92ZVRvKHJbaV0scltpKzFdKTtmb3IobGV0IG49MTtuPG87KytuKXtjb25zdCBpPTIqZVtuXTt0LmxpbmVUbyhyW2ldLHJbaSsxXSl9cmV0dXJuIHQuY2xvc2VQYXRoKCksbiYmbi52YWx1ZSgpfWh1bGxQb2x5Z29uKCl7Y29uc3QgdD1uZXcgeHU7cmV0dXJuIHRoaXMucmVuZGVySHVsbCh0KSx0LnZhbHVlKCl9cmVuZGVyVHJpYW5nbGUodCxuKXtjb25zdCBlPW51bGw9PW4/bj1uZXcgbXU6dm9pZCAwLHtwb2ludHM6cix0cmlhbmdsZXM6aX09dGhpcyxvPTIqaVt0Kj0zXSxhPTIqaVt0KzFdLHU9MippW3QrMl07cmV0dXJuIG4ubW92ZVRvKHJbb10scltvKzFdKSxuLmxpbmVUbyhyW2FdLHJbYSsxXSksbi5saW5lVG8oclt1XSxyW3UrMV0pLG4uY2xvc2VQYXRoKCksZSYmZS52YWx1ZSgpfSp0cmlhbmdsZVBvbHlnb25zKCl7Y29uc3R7dHJpYW5nbGVzOnR9PXRoaXM7Zm9yKGxldCBuPTAsZT10Lmxlbmd0aC8zO248ZTsrK24peWllbGQgdGhpcy50cmlhbmdsZVBvbHlnb24obil9dHJpYW5nbGVQb2x5Z29uKHQpe2NvbnN0IG49bmV3IHh1O3JldHVybiB0aGlzLnJlbmRlclRyaWFuZ2xlKHQsbiksbi52YWx1ZSgpfX12YXIgTnU9e30sQ3U9e307ZnVuY3Rpb24gUHUodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK24rJ10gfHwgIiInfSkpLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIHp1KHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksZT1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIHIgaW4gdClyIGluIG58fGUucHVzaChuW3JdPXIpfSkpLGV9ZnVuY3Rpb24gRHUodCxuKXt2YXIgZT10KyIiLHI9ZS5sZW5ndGg7cmV0dXJuIHI8bj9uZXcgQXJyYXkobi1yKzEpLmpvaW4oMCkrZTplfWZ1bmN0aW9uIFJ1KHQpe3ZhciBuPXQuZ2V0VVRDSG91cnMoKSxlPXQuZ2V0VVRDTWludXRlcygpLHI9dC5nZXRVVENTZWNvbmRzKCksaT10LmdldFVUQ01pbGxpc2Vjb25kcygpO3JldHVybiBpc05hTih0KT8iSW52YWxpZCBEYXRlIjpmdW5jdGlvbih0KXtyZXR1cm4gdDwwPyItIitEdSgtdCw2KTp0Pjk5OTk/IisiK0R1KHQsNik6RHUodCw0KX0odC5nZXRVVENGdWxsWWVhcigpKSsiLSIrRHUodC5nZXRVVENNb250aCgpKzEsMikrIi0iK0R1KHQuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIitEdShuLDIpKyI6IitEdShlLDIpKyI6IitEdShyLDIpKyIuIitEdShpLDMpKyJaIjpyPyJUIitEdShuLDIpKyI6IitEdShlLDIpKyI6IitEdShyLDIpKyJaIjplfHxuPyJUIitEdShuLDIpKyI6IitEdShlLDIpKyJaIjoiIil9ZnVuY3Rpb24gRnUodCl7dmFyIG49bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksZT10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gcih0LG4pe3ZhciByLGk9W10sbz10Lmxlbmd0aCxhPTAsdT0wLGM9bzw9MCxmPSExO2Z1bmN0aW9uIHMoKXtpZihjKXJldHVybiBDdTtpZihmKXJldHVybiBmPSExLE51O3ZhciBuLHIsaT1hO2lmKDM0PT09dC5jaGFyQ29kZUF0KGkpKXtmb3IoO2ErKzxvJiYzNCE9PXQuY2hhckNvZGVBdChhKXx8MzQ9PT10LmNoYXJDb2RlQXQoKythKTspO3JldHVybihuPWEpPj1vP2M9ITA6MTA9PT0ocj10LmNoYXJDb2RlQXQoYSsrKSk/Zj0hMDoxMz09PXImJihmPSEwLDEwPT09dC5jaGFyQ29kZUF0KGEpJiYrK2EpLHQuc2xpY2UoaSsxLG4tMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YTxvOyl7aWYoMTA9PT0ocj10LmNoYXJDb2RlQXQobj1hKyspKSlmPSEwO2Vsc2UgaWYoMTM9PT1yKWY9ITAsMTA9PT10LmNoYXJDb2RlQXQoYSkmJisrYTtlbHNlIGlmKHIhPT1lKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGksbil9cmV0dXJuIGM9ITAsdC5zbGljZShpLG8pfWZvcigxMD09PXQuY2hhckNvZGVBdChvLTEpJiYtLW8sMTM9PT10LmNoYXJDb2RlQXQoby0xKSYmLS1vOyhyPXMoKSkhPT1DdTspe2Zvcih2YXIgbD1bXTtyIT09TnUmJnIhPT1DdTspbC5wdXNoKHIpLHI9cygpO24mJm51bGw9PShsPW4obCx1KyspKXx8aS5wdXNoKGwpfXJldHVybiBpfWZ1bmN0aW9uIGkobixlKXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEoblt0XSl9KSkuam9pbih0KX0pKX1mdW5jdGlvbiBvKG4pe3JldHVybiBuLm1hcChhKS5qb2luKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG51bGw9PXQ/IiI6dCBpbnN0YW5jZW9mIERhdGU/UnUodCk6bi50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC8iL2csJyIiJykrJyInOnR9cmV0dXJue3BhcnNlOmZ1bmN0aW9uKHQsbil7dmFyIGUsaSxvPXIodCwoZnVuY3Rpb24odCxyKXtpZihlKXJldHVybiBlKHQsci0xKTtpPXQsZT1uP2Z1bmN0aW9uKHQsbil7dmFyIGU9UHUodCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4oZShyKSxpLHQpfX0odCxuKTpQdSh0KX0pKTtyZXR1cm4gby5jb2x1bW5zPWl8fFtdLG99LHBhcnNlUm93czpyLGZvcm1hdDpmdW5jdGlvbihuLGUpe3JldHVybiBudWxsPT1lJiYoZT16dShuKSksW2UubWFwKGEpLmpvaW4odCldLmNvbmNhdChpKG4sZSkpLmpvaW4oIlxuIil9LGZvcm1hdEJvZHk6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09biYmKG49enUodCkpLGkodCxuKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChvKS5qb2luKCJcbiIpfSxmb3JtYXRSb3c6byxmb3JtYXRWYWx1ZTphfX12YXIgcXU9RnUoIiwiKSxJdT1xdS5wYXJzZSxPdT1xdS5wYXJzZVJvd3MsVXU9cXUuZm9ybWF0LEJ1PXF1LmZvcm1hdEJvZHksWXU9cXUuZm9ybWF0Um93cyxMdT1xdS5mb3JtYXRSb3csanU9cXUuZm9ybWF0VmFsdWUsJHU9RnUoIlx0IiksSHU9JHUucGFyc2UsWHU9JHUucGFyc2VSb3dzLEd1PSR1LmZvcm1hdCxWdT0kdS5mb3JtYXRCb2R5LFd1PSR1LmZvcm1hdFJvd3MsWnU9JHUuZm9ybWF0Um93LEt1PSR1LmZvcm1hdFZhbHVlO2NvbnN0IFF1PW5ldyBEYXRlKCIyMDE5LTAxLTAxVDAwOjAwIikuZ2V0SG91cnMoKXx8bmV3IERhdGUoIjIwMTktMDctMDFUMDA6MDAiKS5nZXRIb3VycygpO2Z1bmN0aW9uIEp1KHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5ibG9iKCl9ZnVuY3Rpb24gdGModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gbmModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX1mdW5jdGlvbiBlYyh0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4obmMpfWZ1bmN0aW9uIHJjKHQpe3JldHVybiBmdW5jdGlvbihuLGUscil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPXZvaWQgMCksZWMobixlKS50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gdChuLHIpfSkpfX12YXIgaWM9cmMoSXUpLG9jPXJjKEh1KTtmdW5jdGlvbiBhYyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7aWYoMjA0IT09dC5zdGF0dXMmJjIwNSE9PXQuc3RhdHVzKXJldHVybiB0Lmpzb24oKX1mdW5jdGlvbiB1Yyh0KXtyZXR1cm4obixlKT0+ZWMobixlKS50aGVuKChuPT4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKG4sdCkpKX12YXIgY2M9dWMoImFwcGxpY2F0aW9uL3htbCIpLGZjPXVjKCJ0ZXh0L2h0bWwiKSxzYz11YygiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIGxjKHQsbixlLHIpe2lmKGlzTmFOKG4pfHxpc05hTihlKSlyZXR1cm4gdDt2YXIgaSxvLGEsdSxjLGYscyxsLGgsZD10Ll9yb290LHA9e2RhdGE6cn0sZz10Ll94MCx5PXQuX3kwLHY9dC5feDEsXz10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKGY9bj49KG89KGcrdikvMikpP2c9bzp2PW8sKHM9ZT49KGE9KHkrXykvMikpP3k9YTpfPWEsaT1kLCEoZD1kW2w9czw8MXxmXSkpcmV0dXJuIGlbbF09cCx0O2lmKHU9K3QuX3guY2FsbChudWxsLGQuZGF0YSksYz0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxuPT09dSYmZT09PWMpcmV0dXJuIHAubmV4dD1kLGk/aVtsXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2xdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoZj1uPj0obz0oZyt2KS8yKSk/Zz1vOnY9bywocz1lPj0oYT0oeStfKS8yKSk/eT1hOl89YX13aGlsZSgobD1zPDwxfGYpPT0oaD0oYz49YSk8PDF8dT49bykpO3JldHVybiBpW2hdPWQsaVtsXT1wLHR9ZnVuY3Rpb24gaGModCxuLGUscixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPW4sdGhpcy55MD1lLHRoaXMueDE9cix0aGlzLnkxPWl9ZnVuY3Rpb24gZGModCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gcGModCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gZ2ModCxuLGUpe3ZhciByPW5ldyB5YyhudWxsPT1uP2RjOm4sbnVsbD09ZT9wYzplLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/cjpyLmFkZEFsbCh0KX1mdW5jdGlvbiB5Yyh0LG4sZSxyLGksbyl7dGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIHZjKHQpe2Zvcih2YXIgbj17ZGF0YTp0LmRhdGF9LGU9bjt0PXQubmV4dDspZT1lLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gbn12YXIgX2M9Z2MucHJvdG90eXBlPXljLnByb3RvdHlwZTtmdW5jdGlvbiBiYyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbWModCl7cmV0dXJuIDFlLTYqKHQoKS0uNSl9ZnVuY3Rpb24geGModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIHdjKHQpe3JldHVybiB0LnkrdC52eX1mdW5jdGlvbiBNYyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBBYyh0LG4pe3ZhciBlPXQuZ2V0KG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcigibm9kZSBub3QgZm91bmQ6ICIrbik7cmV0dXJuIGV9X2MuY29weT1mdW5jdGlvbigpe3ZhciB0LG4sZT1uZXcgeWModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIGU7aWYoIXIubGVuZ3RoKXJldHVybiBlLl9yb290PXZjKHIpLGU7Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6ZS5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKG49ci5zb3VyY2VbaV0pJiYobi5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6bix0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09dmMobikpO3JldHVybiBlfSxfYy5hZGQ9ZnVuY3Rpb24odCl7Y29uc3Qgbj0rdGhpcy5feC5jYWxsKG51bGwsdCksZT0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGxjKHRoaXMuY292ZXIobixlKSxuLGUsdCl9LF9jLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXQubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGM9MS8wLGY9MS8wLHM9LTEvMCxsPS0xLzA7Zm9yKGU9MDtlPG87KytlKWlzTmFOKHI9K3RoaXMuX3guY2FsbChudWxsLG49dFtlXSkpfHxpc05hTihpPSt0aGlzLl95LmNhbGwobnVsbCxuKSl8fChhW2VdPXIsdVtlXT1pLHI8YyYmKGM9cikscj5zJiYocz1yKSxpPGYmJihmPWkpLGk+bCYmKGw9aSkpO2lmKGM+c3x8Zj5sKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGMsZikuY292ZXIocyxsKSxlPTA7ZTxvOysrZSlsYyh0aGlzLGFbZV0sdVtlXSx0W2VdKTtyZXR1cm4gdGhpc30sX2MuY292ZXI9ZnVuY3Rpb24odCxuKXtpZihpc05hTih0PSt0KXx8aXNOYU4obj0rbikpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4oZSkpaT0oZT1NYXRoLmZsb29yKHQpKSsxLG89KHI9TWF0aC5mbG9vcihuKSkrMTtlbHNle2Zvcih2YXIgYSx1LGM9aS1lfHwxLGY9dGhpcy5fcm9vdDtlPnR8fHQ+PWl8fHI+bnx8bj49bzspc3dpdGNoKHU9KG48cik8PDF8dDxlLChhPW5ldyBBcnJheSg0KSlbdV09ZixmPWEsYyo9Mix1KXtjYXNlIDA6aT1lK2Msbz1yK2M7YnJlYWs7Y2FzZSAxOmU9aS1jLG89citjO2JyZWFrO2Nhc2UgMjppPWUrYyxyPW8tYzticmVhaztjYXNlIDM6ZT1pLWMscj1vLWN9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWYpfXJldHVybiB0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LF9jLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKWRve3QucHVzaChuLmRhdGEpfXdoaWxlKG49bi5uZXh0KX0pKSx0fSxfYy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LF9jLmZpbmQ9ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyxhLHUsYyxmLHM9dGhpcy5feDAsbD10aGlzLl95MCxoPXRoaXMuX3gxLGQ9dGhpcy5feTEscD1bXSxnPXRoaXMuX3Jvb3Q7Zm9yKGcmJnAucHVzaChuZXcgaGMoZyxzLGwsaCxkKSksbnVsbD09ZT9lPTEvMDoocz10LWUsbD1uLWUsaD10K2UsZD1uK2UsZSo9ZSk7Yz1wLnBvcCgpOylpZighKCEoZz1jLm5vZGUpfHwoaT1jLngwKT5ofHwobz1jLnkwKT5kfHwoYT1jLngxKTxzfHwodT1jLnkxKTxsKSlpZihnLmxlbmd0aCl7dmFyIHk9KGkrYSkvMix2PShvK3UpLzI7cC5wdXNoKG5ldyBoYyhnWzNdLHksdixhLHUpLG5ldyBoYyhnWzJdLGksdix5LHUpLG5ldyBoYyhnWzFdLHksbyxhLHYpLG5ldyBoYyhnWzBdLGksbyx5LHYpKSwoZj0obj49dik8PDF8dD49eSkmJihjPXBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTEtZl0scFtwLmxlbmd0aC0xLWZdPWMpfWVsc2V7dmFyIF89dC0rdGhpcy5feC5jYWxsKG51bGwsZy5kYXRhKSxiPW4tK3RoaXMuX3kuY2FsbChudWxsLGcuZGF0YSksbT1fKl8rYipiO2lmKG08ZSl7dmFyIHg9TWF0aC5zcXJ0KGU9bSk7cz10LXgsbD1uLXgsaD10K3gsZD1uK3gscj1nLmRhdGF9fXJldHVybiByfSxfYy5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIG4sZSxyLGksbyxhLHUsYyxmLHMsbCxoLGQ9dGhpcy5fcm9vdCxwPXRoaXMuX3gwLGc9dGhpcy5feTAseT10aGlzLl94MSx2PXRoaXMuX3kxO2lmKCFkKXJldHVybiB0aGlzO2lmKGQubGVuZ3RoKWZvcig7Oyl7aWYoKGY9bz49KHU9KHAreSkvMikpP3A9dTp5PXUsKHM9YT49KGM9KGcrdikvMikpP2c9Yzp2PWMsbj1kLCEoZD1kW2w9czw8MXxmXSkpcmV0dXJuIHRoaXM7aWYoIWQubGVuZ3RoKWJyZWFrOyhuW2wrMSYzXXx8bltsKzImM118fG5bbCszJjNdKSYmKGU9bixoPWwpfWZvcig7ZC5kYXRhIT09dDspaWYocj1kLCEoZD1kLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPWQubmV4dCkmJmRlbGV0ZSBkLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOm4/KGk/bltsXT1pOmRlbGV0ZSBuW2xdLChkPW5bMF18fG5bMV18fG5bMl18fG5bM10pJiZkPT09KG5bM118fG5bMl18fG5bMV18fG5bMF0pJiYhZC5sZW5ndGgmJihlP2VbaF09ZDp0aGlzLl9yb290PWQpLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LF9jLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pdGhpcy5yZW1vdmUodFtuXSk7cmV0dXJuIHRoaXN9LF9jLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sX2Muc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkb3srK3R9d2hpbGUobj1uLm5leHQpfSkpLHR9LF9jLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYSx1PVtdLGM9dGhpcy5fcm9vdDtmb3IoYyYmdS5wdXNoKG5ldyBoYyhjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7bj11LnBvcCgpOylpZighdChjPW4ubm9kZSxyPW4ueDAsaT1uLnkwLG89bi54MSxhPW4ueTEpJiZjLmxlbmd0aCl7dmFyIGY9KHIrbykvMixzPShpK2EpLzI7KGU9Y1szXSkmJnUucHVzaChuZXcgaGMoZSxmLHMsbyxhKSksKGU9Y1syXSkmJnUucHVzaChuZXcgaGMoZSxyLHMsZixhKSksKGU9Y1sxXSkmJnUucHVzaChuZXcgaGMoZSxmLGksbyxzKSksKGU9Y1swXSkmJnUucHVzaChuZXcgaGMoZSxyLGksZixzKSl9cmV0dXJuIHRoaXN9LF9jLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIG4sZT1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZlLnB1c2gobmV3IGhjKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPWUucG9wKCk7KXt2YXIgaT1uLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBvLGE9bi54MCx1PW4ueTAsYz1uLngxLGY9bi55MSxzPShhK2MpLzIsbD0odStmKS8yOyhvPWlbMF0pJiZlLnB1c2gobmV3IGhjKG8sYSx1LHMsbCkpLChvPWlbMV0pJiZlLnB1c2gobmV3IGhjKG8scyx1LGMsbCkpLChvPWlbMl0pJiZlLnB1c2gobmV3IGhjKG8sYSxsLHMsZikpLChvPWlbM10pJiZlLnB1c2gobmV3IGhjKG8scyxsLGMsZikpfXIucHVzaChuKX1mb3IoO249ci5wb3AoKTspdChuLm5vZGUsbi54MCxuLnkwLG4ueDEsbi55MSk7cmV0dXJuIHRoaXN9LF9jLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxfYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX07Y29uc3QgVGM9NDI5NDk2NzI5NjtmdW5jdGlvbiBTYyh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIEVjKHQpe3JldHVybiB0Lnl9dmFyIGtjPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiBOYyh0LG4pe2lmKChlPSh0PW4/dC50b0V4cG9uZW50aWFsKG4tMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxyPXQuc2xpY2UoMCxlKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShlKzEpXX1mdW5jdGlvbiBDYyh0KXtyZXR1cm4odD1OYyhNYXRoLmFicyh0KSkpP3RbMV06TmFOfXZhciBQYyx6Yz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBEYyh0KXtpZighKG49emMuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgbjtyZXR1cm4gbmV3IFJjKHtmaWxsOm5bMV0sYWxpZ246blsyXSxzaWduOm5bM10sc3ltYm9sOm5bNF0semVybzpuWzVdLHdpZHRoOm5bNl0sY29tbWE6bls3XSxwcmVjaXNpb246bls4XSYmbls4XS5zbGljZSgxKSx0cmltOm5bOV0sdHlwZTpuWzEwXX0pfWZ1bmN0aW9uIFJjKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIEZjKHQsbil7dmFyIGU9TmModCxuKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgcj1lWzBdLGk9ZVsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX1EYy5wcm90b3R5cGU9UmMucHJvdG90eXBlLFJjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBxYz17IiUiOih0LG4pPT4oMTAwKnQpLnRvRml4ZWQobiksYjp0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpLGM6dD0+dCsiIixkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZToodCxuKT0+dC50b0V4cG9uZW50aWFsKG4pLGY6KHQsbik9PnQudG9GaXhlZChuKSxnOih0LG4pPT50LnRvUHJlY2lzaW9uKG4pLG86dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KSxwOih0LG4pPT5GYygxMDAqdCxuKSxyOkZjLHM6ZnVuY3Rpb24odCxuKXt2YXIgZT1OYyh0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdLG89aS0oUGM9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLGE9ci5sZW5ndGg7cmV0dXJuIG89PT1hP3I6bz5hP3IrbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP3Iuc2xpY2UoMCxvKSsiLiIrci5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStOYyh0LE1hdGgubWF4KDAsbitvLTEpKVswXX0sWDp0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9O2Z1bmN0aW9uIEljKHQpe3JldHVybiB0fXZhciBPYyxVYz1BcnJheS5wcm90b3R5cGUubWFwLEJjPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBZYyh0KXt2YXIgbixlLHI9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/SWM6KG49VWMuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksZT10LnRob3VzYW5kcysiIixmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxvPVtdLGE9MCx1PW5bMF0sYz0wO2k+MCYmdT4wJiYoYyt1KzE+ciYmKHU9TWF0aC5tYXgoMSxyLWMpKSxvLnB1c2godC5zdWJzdHJpbmcoaS09dSxpK3UpKSwhKChjKz11KzEpPnIpKTspdT1uW2E9KGErMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGUpfSksaT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMF0rIiIsbz12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMV0rIiIsYT12b2lkIDA9PT10LmRlY2ltYWw/Ii4iOnQuZGVjaW1hbCsiIix1PXZvaWQgMD09PXQubnVtZXJhbHM/SWM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKG4pe3JldHVybiB0WytuXX0pKX19KFVjLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxjPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGY9dm9pZCAwPT09dC5taW51cz8i4oiSIjp0Lm1pbnVzKyIiLHM9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gbCh0KXt2YXIgbj0odD1EYyh0KSkuZmlsbCxlPXQuYWxpZ24sbD10LnNpZ24saD10LnN5bWJvbCxkPXQuemVybyxwPXQud2lkdGgsZz10LmNvbW1hLHk9dC5wcmVjaXNpb24sdj10LnRyaW0sXz10LnR5cGU7Im4iPT09Xz8oZz0hMCxfPSJnIik6cWNbX118fCh2b2lkIDA9PT15JiYoeT0xMiksdj0hMCxfPSJnIiksKGR8fCIwIj09PW4mJiI9Ij09PWUpJiYoZD0hMCxuPSIwIixlPSI9Iik7dmFyIGI9IiQiPT09aD9pOiIjIj09PWgmJi9bYm94WF0vLnRlc3QoXyk/IjAiK18udG9Mb3dlckNhc2UoKToiIixtPSIkIj09PWg/bzovWyVwXS8udGVzdChfKT9jOiIiLHg9cWNbX10sdz0vW2RlZmdwcnMlXS8udGVzdChfKTtmdW5jdGlvbiBNKHQpe3ZhciBpLG8sYyxoPWIsTT1tO2lmKCJjIj09PV8pTT14KHQpK00sdD0iIjtlbHNle3ZhciBBPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP3M6eChNYXRoLmFicyh0KSx5KSx2JiYodD1mdW5jdGlvbih0KXt0OmZvcih2YXIgbixlPXQubGVuZ3RoLHI9MSxpPS0xO3I8ZTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6aT1uPXI7YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9ciksbj1yO2JyZWFrO2RlZmF1bHQ6aWYoISt0W3JdKWJyZWFrIHQ7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKG4rMSk6dH0odCkpLEEmJjA9PSt0JiYiKyIhPT1sJiYoQT0hMSksaD0oQT8iKCI9PT1sP2w6ZjoiLSI9PT1sfHwiKCI9PT1sPyIiOmwpK2gsTT0oInMiPT09Xz9CY1s4K1BjLzNdOiIiKStNKyhBJiYiKCI9PT1sPyIpIjoiIiksdylmb3IoaT0tMSxvPXQubGVuZ3RoOysraTxvOylpZig0OD4oYz10LmNoYXJDb2RlQXQoaSkpfHxjPjU3KXtNPSg0Nj09PWM/YSt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkrTSx0PXQuc2xpY2UoMCxpKTticmVha319ZyYmIWQmJih0PXIodCwxLzApKTt2YXIgVD1oLmxlbmd0aCt0Lmxlbmd0aCtNLmxlbmd0aCxTPVQ8cD9uZXcgQXJyYXkocC1UKzEpLmpvaW4obik6IiI7c3dpdGNoKGcmJmQmJih0PXIoUyt0LFMubGVuZ3RoP3AtTS5sZW5ndGg6MS8wKSxTPSIiKSxlKXtjYXNlIjwiOnQ9aCt0K00rUzticmVhaztjYXNlIj0iOnQ9aCtTK3QrTTticmVhaztjYXNlIl4iOnQ9Uy5zbGljZSgwLFQ9Uy5sZW5ndGg+PjEpK2grdCtNK1Muc2xpY2UoVCk7YnJlYWs7ZGVmYXVsdDp0PVMraCt0K019cmV0dXJuIHUodCl9cmV0dXJuIHk9dm9pZCAwPT09eT82Oi9bZ3Byc10vLnRlc3QoXyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSx5KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCx5KSksTS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxNfXJldHVybntmb3JtYXQ6bCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxuKXt2YXIgZT1sKCgodD1EYyh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoQ2MobikvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPUJjWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUoaSp0KStvfX19fWZ1bmN0aW9uIExjKG4pe3JldHVybiBPYz1ZYyhuKSx0LmZvcm1hdD1PYy5mb3JtYXQsdC5mb3JtYXRQcmVmaXg9T2MuZm9ybWF0UHJlZml4LE9jfWZ1bmN0aW9uIGpjKHQpe3JldHVybiBNYXRoLm1heCgwLC1DYyhNYXRoLmFicyh0KSkpfWZ1bmN0aW9uICRjKHQsbil7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoQ2MobikvMykpKS1DYyhNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIEhjKHQsbil7cmV0dXJuIHQ9TWF0aC5hYnModCksbj1NYXRoLmFicyhuKS10LE1hdGgubWF4KDAsQ2MobiktQ2ModCkpKzF9dC5mb3JtYXQ9dm9pZCAwLHQuZm9ybWF0UHJlZml4PXZvaWQgMCxMYyh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTt2YXIgWGM9MWUtNixHYz0xZS0xMixWYz1NYXRoLlBJLFdjPVZjLzIsWmM9VmMvNCxLYz0yKlZjLFFjPTE4MC9WYyxKYz1WYy8xODAsdGY9TWF0aC5hYnMsbmY9TWF0aC5hdGFuLGVmPU1hdGguYXRhbjIscmY9TWF0aC5jb3Msb2Y9TWF0aC5jZWlsLGFmPU1hdGguZXhwLHVmPU1hdGguaHlwb3QsY2Y9TWF0aC5sb2csZmY9TWF0aC5wb3csc2Y9TWF0aC5zaW4sbGY9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LGhmPU1hdGguc3FydCxkZj1NYXRoLnRhbjtmdW5jdGlvbiBwZih0KXtyZXR1cm4gdD4xPzA6dDwtMT9WYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gZ2YodCl7cmV0dXJuIHQ+MT9XYzp0PC0xPy1XYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24geWYodCl7cmV0dXJuKHQ9c2YodC8yKSkqdH1mdW5jdGlvbiB2Zigpe31mdW5jdGlvbiBfZih0LG4pe3QmJm1mLmhhc093blByb3BlcnR5KHQudHlwZSkmJm1mW3QudHlwZV0odCxuKX12YXIgYmY9e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXtfZih0Lmdlb21ldHJ5LG4pfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmZlYXR1cmVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspX2YoZVtyXS5nZW9tZXRyeSxuKX19LG1mPXtTcGhlcmU6ZnVuY3Rpb24odCxuKXtuLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LG4pe3Q9dC5jb29yZGluYXRlcyxuLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspdD1lW3JdLG4ucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7eGYodC5jb29yZGluYXRlcyxuLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXhmKGVbcl0sbiwwKX0sUG9seWdvbjpmdW5jdGlvbih0LG4pe3dmKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspd2YoZVtyXSxuKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KV9mKGVbcl0sbil9fTtmdW5jdGlvbiB4Zih0LG4sZSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoLWU7Zm9yKG4ubGluZVN0YXJ0KCk7KytpPG87KXI9dFtpXSxuLnBvaW50KHJbMF0sclsxXSxyWzJdKTtuLmxpbmVFbmQoKX1mdW5jdGlvbiB3Zih0LG4pe3ZhciBlPS0xLHI9dC5sZW5ndGg7Zm9yKG4ucG9seWdvblN0YXJ0KCk7KytlPHI7KXhmKHRbZV0sbiwxKTtuLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBNZih0LG4pe3QmJmJmLmhhc093blByb3BlcnR5KHQudHlwZSk/YmZbdC50eXBlXSh0LG4pOl9mKHQsbil9dmFyIEFmLFRmLFNmLEVmLGtmLE5mLENmLFBmLHpmLERmLFJmLEZmLHFmLElmLE9mLFVmLEJmPW5ldyBULFlmPW5ldyBULExmPXtwb2ludDp2ZixsaW5lU3RhcnQ6dmYsbGluZUVuZDp2Zixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtCZj1uZXcgVCxMZi5saW5lU3RhcnQ9amYsTGYubGluZUVuZD0kZn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PStCZjtZZi5hZGQodDwwP0tjK3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9dmZ9LHNwaGVyZTpmdW5jdGlvbigpe1lmLmFkZChLYyl9fTtmdW5jdGlvbiBqZigpe0xmLnBvaW50PUhmfWZ1bmN0aW9uICRmKCl7WGYoQWYsVGYpfWZ1bmN0aW9uIEhmKHQsbil7TGYucG9pbnQ9WGYsQWY9dCxUZj1uLFNmPXQqPUpjLEVmPXJmKG49KG4qPUpjKS8yK1pjKSxrZj1zZihuKX1mdW5jdGlvbiBYZih0LG4pe3ZhciBlPSh0Kj1KYyktU2Yscj1lPj0wPzE6LTEsaT1yKmUsbz1yZihuPShuKj1KYykvMitaYyksYT1zZihuKSx1PWtmKmEsYz1FZipvK3UqcmYoaSksZj11KnIqc2YoaSk7QmYuYWRkKGVmKGYsYykpLFNmPXQsRWY9byxrZj1hfWZ1bmN0aW9uIEdmKHQpe3JldHVybltlZih0WzFdLHRbMF0pLGdmKHRbMl0pXX1mdW5jdGlvbiBWZih0KXt2YXIgbj10WzBdLGU9dFsxXSxyPXJmKGUpO3JldHVybltyKnJmKG4pLHIqc2Yobiksc2YoZSldfWZ1bmN0aW9uIFdmKHQsbil7cmV0dXJuIHRbMF0qblswXSt0WzFdKm5bMV0rdFsyXSpuWzJdfWZ1bmN0aW9uIFpmKHQsbil7cmV0dXJuW3RbMV0qblsyXS10WzJdKm5bMV0sdFsyXSpuWzBdLXRbMF0qblsyXSx0WzBdKm5bMV0tdFsxXSpuWzBdXX1mdW5jdGlvbiBLZih0LG4pe3RbMF0rPW5bMF0sdFsxXSs9blsxXSx0WzJdKz1uWzJdfWZ1bmN0aW9uIFFmKHQsbil7cmV0dXJuW3RbMF0qbix0WzFdKm4sdFsyXSpuXX1mdW5jdGlvbiBKZih0KXt2YXIgbj1oZih0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89bix0WzFdLz1uLHRbMl0vPW59dmFyIHRzLG5zLGVzLHJzLGlzLG9zLGFzLHVzLGNzLGZzLHNzLGxzLGhzLGRzLHBzLGdzLHlzPXtwb2ludDp2cyxsaW5lU3RhcnQ6YnMsbGluZUVuZDptcyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5cy5wb2ludD14cyx5cy5saW5lU3RhcnQ9d3MseXMubGluZUVuZD1NcyxJZj1uZXcgVCxMZi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0xmLnBvbHlnb25FbmQoKSx5cy5wb2ludD12cyx5cy5saW5lU3RhcnQ9YnMseXMubGluZUVuZD1tcyxCZjwwPyhOZj0tKFBmPTE4MCksQ2Y9LSh6Zj05MCkpOklmPlhjP3pmPTkwOklmPC0xZS02JiYoQ2Y9LTkwKSxVZlswXT1OZixVZlsxXT1QZn0sc3BoZXJlOmZ1bmN0aW9uKCl7TmY9LShQZj0xODApLENmPS0oemY9OTApfX07ZnVuY3Rpb24gdnModCxuKXtPZi5wdXNoKFVmPVtOZj10LFBmPXRdKSxuPENmJiYoQ2Y9biksbj56ZiYmKHpmPW4pfWZ1bmN0aW9uIF9zKHQsbil7dmFyIGU9VmYoW3QqSmMsbipKY10pO2lmKHFmKXt2YXIgcj1aZihxZixlKSxpPVpmKFtyWzFdLC1yWzBdLDBdLHIpO0pmKGkpLGk9R2YoaSk7dmFyIG8sYT10LURmLHU9YT4wPzE6LTEsYz1pWzBdKlFjKnUsZj10ZihhKT4xODA7Zl4odSpEZjxjJiZjPHUqdCk/KG89aVsxXSpRYyk+emYmJih6Zj1vKTpmXih1KkRmPChjPShjKzM2MCklMzYwLTE4MCkmJmM8dSp0KT8obz0taVsxXSpRYyk8Q2YmJihDZj1vKToobjxDZiYmKENmPW4pLG4+emYmJih6Zj1uKSksZj90PERmP0FzKE5mLHQpPkFzKE5mLFBmKSYmKFBmPXQpOkFzKHQsUGYpPkFzKE5mLFBmKSYmKE5mPXQpOlBmPj1OZj8odDxOZiYmKE5mPXQpLHQ+UGYmJihQZj10KSk6dD5EZj9BcyhOZix0KT5BcyhOZixQZikmJihQZj10KTpBcyh0LFBmKT5BcyhOZixQZikmJihOZj10KX1lbHNlIE9mLnB1c2goVWY9W05mPXQsUGY9dF0pO248Q2YmJihDZj1uKSxuPnpmJiYoemY9bikscWY9ZSxEZj10fWZ1bmN0aW9uIGJzKCl7eXMucG9pbnQ9X3N9ZnVuY3Rpb24gbXMoKXtVZlswXT1OZixVZlsxXT1QZix5cy5wb2ludD12cyxxZj1udWxsfWZ1bmN0aW9uIHhzKHQsbil7aWYocWYpe3ZhciBlPXQtRGY7SWYuYWRkKHRmKGUpPjE4MD9lKyhlPjA/MzYwOi0zNjApOmUpfWVsc2UgUmY9dCxGZj1uO0xmLnBvaW50KHQsbiksX3ModCxuKX1mdW5jdGlvbiB3cygpe0xmLmxpbmVTdGFydCgpfWZ1bmN0aW9uIE1zKCl7eHMoUmYsRmYpLExmLmxpbmVFbmQoKSx0ZihJZik+WGMmJihOZj0tKFBmPTE4MCkpLFVmWzBdPU5mLFVmWzFdPVBmLHFmPW51bGx9ZnVuY3Rpb24gQXModCxuKXtyZXR1cm4obi09dCk8MD9uKzM2MDpufWZ1bmN0aW9uIFRzKHQsbil7cmV0dXJuIHRbMF0tblswXX1mdW5jdGlvbiBTcyh0LG4pe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48PXRbMV06bjx0WzBdfHx0WzFdPG59dmFyIEVzPXtzcGhlcmU6dmYscG9pbnQ6a3MsbGluZVN0YXJ0OkNzLGxpbmVFbmQ6RHMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7RXMubGluZVN0YXJ0PVJzLEVzLmxpbmVFbmQ9RnN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtFcy5saW5lU3RhcnQ9Q3MsRXMubGluZUVuZD1Ec319O2Z1bmN0aW9uIGtzKHQsbil7dCo9SmM7dmFyIGU9cmYobio9SmMpO05zKGUqcmYodCksZSpzZih0KSxzZihuKSl9ZnVuY3Rpb24gTnModCxuLGUpeysrdHMsZXMrPSh0LWVzKS90cyxycys9KG4tcnMpL3RzLGlzKz0oZS1pcykvdHN9ZnVuY3Rpb24gQ3MoKXtFcy5wb2ludD1Qc31mdW5jdGlvbiBQcyh0LG4pe3QqPUpjO3ZhciBlPXJmKG4qPUpjKTtkcz1lKnJmKHQpLHBzPWUqc2YodCksZ3M9c2YobiksRXMucG9pbnQ9enMsTnMoZHMscHMsZ3MpfWZ1bmN0aW9uIHpzKHQsbil7dCo9SmM7dmFyIGU9cmYobio9SmMpLHI9ZSpyZih0KSxpPWUqc2YodCksbz1zZihuKSxhPWVmKGhmKChhPXBzKm8tZ3MqaSkqYSsoYT1ncypyLWRzKm8pKmErKGE9ZHMqaS1wcypyKSphKSxkcypyK3BzKmkrZ3Mqbyk7bnMrPWEsb3MrPWEqKGRzKyhkcz1yKSksYXMrPWEqKHBzKyhwcz1pKSksdXMrPWEqKGdzKyhncz1vKSksTnMoZHMscHMsZ3MpfWZ1bmN0aW9uIERzKCl7RXMucG9pbnQ9a3N9ZnVuY3Rpb24gUnMoKXtFcy5wb2ludD1xc31mdW5jdGlvbiBGcygpe0lzKGxzLGhzKSxFcy5wb2ludD1rc31mdW5jdGlvbiBxcyh0LG4pe2xzPXQsaHM9bix0Kj1KYyxuKj1KYyxFcy5wb2ludD1Jczt2YXIgZT1yZihuKTtkcz1lKnJmKHQpLHBzPWUqc2YodCksZ3M9c2YobiksTnMoZHMscHMsZ3MpfWZ1bmN0aW9uIElzKHQsbil7dCo9SmM7dmFyIGU9cmYobio9SmMpLHI9ZSpyZih0KSxpPWUqc2YodCksbz1zZihuKSxhPXBzKm8tZ3MqaSx1PWdzKnItZHMqbyxjPWRzKmktcHMqcixmPXVmKGEsdSxjKSxzPWdmKGYpLGw9ZiYmLXMvZjtjcy5hZGQobCphKSxmcy5hZGQobCp1KSxzcy5hZGQobCpjKSxucys9cyxvcys9cyooZHMrKGRzPXIpKSxhcys9cyoocHMrKHBzPWkpKSx1cys9cyooZ3MrKGdzPW8pKSxOcyhkcyxwcyxncyl9ZnVuY3Rpb24gT3ModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFVzKHQsbil7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPXQoZSxyKSxuKGVbMF0sZVsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZuLmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7cmV0dXJuKGU9bi5pbnZlcnQoZSxyKSkmJnQuaW52ZXJ0KGVbMF0sZVsxXSl9KSxlfWZ1bmN0aW9uIEJzKHQsbil7cmV0dXJuW3RmKHQpPlZjP3QrTWF0aC5yb3VuZCgtdC9LYykqS2M6dCxuXX1mdW5jdGlvbiBZcyh0LG4sZSl7cmV0dXJuKHQlPUtjKT9ufHxlP1VzKGpzKHQpLCRzKG4sZSkpOmpzKHQpOm58fGU/JHMobixlKTpCc31mdW5jdGlvbiBMcyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm5bKG4rPXQpPlZjP24tS2M6bjwtVmM/bitLYzpuLGVdfX1mdW5jdGlvbiBqcyh0KXt2YXIgbj1Mcyh0KTtyZXR1cm4gbi5pbnZlcnQ9THMoLXQpLG59ZnVuY3Rpb24gJHModCxuKXt2YXIgZT1yZih0KSxyPXNmKHQpLGk9cmYobiksbz1zZihuKTtmdW5jdGlvbiBhKHQsbil7dmFyIGE9cmYobiksdT1yZih0KSphLGM9c2YodCkqYSxmPXNmKG4pLHM9ZiplK3UqcjtyZXR1cm5bZWYoYyppLXMqbyx1KmUtZipyKSxnZihzKmkrYypvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGE9cmYobiksdT1yZih0KSphLGM9c2YodCkqYSxmPXNmKG4pLHM9ZippLWMqbztyZXR1cm5bZWYoYyppK2Yqbyx1KmUrcypyKSxnZihzKmUtdSpyKV19LGF9ZnVuY3Rpb24gSHModCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4obj10KG5bMF0qSmMsblsxXSpKYykpWzBdKj1RYyxuWzFdKj1RYyxufXJldHVybiB0PVlzKHRbMF0qSmMsdFsxXSpKYyx0Lmxlbmd0aD4yP3RbMl0qSmM6MCksbi5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuKG49dC5pbnZlcnQoblswXSpKYyxuWzFdKkpjKSlbMF0qPVFjLG5bMV0qPVFjLG59LG59ZnVuY3Rpb24gWHModCxuLGUscixpLG8pe2lmKGUpe3ZhciBhPXJmKG4pLHU9c2YobiksYz1yKmU7bnVsbD09aT8oaT1uK3IqS2Msbz1uLWMvMik6KGk9R3MoYSxpKSxvPUdzKGEsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqS2MpKTtmb3IodmFyIGYscz1pO3I+MD9zPm86czxvO3MtPWMpZj1HZihbYSwtdSpyZihzKSwtdSpzZihzKV0pLHQucG9pbnQoZlswXSxmWzFdKX19ZnVuY3Rpb24gR3ModCxuKXsobj1WZihuKSlbMF0tPXQsSmYobik7dmFyIGU9cGYoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKStLYy1YYyklS2N9ZnVuY3Rpb24gVnMoKXt2YXIgdCxuPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihuLGUscil7dC5wdXNoKFtuLGUscl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLnB1c2godD1bXSl9LGxpbmVFbmQ6dmYscmVqb2luOmZ1bmN0aW9uKCl7bi5sZW5ndGg+MSYmbi5wdXNoKG4ucG9wKCkuY29uY2F0KG4uc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1uO3JldHVybiBuPVtdLHQ9bnVsbCxlfX19ZnVuY3Rpb24gV3ModCxuKXtyZXR1cm4gdGYodFswXS1uWzBdKTxYYyYmdGYodFsxXS1uWzFdKTxYY31mdW5jdGlvbiBacyh0LG4sZSxyKXt0aGlzLng9dCx0aGlzLno9bix0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIEtzKHQsbixlLHIsaSl7dmFyIG8sYSx1PVtdLGM9W107aWYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKChuPXQubGVuZ3RoLTEpPD0wKSl7dmFyIG4sZSxyPXRbMF0sYT10W25dO2lmKFdzKHIsYSkpe2lmKCFyWzJdJiYhYVsyXSl7Zm9yKGkubGluZVN0YXJ0KCksbz0wO288bjsrK28paS5wb2ludCgocj10W29dKVswXSxyWzFdKTtyZXR1cm4gdm9pZCBpLmxpbmVFbmQoKX1hWzBdKz0yZS02fXUucHVzaChlPW5ldyBacyhyLHQsbnVsbCwhMCkpLGMucHVzaChlLm89bmV3IFpzKHIsbnVsbCxlLCExKSksdS5wdXNoKGU9bmV3IFpzKGEsdCxudWxsLCExKSksYy5wdXNoKGUubz1uZXcgWnMoYSxudWxsLGUsITApKX19KSksdS5sZW5ndGgpe2ZvcihjLnNvcnQobiksUXModSksUXMoYyksbz0wLGE9Yy5sZW5ndGg7bzxhOysrbyljW29dLmU9ZT0hZTtmb3IodmFyIGYscyxsPXVbMF07Oyl7Zm9yKHZhciBoPWwsZD0hMDtoLnY7KWlmKChoPWgubik9PT1sKXJldHVybjtmPWgueixpLmxpbmVTdGFydCgpO2Rve2lmKGgudj1oLm8udj0hMCxoLmUpe2lmKGQpZm9yKG89MCxhPWYubGVuZ3RoO288YTsrK28paS5wb2ludCgocz1mW29dKVswXSxzWzFdKTtlbHNlIHIoaC54LGgubi54LDEsaSk7aD1oLm59ZWxzZXtpZihkKWZvcihmPWgucC56LG89Zi5sZW5ndGgtMTtvPj0wOy0tbylpLnBvaW50KChzPWZbb10pWzBdLHNbMV0pO2Vsc2UgcihoLngsaC5wLngsLTEsaSk7aD1oLnB9Zj0oaD1oLm8pLnosZD0hZH13aGlsZSghaC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIFFzKHQpe2lmKG49dC5sZW5ndGgpe2Zvcih2YXIgbixlLHI9MCxpPXRbMF07KytyPG47KWkubj1lPXRbcl0sZS5wPWksaT1lO2kubj1lPXRbMF0sZS5wPWl9fWZ1bmN0aW9uIEpzKHQpe3JldHVybiB0Zih0WzBdKTw9VmM/dFswXTpsZih0WzBdKSooKHRmKHRbMF0pK1ZjKSVLYy1WYyl9ZnVuY3Rpb24gdGwodCxuKXt2YXIgZT1KcyhuKSxyPW5bMV0saT1zZihyKSxvPVtzZihlKSwtcmYoZSksMF0sYT0wLHU9MCxjPW5ldyBUOzE9PT1pP3I9V2MrWGM6LTE9PT1pJiYocj0tV2MtWGMpO2Zvcih2YXIgZj0wLHM9dC5sZW5ndGg7ZjxzOysrZilpZihoPShsPXRbZl0pLmxlbmd0aClmb3IodmFyIGwsaCxkPWxbaC0xXSxwPUpzKGQpLGc9ZFsxXS8yK1pjLHk9c2YoZyksdj1yZihnKSxfPTA7XzxoOysrXyxwPW0seT13LHY9TSxkPWIpe3ZhciBiPWxbX10sbT1KcyhiKSx4PWJbMV0vMitaYyx3PXNmKHgpLE09cmYoeCksQT1tLXAsUz1BPj0wPzE6LTEsRT1TKkEsaz1FPlZjLE49eSp3O2lmKGMuYWRkKGVmKE4qUypzZihFKSx2Kk0rTipyZihFKSkpLGErPWs/QStTKktjOkEsa15wPj1lXm0+PWUpe3ZhciBDPVpmKFZmKGQpLFZmKGIpKTtKZihDKTt2YXIgUD1aZihvLEMpO0pmKFApO3ZhciB6PShrXkE+PTA/LTE6MSkqZ2YoUFsyXSk7KHI+enx8cj09PXomJihDWzBdfHxDWzFdKSkmJih1Kz1rXkE+PTA/MTotMSl9fXJldHVybihhPC0xZS02fHxhPFhjJiZjPC0xZS0xMileMSZ1fWZ1bmN0aW9uIG5sKHQsbixlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbyxhLHUsYz1uKGkpLGY9VnMoKSxzPW4oZiksbD0hMSxoPXtwb2ludDpkLGxpbmVTdGFydDpnLGxpbmVFbmQ6eSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnBvaW50PXYsaC5saW5lU3RhcnQ9XyxoLmxpbmVFbmQ9YixhPVtdLG89W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoLnBvaW50PWQsaC5saW5lU3RhcnQ9ZyxoLmxpbmVFbmQ9eSxhPWZ0KGEpO3ZhciB0PXRsKG8scik7YS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLEtzKGEscmwsdCxlLGkpKTp0JiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksYT1vPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gZChuLGUpe3QobixlKSYmaS5wb2ludChuLGUpfWZ1bmN0aW9uIHAodCxuKXtjLnBvaW50KHQsbil9ZnVuY3Rpb24gZygpe2gucG9pbnQ9cCxjLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHkoKXtoLnBvaW50PWQsYy5saW5lRW5kKCl9ZnVuY3Rpb24gdih0LG4pe3UucHVzaChbdCxuXSkscy5wb2ludCh0LG4pfWZ1bmN0aW9uIF8oKXtzLmxpbmVTdGFydCgpLHU9W119ZnVuY3Rpb24gYigpe3YodVswXVswXSx1WzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgdCxuLGUscixjPXMuY2xlYW4oKSxoPWYucmVzdWx0KCksZD1oLmxlbmd0aDtpZih1LnBvcCgpLG8ucHVzaCh1KSx1PW51bGwsZClpZigxJmMpe2lmKChuPShlPWhbMF0pLmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSx0PTA7dDxuOysrdClpLnBvaW50KChyPWVbdF0pWzBdLHJbMV0pO2kubGluZUVuZCgpfX1lbHNlIGQ+MSYmMiZjJiZoLnB1c2goaC5wb3AoKS5jb25jYXQoaC5zaGlmdCgpKSksYS5wdXNoKGguZmlsdGVyKGVsKSl9cmV0dXJuIGh9fWZ1bmN0aW9uIGVsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIHJsKHQsbil7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLVdjLVhjOldjLXRbMV0pLSgobj1uLngpWzBdPDA/blsxXS1XYy1YYzpXYy1uWzFdKX1Ccy5pbnZlcnQ9QnM7dmFyIGlsPW5sKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBuLGU9TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLG49MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgdT1vPjA/VmM6LVZjLGM9dGYoby1lKTt0ZihjLVZjKTxYYz8odC5wb2ludChlLHI9KHIrYSkvMj4wP1djOi1XYyksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh1LHIpLHQucG9pbnQobyxyKSxuPTApOmkhPT11JiZjPj1WYyYmKHRmKGUtaSk8WGMmJihlLT1pKlhjKSx0ZihvLXUpPFhjJiYoby09dSpYYykscj1mdW5jdGlvbih0LG4sZSxyKXt2YXIgaSxvLGE9c2YodC1lKTtyZXR1cm4gdGYoYSk+WGM/bmYoKHNmKG4pKihvPXJmKHIpKSpzZihlKS1zZihyKSooaT1yZihuKSkqc2YodCkpLyhpKm8qYSkpOihuK3IpLzJ9KGUscixvLGEpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxyKSxuPTApLHQucG9pbnQoZT1vLHI9YSksaT11fSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksZT1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1ufX19KSwoZnVuY3Rpb24odCxuLGUscil7dmFyIGk7aWYobnVsbD09dClpPWUqV2Msci5wb2ludCgtVmMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoVmMsaSksci5wb2ludChWYywwKSxyLnBvaW50KFZjLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLVZjLC1pKSxyLnBvaW50KC1WYywwKSxyLnBvaW50KC1WYyxpKTtlbHNlIGlmKHRmKHRbMF0tblswXSk+WGMpe3ZhciBvPXRbMF08blswXT9WYzotVmM7aT1lKm8vMixyLnBvaW50KC1vLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KG8saSl9ZWxzZSByLnBvaW50KG5bMF0sblsxXSl9KSxbLVZjLC1XY10pO2Z1bmN0aW9uIG9sKHQpe3ZhciBuPXJmKHQpLGU9NipKYyxyPW4+MCxpPXRmKG4pPlhjO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gcmYodCkqcmYoZSk+bn1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgaT1bMSwwLDBdLG89WmYoVmYodCksVmYoZSkpLGE9V2YobyxvKSx1PW9bMF0sYz1hLXUqdTtpZighYylyZXR1cm4hciYmdDt2YXIgZj1uKmEvYyxzPS1uKnUvYyxsPVpmKGksbyksaD1RZihpLGYpO0tmKGgsUWYobyxzKSk7dmFyIGQ9bCxwPVdmKGgsZCksZz1XZihkLGQpLHk9cCpwLWcqKFdmKGgsaCktMSk7aWYoISh5PDApKXt2YXIgdj1oZih5KSxfPVFmKGQsKC1wLXYpL2cpO2lmKEtmKF8saCksXz1HZihfKSwhcilyZXR1cm4gXzt2YXIgYixtPXRbMF0seD1lWzBdLHc9dFsxXSxNPWVbMV07eDxtJiYoYj1tLG09eCx4PWIpO3ZhciBBPXgtbSxUPXRmKEEtVmMpPFhjO2lmKCFUJiZNPHcmJihiPXcsdz1NLE09YiksVHx8QTxYYz9UP3crTT4wXl9bMV08KHRmKF9bMF0tbSk8WGM/dzpNKTp3PD1fWzFdJiZfWzFdPD1NOkE+VmNeKG08PV9bMF0mJl9bMF08PXgpKXt2YXIgUz1RZihkLCgtcCt2KS9nKTtyZXR1cm4gS2YoUyxoKSxbXyxHZihTKV19fX1mdW5jdGlvbiB1KG4sZSl7dmFyIGk9cj90OlZjLXQsbz0wO3JldHVybiBuPC1pP298PTE6bj5pJiYob3w9MiksZTwtaT9vfD00OmU+aSYmKG98PTgpLG99cmV0dXJuIG5sKG8sKGZ1bmN0aW9uKHQpe3ZhciBuLGUsYyxmLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2Y9Yz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGwsaCl7dmFyIGQscD1bbCxoXSxnPW8obCxoKSx5PXI/Zz8wOnUobCxoKTpnP3UobCsobDwwP1ZjOi1WYyksaCk6MDtpZighbiYmKGY9Yz1nKSYmdC5saW5lU3RhcnQoKSxnIT09YyYmKCEoZD1hKG4scCkpfHxXcyhuLGQpfHxXcyhwLGQpKSYmKHBbMl09MSksZyE9PWMpcz0wLGc/KHQubGluZVN0YXJ0KCksZD1hKHAsbiksdC5wb2ludChkWzBdLGRbMV0pKTooZD1hKG4scCksdC5wb2ludChkWzBdLGRbMV0sMiksdC5saW5lRW5kKCkpLG49ZDtlbHNlIGlmKGkmJm4mJnJeZyl7dmFyIHY7eSZlfHwhKHY9YShwLG4sITApKXx8KHM9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSx0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSwzKSkpfSFnfHxuJiZXcyhuLHApfHx0LnBvaW50KHBbMF0scFsxXSksbj1wLGM9ZyxlPXl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiZ0LmxpbmVFbmQoKSxuPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHN8KGYmJmMpPDwxfX19KSwoZnVuY3Rpb24obixyLGksbyl7WHMobyx0LGUsaSxuLHIpfSkscj9bMCwtdF06Wy1WYyx0LVZjXSl9dmFyIGFsLHVsLGNsLGZsLHNsPTFlOSxsbD0tc2w7ZnVuY3Rpb24gaGwodCxuLGUscil7ZnVuY3Rpb24gaShpLG8pe3JldHVybiB0PD1pJiZpPD1lJiZuPD1vJiZvPD1yfWZ1bmN0aW9uIG8oaSxvLHUsZil7dmFyIHM9MCxsPTA7aWYobnVsbD09aXx8KHM9YShpLHUpKSE9PShsPWEobyx1KSl8fGMoaSxvKTwwXnU+MClkb3tmLnBvaW50KDA9PT1zfHwzPT09cz90OmUscz4xP3I6bil9d2hpbGUoKHM9KHMrdSs0KSU0KSE9PWwpO2Vsc2UgZi5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIGEocixpKXtyZXR1cm4gdGYoclswXS10KTxYYz9pPjA/MDozOnRmKHJbMF0tZSk8WGM/aT4wPzI6MTp0ZihyWzFdLW4pPFhjP2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiB1KHQsbil7cmV0dXJuIGModC54LG4ueCl9ZnVuY3Rpb24gYyh0LG4pe3ZhciBlPWEodCwxKSxyPWEobiwxKTtyZXR1cm4gZSE9PXI/ZS1yOjA9PT1lP25bMV0tdFsxXToxPT09ZT90WzBdLW5bMF06Mj09PWU/dFsxXS1uWzFdOm5bMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGMsZixzLGwsaCxkLHAsZyx5LHYsXyxiPWEsbT1WcygpLHg9e3BvaW50OncsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7eC5wb2ludD1NLGYmJmYucHVzaChzPVtdKTt2PSEwLHk9ITEscD1nPU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJihNKGwsaCksZCYmeSYmbS5yZWpvaW4oKSxjLnB1c2gobS5yZXN1bHQoKSkpO3gucG9pbnQ9dyx5JiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj1tLGM9W10sZj1bXSxfPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIG49ZnVuY3Rpb24oKXtmb3IodmFyIG49MCxlPTAsaT1mLmxlbmd0aDtlPGk7KytlKWZvcih2YXIgbyxhLHU9ZltlXSxjPTEscz11Lmxlbmd0aCxsPXVbMF0saD1sWzBdLGQ9bFsxXTtjPHM7KytjKW89aCxhPWQsaD0obD11W2NdKVswXSxkPWxbMV0sYTw9cj9kPnImJihoLW8pKihyLWEpPihkLWEpKih0LW8pJiYrK246ZDw9ciYmKGgtbykqKHItYSk8KGQtYSkqKHQtbykmJi0tbjtyZXR1cm4gbn0oKSxlPV8mJm4saT0oYz1mdChjKSkubGVuZ3RoOyhlfHxpKSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksaSYmS3MoYyx1LG4sbyxhKSxhLnBvbHlnb25FbmQoKSk7Yj1hLGM9Zj1zPW51bGx9fTtmdW5jdGlvbiB3KHQsbil7aSh0LG4pJiZiLnBvaW50KHQsbil9ZnVuY3Rpb24gTShvLGEpe3ZhciB1PWkobyxhKTtpZihmJiZzLnB1c2goW28sYV0pLHYpbD1vLGg9YSxkPXUsdj0hMSx1JiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KG8sYSkpO2Vsc2UgaWYodSYmeSliLnBvaW50KG8sYSk7ZWxzZXt2YXIgYz1bcD1NYXRoLm1heChsbCxNYXRoLm1pbihzbCxwKSksZz1NYXRoLm1heChsbCxNYXRoLm1pbihzbCxnKSldLG09W289TWF0aC5tYXgobGwsTWF0aC5taW4oc2wsbykpLGE9TWF0aC5tYXgobGwsTWF0aC5taW4oc2wsYSkpXTshZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciBhLHU9dFswXSxjPXRbMV0sZj0wLHM9MSxsPW5bMF0tdSxoPW5bMV0tYztpZihhPWUtdSxsfHwhKGE+MCkpe2lmKGEvPWwsbDwwKXtpZihhPGYpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihsPjApe2lmKGE+cylyZXR1cm47YT5mJiYoZj1hKX1pZihhPWktdSxsfHwhKGE8MCkpe2lmKGEvPWwsbDwwKXtpZihhPnMpcmV0dXJuO2E+ZiYmKGY9YSl9ZWxzZSBpZihsPjApe2lmKGE8ZilyZXR1cm47YTxzJiYocz1hKX1pZihhPXItYyxofHwhKGE+MCkpe2lmKGEvPWgsaDwwKXtpZihhPGYpcmV0dXJuO2E8cyYmKHM9YSl9ZWxzZSBpZihoPjApe2lmKGE+cylyZXR1cm47YT5mJiYoZj1hKX1pZihhPW8tYyxofHwhKGE8MCkpe2lmKGEvPWgsaDwwKXtpZihhPnMpcmV0dXJuO2E+ZiYmKGY9YSl9ZWxzZSBpZihoPjApe2lmKGE8ZilyZXR1cm47YTxzJiYocz1hKX1yZXR1cm4gZj4wJiYodFswXT11K2YqbCx0WzFdPWMrZipoKSxzPDEmJihuWzBdPXUrcypsLG5bMV09YytzKmgpLCEwfX19fX0oYyxtLHQsbixlLHIpP3UmJihiLmxpbmVTdGFydCgpLGIucG9pbnQobyxhKSxfPSExKTooeXx8KGIubGluZVN0YXJ0KCksYi5wb2ludChjWzBdLGNbMV0pKSxiLnBvaW50KG1bMF0sbVsxXSksdXx8Yi5saW5lRW5kKCksXz0hMSl9cD1vLGc9YSx5PXV9cmV0dXJuIHh9fXZhciBkbD17c3BoZXJlOnZmLHBvaW50OnZmLGxpbmVTdGFydDpmdW5jdGlvbigpe2RsLnBvaW50PWdsLGRsLmxpbmVFbmQ9cGx9LGxpbmVFbmQ6dmYscG9seWdvblN0YXJ0OnZmLHBvbHlnb25FbmQ6dmZ9O2Z1bmN0aW9uIHBsKCl7ZGwucG9pbnQ9ZGwubGluZUVuZD12Zn1mdW5jdGlvbiBnbCh0LG4pe3VsPXQqPUpjLGNsPXNmKG4qPUpjKSxmbD1yZihuKSxkbC5wb2ludD15bH1mdW5jdGlvbiB5bCh0LG4pe3QqPUpjO3ZhciBlPXNmKG4qPUpjKSxyPXJmKG4pLGk9dGYodC11bCksbz1yZihpKSxhPXIqc2YoaSksdT1mbCplLWNsKnIqbyxjPWNsKmUrZmwqcipvO2FsLmFkZChlZihoZihhKmErdSp1KSxjKSksdWw9dCxjbD1lLGZsPXJ9ZnVuY3Rpb24gdmwodCl7cmV0dXJuIGFsPW5ldyBULE1mKHQsZGwpLCthbH12YXIgX2w9W251bGwsbnVsbF0sYmw9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOl9sfTtmdW5jdGlvbiBtbCh0LG4pe3JldHVybiBfbFswXT10LF9sWzFdPW4sdmwoYmwpfXZhciB4bD17RmVhdHVyZTpmdW5jdGlvbih0LG4pe3JldHVybiBNbCh0Lmdlb21ldHJ5LG4pfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmZlYXR1cmVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoTWwoZVtyXS5nZW9tZXRyeSxuKSlyZXR1cm4hMDtyZXR1cm4hMX19LHdsPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gQWwodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoQWwoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe3JldHVybiBUbCh0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKFRsKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxuKXtyZXR1cm4gU2wodC5jb29yZGluYXRlcyxuKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihTbChlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5nZW9tZXRyaWVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoTWwoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIE1sKHQsbil7cmV0dXJuISghdHx8IXdsLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZ3bFt0LnR5cGVdKHQsbil9ZnVuY3Rpb24gQWwodCxuKXtyZXR1cm4gMD09PW1sKHQsbil9ZnVuY3Rpb24gVGwodCxuKXtmb3IodmFyIGUscixpLG89MCxhPXQubGVuZ3RoO288YTtvKyspe2lmKDA9PT0ocj1tbCh0W29dLG4pKSlyZXR1cm4hMDtpZihvPjAmJihpPW1sKHRbb10sdFtvLTFdKSk+MCYmZTw9aSYmcjw9aSYmKGUrci1pKSooMS1NYXRoLnBvdygoZS1yKS9pLDIpKTxHYyppKXJldHVybiEwO2U9cn1yZXR1cm4hMX1mdW5jdGlvbiBTbCh0LG4pe3JldHVybiEhdGwodC5tYXAoRWwpLGtsKG4pKX1mdW5jdGlvbiBFbCh0KXtyZXR1cm4odD10Lm1hcChrbCkpLnBvcCgpLHR9ZnVuY3Rpb24ga2wodCl7cmV0dXJuW3RbMF0qSmMsdFsxXSpKY119ZnVuY3Rpb24gTmwodCxuLGUpe3ZhciByPWx0KHQsbi1YYyxlKS5jb25jYXQobik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuW3Qsbl19KSl9fWZ1bmN0aW9uIENsKHQsbixlKXt2YXIgcj1sdCh0LG4tWGMsZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybltuLHRdfSkpfX1mdW5jdGlvbiBQbCgpe3ZhciB0LG4sZSxyLGksbyxhLHUsYyxmLHMsbCxoPTEwLGQ9aCxwPTkwLGc9MzYwLHk9Mi41O2Z1bmN0aW9uIHYoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpfKCl9fWZ1bmN0aW9uIF8oKXtyZXR1cm4gbHQob2Yoci9wKSpwLGUscCkubWFwKHMpLmNvbmNhdChsdChvZih1L2cpKmcsYSxnKS5tYXAobCkpLmNvbmNhdChsdChvZihuL2gpKmgsdCxoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Zih0JXApPlhjfSkpLm1hcChjKSkuY29uY2F0KGx0KG9mKG8vZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRmKHQlZyk+WGN9KSkubWFwKGYpKX1yZXR1cm4gdi5saW5lcz1mdW5jdGlvbigpe3JldHVybiBfKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LHYub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbcyhyKS5jb25jYXQobChhKS5zbGljZSgxKSxzKGUpLnJldmVyc2UoKS5zbGljZSgxKSxsKHUpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sdi5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/di5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTp2LmV4dGVudE1pbm9yKCl9LHYuZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sZT0rdFsxXVswXSx1PSt0WzBdWzFdLGE9K3RbMV1bMV0scj5lJiYodD1yLHI9ZSxlPXQpLHU+YSYmKHQ9dSx1PWEsYT10KSx2LnByZWNpc2lvbih5KSk6W1tyLHVdLFtlLGFdXX0sdi5leHRlbnRNaW5vcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXVswXSx0PStlWzFdWzBdLG89K2VbMF1bMV0saT0rZVsxXVsxXSxuPnQmJihlPW4sbj10LHQ9ZSksbz5pJiYoZT1vLG89aSxpPWUpLHYucHJlY2lzaW9uKHkpKTpbW24sb10sW3QsaV1dfSx2LnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/di5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOnYuc3RlcE1pbm9yKCl9LHYuc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLGc9K3RbMV0sdik6W3AsZ119LHYuc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0sdik6W2gsZF19LHYucHJlY2lzaW9uPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PStoLGM9TmwobyxpLDkwKSxmPUNsKG4sdCx5KSxzPU5sKHUsYSw5MCksbD1DbChyLGUseSksdik6eX0sdi5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfXZhciB6bCxEbCxSbCxGbCxxbD10PT50LElsPW5ldyBULE9sPW5ldyBULFVsPXtwb2ludDp2ZixsaW5lU3RhcnQ6dmYsbGluZUVuZDp2Zixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtVbC5saW5lU3RhcnQ9QmwsVWwubGluZUVuZD1qbH0scG9seWdvbkVuZDpmdW5jdGlvbigpe1VsLmxpbmVTdGFydD1VbC5saW5lRW5kPVVsLnBvaW50PXZmLElsLmFkZCh0ZihPbCkpLE9sPW5ldyBUfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1JbC8yO3JldHVybiBJbD1uZXcgVCx0fX07ZnVuY3Rpb24gQmwoKXtVbC5wb2ludD1ZbH1mdW5jdGlvbiBZbCh0LG4pe1VsLnBvaW50PUxsLHpsPVJsPXQsRGw9Rmw9bn1mdW5jdGlvbiBMbCh0LG4pe09sLmFkZChGbCp0LVJsKm4pLFJsPXQsRmw9bn1mdW5jdGlvbiBqbCgpe0xsKHpsLERsKX12YXIgJGw9VWwsSGw9MS8wLFhsPUhsLEdsPS1IbCxWbD1HbCxXbD17cG9pbnQ6ZnVuY3Rpb24odCxuKXt0PEhsJiYoSGw9dCk7dD5HbCYmKEdsPXQpO248WGwmJihYbD1uKTtuPlZsJiYoVmw9bil9LGxpbmVTdGFydDp2ZixsaW5lRW5kOnZmLHBvbHlnb25TdGFydDp2Zixwb2x5Z29uRW5kOnZmLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbSGwsWGxdLFtHbCxWbF1dO3JldHVybiBHbD1WbD0tKFhsPUhsPTEvMCksdH19O3ZhciBabCxLbCxRbCxKbCx0aD1XbCxuaD0wLGVoPTAscmg9MCxpaD0wLG9oPTAsYWg9MCx1aD0wLGNoPTAsZmg9MCxzaD17cG9pbnQ6bGgsbGluZVN0YXJ0OmhoLGxpbmVFbmQ6Z2gscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7c2gubGluZVN0YXJ0PXloLHNoLmxpbmVFbmQ9dmh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzaC5wb2ludD1saCxzaC5saW5lU3RhcnQ9aGgsc2gubGluZUVuZD1naH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9Zmg/W3VoL2ZoLGNoL2ZoXTphaD9baWgvYWgsb2gvYWhdOnJoP1tuaC9yaCxlaC9yaF06W05hTixOYU5dO3JldHVybiBuaD1laD1yaD1paD1vaD1haD11aD1jaD1maD0wLHR9fTtmdW5jdGlvbiBsaCh0LG4pe25oKz10LGVoKz1uLCsrcmh9ZnVuY3Rpb24gaGgoKXtzaC5wb2ludD1kaH1mdW5jdGlvbiBkaCh0LG4pe3NoLnBvaW50PXBoLGxoKFFsPXQsSmw9bil9ZnVuY3Rpb24gcGgodCxuKXt2YXIgZT10LVFsLHI9bi1KbCxpPWhmKGUqZStyKnIpO2loKz1pKihRbCt0KS8yLG9oKz1pKihKbCtuKS8yLGFoKz1pLGxoKFFsPXQsSmw9bil9ZnVuY3Rpb24gZ2goKXtzaC5wb2ludD1saH1mdW5jdGlvbiB5aCgpe3NoLnBvaW50PV9ofWZ1bmN0aW9uIHZoKCl7YmgoWmwsS2wpfWZ1bmN0aW9uIF9oKHQsbil7c2gucG9pbnQ9YmgsbGgoWmw9UWw9dCxLbD1KbD1uKX1mdW5jdGlvbiBiaCh0LG4pe3ZhciBlPXQtUWwscj1uLUpsLGk9aGYoZSplK3Iqcik7aWgrPWkqKFFsK3QpLzIsb2grPWkqKEpsK24pLzIsYWgrPWksdWgrPShpPUpsKnQtUWwqbikqKFFsK3QpLGNoKz1pKihKbCtuKSxmaCs9MyppLGxoKFFsPXQsSmw9bil9dmFyIG1oPXNoO2Z1bmN0aW9uIHhoKHQpe3RoaXMuX2NvbnRleHQ9dH14aC5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYWRpdXM9dCx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKHQsbik7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0K3RoaXMuX3JhZGl1cyxuKSx0aGlzLl9jb250ZXh0LmFyYyh0LG4sdGhpcy5fcmFkaXVzLDAsS2MpfX0scmVzdWx0OnZmfTt2YXIgd2gsTWgsQWgsVGgsU2gsRWg9bmV3IFQsa2g9e3BvaW50OnZmLGxpbmVTdGFydDpmdW5jdGlvbigpe2toLnBvaW50PU5ofSxsaW5lRW5kOmZ1bmN0aW9uKCl7d2gmJkNoKE1oLEFoKSxraC5wb2ludD12Zn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7d2g9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt3aD1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rRWg7cmV0dXJuIEVoPW5ldyBULHR9fTtmdW5jdGlvbiBOaCh0LG4pe2toLnBvaW50PUNoLE1oPVRoPXQsQWg9U2g9bn1mdW5jdGlvbiBDaCh0LG4pe1RoLT10LFNoLT1uLEVoLmFkZChoZihUaCpUaCtTaCpTaCkpLFRoPXQsU2g9bn12YXIgUGg9a2g7ZnVuY3Rpb24gemgoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gRGgodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZnVuY3Rpb24gUmgodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPW5ldyBGaDtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl07cmV0dXJuIGUuc3RyZWFtPW4sZX19ZnVuY3Rpb24gRmgoKXt9ZnVuY3Rpb24gcWgodCxuLGUpe3ZhciByPXQuY2xpcEV4dGVudCYmdC5jbGlwRXh0ZW50KCk7cmV0dXJuIHQuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG51bGwhPXImJnQuY2xpcEV4dGVudChudWxsKSxNZihlLHQuc3RyZWFtKHRoKSksbih0aC5yZXN1bHQoKSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KHIpLHR9ZnVuY3Rpb24gSWgodCxuLGUpe3JldHVybiBxaCh0LChmdW5jdGlvbihlKXt2YXIgcj1uWzFdWzBdLW5bMF1bMF0saT1uWzFdWzFdLW5bMF1bMV0sbz1NYXRoLm1pbihyLyhlWzFdWzBdLWVbMF1bMF0pLGkvKGVbMV1bMV0tZVswXVsxXSkpLGE9K25bMF1bMF0rKHItbyooZVsxXVswXStlWzBdWzBdKSkvMix1PStuWzBdWzFdKyhpLW8qKGVbMV1bMV0rZVswXVsxXSkpLzI7dC5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHVdKX0pLGUpfWZ1bmN0aW9uIE9oKHQsbixlKXtyZXR1cm4gSWgodCxbWzAsMF0sbl0sZSl9ZnVuY3Rpb24gVWgodCxuLGUpe3JldHVybiBxaCh0LChmdW5jdGlvbihlKXt2YXIgcj0rbixpPXIvKGVbMV1bMF0tZVswXVswXSksbz0oci1pKihlWzFdWzBdK2VbMF1bMF0pKS8yLGE9LWkqZVswXVsxXTt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW28sYV0pfSksZSl9ZnVuY3Rpb24gQmgodCxuLGUpe3JldHVybiBxaCh0LChmdW5jdGlvbihlKXt2YXIgcj0rbixpPXIvKGVbMV1bMV0tZVswXVsxXSksbz0taSplWzBdWzBdLGE9KHItaSooZVsxXVsxXStlWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW28sYV0pfSksZSl9emgucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOkRoKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixuKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsbik7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9RGgodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLG4sdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fSxGaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkZoLHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5zdHJlYW0ucG9pbnQodCxuKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBZaD1yZigzMCpKYyk7ZnVuY3Rpb24gTGgodCxuKXtyZXR1cm4rbj9mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUocixpLG8sYSx1LGMsZixzLGwsaCxkLHAsZyx5KXt2YXIgdj1mLXIsXz1zLWksYj12KnYrXypfO2lmKGI+NCpuJiZnLS0pe3ZhciBtPWEraCx4PXUrZCx3PWMrcCxNPWhmKG0qbSt4Kngrdyp3KSxBPWdmKHcvPU0pLFQ9dGYodGYodyktMSk8WGN8fHRmKG8tbCk8WGM/KG8rbCkvMjplZih4LG0pLFM9dChULEEpLEU9U1swXSxrPVNbMV0sTj1FLXIsQz1rLWksUD1fKk4tdipDOyhQKlAvYj5ufHx0ZigodipOK18qQykvYi0uNSk+LjN8fGEqaCt1KmQrYypwPFloKSYmKGUocixpLG8sYSx1LGMsRSxrLFQsbS89TSx4Lz1NLHcsZyx5KSx5LnBvaW50KEUsayksZShFLGssVCxtLHgsdyxmLHMsbCxoLGQscCxnLHkpKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksbyxhLHUsYyxmLHMsbCxoLGQscCxnPXtwb2ludDp5LGxpbmVTdGFydDp2LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLGcubGluZVN0YXJ0PW19LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxnLmxpbmVTdGFydD12fX07ZnVuY3Rpb24geShlLHIpe2U9dChlLHIpLG4ucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiB2KCl7cz1OYU4sZy5wb2ludD1fLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gXyhyLGkpe3ZhciBvPVZmKFtyLGldKSxhPXQocixpKTtlKHMsbCxmLGgsZCxwLHM9YVswXSxsPWFbMV0sZj1yLGg9b1swXSxkPW9bMV0scD1vWzJdLDE2LG4pLG4ucG9pbnQocyxsKX1mdW5jdGlvbiBiKCl7Zy5wb2ludD15LG4ubGluZUVuZCgpfWZ1bmN0aW9uIG0oKXt2KCksZy5wb2ludD14LGcubGluZUVuZD13fWZ1bmN0aW9uIHgodCxuKXtfKHI9dCxuKSxpPXMsbz1sLGE9aCx1PWQsYz1wLGcucG9pbnQ9X31mdW5jdGlvbiB3KCl7ZShzLGwsZixoLGQscCxpLG8scixhLHUsYywxNixuKSxnLmxpbmVFbmQ9YixiKCl9cmV0dXJuIGd9fSh0LG4pOmZ1bmN0aW9uKHQpe3JldHVybiBSaCh7cG9pbnQ6ZnVuY3Rpb24obixlKXtuPXQobixlKSx0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfSh0KX12YXIgamg9Umgoe3BvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5zdHJlYW0ucG9pbnQodCpKYyxuKkpjKX19KTtmdW5jdGlvbiAkaCh0LG4sZSxyLGksbyl7aWYoIW8pcmV0dXJuIGZ1bmN0aW9uKHQsbixlLHIsaSl7ZnVuY3Rpb24gbyhvLGEpe3JldHVybltuK3QqKG8qPXIpLGUtdCooYSo9aSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihvLGEpe3JldHVyblsoby1uKS90KnIsKGUtYSkvdCppXX0sb30odCxuLGUscixpKTt2YXIgYT1yZihvKSx1PXNmKG8pLGM9YSp0LGY9dSp0LHM9YS90LGw9dS90LGg9KHUqZS1hKm4pL3QsZD0odSpuK2EqZSkvdDtmdW5jdGlvbiBwKHQsbyl7cmV0dXJuW2MqKHQqPXIpLWYqKG8qPWkpK24sZS1mKnQtYypvXX1yZXR1cm4gcC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bcioocyp0LWwqbitoKSxpKihkLWwqdC1zKm4pXX0scH1mdW5jdGlvbiBIaCh0KXtyZXR1cm4gWGgoKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSkoKX1mdW5jdGlvbiBYaCh0KXt2YXIgbixlLHIsaSxvLGEsdSxjLGYscyxsPTE1MCxoPTQ4MCxkPTI1MCxwPTAsZz0wLHk9MCx2PTAsXz0wLGI9MCxtPTEseD0xLHc9bnVsbCxNPWlsLEE9bnVsbCxUPXFsLFM9LjU7ZnVuY3Rpb24gRSh0KXtyZXR1cm4gYyh0WzBdKkpjLHRbMV0qSmMpfWZ1bmN0aW9uIGsodCl7cmV0dXJuKHQ9Yy5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKlFjLHRbMV0qUWNdfWZ1bmN0aW9uIE4oKXt2YXIgdD0kaChsLDAsMCxtLHgsYikuYXBwbHkobnVsbCxuKHAsZykpLHI9JGgobCxoLXRbMF0sZC10WzFdLG0seCxiKTtyZXR1cm4gZT1Zcyh5LHYsXyksdT1VcyhuLHIpLGM9VXMoZSx1KSxhPUxoKHUsUyksQygpfWZ1bmN0aW9uIEMoKXtyZXR1cm4gZj1zPW51bGwsRX1yZXR1cm4gRS5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGYmJnM9PT10P2Y6Zj1qaChmdW5jdGlvbih0KXtyZXR1cm4gUmgoe3BvaW50OmZ1bmN0aW9uKG4sZSl7dmFyIHI9dChuLGUpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChyWzBdLHJbMV0pfX0pfShlKShNKGEoVChzPXQpKSkpKX0sRS5wcmVjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPXQsdz12b2lkIDAsQygpKTpNfSxFLnBvc3RjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhUPXQsQT1yPWk9bz1udWxsLEMoKSk6VH0sRS5jbGlwQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09K3Q/b2wodz10KkpjKToodz1udWxsLGlsKSxDKCkpOncqUWN9LEUuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1udWxsPT10PyhBPXI9aT1vPW51bGwscWwpOmhsKEE9K3RbMF1bMF0scj0rdFswXVsxXSxpPSt0WzFdWzBdLG89K3RbMV1bMV0pLEMoKSk6bnVsbD09QT9udWxsOltbQSxyXSxbaSxvXV19LEUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K3QsTigpKTpsfSxFLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdFswXSxkPSt0WzFdLE4oKSk6W2gsZF19LEUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXRbMF0lMzYwKkpjLGc9dFsxXSUzNjAqSmMsTigpKTpbcCpRYyxnKlFjXX0sRS5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dFswXSUzNjAqSmMsdj10WzFdJTM2MCpKYyxfPXQubGVuZ3RoPjI/dFsyXSUzNjAqSmM6MCxOKCkpOlt5KlFjLHYqUWMsXypRY119LEUuYW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dCUzNjAqSmMsTigpKTpiKlFjfSxFLnJlZmxlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQ/LTE6MSxOKCkpOm08MH0sRS5yZWZsZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD10Py0xOjEsTigpKTp4PDB9LEUucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUxoKHUsUz10KnQpLEMoKSk6aGYoUyl9LEUuZml0RXh0ZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEloKEUsdCxuKX0sRS5maXRTaXplPWZ1bmN0aW9uKHQsbil7cmV0dXJuIE9oKEUsdCxuKX0sRS5maXRXaWR0aD1mdW5jdGlvbih0LG4pe3JldHVybiBVaChFLHQsbil9LEUuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEJoKEUsdCxuKX0sZnVuY3Rpb24oKXtyZXR1cm4gbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxFLmludmVydD1uLmludmVydCYmayxOKCl9fWZ1bmN0aW9uIEdoKHQpe3ZhciBuPTAsZT1WYy8zLHI9WGgodCksaT1yKG4sZSk7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Iobj10WzBdKkpjLGU9dFsxXSpKYyk6W24qUWMsZSpRY119LGl9ZnVuY3Rpb24gVmgodCxuKXt2YXIgZT1zZih0KSxyPShlK3NmKG4pKS8yO2lmKHRmKHIpPFhjKXJldHVybiBmdW5jdGlvbih0KXt2YXIgbj1yZih0KTtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuW3QqbixzZihlKS9uXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9uLGdmKGUqbildfSxlfSh0KTt2YXIgaT0xK2UqKDIqci1lKSxvPWhmKGkpL3I7ZnVuY3Rpb24gYSh0LG4pe3ZhciBlPWhmKGktMipyKnNmKG4pKS9yO3JldHVybltlKnNmKHQqPXIpLG8tZSpyZih0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uLGE9ZWYodCx0ZihlKSkqbGYoZSk7cmV0dXJuIGUqcjwwJiYoYS09VmMqbGYodCkqbGYoZSkpLFthL3IsZ2YoKGktKHQqdCtlKmUpKnIqcikvKDIqcikpXX0sYX1mdW5jdGlvbiBXaCgpe3JldHVybiBHaChWaCkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX1mdW5jdGlvbiBaaCgpe3JldHVybiBXaCgpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfWZ1bmN0aW9uIEtoKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXJmKG4pLGk9cmYoZSksbz10KHIqaSk7cmV0dXJuIG89PT0xLzA/WzIsMF06W28qaSpzZihuKSxvKnNmKGUpXX19ZnVuY3Rpb24gUWgodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9aGYobipuK2UqZSksaT10KHIpLG89c2YoaSksYT1yZihpKTtyZXR1cm5bZWYobipvLHIqYSksZ2YociYmZSpvL3IpXX19dmFyIEpoPUtoKChmdW5jdGlvbih0KXtyZXR1cm4gaGYoMi8oMSt0KSl9KSk7SmguaW52ZXJ0PVFoKChmdW5jdGlvbih0KXtyZXR1cm4gMipnZih0LzIpfSkpO3ZhciB0ZD1LaCgoZnVuY3Rpb24odCl7cmV0dXJuKHQ9cGYodCkpJiZ0L3NmKHQpfSkpO2Z1bmN0aW9uIG5kKHQsbil7cmV0dXJuW3QsY2YoZGYoKFdjK24pLzIpKV19ZnVuY3Rpb24gZWQodCl7dmFyIG4sZSxyLGk9SGgodCksbz1pLmNlbnRlcixhPWkuc2NhbGUsdT1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCxmPW51bGw7ZnVuY3Rpb24gcygpe3ZhciBvPVZjKmEoKSx1PWkoSHMoaS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGMobnVsbD09Zj9bW3VbMF0tbyx1WzFdLW9dLFt1WzBdK28sdVsxXStvXV06dD09PW5kP1tbTWF0aC5tYXgodVswXS1vLGYpLG5dLFtNYXRoLm1pbih1WzBdK28sZSkscl1dOltbZixNYXRoLm1heCh1WzFdLW8sbildLFtlLE1hdGgubWluKHVbMV0rbyxyKV1dKX1yZXR1cm4gaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSxzKCkpOmEoKX0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUodCkscygpKTp1KCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLHMoKSk6bygpfSxpLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/Zj1uPWU9cj1udWxsOihmPSt0WzBdWzBdLG49K3RbMF1bMV0sZT0rdFsxXVswXSxyPSt0WzFdWzFdKSxzKCkpOm51bGw9PWY/bnVsbDpbW2Ysbl0sW2Uscl1dfSxzKCl9ZnVuY3Rpb24gcmQodCl7cmV0dXJuIGRmKChXYyt0KS8yKX1mdW5jdGlvbiBpZCh0LG4pe3ZhciBlPXJmKHQpLHI9dD09PW4/c2YodCk6Y2YoZS9yZihuKSkvY2YocmQobikvcmQodCkpLGk9ZSpmZihyZCh0KSxyKS9yO2lmKCFyKXJldHVybiBuZDtmdW5jdGlvbiBvKHQsbil7aT4wP248LVdjK1hjJiYobj0tV2MrWGMpOm4+V2MtWGMmJihuPVdjLVhjKTt2YXIgZT1pL2ZmKHJkKG4pLHIpO3JldHVybltlKnNmKHIqdCksaS1lKnJmKHIqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBlPWktbixvPWxmKHIpKmhmKHQqdCtlKmUpLGE9ZWYodCx0ZihlKSkqbGYoZSk7cmV0dXJuIGUqcjwwJiYoYS09VmMqbGYodCkqbGYoZSkpLFthL3IsMipuZihmZihpL28sMS9yKSktV2NdfSxvfWZ1bmN0aW9uIG9kKHQsbil7cmV0dXJuW3Qsbl19ZnVuY3Rpb24gYWQodCxuKXt2YXIgZT1yZih0KSxyPXQ9PT1uP3NmKHQpOihlLXJmKG4pKS8obi10KSxpPWUvcit0O2lmKHRmKHIpPFhjKXJldHVybiBvZDtmdW5jdGlvbiBvKHQsbil7dmFyIGU9aS1uLG89cip0O3JldHVybltlKnNmKG8pLGktZSpyZihvKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9aS1uLG89ZWYodCx0ZihlKSkqbGYoZSk7cmV0dXJuIGUqcjwwJiYoby09VmMqbGYodCkqbGYoZSkpLFtvL3IsaS1sZihyKSpoZih0KnQrZSplKV19LG99dGQuaW52ZXJ0PVFoKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSxuZC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bdCwyKm5mKGFmKG4pKS1XY119LG9kLmludmVydD1vZDt2YXIgdWQ9MS4zNDAyNjQsY2Q9LS4wODExMDYsZmQ9ODkzZS02LHNkPS4wMDM3OTYsbGQ9aGYoMykvMjtmdW5jdGlvbiBoZCh0LG4pe3ZhciBlPWdmKGxkKnNmKG4pKSxyPWUqZSxpPXIqcipyO3JldHVyblt0KnJmKGUpLyhsZCoodWQrMypjZCpyK2kqKDcqZmQrOSpzZCpyKSkpLGUqKHVkK2NkKnIraSooZmQrc2QqcikpXX1mdW5jdGlvbiBkZCh0LG4pe3ZhciBlPXJmKG4pLHI9cmYodCkqZTtyZXR1cm5bZSpzZih0KS9yLHNmKG4pL3JdfWZ1bmN0aW9uIHBkKHQsbil7dmFyIGU9bipuLHI9ZSplO3JldHVyblt0KiguODcwNy0uMTMxOTc5KmUrcioociooLjAwMzk3MSplLS4wMDE1MjkqciktLjAxMzc5MSkpLG4qKDEuMDA3MjI2K2UqKC4wMTUwODUrciooLjAyODg3NCplLS4wNDQ0NzUtLjAwNTkxNipyKSkpXX1mdW5jdGlvbiBnZCh0LG4pe3JldHVybltyZihuKSpzZih0KSxzZihuKV19ZnVuY3Rpb24geWQodCxuKXt2YXIgZT1yZihuKSxyPTErcmYodCkqZTtyZXR1cm5bZSpzZih0KS9yLHNmKG4pL3JdfWZ1bmN0aW9uIHZkKHQsbil7cmV0dXJuW2NmKGRmKChXYytuKS8yKSksLXRdfWZ1bmN0aW9uIF9kKHQsbil7cmV0dXJuIHQucGFyZW50PT09bi5wYXJlbnQ/MToyfWZ1bmN0aW9uIGJkKHQsbil7cmV0dXJuIHQrbi54fWZ1bmN0aW9uIG1kKHQsbil7cmV0dXJuIE1hdGgubWF4KHQsbi55KX1mdW5jdGlvbiB4ZCh0KXt2YXIgbj0wLGU9dC5jaGlsZHJlbixyPWUmJmUubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KW4rPWVbcl0udmFsdWU7ZWxzZSBuPTE7dC52YWx1ZT1ufWZ1bmN0aW9uIHdkKHQsbil7dCBpbnN0YW5jZW9mIE1hcD8odD1bdm9pZCAwLHRdLHZvaWQgMD09PW4mJihuPUFkKSk6dm9pZCAwPT09biYmKG49TWQpO2Zvcih2YXIgZSxyLGksbyxhLHU9bmV3IEVkKHQpLGM9W3VdO2U9Yy5wb3AoKTspaWYoKGk9bihlLmRhdGEpKSYmKGE9KGk9QXJyYXkuZnJvbShpKSkubGVuZ3RoKSlmb3IoZS5jaGlsZHJlbj1pLG89YS0xO28+PTA7LS1vKWMucHVzaChyPWlbb109bmV3IEVkKGlbb10pKSxyLnBhcmVudD1lLHIuZGVwdGg9ZS5kZXB0aCsxO3JldHVybiB1LmVhY2hCZWZvcmUoU2QpfWZ1bmN0aW9uIE1kKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIEFkKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMV06bnVsbH1mdW5jdGlvbiBUZCh0KXt2b2lkIDAhPT10LmRhdGEudmFsdWUmJih0LnZhbHVlPXQuZGF0YS52YWx1ZSksdC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIFNkKHQpe3ZhciBuPTA7ZG97dC5oZWlnaHQ9bn13aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrbil9ZnVuY3Rpb24gRWQodCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24ga2QodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpOZCh0KX1mdW5jdGlvbiBOZCh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHR9ZnVuY3Rpb24gQ2QoKXtyZXR1cm4gMH1mdW5jdGlvbiBQZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19aGQuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHI9bixpPXIqcixvPWkqaSppLGE9MDthPDEyJiYobz0oaT0oci09ZT0ocioodWQrY2QqaStvKihmZCtzZCppKSktbikvKHVkKzMqY2QqaStvKig3KmZkKzkqc2QqaSkpKSpyKSppKmksISh0ZihlKTxHYykpOysrYSk7cmV0dXJuW2xkKnQqKHVkKzMqY2QqaStvKig3KmZkKzkqc2QqaSkpL3JmKHIpLGdmKHNmKHIpL2xkKV19LGRkLmludmVydD1RaChuZikscGQuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGUscj1uLGk9MjU7ZG97dmFyIG89cipyLGE9bypvO3ItPWU9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLjAyODg3NCpvLS4wNDQ0NzUtLjAwNTkxNiphKSkpLW4pLygxLjAwNzIyNitvKiguMDQ1MjU1K2EqKC4yNTk4NjYqby0uMzExMzI1LS4wMDU5MTYqMTEqYSkpKX13aGlsZSh0ZihlKT5YYyYmLS1pPjApO3JldHVyblt0LyguODcwNysobz1yKnIpKihvKihvKm8qbyooLjAwMzk3MS0uMDAxNTI5Km8pLS4wMTM3OTEpLS4xMzE5NzkpKSxyXX0sZ2QuaW52ZXJ0PVFoKGdmKSx5ZC5pbnZlcnQ9UWgoKGZ1bmN0aW9uKHQpe3JldHVybiAyKm5mKHQpfSkpLHZkLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblstbiwyKm5mKGFmKHQpKS1XY119LEVkLnByb3RvdHlwZT13ZC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkVkLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKHhkKX0sZWFjaDpmdW5jdGlvbih0LG4pe2xldCBlPS0xO2Zvcihjb25zdCByIG9mIHRoaXMpdC5jYWxsKG4sciwrK2UsdGhpcyk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyLGksbz10aGlzLGE9W29dLHU9W10sYz0tMTtvPWEucG9wKCk7KWlmKHUucHVzaChvKSxlPW8uY2hpbGRyZW4pZm9yKHI9MCxpPWUubGVuZ3RoO3I8aTsrK3IpYS5wdXNoKGVbcl0pO2Zvcig7bz11LnBvcCgpOyl0LmNhbGwobixvLCsrYyx0aGlzKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyLGk9dGhpcyxvPVtpXSxhPS0xO2k9by5wb3AoKTspaWYodC5jYWxsKG4saSwrK2EsdGhpcyksZT1pLmNoaWxkcmVuKWZvcihyPWUubGVuZ3RoLTE7cj49MDstLXIpby5wdXNoKGVbcl0pO3JldHVybiB0aGlzfSxmaW5kOmZ1bmN0aW9uKHQsbil7bGV0IGU9LTE7Zm9yKGNvbnN0IHIgb2YgdGhpcylpZih0LmNhbGwobixyLCsrZSx0aGlzKSlyZXR1cm4gcn0sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24obil7Zm9yKHZhciBlPSt0KG4uZGF0YSl8fDAscj1uLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyllKz1yW2ldLnZhbHVlO24udmFsdWU9ZX0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiZuLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMsZT1mdW5jdGlvbih0LG4pe2lmKHQ9PT1uKXJldHVybiB0O3ZhciBlPXQuYW5jZXN0b3JzKCkscj1uLmFuY2VzdG9ycygpLGk9bnVsbDt0PWUucG9wKCksbj1yLnBvcCgpO2Zvcig7dD09PW47KWk9dCx0PWUucG9wKCksbj1yLnBvcCgpO3JldHVybiBpfShuLHQpLHI9W25dO24hPT1lOyluPW4ucGFyZW50LHIucHVzaChuKTtmb3IodmFyIGk9ci5sZW5ndGg7dCE9PWU7KXIuc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxuPVt0XTt0PXQucGFyZW50OyluLnB1c2godCk7cmV0dXJuIG59LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKG4pe24uY2hpbGRyZW58fHQucHVzaChuKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihlKXtlIT09dCYmbi5wdXNoKHtzb3VyY2U6ZS5wYXJlbnQsdGFyZ2V0OmV9KX0pKSxufSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIHdkKHRoaXMpLmVhY2hCZWZvcmUoVGQpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXt2YXIgdCxuLGUscixpPXRoaXMsbz1baV07ZG97Zm9yKHQ9by5yZXZlcnNlKCksbz1bXTtpPXQucG9wKCk7KWlmKHlpZWxkIGksbj1pLmNoaWxkcmVuKWZvcihlPTAscj1uLmxlbmd0aDtlPHI7KytlKW8ucHVzaChuW2VdKX13aGlsZShvLmxlbmd0aCl9fTtjb25zdCB6ZD00Mjk0OTY3Mjk2O2Z1bmN0aW9uIERkKCl7bGV0IHQ9MTtyZXR1cm4oKT0+KHQ9KDE2NjQ1MjUqdCsxMDEzOTA0MjIzKSV6ZCkvemR9ZnVuY3Rpb24gUmQodCxuKXtmb3IodmFyIGUscixpPTAsbz0odD1mdW5jdGlvbih0LG4pe2xldCBlLHIsaT10Lmxlbmd0aDtmb3IoO2k7KXI9bigpKmktLXwwLGU9dFtpXSx0W2ldPXRbcl0sdFtyXT1lO3JldHVybiB0fShBcnJheS5mcm9tKHQpLG4pKS5sZW5ndGgsYT1bXTtpPG87KWU9dFtpXSxyJiZJZChyLGUpPysraToocj1VZChhPUZkKGEsZSkpLGk9MCk7cmV0dXJuIHJ9ZnVuY3Rpb24gRmQodCxuKXt2YXIgZSxyO2lmKE9kKG4sdCkpcmV0dXJuW25dO2ZvcihlPTA7ZTx0Lmxlbmd0aDsrK2UpaWYocWQobix0W2VdKSYmT2QoQmQodFtlXSxuKSx0KSlyZXR1cm5bdFtlXSxuXTtmb3IoZT0wO2U8dC5sZW5ndGgtMTsrK2UpZm9yKHI9ZSsxO3I8dC5sZW5ndGg7KytyKWlmKHFkKEJkKHRbZV0sdFtyXSksbikmJnFkKEJkKHRbZV0sbiksdFtyXSkmJnFkKEJkKHRbcl0sbiksdFtlXSkmJk9kKFlkKHRbZV0sdFtyXSxuKSx0KSlyZXR1cm5bdFtlXSx0W3JdLG5dO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBxZCh0LG4pe3ZhciBlPXQuci1uLnIscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZTwwfHxlKmU8cipyK2kqaX1mdW5jdGlvbiBJZCh0LG4pe3ZhciBlPXQuci1uLnIrMWUtOSpNYXRoLm1heCh0LnIsbi5yLDEpLHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU+MCYmZSplPnIqcitpKml9ZnVuY3Rpb24gT2QodCxuKXtmb3IodmFyIGU9MDtlPG4ubGVuZ3RoOysrZSlpZighSWQodCxuW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBVZCh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJue3g6dC54LHk6dC55LHI6dC5yfX0odFswXSk7Y2FzZSAyOnJldHVybiBCZCh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gWWQodFswXSx0WzFdLHRbMl0pfX1mdW5jdGlvbiBCZCh0LG4pe3ZhciBlPXQueCxyPXQueSxpPXQucixvPW4ueCxhPW4ueSx1PW4ucixjPW8tZSxmPWEtcixzPXUtaSxsPU1hdGguc3FydChjKmMrZipmKTtyZXR1cm57eDooZStvK2MvbCpzKS8yLHk6KHIrYStmL2wqcykvMixyOihsK2krdSkvMn19ZnVuY3Rpb24gWWQodCxuLGUpe3ZhciByPXQueCxpPXQueSxvPXQucixhPW4ueCx1PW4ueSxjPW4ucixmPWUueCxzPWUueSxsPWUucixoPXItYSxkPXItZixwPWktdSxnPWktcyx5PWMtbyx2PWwtbyxfPXIqcitpKmktbypvLGI9Xy1hKmEtdSp1K2MqYyxtPV8tZipmLXMqcytsKmwseD1kKnAtaCpnLHc9KHAqbS1nKmIpLygyKngpLXIsTT0oZyp5LXAqdikveCxBPShkKmItaCptKS8oMip4KS1pLFQ9KGgqdi1kKnkpL3gsUz1NKk0rVCpULTEsRT0yKihvK3cqTStBKlQpLGs9dyp3K0EqQS1vKm8sTj0tKE1hdGguYWJzKFMpPjFlLTY/KEUrTWF0aC5zcXJ0KEUqRS00KlMqaykpLygyKlMpOmsvRSk7cmV0dXJue3g6cit3K00qTix5OmkrQStUKk4scjpOfX1mdW5jdGlvbiBMZCh0LG4sZSl7dmFyIHIsaSxvLGEsdT10Lngtbi54LGM9dC55LW4ueSxmPXUqdStjKmM7Zj8oaT1uLnIrZS5yLGkqPWksYT10LnIrZS5yLGk+KGEqPWEpPyhyPShmK2EtaSkvKDIqZiksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxhL2YtcipyKSksZS54PXQueC1yKnUtbypjLGUueT10LnktcipjK28qdSk6KHI9KGYraS1hKS8oMipmKSxvPU1hdGguc3FydChNYXRoLm1heCgwLGkvZi1yKnIpKSxlLng9bi54K3IqdS1vKmMsZS55PW4ueStyKmMrbyp1KSk6KGUueD1uLngrZS5yLGUueT1uLnkpfWZ1bmN0aW9uIGpkKHQsbil7dmFyIGU9dC5yK24uci0xZS02LHI9bi54LXQueCxpPW4ueS10Lnk7cmV0dXJuIGU+MCYmZSplPnIqcitpKml9ZnVuY3Rpb24gJGQodCl7dmFyIG49dC5fLGU9dC5uZXh0Ll8scj1uLnIrZS5yLGk9KG4ueCplLnIrZS54Km4ucikvcixvPShuLnkqZS5yK2UueSpuLnIpL3I7cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gSGQodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFhkKHQsbil7aWYoIShvPSh0PWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImxlbmd0aCJpbiB0P3Q6QXJyYXkuZnJvbSh0KX0odCkpLmxlbmd0aCkpcmV0dXJuIDA7dmFyIGUscixpLG8sYSx1LGMsZixzLGwsaDtpZigoZT10WzBdKS54PTAsZS55PTAsIShvPjEpKXJldHVybiBlLnI7aWYocj10WzFdLGUueD0tci5yLHIueD1lLnIsci55PTAsIShvPjIpKXJldHVybiBlLnIrci5yO0xkKHIsZSxpPXRbMl0pLGU9bmV3IEhkKGUpLHI9bmV3IEhkKHIpLGk9bmV3IEhkKGkpLGUubmV4dD1pLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9aSxpLm5leHQ9ci5wcmV2aW91cz1lO3Q6Zm9yKGM9MztjPG87KytjKXtMZChlLl8sci5fLGk9dFtjXSksaT1uZXcgSGQoaSksZj1yLm5leHQscz1lLnByZXZpb3VzLGw9ci5fLnIsaD1lLl8ucjtkb3tpZihsPD1oKXtpZihqZChmLl8saS5fKSl7cj1mLGUubmV4dD1yLHIucHJldmlvdXM9ZSwtLWM7Y29udGludWUgdH1sKz1mLl8ucixmPWYubmV4dH1lbHNle2lmKGpkKHMuXyxpLl8pKXsoZT1zKS5uZXh0PXIsci5wcmV2aW91cz1lLC0tYztjb250aW51ZSB0fWgrPXMuXy5yLHM9cy5wcmV2aW91c319d2hpbGUoZiE9PXMubmV4dCk7Zm9yKGkucHJldmlvdXM9ZSxpLm5leHQ9cixlLm5leHQ9ci5wcmV2aW91cz1yPWksYT0kZChlKTsoaT1pLm5leHQpIT09cjspKHU9JGQoaSkpPGEmJihlPWksYT11KTtyPWUubmV4dH1mb3IoZT1bci5fXSxpPXI7KGk9aS5uZXh0KSE9PXI7KWUucHVzaChpLl8pO2ZvcihpPVJkKGUsbiksYz0wO2M8bzsrK2MpKGU9dFtjXSkueC09aS54LGUueS09aS55O3JldHVybiBpLnJ9ZnVuY3Rpb24gR2QodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBWZCh0KXtyZXR1cm4gZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8KG4ucj1NYXRoLm1heCgwLCt0KG4pfHwwKSl9fWZ1bmN0aW9uIFdkKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYoaT1yLmNoaWxkcmVuKXt2YXIgaSxvLGEsdT1pLmxlbmd0aCxjPXQocikqbnx8MDtpZihjKWZvcihvPTA7bzx1OysrbylpW29dLnIrPWM7aWYoYT1YZChpLGUpLGMpZm9yKG89MDtvPHU7KytvKWlbb10uci09YztyLnI9YStjfX19ZnVuY3Rpb24gWmQodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPW4ucGFyZW50O24ucio9dCxlJiYobi54PWUueCt0Km4ueCxuLnk9ZS55K3Qqbi55KX19ZnVuY3Rpb24gS2QodCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfWZ1bmN0aW9uIFFkKHQsbixlLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbix1PS0xLGM9YS5sZW5ndGgsZj10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrdTxjOykobz1hW3VdKS55MD1lLG8ueTE9aSxvLngwPW4sby54MT1uKz1vLnZhbHVlKmZ9dmFyIEpkPXtkZXB0aDotMX0sdHA9e30sbnA9e307ZnVuY3Rpb24gZXAodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gcnAodCl7cmV0dXJuIHQucGFyZW50SWR9ZnVuY3Rpb24gaXAodCl7bGV0IG49dC5sZW5ndGg7aWYobjwyKXJldHVybiIiO2Zvcig7LS1uPjEmJiFvcCh0LG4pOyk7cmV0dXJuIHQuc2xpY2UoMCxuKX1mdW5jdGlvbiBvcCh0LG4pe2lmKCIvIj09PXRbbl0pe2xldCBlPTA7Zm9yKDtuPjAmJiJcXCI9PT10Wy0tbl07KSsrZTtpZigwPT0oMSZlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBhcCh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiB1cCh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bMF06dC50fWZ1bmN0aW9uIGNwKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/bltuLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gZnAodCxuLGUpe3ZhciByPWUvKG4uaS10LmkpO24uYy09cixuLnMrPWUsdC5jKz1yLG4ueis9ZSxuLm0rPWV9ZnVuY3Rpb24gc3AodCxuLGUpe3JldHVybiB0LmEucGFyZW50PT09bi5wYXJlbnQ/dC5hOmV9ZnVuY3Rpb24gbHAodCxuKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9bn1mdW5jdGlvbiBocCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxjPWEubGVuZ3RoLGY9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3U8YzspKG89YVt1XSkueDA9bixvLngxPXIsby55MD1lLG8ueTE9ZSs9by52YWx1ZSpmfWxwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVkLnByb3RvdHlwZSk7dmFyIGRwPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBwcCh0LG4sZSxyLGksbyl7Zm9yKHZhciBhLHUsYyxmLHMsbCxoLGQscCxnLHksdj1bXSxfPW4uY2hpbGRyZW4sYj0wLG09MCx4PV8ubGVuZ3RoLHc9bi52YWx1ZTtiPHg7KXtjPWktZSxmPW8tcjtkb3tzPV9bbSsrXS52YWx1ZX13aGlsZSghcyYmbTx4KTtmb3IobD1oPXMseT1zKnMqKGc9TWF0aC5tYXgoZi9jLGMvZikvKHcqdCkpLHA9TWF0aC5tYXgoaC95LHkvbCk7bTx4OysrbSl7aWYocys9dT1fW21dLnZhbHVlLHU8bCYmKGw9dSksdT5oJiYoaD11KSx5PXMqcypnLChkPU1hdGgubWF4KGgveSx5L2wpKT5wKXtzLT11O2JyZWFrfXA9ZH12LnB1c2goYT17dmFsdWU6cyxkaWNlOmM8ZixjaGlsZHJlbjpfLnNsaWNlKGIsbSl9KSxhLmRpY2U/UWQoYSxlLHIsaSx3P3IrPWYqcy93Om8pOmhwKGEsZSxyLHc/ZSs9YypzL3c6aSxvKSx3LT1zLGI9bX1yZXR1cm4gdn12YXIgZ3A9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7cHAobix0LGUscixpLG8pfXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KGRwKTt2YXIgeXA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09bilmb3IodmFyIGEsdSxjLGYscyxsPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrbDxoOyl7Zm9yKGM9KHU9YVtsXSkuY2hpbGRyZW4sZj11LnZhbHVlPTAscz1jLmxlbmd0aDtmPHM7KytmKXUudmFsdWUrPWNbZl0udmFsdWU7dS5kaWNlP1FkKHUsZSxyLGksZD9yKz0oby1yKSp1LnZhbHVlL2Q6byk6aHAodSxlLHIsZD9lKz0oaS1lKSp1LnZhbHVlL2Q6aSxvKSxkLT11LnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1wcChuLHQsZSxyLGksbyksYS5yYXRpbz1ufXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KGRwKTtmdW5jdGlvbiB2cCh0LG4sZSl7cmV0dXJuKG5bMF0tdFswXSkqKGVbMV0tdFsxXSktKG5bMV0tdFsxXSkqKGVbMF0tdFswXSl9ZnVuY3Rpb24gX3AodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gYnAodCl7Y29uc3Qgbj10Lmxlbmd0aCxlPVswLDFdO2xldCByLGk9Mjtmb3Iocj0yO3I8bjsrK3Ipe2Zvcig7aT4xJiZ2cCh0W2VbaS0yXV0sdFtlW2ktMV1dLHRbcl0pPD0wOyktLWk7ZVtpKytdPXJ9cmV0dXJuIGUuc2xpY2UoMCxpKX12YXIgbXA9TWF0aC5yYW5kb20seHA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQ9bnVsbD09dD8wOit0LGU9bnVsbD09ZT8xOitlLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhlPXQsdD0wKTplLT10LGZ1bmN0aW9uKCl7cmV0dXJuIG4oKSplK3R9fXJldHVybiBlLnNvdXJjZT10LGV9KG1wKSx3cD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCksdD1NYXRoLmZsb29yKHQpLGU9TWF0aC5mbG9vcihlKS10LGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IobigpKmUrdCl9fXJldHVybiBlLnNvdXJjZT10LGV9KG1wKSxNcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlKXt2YXIgcixpO3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSxmdW5jdGlvbigpe3ZhciBvO2lmKG51bGwhPXIpbz1yLHI9bnVsbDtlbHNlIGRve3I9MipuKCktMSxvPTIqbigpLTEsaT1yKnIrbypvfXdoaWxlKCFpfHxpPjEpO3JldHVybiB0K2UqbypNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fXJldHVybiBlLnNvdXJjZT10LGV9KG1wKSxBcD1mdW5jdGlvbiB0KG4pe3ZhciBlPU1wLnNvdXJjZShuKTtmdW5jdGlvbiByKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiByLnNvdXJjZT10LHJ9KG1wKSxUcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKHQ9K3QpPD0wPygpPT4wOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj10O3I+MTstLXIpZSs9bigpO3JldHVybiBlK3IqbigpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfShtcCksU3A9ZnVuY3Rpb24gdChuKXt2YXIgZT1UcC5zb3VyY2Uobik7ZnVuY3Rpb24gcih0KXtpZigwPT0odD0rdCkpcmV0dXJuIG47dmFyIHI9ZSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL3R9fXJldHVybiByLnNvdXJjZT10LHJ9KG1wKSxFcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nMXAoLW4oKSkvdH19cmV0dXJuIGUuc291cmNlPXQsZX0obXApLGtwPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtpZigodD0rdCk8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCBhbHBoYSIpO3JldHVybiB0PTEvLXQsZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMS1uKCksdCl9fXJldHVybiBlLnNvdXJjZT10LGV9KG1wKSxOcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7aWYoKHQ9K3QpPDB8fHQ+MSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCBwIik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IobigpK3QpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfShtcCksQ3A9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe2lmKCh0PSt0KTwwfHx0PjEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgcCIpO3JldHVybiAwPT09dD8oKT0+MS8wOjE9PT10PygpPT4xOih0PU1hdGgubG9nMXAoLXQpLGZ1bmN0aW9uKCl7cmV0dXJuIDErTWF0aC5mbG9vcihNYXRoLmxvZzFwKC1uKCkpL3QpfSl9cmV0dXJuIGUuc291cmNlPXQsZX0obXApLFBwPWZ1bmN0aW9uIHQobil7dmFyIGU9TXAuc291cmNlKG4pKCk7ZnVuY3Rpb24gcih0LHIpe2lmKCh0PSt0KTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJpbnZhbGlkIGsiKTtpZigwPT09dClyZXR1cm4oKT0+MDtpZihyPW51bGw9PXI/MTorciwxPT09dClyZXR1cm4oKT0+LU1hdGgubG9nMXAoLW4oKSkqcjt2YXIgaT0odDwxP3QrMTp0KS0xLzMsbz0xLygzKk1hdGguc3FydChpKSksYT10PDE/KCk9Pk1hdGgucG93KG4oKSwxL3QpOigpPT4xO3JldHVybiBmdW5jdGlvbigpe2Rve2Rve3ZhciB0PWUoKSx1PTErbyp0fXdoaWxlKHU8PTApO3UqPXUqdTt2YXIgYz0xLW4oKX13aGlsZShjPj0xLS4wMzMxKnQqdCp0KnQmJk1hdGgubG9nKGMpPj0uNSp0KnQraSooMS11K01hdGgubG9nKHUpKSk7cmV0dXJuIGkqdSphKCkqcn19cmV0dXJuIHIuc291cmNlPXQscn0obXApLHpwPWZ1bmN0aW9uIHQobil7dmFyIGU9UHAuc291cmNlKG4pO2Z1bmN0aW9uIHIodCxuKXt2YXIgcj1lKHQpLGk9ZShuKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1yKCk7cmV0dXJuIDA9PT10PzA6dC8odCtpKCkpfX1yZXR1cm4gci5zb3VyY2U9dCxyfShtcCksRHA9ZnVuY3Rpb24gdChuKXt2YXIgZT1DcC5zb3VyY2Uobikscj16cC5zb3VyY2Uobik7ZnVuY3Rpb24gaSh0LG4pe3JldHVybiB0PSt0LChuPStuKT49MT8oKT0+dDpuPD0wPygpPT4wOmZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz10LGE9bjtvKmE+MTYmJm8qKDEtYSk+MTY7KXt2YXIgdT1NYXRoLmZsb29yKChvKzEpKmEpLGM9cih1LG8tdSsxKSgpO2M8PWE/KGkrPXUsby09dSxhPShhLWMpLygxLWMpKToobz11LTEsYS89Yyl9Zm9yKHZhciBmPWE8LjUscz1lKGY/YToxLWEpLGw9cygpLGg9MDtsPD1vOysraClsKz1zKCk7cmV0dXJuIGkrKGY/aDpvLWgpfX1yZXR1cm4gaS5zb3VyY2U9dCxpfShtcCksUnA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyKXt2YXIgaTtyZXR1cm4gMD09KHQ9K3QpP2k9dD0+LU1hdGgubG9nKHQpOih0PTEvdCxpPW49Pk1hdGgucG93KG4sdCkpLGU9bnVsbD09ZT8wOitlLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7cmV0dXJuIGUrcippKC1NYXRoLmxvZzFwKC1uKCkpKX19cmV0dXJuIGUuc291cmNlPXQsZX0obXApLEZwPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSxmdW5jdGlvbigpe3JldHVybiB0K2UqTWF0aC50YW4oTWF0aC5QSSpuKCkpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfShtcCkscXA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQ9bnVsbD09dD8wOit0LGU9bnVsbD09ZT8xOitlLGZ1bmN0aW9uKCl7dmFyIHI9bigpO3JldHVybiB0K2UqTWF0aC5sb2coci8oMS1yKSl9fXJldHVybiBlLnNvdXJjZT10LGV9KG1wKSxJcD1mdW5jdGlvbiB0KG4pe3ZhciBlPVBwLnNvdXJjZShuKSxyPURwLnNvdXJjZShuKTtmdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT0wLG89dDtvPjE2Oyl7dmFyIGE9TWF0aC5mbG9vciguODc1Km8pLHU9ZShhKSgpO2lmKHU+bylyZXR1cm4gaStyKGEtMSxvL3UpKCk7aSs9YSxvLT11fWZvcih2YXIgYz0tTWF0aC5sb2cxcCgtbigpKSxmPTA7Yzw9bzsrK2YpYy09TWF0aC5sb2cxcCgtbigpKTtyZXR1cm4gaStmfX1yZXR1cm4gaS5zb3VyY2U9dCxpfShtcCk7Y29uc3QgT3A9MS80Mjk0OTY3Mjk2O2Z1bmN0aW9uIFVwKHQsbil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UobikuZG9tYWluKHQpfXJldHVybiB0aGlzfWZ1bmN0aW9uIEJwKHQsbil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5pbnRlcnBvbGF0b3IodCk6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMuZG9tYWluKHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBuP3RoaXMuaW50ZXJwb2xhdG9yKG4pOnRoaXMucmFuZ2Uobil9cmV0dXJuIHRoaXN9Y29uc3QgWXA9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIExwKCl7dmFyIHQ9bmV3IEludGVybk1hcCxuPVtdLGU9W10scj1ZcDtmdW5jdGlvbiBpKGkpe2xldCBvPXQuZ2V0KGkpO2lmKHZvaWQgMD09PW8pe2lmKHIhPT1ZcClyZXR1cm4gcjt0LnNldChpLG89bi5wdXNoKGkpLTEpfXJldHVybiBlW28lZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5zbGljZSgpO249W10sdD1uZXcgSW50ZXJuTWFwO2Zvcihjb25zdCByIG9mIGUpdC5oYXMocil8fHQuc2V0KHIsbi5wdXNoKHIpLTEpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUFycmF5LmZyb20odCksaSk6ZS5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTHAobixlKS51bmtub3duKHIpfSxVcC5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiBqcCgpe3ZhciB0LG4sZT1McCgpLnVua25vd24odm9pZCAwKSxyPWUuZG9tYWluLGk9ZS5yYW5nZSxvPTAsYT0xLHU9ITEsYz0wLGY9MCxzPS41O2Z1bmN0aW9uIGwoKXt2YXIgZT1yKCkubGVuZ3RoLGw9YTxvLGg9bD9hOm8sZD1sP286YTt0PShkLWgpL01hdGgubWF4KDEsZS1jKzIqZiksdSYmKHQ9TWF0aC5mbG9vcih0KSksaCs9KGQtaC10KihlLWMpKSpzLG49dCooMS1jKSx1JiYoaD1NYXRoLnJvdW5kKGgpLG49TWF0aC5yb3VuZChuKSk7dmFyIHA9bHQoZSkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gaCt0Km59KSk7cmV0dXJuIGkobD9wLnJldmVyc2UoKTpwKX1yZXR1cm4gZGVsZXRlIGUudW5rbm93bixlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW28sYV09dCxvPStvLGE9K2EsbCgpKTpbbyxhXX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybltvLGFdPXQsbz0rbyxhPSthLHU9ITAsbCgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBufSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXQsbCgpKTp1fSxlLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9TWF0aC5taW4oMSxmPSt0KSxsKCkpOmN9LGUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWluKDEsdCksbCgpKTpjfSxlLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxsKCkpOmZ9LGUuYWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxsKCkpOnN9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBqcChyKCksW28sYV0pLnJvdW5kKHUpLnBhZGRpbmdJbm5lcihjKS5wYWRkaW5nT3V0ZXIoZikuYWxpZ24ocyl9LFVwLmFwcGx5KGwoKSxhcmd1bWVudHMpfWZ1bmN0aW9uICRwKHQpe3ZhciBuPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuICRwKG4oKSl9LHR9ZnVuY3Rpb24gSHAodCl7cmV0dXJuK3R9dmFyIFhwPVswLDFdO2Z1bmN0aW9uIEdwKHQpe3JldHVybiB0fWZ1bmN0aW9uIFZwKHQsbil7cmV0dXJuKG4tPXQ9K3QpP2Z1bmN0aW9uKGUpe3JldHVybihlLXQpL259OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oaXNOYU4obik/TmFOOi41KX1mdW5jdGlvbiBXcCh0LG4sZSl7dmFyIHI9dFswXSxpPXRbMV0sbz1uWzBdLGE9blsxXTtyZXR1cm4gaTxyPyhyPVZwKGksciksbz1lKGEsbykpOihyPVZwKHIsaSksbz1lKG8sYSkpLGZ1bmN0aW9uKHQpe3JldHVybiBvKHIodCkpfX1mdW5jdGlvbiBacCh0LG4sZSl7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpLTEsaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLG49bi5zbGljZSgpLnJldmVyc2UoKSk7KythPHI7KWlbYV09VnAodFthXSx0W2ErMV0pLG9bYV09ZShuW2FdLG5bYSsxXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPWwodCxuLDEsciktMTtyZXR1cm4gb1tlXShpW2VdKG4pKX19ZnVuY3Rpb24gS3AodCxuKXtyZXR1cm4gbi5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gUXAoKXt2YXIgdCxuLGUscixpLG8sYT1YcCx1PVhwLGM9SHIsZj1HcDtmdW5jdGlvbiBzKCl7dmFyIHQ9TWF0aC5taW4oYS5sZW5ndGgsdS5sZW5ndGgpO3JldHVybiBmIT09R3AmJihmPWZ1bmN0aW9uKHQsbil7dmFyIGU7cmV0dXJuIHQ+biYmKGU9dCx0PW4sbj1lKSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihuLGUpKX19KGFbMF0sYVt0LTFdKSkscj10PjI/WnA6V3AsaT1vPW51bGwsbH1mdW5jdGlvbiBsKG4pe3JldHVybiBudWxsPT1ufHxpc05hTihuPStuKT9lOihpfHwoaT1yKGEubWFwKHQpLHUsYykpKSh0KGYobikpKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGYobigob3x8KG89cih1LGEubWFwKHQpLEJyKSkpKGUpKSl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUFycmF5LmZyb20odCxIcCkscygpKTphLnNsaWNlKCl9LGwucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9QXJyYXkuZnJvbSh0KSxzKCkpOnUuc2xpY2UoKX0sbC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiB1PUFycmF5LmZyb20odCksYz1YcixzKCl9LGwuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ISF0fHxHcCxzKCkpOmYhPT1HcH0sbC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMoKSk6Y30sbC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbCk6ZX0sZnVuY3Rpb24oZSxyKXtyZXR1cm4gdD1lLG49cixzKCl9fWZ1bmN0aW9uIEpwKCl7cmV0dXJuIFFwKCkoR3AsR3ApfWZ1bmN0aW9uIHRnKG4sZSxyLGkpe3ZhciBvLGE9VyhuLGUscik7c3dpdGNoKChpPURjKG51bGw9PWk/IixmIjppKSkudHlwZSl7Y2FzZSJzIjp2YXIgdT1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhlKSk7cmV0dXJuIG51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPSRjKGEsdSkpfHwoaS5wcmVjaXNpb249byksdC5mb3JtYXRQcmVmaXgoaSx1KTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1pLnByZWNpc2lvbnx8aXNOYU4obz1IYyhhLE1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKGUpKSkpfHwoaS5wcmVjaXNpb249by0oImUiPT09aS50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPWpjKGEpKXx8KGkucHJlY2lzaW9uPW8tMiooIiUiPT09aS50eXBlKSl9cmV0dXJuIHQuZm9ybWF0KGkpfWZ1bmN0aW9uIG5nKHQpe3ZhciBuPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPW4oKTtyZXR1cm4gRyhlWzBdLGVbZS5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bigpO3JldHVybiB0ZyhyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LGUpfSx0Lm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciByLGksbz1uKCksYT0wLHU9by5sZW5ndGgtMSxjPW9bYV0sZj1vW3VdLHM9MTA7Zm9yKGY8YyYmKGk9YyxjPWYsZj1pLGk9YSxhPXUsdT1pKTtzLS0gPjA7KXtpZigoaT1WKGMsZixlKSk9PT1yKXJldHVybiBvW2FdPWMsb1t1XT1mLG4obyk7aWYoaT4wKWM9TWF0aC5mbG9vcihjL2kpKmksZj1NYXRoLmNlaWwoZi9pKSppO2Vsc2V7aWYoIShpPDApKWJyZWFrO2M9TWF0aC5jZWlsKGMqaSkvaSxmPU1hdGguZmxvb3IoZippKS9pfXI9aX1yZXR1cm4gdH0sdH1mdW5jdGlvbiBlZyh0LG4pe3ZhciBlLHI9MCxpPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsbz10W3JdLGE9dFtpXTtyZXR1cm4gYTxvJiYoZT1yLHI9aSxpPWUsZT1vLG89YSxhPWUpLHRbcl09bi5mbG9vcihvKSx0W2ldPW4uY2VpbChhKSx0fWZ1bmN0aW9uIHJnKHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBpZyh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gb2codCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiBhZyh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIHVnKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBjZyh0KXtyZXR1cm4obixlKT0+LXQoLW4sZSl9ZnVuY3Rpb24gZmcobil7Y29uc3QgZT1uKHJnLGlnKSxyPWUuZG9tYWluO2xldCBpLG8sYT0xMDtmdW5jdGlvbiB1KCl7cmV0dXJuIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxuPT5NYXRoLmxvZyhuKS90KX0oYSksbz1mdW5jdGlvbih0KXtyZXR1cm4gMTA9PT10P3VnOnQ9PT1NYXRoLkU/TWF0aC5leHA6bj0+TWF0aC5wb3codCxuKX0oYSkscigpWzBdPDA/KGk9Y2coaSksbz1jZyhvKSxuKG9nLGFnKSk6bihyZyxpZyksZX1yZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHUoKSk6YX0sZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksdSgpKTpyKCl9LGUudGlja3M9dD0+e2NvbnN0IG49cigpO2xldCBlPW5bMF0sdT1uW24ubGVuZ3RoLTFdO2NvbnN0IGM9dTxlO2MmJihbZSx1XT1bdSxlXSk7bGV0IGYscyxsPWkoZSksaD1pKHUpO2NvbnN0IGQ9bnVsbD09dD8xMDordDtsZXQgcD1bXTtpZighKGElMSkmJmgtbDxkKXtpZihsPU1hdGguZmxvb3IobCksaD1NYXRoLmNlaWwoaCksZT4wKXtmb3IoO2w8PWg7KytsKWZvcihmPTE7ZjxhOysrZilpZihzPWw8MD9mL28oLWwpOmYqbyhsKSwhKHM8ZSkpe2lmKHM+dSlicmVhaztwLnB1c2gocyl9fWVsc2UgZm9yKDtsPD1oOysrbClmb3IoZj1hLTE7Zj49MTstLWYpaWYocz1sPjA/Zi9vKC1sKTpmKm8obCksIShzPGUpKXtpZihzPnUpYnJlYWs7cC5wdXNoKHMpfTIqcC5sZW5ndGg8ZCYmKHA9RyhlLHUsZCkpfWVsc2UgcD1HKGwsaCxNYXRoLm1pbihoLWwsZCkpLm1hcChvKTtyZXR1cm4gYz9wLnJldmVyc2UoKTpwfSxlLnRpY2tGb3JtYXQ9KG4scik9PntpZihudWxsPT1uJiYobj0xMCksbnVsbD09ciYmKHI9MTA9PT1hPyJzIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYoYSUxfHxudWxsIT0ocj1EYyhyKSkucHJlY2lzaW9ufHwoci50cmltPSEwKSxyPXQuZm9ybWF0KHIpKSxuPT09MS8wKXJldHVybiByO2NvbnN0IHU9TWF0aC5tYXgoMSxhKm4vZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIHQ9PntsZXQgbj10L28oTWF0aC5yb3VuZChpKHQpKSk7cmV0dXJuIG4qYTxhLS41JiYobio9YSksbjw9dT9yKHQpOiIifX0sZS5uaWNlPSgpPT5yKGVnKHIoKSx7Zmxvb3I6dD0+byhNYXRoLmZsb29yKGkodCkpKSxjZWlsOnQ9Pm8oTWF0aC5jZWlsKGkodCkpKX0pKSxlfWZ1bmN0aW9uIHNnKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5zaWduKG4pKk1hdGgubG9nMXAoTWF0aC5hYnMobi90KSl9fWZ1bmN0aW9uIGxnKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5zaWduKG4pKk1hdGguZXhwbTEoTWF0aC5hYnMobikpKnR9fWZ1bmN0aW9uIGhnKHQpe3ZhciBuPTEsZT10KHNnKG4pLGxnKG4pKTtyZXR1cm4gZS5jb25zdGFudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KHNnKG49K2UpLGxnKG4pKTpufSxuZyhlKX1mdW5jdGlvbiBkZyh0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG48MD8tTWF0aC5wb3coLW4sdCk6TWF0aC5wb3cobix0KX19ZnVuY3Rpb24gcGcodCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gZ2codCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiB5Zyh0KXt2YXIgbj10KEdwLEdwKSxlPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09ZT90KEdwLEdwKTouNT09PWU/dChwZyxnZyk6dChkZyhlKSxkZygxL2UpKX1yZXR1cm4gbi5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxyKCkpOmV9LG5nKG4pfWZ1bmN0aW9uIHZnKCl7dmFyIHQ9eWcoUXAoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBLcCh0LHZnKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LFVwLmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIF9nKHQpe3JldHVybiBNYXRoLnNpZ24odCkqdCp0fWZ1bmN0aW9uIGJnKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5zcXJ0KE1hdGguYWJzKHQpKX12YXIgbWc9bmV3IERhdGUseGc9bmV3IERhdGU7ZnVuY3Rpb24gd2codCxuLGUscil7ZnVuY3Rpb24gaShuKXtyZXR1cm4gdChuPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtuKSksbn1yZXR1cm4gaS5mbG9vcj1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKCtuKSksbn0saS5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksbihlLDEpLHQoZSksZX0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgbj1pKHQpLGU9aS5jZWlsKHQpO3JldHVybiB0LW48ZS10P246ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0saS5yYW5nZT1mdW5jdGlvbihlLHIsbyl7dmFyIGEsdT1bXTtpZihlPWkuY2VpbChlKSxvPW51bGw9PW8/MTpNYXRoLmZsb29yKG8pLCEoZTxyJiZvPjApKXJldHVybiB1O2Rve3UucHVzaChhPW5ldyBEYXRlKCtlKSksbihlLG8pLHQoZSl9d2hpbGUoYTxlJiZlPHIpO3JldHVybiB1fSxpLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gd2coKGZ1bmN0aW9uKG4pe2lmKG4+PW4pZm9yKDt0KG4pLCFlKG4pOyluLnNldFRpbWUobi0xKX0pLChmdW5jdGlvbih0LHIpe2lmKHQ+PXQpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO24odCwtMSksIWUodCk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO24odCwxKSwhZSh0KTspO30pKX0sZSYmKGkuY291bnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gbWcuc2V0VGltZSgrbikseGcuc2V0VGltZSgrciksdChtZyksdCh4ZyksTWF0aC5mbG9vcihlKG1nLHhnKSl9LGkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9pLmZpbHRlcihyP2Z1bmN0aW9uKG4pe3JldHVybiByKG4pJXQ9PTB9OmZ1bmN0aW9uKG4pe3JldHVybiBpLmNvdW50KDAsbikldD09MH0pOmk6bnVsbH0pLGl9dmFyIE1nPXdnKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKX0pLChmdW5jdGlvbih0LG4pe3JldHVybiBuLXR9KSk7TWcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT93ZygoZnVuY3Rpb24obil7bi5zZXRUaW1lKE1hdGguZmxvb3Iobi90KSp0KX0pLChmdW5jdGlvbihuLGUpe24uc2V0VGltZSgrbitlKnQpfSksKGZ1bmN0aW9uKG4sZSl7cmV0dXJuKGUtbikvdH0pKTpNZzpudWxsfTt2YXIgQWc9TWcsVGc9TWcucmFuZ2U7Y29uc3QgU2c9MWUzLEVnPTZlNCxrZz0zNmU1LE5nPTg2NGU1LENnPTYwNDhlNSxQZz0yNTkyZTYsemc9MzE1MzZlNjt2YXIgRGc9d2coKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCkpfSksKGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qU2cpfSksKGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvU2d9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLFJnPURnLEZnPURnLnJhbmdlLHFnPXdnKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKlNnKX0pLChmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKkVnKX0pLChmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL0VnfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxJZz1xZyxPZz1xZy5yYW5nZSxVZz13ZygoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSpTZy10LmdldE1pbnV0ZXMoKSpFZyl9KSwoZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbiprZyl9KSwoZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9rZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSkpLEJnPVVnLFlnPVVnLnJhbmdlLExnPXdnKCh0PT50LnNldEhvdXJzKDAsMCwwLDApKSwoKHQsbik9PnQuc2V0RGF0ZSh0LmdldERhdGUoKStuKSksKCh0LG4pPT4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpFZykvTmcpLCh0PT50LmdldERhdGUoKS0xKSksamc9TGcsJGc9TGcucmFuZ2U7ZnVuY3Rpb24gSGcodCl7cmV0dXJuIHdnKChmdW5jdGlvbihuKXtuLnNldERhdGUobi5nZXREYXRlKCktKG4uZ2V0RGF5KCkrNy10KSU3KSxuLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsbil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqbil9KSwoZnVuY3Rpb24odCxuKXtyZXR1cm4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpFZykvQ2d9KSl9dmFyIFhnPUhnKDApLEdnPUhnKDEpLFZnPUhnKDIpLFdnPUhnKDMpLFpnPUhnKDQpLEtnPUhnKDUpLFFnPUhnKDYpLEpnPVhnLnJhbmdlLHR5PUdnLnJhbmdlLG55PVZnLnJhbmdlLGV5PVdnLnJhbmdlLHJ5PVpnLnJhbmdlLGl5PUtnLnJhbmdlLG95PVFnLnJhbmdlLGF5PXdnKChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LG4pe3Quc2V0TW9udGgodC5nZXRNb250aCgpK24pfSksKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksdXk9YXksY3k9YXkucmFuZ2UsZnk9d2coKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsbil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbil9KSwoZnVuY3Rpb24odCxuKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO2Z5LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/d2coKGZ1bmN0aW9uKG4pe24uc2V0RnVsbFllYXIoTWF0aC5mbG9vcihuLmdldEZ1bGxZZWFyKCkvdCkqdCksbi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24obixlKXtuLnNldEZ1bGxZZWFyKG4uZ2V0RnVsbFllYXIoKStlKnQpfSkpOm51bGx9O3ZhciBzeT1meSxseT1meS5yYW5nZSxoeT13ZygoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipFZyl9KSwoZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9FZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSksZHk9aHkscHk9aHkucmFuZ2UsZ3k9d2coKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbiprZyl9KSwoZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9rZ30pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSkpLHl5PWd5LHZ5PWd5LnJhbmdlLF95PXdnKChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK24pfSksKGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvTmd9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSksYnk9X3ksbXk9X3kucmFuZ2U7ZnVuY3Rpb24geHkodCl7cmV0dXJuIHdnKChmdW5jdGlvbihuKXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktKG4uZ2V0VVRDRGF5KCkrNy10KSU3KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqbil9KSwoZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9DZ30pKX12YXIgd3k9eHkoMCksTXk9eHkoMSksQXk9eHkoMiksVHk9eHkoMyksU3k9eHkoNCksRXk9eHkoNSksa3k9eHkoNiksTnk9d3kucmFuZ2UsQ3k9TXkucmFuZ2UsUHk9QXkucmFuZ2Usenk9VHkucmFuZ2UsRHk9U3kucmFuZ2UsUnk9RXkucmFuZ2UsRnk9a3kucmFuZ2UscXk9d2coKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsbil7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrbil9KSwoZnVuY3Rpb24odCxuKXtyZXR1cm4gbi5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMioobi5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pKSxJeT1xeSxPeT1xeS5yYW5nZSxVeT13ZygoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxuKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStuKX0pLChmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KSk7VXkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD93ZygoZnVuY3Rpb24obil7bi5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKG4uZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxuLnNldFVUQ01vbnRoKDAsMSksbi5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihuLGUpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK2UqdCl9KSk6bnVsbH07dmFyIEJ5PVV5LFl5PVV5LnJhbmdlO2Z1bmN0aW9uIEx5KHQsbixlLGksbyxhKXtjb25zdCB1PVtbUmcsMSxTZ10sW1JnLDUsNWUzXSxbUmcsMTUsMTVlM10sW1JnLDMwLDNlNF0sW2EsMSxFZ10sW2EsNSwzZTVdLFthLDE1LDllNV0sW2EsMzAsMThlNV0sW28sMSxrZ10sW28sMywxMDhlNV0sW28sNiwyMTZlNV0sW28sMTIsNDMyZTVdLFtpLDEsTmddLFtpLDIsMTcyOGU1XSxbZSwxLENnXSxbbiwxLFBnXSxbbiwzLDc3NzZlNl0sW3QsMSx6Z11dO2Z1bmN0aW9uIGMobixlLGkpe2NvbnN0IG89TWF0aC5hYnMoZS1uKS9pLGE9cigoKFssLHRdKT0+dCkpLnJpZ2h0KHUsbyk7aWYoYT09PXUubGVuZ3RoKXJldHVybiB0LmV2ZXJ5KFcobi96ZyxlL3pnLGkpKTtpZigwPT09YSlyZXR1cm4gQWcuZXZlcnkoTWF0aC5tYXgoVyhuLGUsaSksMSkpO2NvbnN0W2MsZl09dVtvL3VbYS0xXVsyXTx1W2FdWzJdL28/YS0xOmFdO3JldHVybiBjLmV2ZXJ5KGYpfXJldHVybltmdW5jdGlvbih0LG4sZSl7Y29uc3Qgcj1uPHQ7ciYmKFt0LG5dPVtuLHRdKTtjb25zdCBpPWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnJhbmdlP2U6Yyh0LG4sZSksbz1pP2kucmFuZ2UodCwrbisxKTpbXTtyZXR1cm4gcj9vLnJldmVyc2UoKTpvfSxjXX1jb25zdFtqeSwkeV09THkoQnksSXksd3ksYnkseXksZHkpLFtIeSxYeV09THkoc3ksdXksWGcsamcsQmcsSWcpO2Z1bmN0aW9uIEd5KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIG49bmV3IERhdGUoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpO3JldHVybiBuLnNldEZ1bGxZZWFyKHQueSksbn1yZXR1cm4gbmV3IERhdGUodC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKX1mdW5jdGlvbiBWeSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBuPW5ldyBEYXRlKERhdGUuVVRDKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSk7cmV0dXJuIG4uc2V0VVRDRnVsbFllYXIodC55KSxufXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKX1mdW5jdGlvbiBXeSh0LG4sZSl7cmV0dXJue3k6dCxtOm4sZDplLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gWnkodCl7dmFyIG49dC5kYXRlVGltZSxlPXQuZGF0ZSxyPXQudGltZSxpPXQucGVyaW9kcyxvPXQuZGF5cyxhPXQuc2hvcnREYXlzLHU9dC5tb250aHMsYz10LnNob3J0TW9udGhzLGY9aXYoaSkscz1vdihpKSxsPWl2KG8pLGg9b3YobyksZD1pdihhKSxwPW92KGEpLGc9aXYodSkseT1vdih1KSx2PWl2KGMpLF89b3YoYyksYj17YTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlN2LGU6U3YsZjpQdixnOkx2LEc6JHYsSDpFdixJOmt2LGo6TnYsTDpDdixtOnp2LE06RHYscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0SG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldE1vbnRoKCkvMyl9LFE6ZF8sczpwXyxTOlJ2LHU6RnYsVTpxdixWOk92LHc6VXYsVzpCdix4Om51bGwsWDpudWxsLHk6WXYsWTpqdixaOkh2LCIlIjpoX30sbT17YTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gY1t0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOlh2LGU6WHYsZjpLdixnOmNfLEc6c18sSDpHdixJOlZ2LGo6V3YsTDpadixtOlF2LE06SnYscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6ZF8sczpwXyxTOnRfLHU6bl8sVTplXyxWOmlfLHc6b18sVzphXyx4Om51bGwsWDpudWxsLHk6dV8sWTpmXyxaOmxfLCIlIjpoX30seD17YTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9cC5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9bC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9aC5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9di5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09Xy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9Zy5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09eS5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LGUscil7cmV0dXJuIEEodCxuLGUscil9LGQ6eXYsZTp5dixmOnd2LGc6aHYsRzpsdixIOl92LEk6X3Ysajp2dixMOnh2LG06Z3YsTTpidixwOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1mLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQucD1zLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfSxxOnB2LFE6QXYsczpUdixTOm12LHU6dXYsVTpjdixWOmZ2LHc6YXYsVzpzdix4OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gQSh0LGUsbixyKX0sWDpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIEEodCxyLG4sZSl9LHk6aHYsWTpsdixaOmR2LCIlIjpNdn07ZnVuY3Rpb24gdyh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLG8sYT1bXSx1PS0xLGM9MCxmPXQubGVuZ3RoO2ZvcihlIGluc3RhbmNlb2YgRGF0ZXx8KGU9bmV3IERhdGUoK2UpKTsrK3U8ZjspMzc9PT10LmNoYXJDb2RlQXQodSkmJihhLnB1c2godC5zbGljZShjLHUpKSxudWxsIT0oaT1ReVtyPXQuY2hhckF0KCsrdSldKT9yPXQuY2hhckF0KCsrdSk6aT0iZSI9PT1yPyIgIjoiMCIsKG89bltyXSkmJihyPW8oZSxpKSksYS5wdXNoKHIpLGM9dSsxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UoYyx1KSksYS5qb2luKCIiKX19ZnVuY3Rpb24gTSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLG89V3koMTkwMCx2b2lkIDAsMSk7aWYoQShvLHQsZSs9IiIsMCkhPWUubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG8pcmV0dXJuIG5ldyBEYXRlKG8uUSk7aWYoInMiaW4gbylyZXR1cm4gbmV3IERhdGUoMWUzKm8ucysoIkwiaW4gbz9vLkw6MCkpO2lmKG4mJiEoIloiaW4gbykmJihvLlo9MCksInAiaW4gbyYmKG8uSD1vLkglMTIrMTIqby5wKSx2b2lkIDA9PT1vLm0mJihvLm09InEiaW4gbz9vLnE6MCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KGk9KHI9VnkoV3koby55LDAsMSkpKS5nZXRVVENEYXkoKSxyPWk+NHx8MD09PWk/TXkuY2VpbChyKTpNeShyKSxyPWJ5Lm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0VVRDRnVsbFllYXIoKSxvLm09ci5nZXRVVENNb250aCgpLG8uZD1yLmdldFVUQ0RhdGUoKSsoby53KzYpJTcpOihpPShyPUd5KFd5KG8ueSwwLDEpKSkuZ2V0RGF5KCkscj1pPjR8fDA9PT1pP0dnLmNlaWwocik6R2cocikscj1qZy5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldEZ1bGxZZWFyKCksby5tPXIuZ2V0TW9udGgoKSxvLmQ9ci5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxpPSJaImluIG8/VnkoV3koby55LDAsMSkpLmdldFVUQ0RheSgpOkd5KFd5KG8ueSwwLDEpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKGkrNSklNzpvLncrNypvLlUtKGkrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLFZ5KG8pKTpHeShvKX19ZnVuY3Rpb24gQSh0LG4sZSxyKXtmb3IodmFyIGksbyxhPTAsdT1uLmxlbmd0aCxjPWUubGVuZ3RoO2E8dTspe2lmKHI+PWMpcmV0dXJuLTE7aWYoMzc9PT0oaT1uLmNoYXJDb2RlQXQoYSsrKSkpe2lmKGk9bi5jaGFyQXQoYSsrKSwhKG89eFtpIGluIFF5P24uY2hhckF0KGErKyk6aV0pfHwocj1vKHQsZSxyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPWUuY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfXJldHVybiBiLng9dyhlLGIpLGIuWD13KHIsYiksYi5jPXcobixiKSxtLng9dyhlLG0pLG0uWD13KHIsbSksbS5jPXcobixtKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBuPXcodCs9IiIsYik7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIG49TSh0Kz0iIiwhMSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBuPXcodCs9IiIsbSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIG49TSh0Kz0iIiwhMCk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn19fXZhciBLeSxReT17Ii0iOiIiLF86IiAiLDA6IjAifSxKeT0vXlxzKlxkKy8sdHY9L14lLyxudj0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gZXYodCxuLGUpe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiByKyhvPGU/bmV3IEFycmF5KGUtbysxKS5qb2luKG4pK2k6aSl9ZnVuY3Rpb24gcnYodCl7cmV0dXJuIHQucmVwbGFjZShudiwiXFwkJiIpfWZ1bmN0aW9uIGl2KHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChydikuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIG92KHQpe3JldHVybiBuZXcgTWFwKHQubWFwKCgodCxuKT0+W3QudG9Mb3dlckNhc2UoKSxuXSkpKX1mdW5jdGlvbiBhdih0LG4sZSl7dmFyIHI9SnkuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB1dih0LG4sZSl7dmFyIHI9SnkuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjdih0LG4sZSl7dmFyIHI9SnkuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmdih0LG4sZSl7dmFyIHI9SnkuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVj0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzdih0LG4sZSl7dmFyIHI9SnkuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuVz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsdih0LG4sZSl7dmFyIHI9SnkuZXhlYyhuLnNsaWNlKGUsZSs0KSk7cmV0dXJuIHI/KHQueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBodih0LG4sZSl7dmFyIHI9SnkuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGR2KHQsbixlKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhuLnNsaWNlKGUsZSs2KSk7cmV0dXJuIHI/KHQuWj1yWzFdPzA6LShyWzJdKyhyWzNdfHwiMDAiKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcHYodCxuLGUpe3ZhciByPUp5LmV4ZWMobi5zbGljZShlLGUrMSkpO3JldHVybiByPyh0LnE9MypyWzBdLTMsZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ3YodCxuLGUpe3ZhciByPUp5LmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHl2KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHZ2KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5tPTAsdC5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF92KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ2KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG12KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHh2KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8odC5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHd2KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5MPU1hdGguZmxvb3IoclswXS8xZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE12KHQsbixlKXt2YXIgcj10di5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEF2KHQsbixlKXt2YXIgcj1KeS5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LlE9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVHYodCxuLGUpe3ZhciByPUp5LmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQucz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTdih0LG4pe3JldHVybiBldih0LmdldERhdGUoKSxuLDIpfWZ1bmN0aW9uIEV2KHQsbil7cmV0dXJuIGV2KHQuZ2V0SG91cnMoKSxuLDIpfWZ1bmN0aW9uIGt2KHQsbil7cmV0dXJuIGV2KHQuZ2V0SG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBOdih0LG4pe3JldHVybiBldigxK2pnLmNvdW50KHN5KHQpLHQpLG4sMyl9ZnVuY3Rpb24gQ3YodCxuKXtyZXR1cm4gZXYodC5nZXRNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIFB2KHQsbil7cmV0dXJuIEN2KHQsbikrIjAwMCJ9ZnVuY3Rpb24genYodCxuKXtyZXR1cm4gZXYodC5nZXRNb250aCgpKzEsbiwyKX1mdW5jdGlvbiBEdih0LG4pe3JldHVybiBldih0LmdldE1pbnV0ZXMoKSxuLDIpfWZ1bmN0aW9uIFJ2KHQsbil7cmV0dXJuIGV2KHQuZ2V0U2Vjb25kcygpLG4sMil9ZnVuY3Rpb24gRnYodCl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gMD09PW4/NzpufWZ1bmN0aW9uIHF2KHQsbil7cmV0dXJuIGV2KFhnLmNvdW50KHN5KHQpLTEsdCksbiwyKX1mdW5jdGlvbiBJdih0KXt2YXIgbj10LmdldERheSgpO3JldHVybiBuPj00fHwwPT09bj9aZyh0KTpaZy5jZWlsKHQpfWZ1bmN0aW9uIE92KHQsbil7cmV0dXJuIHQ9SXYodCksZXYoWmcuY291bnQoc3kodCksdCkrKDQ9PT1zeSh0KS5nZXREYXkoKSksbiwyKX1mdW5jdGlvbiBVdih0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBCdih0LG4pe3JldHVybiBldihHZy5jb3VudChzeSh0KS0xLHQpLG4sMil9ZnVuY3Rpb24gWXYodCxuKXtyZXR1cm4gZXYodC5nZXRGdWxsWWVhcigpJTEwMCxuLDIpfWZ1bmN0aW9uIEx2KHQsbil7cmV0dXJuIGV2KCh0PUl2KHQpKS5nZXRGdWxsWWVhcigpJTEwMCxuLDIpfWZ1bmN0aW9uIGp2KHQsbil7cmV0dXJuIGV2KHQuZ2V0RnVsbFllYXIoKSUxZTQsbiw0KX1mdW5jdGlvbiAkdih0LG4pe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIGV2KCh0PWU+PTR8fDA9PT1lP1pnKHQpOlpnLmNlaWwodCkpLmdldEZ1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gSHYodCl7dmFyIG49dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihuPjA/Ii0iOihuKj0tMSwiKyIpKStldihuLzYwfDAsIjAiLDIpK2V2KG4lNjAsIjAiLDIpfWZ1bmN0aW9uIFh2KHQsbil7cmV0dXJuIGV2KHQuZ2V0VVRDRGF0ZSgpLG4sMil9ZnVuY3Rpb24gR3YodCxuKXtyZXR1cm4gZXYodC5nZXRVVENIb3VycygpLG4sMil9ZnVuY3Rpb24gVnYodCxuKXtyZXR1cm4gZXYodC5nZXRVVENIb3VycygpJTEyfHwxMixuLDIpfWZ1bmN0aW9uIFd2KHQsbil7cmV0dXJuIGV2KDErYnkuY291bnQoQnkodCksdCksbiwzKX1mdW5jdGlvbiBadih0LG4pe3JldHVybiBldih0LmdldFVUQ01pbGxpc2Vjb25kcygpLG4sMyl9ZnVuY3Rpb24gS3YodCxuKXtyZXR1cm4gWnYodCxuKSsiMDAwIn1mdW5jdGlvbiBRdih0LG4pe3JldHVybiBldih0LmdldFVUQ01vbnRoKCkrMSxuLDIpfWZ1bmN0aW9uIEp2KHQsbil7cmV0dXJuIGV2KHQuZ2V0VVRDTWludXRlcygpLG4sMil9ZnVuY3Rpb24gdF8odCxuKXtyZXR1cm4gZXYodC5nZXRVVENTZWNvbmRzKCksbiwyKX1mdW5jdGlvbiBuXyh0KXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiAwPT09bj83Om59ZnVuY3Rpb24gZV8odCxuKXtyZXR1cm4gZXYod3kuY291bnQoQnkodCktMSx0KSxuLDIpfWZ1bmN0aW9uIHJfKHQpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIG4+PTR8fDA9PT1uP1N5KHQpOlN5LmNlaWwodCl9ZnVuY3Rpb24gaV8odCxuKXtyZXR1cm4gdD1yXyh0KSxldihTeS5jb3VudChCeSh0KSx0KSsoND09PUJ5KHQpLmdldFVUQ0RheSgpKSxuLDIpfWZ1bmN0aW9uIG9fKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIGFfKHQsbil7cmV0dXJuIGV2KE15LmNvdW50KEJ5KHQpLTEsdCksbiwyKX1mdW5jdGlvbiB1Xyh0LG4pe3JldHVybiBldih0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gY18odCxuKXtyZXR1cm4gZXYoKHQ9cl8odCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gZl8odCxuKXtyZXR1cm4gZXYodC5nZXRVVENGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIHNfKHQsbil7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gZXYoKHQ9ZT49NHx8MD09PWU/U3kodCk6U3kuY2VpbCh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxZTQsbiw0KX1mdW5jdGlvbiBsXygpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gaF8oKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZF8odCl7cmV0dXJuK3R9ZnVuY3Rpb24gcF8odCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBnXyhuKXtyZXR1cm4gS3k9WnkobiksdC50aW1lRm9ybWF0PUt5LmZvcm1hdCx0LnRpbWVQYXJzZT1LeS5wYXJzZSx0LnV0Y0Zvcm1hdD1LeS51dGNGb3JtYXQsdC51dGNQYXJzZT1LeS51dGNQYXJzZSxLeX10LnRpbWVGb3JtYXQ9dm9pZCAwLHQudGltZVBhcnNlPXZvaWQgMCx0LnV0Y0Zvcm1hdD12b2lkIDAsdC51dGNQYXJzZT12b2lkIDAsZ18oe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgeV89IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7dmFyIHZfPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP2Z1bmN0aW9uKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9OnQudXRjRm9ybWF0KHlfKSxfXz12Xzt2YXIgYl89K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9mdW5jdGlvbih0KXt2YXIgbj1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4obik/bnVsbDpufTp0LnV0Y1BhcnNlKHlfKSxtXz1iXztmdW5jdGlvbiB4Xyh0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gd18odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gTV8odCxuLGUscixpLG8sYSx1LGMsZil7dmFyIHM9SnAoKSxsPXMuaW52ZXJ0LGg9cy5kb21haW4sZD1mKCIuJUwiKSxwPWYoIjolUyIpLGc9ZigiJUk6JU0iKSx5PWYoIiVJICVwIiksdj1mKCIlYSAlZCIpLF89ZigiJWIgJWQiKSxiPWYoIiVCIiksbT1mKCIlWSIpO2Z1bmN0aW9uIHgodCl7cmV0dXJuKGModCk8dD9kOnUodCk8dD9wOmEodCk8dD9nOm8odCk8dD95OnIodCk8dD9pKHQpPHQ/djpfOmUodCk8dD9iOm0pKHQpfXJldHVybiBzLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IERhdGUobCh0KSl9LHMuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goQXJyYXkuZnJvbSh0LHdfKSk6aCgpLm1hcCh4Xyl9LHMudGlja3M9ZnVuY3Rpb24obil7dmFyIGU9aCgpO3JldHVybiB0KGVbMF0sZVtlLmxlbmd0aC0xXSxudWxsPT1uPzEwOm4pfSxzLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09bj94OmYobil9LHMubmljZT1mdW5jdGlvbih0KXt2YXIgZT1oKCk7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJhbmdlfHwodD1uKGVbMF0sZVtlLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpKSx0P2goZWcoZSx0KSk6c30scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEtwKHMsTV8odCxuLGUscixpLG8sYSx1LGMsZikpfSxzfWZ1bmN0aW9uIEFfKCl7dmFyIHQsbixlLHIsaSxvPTAsYT0xLHU9R3AsYz0hMTtmdW5jdGlvbiBmKG4pe3JldHVybiBudWxsPT1ufHxpc05hTihuPStuKT9pOnUoMD09PWU/LjU6KG49KHIobiktdCkqZSxjP01hdGgubWF4KDAsTWF0aC5taW4oMSxuKSk6bikpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlLHI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFtlLHJdPW4sdT10KGUsciksZik6W3UoMCksdSgxKV19fXJldHVybiBmLmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW28sYV09aSx0PXIobz0rbyksbj1yKGE9K2EpLGU9dD09PW4/MDoxLyhuLXQpLGYpOltvLGFdfSxmLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSEhdCxmKTpjfSxmLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGYpOnV9LGYucmFuZ2U9cyhIciksZi5yYW5nZVJvdW5kPXMoWHIpLGYudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGYpOml9LGZ1bmN0aW9uKGkpe3JldHVybiByPWksdD1pKG8pLG49aShhKSxlPXQ9PT1uPzA6MS8obi10KSxmfX1mdW5jdGlvbiBUXyh0LG4pe3JldHVybiBuLmRvbWFpbih0LmRvbWFpbigpKS5pbnRlcnBvbGF0b3IodC5pbnRlcnBvbGF0b3IoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiBTXygpe3ZhciB0PXlnKEFfKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVF8odCxTXygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxCcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gRV8oKXt2YXIgdCxuLGUscixpLG8sYSx1PTAsYz0uNSxmPTEscz0xLGw9R3AsaD0hMTtmdW5jdGlvbiBkKHQpe3JldHVybiBpc05hTih0PSt0KT9hOih0PS41KygodD0rbyh0KSktbikqKHMqdDxzKm4/cjppKSxsKGg/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKTp0KSl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGUscixpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhbZSxyLGldPW4sbD1saSh0LFtlLHIsaV0pLGQpOltsKDApLGwoLjUpLGwoMSldfX1yZXR1cm4gZC5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFt1LGMsZl09YSx0PW8odT0rdSksbj1vKGM9K2MpLGU9byhmPStmKSxyPXQ9PT1uPzA6LjUvKG4tdCksaT1uPT09ZT8wOi41LyhlLW4pLHM9bjx0Py0xOjEsZCk6W3UsYyxmXX0sZC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0hIXQsZCk6aH0sZC5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxkKTpsfSxkLnJhbmdlPXAoSHIpLGQucmFuZ2VSb3VuZD1wKFhyKSxkLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxkKTphfSxmdW5jdGlvbihhKXtyZXR1cm4gbz1hLHQ9YSh1KSxuPWEoYyksZT1hKGYpLHI9dD09PW4/MDouNS8obi10KSxpPW49PT1lPzA6LjUvKGUtbikscz1uPHQ/LTE6MSxkfX1mdW5jdGlvbiBrXygpe3ZhciB0PXlnKEVfKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVF8odCxrXygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxCcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gTl8odCl7Zm9yKHZhciBuPXQubGVuZ3RoLzZ8MCxlPW5ldyBBcnJheShuKSxyPTA7cjxuOyllW3JdPSIjIit0LnNsaWNlKDYqciw2Kisrcik7cmV0dXJuIGV9dmFyIENfPU5fKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxQXz1OXygiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iiksel89Tl8oIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLERfPU5fKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxSXz1OXygiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksRl89Tl8oImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLHFfPU5fKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxJXz1OXygiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksT189Tl8oIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLFVfPU5fKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKSxCXz10PT5Scih0W3QubGVuZ3RoLTFdKSxZXz1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoTl8pLExfPUJfKFlfKSxqXz1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoTl8pLCRfPUJfKGpfKSxIXz1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoTl8pLFhfPUJfKEhfKSxHXz1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoTl8pLFZfPUJfKEdfKSxXXz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoTl8pLFpfPUJfKFdfKSxLXz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoTl8pLFFfPUJfKEtfKSxKXz1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoTl8pLHRiPUJfKEpfKSxuYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoTl8pLGViPUJfKG5iKSxyYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoTl8pLGliPUJfKHJiKSxvYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoTl8pLGFiPUJfKG9iKSx1Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoTl8pLGNiPUJfKHViKSxmYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoTl8pLHNiPUJfKGZiKSxsYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoTl8pLGhiPUJfKGxiKSxkYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoTl8pLHBiPUJfKGRiKSxnYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoTl8pLHliPUJfKGdiKSx2Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoTl8pLF9iPUJfKHZiKSxiYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoTl8pLG1iPUJfKGJiKSx4Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoTl8pLHdiPUJfKHhiKSxNYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoTl8pLEFiPUJfKE1iKSxUYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoTl8pLFNiPUJfKFRiKSxFYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoTl8pLGtiPUJfKEViKSxOYj1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoTl8pLENiPUJfKE5iKSxQYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoTl8pLHpiPUJfKFBiKSxEYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoTl8pLFJiPUJfKERiKSxGYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoTl8pLHFiPUJfKEZiKSxJYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoTl8pLE9iPUJfKEliKSxVYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoTl8pLEJiPUJfKFViKTt2YXIgWWI9c2kod3IoMzAwLC41LDApLHdyKC0yNDAsLjUsMSkpLExiPXNpKHdyKC0xMDAsLjc1LC4zNSksd3IoODAsMS41LC44KSksamI9c2kod3IoMjYwLC43NSwuMzUpLHdyKDgwLDEuNSwuOCkpLCRiPXdyKCk7dmFyIEhiPUZlKCksWGI9TWF0aC5QSS8zLEdiPTIqTWF0aC5QSS8zO2Z1bmN0aW9uIFZiKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGUqbikpKV19fXZhciBXYj1WYihOXygiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLFpiPVZiKE5fKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksS2I9VmIoTl8oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxRYj1WYihOXygiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIEpiKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1jb25zdCB0bT1NYXRoLmFicyxubT1NYXRoLmF0YW4yLGVtPU1hdGguY29zLHJtPU1hdGgubWF4LGltPU1hdGgubWluLG9tPU1hdGguc2luLGFtPU1hdGguc3FydCx1bT0xZS0xMixjbT1NYXRoLlBJLGZtPWNtLzIsc209MipjbTtmdW5jdGlvbiBsbSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9jbTpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gaG0odCl7cmV0dXJuIHQ+PTE/Zm06dDw9LTE/LWZtOk1hdGguYXNpbih0KX1mdW5jdGlvbiBkbSh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBwbSh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBnbSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHltKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHZtKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIF9tKHQsbixlLHIsaSxvLGEsdSl7dmFyIGM9ZS10LGY9ci1uLHM9YS1pLGw9dS1vLGg9bCpjLXMqZjtpZighKGgqaDx1bSkpcmV0dXJuW3QrKGg9KHMqKG4tbyktbCoodC1pKSkvaCkqYyxuK2gqZl19ZnVuY3Rpb24gYm0odCxuLGUscixpLG8sYSl7dmFyIHU9dC1lLGM9bi1yLGY9KGE/bzotbykvYW0odSp1K2MqYykscz1mKmMsbD0tZip1LGg9dCtzLGQ9bitsLHA9ZStzLGc9citsLHk9KGgrcCkvMix2PShkK2cpLzIsXz1wLWgsYj1nLWQsbT1fKl8rYipiLHg9aS1vLHc9aCpnLXAqZCxNPShiPDA/LTE6MSkqYW0ocm0oMCx4KngqbS13KncpKSxBPSh3KmItXypNKS9tLFQ9KC13Kl8tYipNKS9tLFM9KHcqYitfKk0pL20sRT0oLXcqXytiKk0pL20saz1BLXksTj1ULXYsQz1TLXksUD1FLXY7cmV0dXJuIGsqaytOKk4+QypDK1AqUCYmKEE9UyxUPUUpLHtjeDpBLGN5OlQseDAxOi1zLHkwMTotbCx4MTE6QSooaS94LTEpLHkxMTpUKihpL3gtMSl9fXZhciBtbT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24geG0odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIHdtKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBNbSh0KXtyZXR1cm4gbmV3IHdtKHQpfWZ1bmN0aW9uIEFtKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFRtKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFNtKHQsbil7dmFyIGU9SmIoITApLHI9bnVsbCxpPU1tLG89bnVsbDtmdW5jdGlvbiBhKGEpe3ZhciB1LGMsZixzPShhPXhtKGEpKS5sZW5ndGgsbD0hMTtmb3IobnVsbD09ciYmKG89aShmPVBhKCkpKSx1PTA7dTw9czsrK3UpISh1PHMmJmUoYz1hW3VdLHUsYSkpPT09bCYmKChsPSFsKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxsJiZvLnBvaW50KCt0KGMsdSxhKSwrbihjLHUsYSkpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dm9pZCAwPT09dD9BbTpKYih0KSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246dm9pZCAwPT09bj9UbTpKYihuKSxhLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpKYigrbiksYSk6dH0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmIoK3QpLGEpOm59LGEuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpiKCEhdCksYSk6ZX0sYS5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPXImJihvPWkocikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPW89bnVsbDpvPWkocj10KSxhKTpyfSxhfWZ1bmN0aW9uIEVtKHQsbixlKXt2YXIgcj1udWxsLGk9SmIoITApLG89bnVsbCxhPU1tLHU9bnVsbDtmdW5jdGlvbiBjKGMpe3ZhciBmLHMsbCxoLGQscD0oYz14bShjKSkubGVuZ3RoLGc9ITEseT1uZXcgQXJyYXkocCksdj1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PW8mJih1PWEoZD1QYSgpKSksZj0wO2Y8PXA7KytmKXtpZighKGY8cCYmaShoPWNbZl0sZixjKSk9PT1nKWlmKGc9IWcpcz1mLHUuYXJlYVN0YXJ0KCksdS5saW5lU3RhcnQoKTtlbHNle2Zvcih1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLGw9Zi0xO2w+PXM7LS1sKXUucG9pbnQoeVtsXSx2W2xdKTt1LmxpbmVFbmQoKSx1LmFyZWFFbmQoKX1nJiYoeVtmXT0rdChoLGYsYyksdltmXT0rbihoLGYsYyksdS5wb2ludChyPytyKGgsZixjKTp5W2ZdLGU/K2UoaCxmLGMpOnZbZl0pKX1pZihkKXJldHVybiB1PW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiBmKCl7cmV0dXJuIFNtKCkuZGVmaW5lZChpKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dm9pZCAwPT09dD9BbTpKYigrdCksbj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkpiKHZvaWQgMD09PW4/MDorbiksZT0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnZvaWQgMD09PWU/VG06SmIoK2UpLGMueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkpiKCtuKSxyPW51bGwsYyk6dH0sYy54MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkpiKCtuKSxjKTp0fSxjLngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkpiKCt0KSxjKTpyfSxjLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksZT1udWxsLGMpOm59LGMueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksYyk6bn0sYy55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksYyk6ZX0sYy5saW5lWDA9Yy5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gZigpLngodCkueShuKX0sYy5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gZigpLngodCkueShlKX0sYy5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gZigpLngocikueShuKX0sYy5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmIoISF0KSxjKTppfSxjLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbnVsbCE9byYmKHU9YShvKSksYyk6YX0sYy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P289dT1udWxsOnU9YShvPXQpLGMpOm99LGN9ZnVuY3Rpb24ga20odCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gTm0odCl7cmV0dXJuIHR9d20ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsbil9fX07dmFyIENtPXptKE1tKTtmdW5jdGlvbiBQbSh0KXt0aGlzLl9jdXJ2ZT10fWZ1bmN0aW9uIHptKHQpe2Z1bmN0aW9uIG4obil7cmV0dXJuIG5ldyBQbSh0KG4pKX1yZXR1cm4gbi5fY3VydmU9dCxufWZ1bmN0aW9uIERtKHQpe3ZhciBuPXQuY3VydmU7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHptKHQpKTpuKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIFJtKCl7cmV0dXJuIERtKFNtKCkuY3VydmUoQ20pKX1mdW5jdGlvbiBGbSgpe3ZhciB0PUVtKCkuY3VydmUoQ20pLG49dC5jdXJ2ZSxlPXQubGluZVgwLHI9dC5saW5lWDEsaT10LmxpbmVZMCxvPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRG0oZSgpKX0sZGVsZXRlIHQubGluZVgwLHQubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIERtKHIoKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEbShpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gRG0obygpKX0sZGVsZXRlIHQubGluZVkxLHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih6bSh0KSk6bigpLl9jdXJ2ZX0sdH1mdW5jdGlvbiBxbSh0LG4pe3JldHVyblsobj0rbikqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxuKk1hdGguc2luKHQpXX1QbS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLl9jdXJ2ZS5wb2ludChuKk1hdGguc2luKHQpLG4qLU1hdGguY29zKHQpKX19O2NsYXNzIElte2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX3g9bn1hcmVhU3RhcnQoKXt0aGlzLl9saW5lPTB9YXJlYUVuZCgpe3RoaXMuX2xpbmU9TmFOfWxpbmVTdGFydCgpe3RoaXMuX3BvaW50PTB9bGluZUVuZCgpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX1wb2ludCh0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5feD90aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8odGhpcy5feDA9KHRoaXMuX3gwK3QpLzIsdGhpcy5feTAsdGhpcy5feDAsbix0LG4pOnRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArbikvMix0LHRoaXMuX3kwLHQsbil9dGhpcy5feDA9dCx0aGlzLl95MD1ufX1jbGFzcyBPbXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jb250ZXh0PXR9bGluZVN0YXJ0KCl7dGhpcy5fcG9pbnQ9MH1saW5lRW5kKCl7fXBvaW50KHQsbil7aWYodD0rdCxuPStuLDA9PXRoaXMuX3BvaW50KyspdGhpcy5feDA9dCx0aGlzLl95MD1uO2Vsc2V7Y29uc3QgZT1xbSh0aGlzLl94MCx0aGlzLl95MCkscj1xbSh0aGlzLl94MCx0aGlzLl95MD0odGhpcy5feTArbikvMiksaT1xbSh0LHRoaXMuX3kwKSxvPXFtKHQsbik7dGhpcy5fY29udGV4dC5tb3ZlVG8oLi4uZSksdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKC4uLnIsLi4uaSwuLi5vKX19fWZ1bmN0aW9uIFVtKHQpe3JldHVybiBuZXcgSW0odCwhMCl9ZnVuY3Rpb24gQm0odCl7cmV0dXJuIG5ldyBJbSh0LCExKX1mdW5jdGlvbiBZbSh0KXtyZXR1cm4gbmV3IE9tKHQpfWZ1bmN0aW9uIExtKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBqbSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gJG0odCl7bGV0IG49TG0sZT1qbSxyPUFtLGk9VG0sbz1udWxsLGE9bnVsbDtmdW5jdGlvbiB1KCl7bGV0IHU7Y29uc3QgYz1tbS5jYWxsKGFyZ3VtZW50cyksZj1uLmFwcGx5KHRoaXMsYykscz1lLmFwcGx5KHRoaXMsYyk7aWYobnVsbD09byYmKGE9dCh1PVBhKCkpKSxhLmxpbmVTdGFydCgpLGNbMF09ZixhLnBvaW50KCtyLmFwcGx5KHRoaXMsYyksK2kuYXBwbHkodGhpcyxjKSksY1swXT1zLGEucG9pbnQoK3IuYXBwbHkodGhpcyxjKSwraS5hcHBseSh0aGlzLGMpKSxhLmxpbmVFbmQoKSx1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gdS5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCx1KTpufSx1LnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHUpOmV9LHUueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpiKCt0KSx1KTpyfSx1Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksdSk6aX0sdS5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP289YT1udWxsOmE9dChvPW4pLHUpOm99LHV9Y29uc3QgSG09YW0oMyk7dmFyIFhtPXtkcmF3KHQsbil7Y29uc3QgZT0uNTk0MzYqYW0obitpbShuLzI4LC43NSkpLHI9ZS8yLGk9cipIbTt0Lm1vdmVUbygwLGUpLHQubGluZVRvKDAsLWUpLHQubW92ZVRvKC1pLC1yKSx0LmxpbmVUbyhpLHIpLHQubW92ZVRvKC1pLHIpLHQubGluZVRvKGksLXIpfX0sR209e2RyYXcodCxuKXtjb25zdCBlPWFtKG4vY20pO3QubW92ZVRvKGUsMCksdC5hcmMoMCwwLGUsMCxzbSl9fSxWbT17ZHJhdyh0LG4pe2NvbnN0IGU9YW0obi81KS8yO3QubW92ZVRvKC0zKmUsLWUpLHQubGluZVRvKC1lLC1lKSx0LmxpbmVUbygtZSwtMyplKSx0LmxpbmVUbyhlLC0zKmUpLHQubGluZVRvKGUsLWUpLHQubGluZVRvKDMqZSwtZSksdC5saW5lVG8oMyplLGUpLHQubGluZVRvKGUsZSksdC5saW5lVG8oZSwzKmUpLHQubGluZVRvKC1lLDMqZSksdC5saW5lVG8oLWUsZSksdC5saW5lVG8oLTMqZSxlKSx0LmNsb3NlUGF0aCgpfX07Y29uc3QgV209YW0oMS8zKSxabT0yKldtO3ZhciBLbT17ZHJhdyh0LG4pe2NvbnN0IGU9YW0obi9abSkscj1lKldtO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsMCksdC5saW5lVG8oMCxlKSx0LmxpbmVUbygtciwwKSx0LmNsb3NlUGF0aCgpfX0sUW09e2RyYXcodCxuKXtjb25zdCBlPS42MjYyNSphbShuKTt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhlLDApLHQubGluZVRvKDAsZSksdC5saW5lVG8oLWUsMCksdC5jbG9zZVBhdGgoKX19LEptPXtkcmF3KHQsbil7Y29uc3QgZT0uODc1NTkqYW0obi1pbShuLzcsMikpO3QubW92ZVRvKC1lLDApLHQubGluZVRvKGUsMCksdC5tb3ZlVG8oMCxlKSx0LmxpbmVUbygwLC1lKX19LHR4PXtkcmF3KHQsbil7Y29uc3QgZT1hbShuKSxyPS1lLzI7dC5yZWN0KHIscixlLGUpfX0sbng9e2RyYXcodCxuKXtjb25zdCBlPS40NDMxKmFtKG4pO3QubW92ZVRvKGUsZSksdC5saW5lVG8oZSwtZSksdC5saW5lVG8oLWUsLWUpLHQubGluZVRvKC1lLGUpLHQuY2xvc2VQYXRoKCl9fTtjb25zdCBleD1vbShjbS8xMCkvb20oNypjbS8xMCkscng9b20oc20vMTApKmV4LGl4PS1lbShzbS8xMCkqZXg7dmFyIG94PXtkcmF3KHQsbil7Y29uc3QgZT1hbSguODkwODEzMDkxNTI5Mjg1MipuKSxyPXJ4KmUsaT1peCplO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsaSk7Zm9yKGxldCBuPTE7bjw1Oysrbil7Y29uc3Qgbz1zbSpuLzUsYT1lbShvKSx1PW9tKG8pO3QubGluZVRvKHUqZSwtYSplKSx0LmxpbmVUbyhhKnItdSppLHUqcithKmkpfXQuY2xvc2VQYXRoKCl9fTtjb25zdCBheD1hbSgzKTt2YXIgdXg9e2RyYXcodCxuKXtjb25zdCBlPS1hbShuLygzKmF4KSk7dC5tb3ZlVG8oMCwyKmUpLHQubGluZVRvKC1heCplLC1lKSx0LmxpbmVUbyhheCplLC1lKSx0LmNsb3NlUGF0aCgpfX07Y29uc3QgY3g9YW0oMyk7dmFyIGZ4PXtkcmF3KHQsbil7Y29uc3QgZT0uNjgyNCphbShuKSxyPWUvMixpPWUqY3gvMjt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhpLHIpLHQubGluZVRvKC1pLHIpLHQuY2xvc2VQYXRoKCl9fTtjb25zdCBzeD0tLjUsbHg9YW0oMykvMixoeD0xL2FtKDEyKSxkeD0zKihoeC8yKzEpO3ZhciBweD17ZHJhdyh0LG4pe2NvbnN0IGU9YW0obi9keCkscj1lLzIsaT1lKmh4LG89cixhPWUqaHgrZSx1PS1vLGM9YTt0Lm1vdmVUbyhyLGkpLHQubGluZVRvKG8sYSksdC5saW5lVG8odSxjKSx0LmxpbmVUbyhzeCpyLWx4KmksbHgqcitzeCppKSx0LmxpbmVUbyhzeCpvLWx4KmEsbHgqbytzeCphKSx0LmxpbmVUbyhzeCp1LWx4KmMsbHgqdStzeCpjKSx0LmxpbmVUbyhzeCpyK2x4Kmksc3gqaS1seCpyKSx0LmxpbmVUbyhzeCpvK2x4KmEsc3gqYS1seCpvKSx0LmxpbmVUbyhzeCp1K2x4KmMsc3gqYy1seCp1KSx0LmNsb3NlUGF0aCgpfX0sZ3g9e2RyYXcodCxuKXtjb25zdCBlPS42MTg5KmFtKG4taW0obi82LDEuNykpO3QubW92ZVRvKC1lLC1lKSx0LmxpbmVUbyhlLGUpLHQubW92ZVRvKC1lLGUpLHQubGluZVRvKGUsLWUpfX07Y29uc3QgeXg9W0dtLFZtLEttLHR4LG94LHV4LHB4XSx2eD1bR20sSm0sZ3gsZngsWG0sbngsUW1dO2Z1bmN0aW9uIF94KCl7fWZ1bmN0aW9uIGJ4KHQsbixlKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErbikvNiwodC5feTArNCp0Ll95MStlKS82KX1mdW5jdGlvbiBteCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24geHgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHd4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBNeCh0LG4pe3RoaXMuX2Jhc2lzPW5ldyBteCh0KSx0aGlzLl9iZXRhPW59bXgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpieCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpieCh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0seHgucHJvdG90eXBlPXthcmVhU3RhcnQ6X3gsYXJlYUVuZDpfeCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9bix0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK24pLzYpO2JyZWFrO2RlZmF1bHQ6YngodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19LHd4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBlPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStuKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6YngodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19LE14LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aC0xO2lmKGU+MClmb3IodmFyIHIsaT10WzBdLG89blswXSxhPXRbZV0taSx1PW5bZV0tbyxjPS0xOysrYzw9ZTspcj1jL2UsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2NdKygxLXRoaXMuX2JldGEpKihpK3IqYSksdGhpcy5fYmV0YSpuW2NdKygxLXRoaXMuX2JldGEpKihvK3IqdSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrbil9fTt2YXIgQXg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiAxPT09bj9uZXcgbXgodCk6bmV3IE14KHQsbil9cmV0dXJuIGUuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC44NSk7ZnVuY3Rpb24gVHgodCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLW4pLHQuX3kyK3QuX2sqKHQuX3kxLWUpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBTeCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9U3gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOlR4KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpUeCh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIEV4PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFN4KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIGt4KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1reC5wcm90b3R5cGU9e2FyZWFTdGFydDpfeCxhcmVhRW5kOl94LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6VHgodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBOeD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBreCh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtmdW5jdGlvbiBDeCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9Q3gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6VHgodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBQeD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBDeCh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtmdW5jdGlvbiB6eCh0LG4sZSl7dmFyIHI9dC5feDEsaT10Ll95MSxvPXQuX3gyLGE9dC5feTI7aWYodC5fbDAxX2E+dW0pe3ZhciB1PTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqdS10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9jLGk9KGkqdS10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9jfWlmKHQuX2wyM19hPnVtKXt2YXIgZj0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxzPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtvPShvKmYrdC5feDEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9zLGE9KGEqZit0Ll95MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL3N9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxvLGEsdC5feDIsdC5feTIpfWZ1bmN0aW9uIER4KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59RHgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp6eCh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBSeD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IER4KHQsbik6bmV3IFN4KHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7ZnVuY3Rpb24gRngodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1GeC5wcm90b3R5cGU9e2FyZWFTdGFydDpfeCxhcmVhRW5kOl94LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PW4pO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9bjticmVhaztkZWZhdWx0Onp4KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIHF4PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgRngodCxuKTpuZXcga3godCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiBJeCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufUl4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp6eCh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBPeD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IEl4KHQsbik6bmV3IEN4KHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7ZnVuY3Rpb24gVXgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEJ4KHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBZeCh0LG4sZSl7dmFyIHI9dC5feDEtdC5feDAsaT1uLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksYT0oZS10Ll95MSkvKGl8fHI8MCYmLTApLHU9KG8qaSthKnIpLyhyK2kpO3JldHVybihCeChvKStCeChhKSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnMoYSksLjUqTWF0aC5hYnModSkpfHwwfWZ1bmN0aW9uIEx4KHQsbil7dmFyIGU9dC5feDEtdC5feDA7cmV0dXJuIGU/KDMqKHQuX3kxLXQuX3kwKS9lLW4pLzI6bn1mdW5jdGlvbiBqeCh0LG4sZSl7dmFyIHI9dC5feDAsaT10Ll95MCxvPXQuX3gxLGE9dC5feTEsdT0oby1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK3UsaSt1Km4sby11LGEtdSplLG8sYSl9ZnVuY3Rpb24gJHgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEh4KHQpe3RoaXMuX2NvbnRleHQ9bmV3IFh4KHQpfWZ1bmN0aW9uIFh4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBHeCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gVngodCl7dmFyIG4sZSxyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxuPTE7bjxyLTE7KytuKWlbbl09MSxvW25dPTQsYVtuXT00KnRbbl0rMip0W24rMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KnRbci0xXSt0W3JdLG49MTtuPHI7KytuKWU9aVtuXS9vW24tMV0sb1tuXS09ZSxhW25dLT1lKmFbbi0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sbj1yLTI7bj49MDstLW4paVtuXT0oYVtuXS1pW24rMV0pL29bbl07Zm9yKG9bci0xXT0odFtyXStpW3ItMV0pLzIsbj0wO248ci0xOysrbilvW25dPTIqdFtuKzFdLWlbbisxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBXeCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PW59ZnVuY3Rpb24gWngodCxuKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIGUscixpLG89MSxhPXRbblswXV0sdT1hLmxlbmd0aDtvPGk7KytvKWZvcihyPWEsYT10W25bb11dLGU9MDtlPHU7KytlKWFbZV1bMV0rPWFbZV1bMF09aXNOYU4ocltlXVsxXSk/cltlXVswXTpyW2VdWzFdfWZ1bmN0aW9uIEt4KHQpe2Zvcih2YXIgbj10Lmxlbmd0aCxlPW5ldyBBcnJheShuKTstLW4+PTA7KWVbbl09bjtyZXR1cm4gZX1mdW5jdGlvbiBReCh0LG4pe3JldHVybiB0W25dfWZ1bmN0aW9uIEp4KHQpe2NvbnN0IG49W107cmV0dXJuIG4ua2V5PXQsbn1mdW5jdGlvbiB0dyh0KXt2YXIgbj10Lm1hcChudyk7cmV0dXJuIEt4KHQpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXX0pKX1mdW5jdGlvbiBudyh0KXtmb3IodmFyIG4sZT0tMSxyPTAsaT10Lmxlbmd0aCxvPS0xLzA7KytlPGk7KShuPSt0W2VdWzFdKT5vJiYobz1uLHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZXcodCl7dmFyIG49dC5tYXAocncpO3JldHVybiBLeCh0KS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuW3RdLW5bZV19KSl9ZnVuY3Rpb24gcncodCl7Zm9yKHZhciBuLGU9MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShuPSt0W3JdWzFdKSYmKGUrPW4pO3JldHVybiBlfVV4LnByb3RvdHlwZT17YXJlYVN0YXJ0Ol94LGFyZWFFbmQ6X3gsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3Q9K3Qsbj0rbix0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsbikpfX0sJHgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmp4KHRoaXMsdGhpcy5fdDAsTHgodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1OYU47aWYobj0rbiwodD0rdCkhPT10aGlzLl94MXx8biE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLGp4KHRoaXMsTHgodGhpcyxlPVl4KHRoaXMsdCxuKSksZSk7YnJlYWs7ZGVmYXVsdDpqeCh0aGlzLHRoaXMuX3QwLGU9WXgodGhpcyx0LG4pKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW4sdGhpcy5fdDA9ZX19fSwoSHgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoJHgucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxuKXskeC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLG4sdCl9LFh4LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGV4dC5tb3ZlVG8obix0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGV4dC5saW5lVG8obix0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4sdCxyLGUsbyxpKX19LEd4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsbj10aGlzLl95LGU9dC5sZW5ndGg7aWYoZSlpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sblswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxuWzBdKSwyPT09ZSl0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLG5bMV0pO2Vsc2UgZm9yKHZhciByPVZ4KHQpLGk9Vngobiksbz0wLGE9MTthPGU7KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oclswXVtvXSxpWzBdW29dLHJbMV1bb10saVsxXVtvXSx0W2FdLG5bYV0pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PWUpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtuKX19LFd4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsbiksdGhpcy5fY29udGV4dC5saW5lVG8odCxuKTtlbHNle3ZhciBlPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKGUsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8oZSxuKX19dGhpcy5feD10LHRoaXMuX3k9bn19O3ZhciBpdz10PT4oKT0+dDtmdW5jdGlvbiBvdyh0LHtzb3VyY2VFdmVudDpuLHRhcmdldDplLHRyYW5zZm9ybTpyLGRpc3BhdGNoOml9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOml9fSl9ZnVuY3Rpb24gYXcodCxuLGUpe3RoaXMuaz10LHRoaXMueD1uLHRoaXMueT1lfWF3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6YXcsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IGF3KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gMD09PXQmMD09PW4/dGhpczpuZXcgYXcodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKm4pfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgdXc9bmV3IGF3KDEsMCwwKTtmdW5jdGlvbiBjdyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIHV3O3JldHVybiB0Ll9fem9vbX1mdW5jdGlvbiBmdyh0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHN3KHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGx3KHQpe3JldHVybiEodC5jdHJsS2V5JiYid2hlZWwiIT09dC50eXBlfHx0LmJ1dHRvbil9ZnVuY3Rpb24gaHcoKXt2YXIgdD10aGlzO3JldHVybiB0IGluc3RhbmNlb2YgU1ZHRWxlbWVudD8odD10Lm93bmVyU1ZHRWxlbWVudHx8dCkuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFt0LmNsaWVudFdpZHRoLHQuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gZHcoKXtyZXR1cm4gdGhpcy5fX3pvb218fHV3fWZ1bmN0aW9uIHB3KHQpe3JldHVybi10LmRlbHRhWSooMT09PXQuZGVsdGFNb2RlPy4wNTp0LmRlbHRhTW9kZT8xOi4wMDIpKih0LmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24gZ3coKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24geXcodCxuLGUpe3ZhciByPXQuaW52ZXJ0WChuWzBdWzBdKS1lWzBdWzBdLGk9dC5pbnZlcnRYKG5bMV1bMF0pLWVbMV1bMF0sbz10LmludmVydFkoblswXVsxXSktZVswXVsxXSxhPXQuaW52ZXJ0WShuWzFdWzFdKS1lWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfWN3LnByb3RvdHlwZT1hdy5wcm90b3R5cGUsdC5BZGRlcj1ULHQuRGVsYXVuYXk9a3UsdC5Gb3JtYXRTcGVjaWZpZXI9UmMsdC5JbnRlcm5NYXA9SW50ZXJuTWFwLHQuSW50ZXJuU2V0PUludGVyblNldCx0Lk5vZGU9RWQsdC5Wb3Jvbm9pPXd1LHQuWm9vbVRyYW5zZm9ybT1hdyx0LmFjdGl2ZT1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaT10Ll9fdHJhbnNpdGlvbjtpZihpKWZvcihyIGluIG49bnVsbD09bj9udWxsOm4rIiIsaSlpZigoZT1pW3JdKS5zdGF0ZT4xJiZlLm5hbWU9PT1uKXJldHVybiBuZXcgbG8oW1t0XV0sQm8sbiwrcik7cmV0dXJuIG51bGx9LHQuYXJjPWZ1bmN0aW9uKCl7dmFyIHQ9ZG0sbj1wbSxlPUpiKDApLHI9bnVsbCxpPWdtLG89eW0sYT12bSx1PW51bGw7ZnVuY3Rpb24gYygpe3ZhciBjLGYscz0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1mbSxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLWZtLHA9dG0oZC1oKSxnPWQ+aDtpZih1fHwodT1jPVBhKCkpLGw8cyYmKGY9bCxsPXMscz1mKSxsPnVtKWlmKHA+c20tdW0pdS5tb3ZlVG8obCplbShoKSxsKm9tKGgpKSx1LmFyYygwLDAsbCxoLGQsIWcpLHM+dW0mJih1Lm1vdmVUbyhzKmVtKGQpLHMqb20oZCkpLHUuYXJjKDAsMCxzLGQsaCxnKSk7ZWxzZXt2YXIgeSx2LF89aCxiPWQsbT1oLHg9ZCx3PXAsTT1wLEE9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixUPUE+dW0mJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphbShzKnMrbCpsKSksUz1pbSh0bShsLXMpLzIsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxFPVMsaz1TO2lmKFQ+dW0pe3ZhciBOPWhtKFQvcypvbShBKSksQz1obShUL2wqb20oQSkpOyh3LT0yKk4pPnVtPyhtKz1OKj1nPzE6LTEseC09Tik6KHc9MCxtPXg9KGgrZCkvMiksKE0tPTIqQyk+dW0/KF8rPUMqPWc/MTotMSxiLT1DKTooTT0wLF89Yj0oaCtkKS8yKX12YXIgUD1sKmVtKF8pLHo9bCpvbShfKSxEPXMqZW0oeCksUj1zKm9tKHgpO2lmKFM+dW0pe3ZhciBGLHE9bCplbShiKSxJPWwqb20oYiksTz1zKmVtKG0pLFU9cypvbShtKTtpZihwPGNtJiYoRj1fbShQLHosTyxVLHEsSSxELFIpKSl7dmFyIEI9UC1GWzBdLFk9ei1GWzFdLEw9cS1GWzBdLGo9SS1GWzFdLCQ9MS9vbShsbSgoQipMK1kqaikvKGFtKEIqQitZKlkpKmFtKEwqTCtqKmopKSkvMiksSD1hbShGWzBdKkZbMF0rRlsxXSpGWzFdKTtFPWltKFMsKHMtSCkvKCQtMSkpLGs9aW0oUywobC1IKS8oJCsxKSl9fU0+dW0/az51bT8oeT1ibShPLFUsUCx6LGwsayxnKSx2PWJtKHEsSSxELFIsbCxrLGcpLHUubW92ZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksazxTP3UuYXJjKHkuY3gseS5jeSxrLG5tKHkueTAxLHkueDAxKSxubSh2LnkwMSx2LngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksayxubSh5LnkwMSx5LngwMSksbm0oeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAsbCxubSh5LmN5K3kueTExLHkuY3greS54MTEpLG5tKHYuY3krdi55MTEsdi5jeCt2LngxMSksIWcpLHUuYXJjKHYuY3gsdi5jeSxrLG5tKHYueTExLHYueDExKSxubSh2LnkwMSx2LngwMSksIWcpKSk6KHUubW92ZVRvKFAseiksdS5hcmMoMCwwLGwsXyxiLCFnKSk6dS5tb3ZlVG8oUCx6KSxzPnVtJiZ3PnVtP0U+dW0/KHk9Ym0oRCxSLHEsSSxzLC1FLGcpLHY9Ym0oUCx6LE8sVSxzLC1FLGcpLHUubGluZVRvKHkuY3greS54MDEseS5jeSt5LnkwMSksRTxTP3UuYXJjKHkuY3gseS5jeSxFLG5tKHkueTAxLHkueDAxKSxubSh2LnkwMSx2LngwMSksIWcpOih1LmFyYyh5LmN4LHkuY3ksRSxubSh5LnkwMSx5LngwMSksbm0oeS55MTEseS54MTEpLCFnKSx1LmFyYygwLDAscyxubSh5LmN5K3kueTExLHkuY3greS54MTEpLG5tKHYuY3krdi55MTEsdi5jeCt2LngxMSksZyksdS5hcmModi5jeCx2LmN5LEUsbm0odi55MTEsdi54MTEpLG5tKHYueTAxLHYueDAxKSwhZykpKTp1LmFyYygwLDAscyx4LG0sZyk6dS5saW5lVG8oRCxSKX1lbHNlIHUubW92ZVRvKDAsMCk7aWYodS5jbG9zZVBhdGgoKSxjKXJldHVybiB1PW51bGwsYysiInx8bnVsbH1yZXR1cm4gYy5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1jbS8yO3JldHVybltlbShyKSplLG9tKHIpKmVdfSxjLmlubmVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246SmIoK24pLGMpOnR9LGMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksYyk6bn0sYy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksYyk6ZX0sYy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmIoK3QpLGMpOnJ9LGMuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpiKCt0KSxjKTppfSxjLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmIoK3QpLGMpOm99LGMucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksYyk6YX0sYy5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PXQ/bnVsbDp0LGMpOnV9LGN9LHQuYXJlYT1FbSx0LmFyZWFSYWRpYWw9Rm0sdC5hc2NlbmRpbmc9bix0LmF1dG9UeXBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0KXt2YXIgZSxyLGk9dFtuXS50cmltKCk7aWYoaSlpZigidHJ1ZSI9PT1pKWk9ITA7ZWxzZSBpZigiZmFsc2UiPT09aSlpPSExO2Vsc2UgaWYoIk5hTiI9PT1pKWk9TmFOO2Vsc2UgaWYoaXNOYU4oZT0raSkpe2lmKCEocj1pLm1hdGNoKC9eKFstK11cZHsyfSk/XGR7NH0oLVxkezJ9KC1cZHsyfSk/KT8oVFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkezN9KT8pPyhafFstK11cZHsyfTpcZHsyfSk/KT8kLykpKWNvbnRpbnVlO1F1JiZyWzRdJiYhcls3XSYmKGk9aS5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxpPW5ldyBEYXRlKGkpfWVsc2UgaT1lO2Vsc2UgaT1udWxsO3Rbbl09aX1yZXR1cm4gdH0sdC5heGlzQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBFdCgzLHQpfSx0LmF4aXNMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBFdCg0LHQpfSx0LmF4aXNSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gRXQoMix0KX0sdC5heGlzVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBFdCgxLHQpfSx0LmJpbj1RLHQuYmlzZWN0PWwsdC5iaXNlY3RDZW50ZXI9cyx0LmJpc2VjdExlZnQ9Zix0LmJpc2VjdFJpZ2h0PWMsdC5iaXNlY3Rvcj1yLHQuYmxvYj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oSnUpfSx0LmJsdXI9ZnVuY3Rpb24odCxuKXtpZighKChuPStuKT49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgciIpO2xldCBlPXQubGVuZ3RoO2lmKCEoKGU9TWF0aC5mbG9vcihlKSk+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKCJpbnZhbGlkIGxlbmd0aCIpO2lmKCFlfHwhbilyZXR1cm4gdDtjb25zdCByPXYobiksaT10LnNsaWNlKCk7cmV0dXJuIHIodCxpLDAsZSwxKSxyKGksdCwwLGUsMSkscih0LGksMCxlLDEpLHR9LHQuYmx1cjI9aCx0LmJsdXJJbWFnZT1kLHQuYnJ1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gcGEoZWEpfSx0LmJydXNoU2VsZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBuPXQuX19icnVzaDtyZXR1cm4gbj9uLmRpbS5vdXRwdXQobi5zZWxlY3Rpb24pOm51bGx9LHQuYnJ1c2hYPWZ1bmN0aW9uKCl7cmV0dXJuIHBhKHRhKX0sdC5icnVzaFk9ZnVuY3Rpb24oKXtyZXR1cm4gcGEobmEpfSx0LmJ1ZmZlcj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4odGMpfSx0LmNob3JkPWZ1bmN0aW9uKCl7cmV0dXJuIFRhKCExLCExKX0sdC5jaG9yZERpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIFRhKCEwLCExKX0sdC5jaG9yZFRyYW5zcG9zZT1mdW5jdGlvbigpe3JldHVybiBUYSghMSwhMCl9LHQuY2x1c3Rlcj1mdW5jdGlvbigpe3ZhciB0PV9kLG49MSxlPTEscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBvLGE9MDtpLmVhY2hBZnRlcigoZnVuY3Rpb24obil7dmFyIGU9bi5jaGlsZHJlbjtlPyhuLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGJkLDApL3QubGVuZ3RofShlKSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UobWQsMCl9KGUpKToobi54PW8/YSs9dChuLG8pOjAsbi55PTAsbz1uKX0pKTt2YXIgdT1mdW5jdGlvbih0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bMF07cmV0dXJuIHR9KGkpLGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uW24ubGVuZ3RoLTFdO3JldHVybiB0fShpKSxmPXUueC10KHUsYykvMixzPWMueCt0KGMsdSkvMjtyZXR1cm4gaS5lYWNoQWZ0ZXIocj9mdW5jdGlvbih0KXt0Lng9KHQueC1pLngpKm4sdC55PShpLnktdC55KSplfTpmdW5jdGlvbih0KXt0Lng9KHQueC1mKS8ocy1mKSpuLHQueT0oMS0oaS55P3QueS9pLnk6MSkpKmV9KX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4saSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLG49K3RbMF0sZT0rdFsxXSxpKTpyP251bGw6W24sZV19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsbj0rdFswXSxlPSt0WzFdLGkpOnI/W24sZV06bnVsbH0saX0sdC5jb2xvcj1QZSx0LmNvbnRvdXJEZW5zaXR5PWZ1bmN0aW9uKCl7dmFyIHQ9S2Esbj1RYSxlPUphLHI9OTYwLGk9NTAwLG89MjAsYT0yLHU9MypvLGM9cisyKnU+PmEsZj1pKzIqdT4+YSxzPSRhKDIwKTtmdW5jdGlvbiBsKHIpe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoYypmKSxzPU1hdGgucG93KDIsLWEpLGw9LTE7Zm9yKGNvbnN0IG8gb2Ygcil7dmFyIGQ9KHQobywrK2wscikrdSkqcyxwPShuKG8sbCxyKSt1KSpzLGc9K2UobyxsLHIpO2lmKGQ+PTAmJmQ8YyYmcD49MCYmcDxmKXt2YXIgeT1NYXRoLmZsb29yKGQpLHY9TWF0aC5mbG9vcihwKSxfPWQteS0uNSxiPXAtdi0uNTtpW3krdipjXSs9KDEtXykqKDEtYikqZyxpW3krMSt2KmNdKz1fKigxLWIpKmcsaVt5KzErKHYrMSkqY10rPV8qYipnLGlbeSsodisxKSpjXSs9KDEtXykqYipnfX1yZXR1cm4gaCh7ZGF0YTppLHdpZHRoOmMsaGVpZ2h0OmZ9LG8qcyksaX1mdW5jdGlvbiBkKHQpe3ZhciBuPWwodCksZT1zKG4pLHI9TWF0aC5wb3coMiwyKmEpO3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1HKE51bWJlci5NSU5fVkFMVUUsSihuKS9yLGUpKSxaYSgpLnNpemUoW2MsZl0pLnRocmVzaG9sZHMoZS5tYXAoKHQ9PnQqcikpKShuKS5tYXAoKCh0LG4pPT4odC52YWx1ZT0rZVtuXSxwKHQpKSkpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQuY29vcmRpbmF0ZXMuZm9yRWFjaChnKSx0fWZ1bmN0aW9uIGcodCl7dC5mb3JFYWNoKHkpfWZ1bmN0aW9uIHkodCl7dC5mb3JFYWNoKHYpfWZ1bmN0aW9uIHYodCl7dFswXT10WzBdKk1hdGgucG93KDIsYSktdSx0WzFdPXRbMV0qTWF0aC5wb3coMixhKS11fWZ1bmN0aW9uIF8oKXtyZXR1cm4gYz1yKzIqKHU9MypvKT4+YSxmPWkrMip1Pj5hLGR9cmV0dXJuIGQuY29udG91cnM9ZnVuY3Rpb24odCl7dmFyIG49bCh0KSxlPVphKCkuc2l6ZShbYyxmXSkscj1NYXRoLnBvdygyLDIqYSksaT10PT57dD0rdDt2YXIgaT1wKGUuY29udG91cihuLHQqcikpO3JldHVybiBpLnZhbHVlPXQsaX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJtYXgiLHtnZXQ6KCk9Pkoobikvcn0pLGl9LGQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOiRhKCtuKSxkKTp0fSxkLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokYSgrdCksZCk6bn0sZC53ZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDokYSgrdCksZCk6ZX0sZC5zaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltyLGldO3ZhciBuPSt0WzBdLGU9K3RbMV07aWYoIShuPj0wJiZlPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiByPW4saT1lLF8oKX0sZC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8YTtpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBhPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLF8oKX0sZC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT8kYShMYS5jYWxsKHQpKTokYSh0KSxkKTpzfSxkLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KG8qKG8rMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIG89KE1hdGguc3FydCg0KnQqdCsxKS0xKS8yLF8oKX0sZH0sdC5jb250b3Vycz1aYSx0LmNvdW50PV8sdC5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFduKFV0KHQpLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSl9LHQuY3JlYXRvcj1VdCx0LmNyb3NzPWZ1bmN0aW9uKC4uLnQpe2NvbnN0IG49ImZ1bmN0aW9uIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJmZ1bmN0aW9uKHQpe3JldHVybiBuPT50KC4uLm4pfSh0LnBvcCgpKSxlPSh0PXQubWFwKHgpKS5tYXAoYikscj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KHIrMSkuZmlsbCgwKSxvPVtdO2lmKHI8MHx8ZS5zb21lKG0pKXJldHVybiBvO2Zvcig7Oyl7by5wdXNoKGkubWFwKCgobixlKT0+dFtlXVtuXSkpKTtsZXQgYT1yO2Zvcig7KytpW2FdPT09ZVthXTspe2lmKDA9PT1hKXJldHVybiBuP28ubWFwKG4pOm87aVthLS1dPTB9fX0sdC5jc3Y9aWMsdC5jc3ZGb3JtYXQ9VXUsdC5jc3ZGb3JtYXRCb2R5PUJ1LHQuY3N2Rm9ybWF0Um93PUx1LHQuY3N2Rm9ybWF0Um93cz1ZdSx0LmNzdkZvcm1hdFZhbHVlPWp1LHQuY3N2UGFyc2U9SXUsdC5jc3ZQYXJzZVJvd3M9T3UsdC5jdWJlaGVsaXg9d3IsdC5jdW1zdW09ZnVuY3Rpb24odCxuKXt2YXIgZT0wLHI9MDtyZXR1cm4gRmxvYXQ2NEFycmF5LmZyb20odCx2b2lkIDA9PT1uP3Q9PmUrPSt0fHwwOmk9PmUrPStuKGkscisrLHQpfHwwKX0sdC5jdXJ2ZUJhc2lzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbXgodCl9LHQuY3VydmVCYXNpc0Nsb3NlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHh4KHQpfSx0LmN1cnZlQmFzaXNPcGVuPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd3godCl9LHQuY3VydmVCdW1wWD1VbSx0LmN1cnZlQnVtcFk9Qm0sdC5jdXJ2ZUJ1bmRsZT1BeCx0LmN1cnZlQ2FyZGluYWw9RXgsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPU54LHQuY3VydmVDYXJkaW5hbE9wZW49UHgsdC5jdXJ2ZUNhdG11bGxSb209UngsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9cXgsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPU94LHQuY3VydmVMaW5lYXI9TW0sdC5jdXJ2ZUxpbmVhckNsb3NlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFV4KHQpfSx0LmN1cnZlTW9ub3RvbmVYPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgJHgodCl9LHQuY3VydmVNb25vdG9uZVk9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBIeCh0KX0sdC5jdXJ2ZU5hdHVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHeCh0KX0sdC5jdXJ2ZVN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBXeCh0LC41KX0sdC5jdXJ2ZVN0ZXBBZnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFd4KHQsMSl9LHQuY3VydmVTdGVwQmVmb3JlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgV3godCwwKX0sdC5kZXNjZW5kaW5nPWUsdC5kZXZpYXRpb249TSx0LmRpZmZlcmVuY2U9ZnVuY3Rpb24odCwuLi5uKXt0PW5ldyBJbnRlcm5TZXQodCk7Zm9yKGNvbnN0IGUgb2Ygbilmb3IoY29uc3QgbiBvZiBlKXQuZGVsZXRlKG4pO3JldHVybiB0fSx0LmRpc2pvaW50PWZ1bmN0aW9uKHQsbil7Y29uc3QgZT1uW1N5bWJvbC5pdGVyYXRvcl0oKSxyPW5ldyBJbnRlcm5TZXQ7Zm9yKGNvbnN0IG4gb2YgdCl7aWYoci5oYXMobikpcmV0dXJuITE7bGV0IHQsaTtmb3IoOyh7dmFsdWU6dCxkb25lOml9PWUubmV4dCgpKSYmIWk7KXtpZihPYmplY3QuaXMobix0KSlyZXR1cm4hMTtyLmFkZCh0KX19cmV0dXJuITB9LHQuZGlzcGF0Y2g9TnQsdC5kcmFnPWZ1bmN0aW9uKCl7dmFyIHQsbixlLHIsaT1mZSxvPXNlLGE9bGUsdT1oZSxjPXt9LGY9TnQoInN0YXJ0IiwiZHJhZyIsImVuZCIpLHM9MCxsPTA7ZnVuY3Rpb24gaCh0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIsZCkuZmlsdGVyKHUpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLHkpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsdixuZSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsXykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoYSx1KXtpZighciYmaS5jYWxsKHRoaXMsYSx1KSl7dmFyIGM9Yih0aGlzLG8uY2FsbCh0aGlzLGEsdSksYSx1LCJtb3VzZSIpO2MmJihXbihhLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIscCxlZSkub24oIm1vdXNldXAuZHJhZyIsZyxlZSksb2UoYS52aWV3KSxyZShhKSxlPSExLHQ9YS5jbGllbnRYLG49YS5jbGllbnRZLGMoInN0YXJ0IixhKSl9fWZ1bmN0aW9uIHAocil7aWYoaWUociksIWUpe3ZhciBpPXIuY2xpZW50WC10LG89ci5jbGllbnRZLW47ZT1pKmkrbypvPmx9Yy5tb3VzZSgiZHJhZyIscil9ZnVuY3Rpb24gZyh0KXtXbih0LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLGFlKHQudmlldyxlKSxpZSh0KSxjLm1vdXNlKCJlbmQiLHQpfWZ1bmN0aW9uIHkodCxuKXtpZihpLmNhbGwodGhpcyx0LG4pKXt2YXIgZSxyLGE9dC5jaGFuZ2VkVG91Y2hlcyx1PW8uY2FsbCh0aGlzLHQsbiksYz1hLmxlbmd0aDtmb3IoZT0wO2U8YzsrK2UpKHI9Yih0aGlzLHUsdCxuLGFbZV0uaWRlbnRpZmllcixhW2VdKSkmJihyZSh0KSxyKCJzdGFydCIsdCxhW2VdKSl9fWZ1bmN0aW9uIHYodCl7dmFyIG4sZSxyPXQuY2hhbmdlZFRvdWNoZXMsaT1yLmxlbmd0aDtmb3Iobj0wO248aTsrK24pKGU9Y1tyW25dLmlkZW50aWZpZXJdKSYmKGllKHQpLGUoImRyYWciLHQscltuXSkpfWZ1bmN0aW9uIF8odCl7dmFyIG4sZSxpPXQuY2hhbmdlZFRvdWNoZXMsbz1pLmxlbmd0aDtmb3IociYmY2xlYXJUaW1lb3V0KHIpLHI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtyPW51bGx9KSw1MDApLG49MDtuPG87KytuKShlPWNbaVtuXS5pZGVudGlmaWVyXSkmJihyZSh0KSxlKCJlbmQiLHQsaVtuXSkpfWZ1bmN0aW9uIGIodCxuLGUscixpLG8pe3ZhciB1LGwsZCxwPWYuY29weSgpLGc9dGUob3x8ZSxuKTtpZihudWxsIT0oZD1hLmNhbGwodCxuZXcgY2UoImJlZm9yZXN0YXJ0Iix7c291cmNlRXZlbnQ6ZSx0YXJnZXQ6aCxpZGVudGlmaWVyOmksYWN0aXZlOnMseDpnWzBdLHk6Z1sxXSxkeDowLGR5OjAsZGlzcGF0Y2g6cH0pLHIpKSlyZXR1cm4gdT1kLngtZ1swXXx8MCxsPWQueS1nWzFdfHwwLGZ1bmN0aW9uIGUobyxhLGYpe3ZhciB5LHY9Zztzd2l0Y2gobyl7Y2FzZSJzdGFydCI6Y1tpXT1lLHk9cysrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgY1tpXSwtLXM7Y2FzZSJkcmFnIjpnPXRlKGZ8fGEsbikseT1zfXAuY2FsbChvLHQsbmV3IGNlKG8se3NvdXJjZUV2ZW50OmEsc3ViamVjdDpkLHRhcmdldDpoLGlkZW50aWZpZXI6aSxhY3RpdmU6eSx4OmdbMF0rdSx5OmdbMV0rbCxkeDpnWzBdLXZbMF0sZHk6Z1sxXS12WzFdLGRpc3BhdGNoOnB9KSxyKX19cmV0dXJuIGguZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWUoISF0KSxoKTppfSxoLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnVlKHQpLGgpOm99LGguc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnVlKHQpLGgpOmF9LGgudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWUoISF0KSxoKTp1fSxoLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Zi5vbi5hcHBseShmLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1mP2g6dH0saC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSh0PSt0KSp0LGgpOk1hdGguc3FydChsKX0saH0sdC5kcmFnRGlzYWJsZT1vZSx0LmRyYWdFbmFibGU9YWUsdC5kc3Y9ZnVuY3Rpb24odCxuLGUscil7Mz09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9dm9pZCAwKTt2YXIgaT1GdSh0KTtyZXR1cm4gZWMobixlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJzZSh0LHIpfSkpfSx0LmRzdkZvcm1hdD1GdSx0LmVhc2VCYWNrPURvLHQuZWFzZUJhY2tJbj1Qbyx0LmVhc2VCYWNrSW5PdXQ9RG8sdC5lYXNlQmFja091dD16byx0LmVhc2VCb3VuY2U9Tm8sdC5lYXNlQm91bmNlSW49ZnVuY3Rpb24odCl7cmV0dXJuIDEtTm8oMS10KX0sdC5lYXNlQm91bmNlSW5PdXQ9ZnVuY3Rpb24odCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU5vKDEtdCk6Tm8odC0xKSsxKS8yfSx0LmVhc2VCb3VuY2VPdXQ9Tm8sdC5lYXNlQ2lyY2xlPVNvLHQuZWFzZUNpcmNsZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9LHQuZWFzZUNpcmNsZUluT3V0PVNvLHQuZWFzZUNpcmNsZU91dD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tdCp0KX0sdC5lYXNlQ3ViaWM9dm8sdC5lYXNlQ3ViaWNJbj1mdW5jdGlvbih0KXtyZXR1cm4gdCp0KnR9LHQuZWFzZUN1YmljSW5PdXQ9dm8sdC5lYXNlQ3ViaWNPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuLS10KnQqdCsxfSx0LmVhc2VFbGFzdGljPXFvLHQuZWFzZUVsYXN0aWNJbj1Gbyx0LmVhc2VFbGFzdGljSW5PdXQ9SW8sdC5lYXNlRWxhc3RpY091dD1xbyx0LmVhc2VFeHA9VG8sdC5lYXNlRXhwSW49ZnVuY3Rpb24odCl7cmV0dXJuIEFvKDEtK3QpfSx0LmVhc2VFeHBJbk91dD1Ubyx0LmVhc2VFeHBPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIDEtQW8odCl9LHQuZWFzZUxpbmVhcj10PT4rdCx0LmVhc2VQb2x5PW1vLHQuZWFzZVBvbHlJbj1fbyx0LmVhc2VQb2x5SW5PdXQ9bW8sdC5lYXNlUG9seU91dD1ibyx0LmVhc2VRdWFkPXlvLHQuZWFzZVF1YWRJbj1mdW5jdGlvbih0KXtyZXR1cm4gdCp0fSx0LmVhc2VRdWFkSW5PdXQ9eW8sdC5lYXNlUXVhZE91dD1mdW5jdGlvbih0KXtyZXR1cm4gdCooMi10KX0sdC5lYXNlU2luPU1vLHQuZWFzZVNpbkluPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0rdD8xOjEtTWF0aC5jb3ModCp3byl9LHQuZWFzZVNpbkluT3V0PU1vLHQuZWFzZVNpbk91dD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zaW4odCp3byl9LHQuZXZlcnk9ZnVuY3Rpb24odCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJ0ZXN0IGlzIG5vdCBhIGZ1bmN0aW9uIik7bGV0IGU9LTE7Zm9yKGNvbnN0IHIgb2YgdClpZighbihyLCsrZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0sdC5leHRlbnQ9QSx0LmZjdW1zdW09ZnVuY3Rpb24odCxuKXtjb25zdCBlPW5ldyBUO2xldCByPS0xO3JldHVybiBGbG9hdDY0QXJyYXkuZnJvbSh0LHZvaWQgMD09PW4/dD0+ZS5hZGQoK3R8fDApOmk9PmUuYWRkKCtuKGksKytyLHQpfHwwKSl9LHQuZmlsdGVyPWZ1bmN0aW9uKHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigidGVzdCBpcyBub3QgYSBmdW5jdGlvbiIpO2NvbnN0IGU9W107bGV0IHI9LTE7Zm9yKGNvbnN0IGkgb2YgdCluKGksKytyLHQpJiZlLnB1c2goaSk7cmV0dXJuIGV9LHQuZmxhdEdyb3VwPWZ1bmN0aW9uKHQsLi4ubil7cmV0dXJuIEQoeih0LC4uLm4pLG4pfSx0LmZsYXRSb2xsdXA9ZnVuY3Rpb24odCxuLC4uLmUpe3JldHVybiBEKEYodCxuLC4uLmUpLGUpfSx0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsbil7dmFyIGUscj0xO2Z1bmN0aW9uIGkoKXt2YXIgaSxvLGE9ZS5sZW5ndGgsdT0wLGM9MDtmb3IoaT0wO2k8YTsrK2kpdSs9KG89ZVtpXSkueCxjKz1vLnk7Zm9yKHU9KHUvYS10KSpyLGM9KGMvYS1uKSpyLGk9MDtpPGE7KytpKShvPWVbaV0pLngtPXUsby55LT1jfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1uJiYobj0wKSxpLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10fSxpLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K24saSk6dH0saS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGkpOm59LGkuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsaSk6cn0saX0sdC5mb3JjZUNvbGxpZGU9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGk9MSxvPTE7ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdCxhLGMsZixzLGwsaCxkPW4ubGVuZ3RoLHA9MDtwPG87KytwKWZvcihhPWdjKG4seGMsd2MpLnZpc2l0QWZ0ZXIodSksdD0wO3Q8ZDsrK3QpYz1uW3RdLGw9ZVtjLmluZGV4XSxoPWwqbCxmPWMueCtjLnZ4LHM9Yy55K2MudnksYS52aXNpdChnKTtmdW5jdGlvbiBnKHQsbixlLG8sYSl7dmFyIHU9dC5kYXRhLGQ9dC5yLHA9bCtkO2lmKCF1KXJldHVybiBuPmYrcHx8bzxmLXB8fGU+cytwfHxhPHMtcDtpZih1LmluZGV4PmMuaW5kZXgpe3ZhciBnPWYtdS54LXUudngseT1zLXUueS11LnZ5LHY9ZypnK3kqeTt2PHAqcCYmKDA9PT1nJiYodis9KGc9bWMocikpKmcpLDA9PT15JiYodis9KHk9bWMocikpKnkpLHY9KHAtKHY9TWF0aC5zcXJ0KHYpKSkvdippLGMudngrPShnKj12KSoocD0oZCo9ZCkvKGgrZCkpLGMudnkrPSh5Kj12KSpwLHUudngtPWcqKHA9MS1wKSx1LnZ5LT15KnApfX19ZnVuY3Rpb24gdSh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1lW3QuZGF0YS5pbmRleF07Zm9yKHZhciBuPXQucj0wO248NDsrK24pdFtuXSYmdFtuXS5yPnQuciYmKHQucj10W25dLnIpfWZ1bmN0aW9uIGMoKXtpZihuKXt2YXIgcixpLG89bi5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KG8pLHI9MDtyPG87KytyKWk9bltyXSxlW2kuaW5kZXhdPSt0KGkscixuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWJjKG51bGw9PXQ/MTordCkpLGEuaW5pdGlhbGl6ZT1mdW5jdGlvbih0LGUpe249dCxyPWUsYygpfSxhLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsYSk6b30sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxhKTppfSxhLnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmJjKCtuKSxjKCksYSk6dH0sYX0sdC5mb3JjZUxpbms9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyxhLHU9TWMsYz1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihpW3Quc291cmNlLmluZGV4XSxpW3QudGFyZ2V0LmluZGV4XSl9LGY9YmMoMzApLHM9MTtmdW5jdGlvbiBsKHIpe2Zvcih2YXIgaT0wLHU9dC5sZW5ndGg7aTxzOysraSlmb3IodmFyIGMsZixsLGgsZCxwLGcseT0wO3k8dTsrK3kpZj0oYz10W3ldKS5zb3VyY2UsaD0obD1jLnRhcmdldCkueCtsLnZ4LWYueC1mLnZ4fHxtYyhhKSxkPWwueStsLnZ5LWYueS1mLnZ5fHxtYyhhKSxoKj1wPSgocD1NYXRoLnNxcnQoaCpoK2QqZCkpLWVbeV0pL3AqcipuW3ldLGQqPXAsbC52eC09aCooZz1vW3ldKSxsLnZ5LT1kKmcsZi52eCs9aCooZz0xLWcpLGYudnkrPWQqZ31mdW5jdGlvbiBoKCl7aWYocil7dmFyIGEsYyxmPXIubGVuZ3RoLHM9dC5sZW5ndGgsbD1uZXcgTWFwKHIubWFwKCgodCxuKT0+W3UodCxuLHIpLHRdKSkpO2ZvcihhPTAsaT1uZXcgQXJyYXkoZik7YTxzOysrYSkoYz10W2FdKS5pbmRleD1hLCJvYmplY3QiIT10eXBlb2YgYy5zb3VyY2UmJihjLnNvdXJjZT1BYyhsLGMuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBjLnRhcmdldCYmKGMudGFyZ2V0PUFjKGwsYy50YXJnZXQpKSxpW2Muc291cmNlLmluZGV4XT0oaVtjLnNvdXJjZS5pbmRleF18fDApKzEsaVtjLnRhcmdldC5pbmRleF09KGlbYy50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihhPTAsbz1uZXcgQXJyYXkocyk7YTxzOysrYSljPXRbYV0sb1thXT1pW2Muc291cmNlLmluZGV4XS8oaVtjLnNvdXJjZS5pbmRleF0raVtjLnRhcmdldC5pbmRleF0pO249bmV3IEFycmF5KHMpLGQoKSxlPW5ldyBBcnJheShzKSxwKCl9fWZ1bmN0aW9uIGQoKXtpZihyKWZvcih2YXIgZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSluW2VdPStjKHRbZV0sZSx0KX1mdW5jdGlvbiBwKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rZih0W25dLG4sdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCxuKXtyPXQsYT1uLGgoKX0sbC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGgoKSxsKTp0fSxsLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbCk6dX0sbC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGwpOnN9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiYygrdCksZCgpLGwpOmN9LGwuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiYygrdCkscCgpLGwpOmZ9LGx9LHQuZm9yY2VNYW55Qm9keT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGksbz1iYygtMzApLGE9MSx1PTEvMCxjPS44MTtmdW5jdGlvbiBmKGUpe3ZhciBpLG89dC5sZW5ndGgsYT1nYyh0LFNjLEVjKS52aXNpdEFmdGVyKGwpO2ZvcihyPWUsaT0wO2k8bzsrK2kpbj10W2ldLGEudmlzaXQoaCl9ZnVuY3Rpb24gcygpe2lmKHQpe3ZhciBuLGUscj10Lmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkociksbj0wO248cjsrK24pZT10W25dLGlbZS5pbmRleF09K28oZSxuLHQpfX1mdW5jdGlvbiBsKHQpe3ZhciBuLGUscixvLGEsdT0wLGM9MDtpZih0Lmxlbmd0aCl7Zm9yKHI9bz1hPTA7YTw0OysrYSkobj10W2FdKSYmKGU9TWF0aC5hYnMobi52YWx1ZSkpJiYodSs9bi52YWx1ZSxjKz1lLHIrPWUqbi54LG8rPWUqbi55KTt0Lng9ci9jLHQueT1vL2N9ZWxzZXsobj10KS54PW4uZGF0YS54LG4ueT1uLmRhdGEueTtkb3t1Kz1pW24uZGF0YS5pbmRleF19d2hpbGUobj1uLm5leHQpfXQudmFsdWU9dX1mdW5jdGlvbiBoKHQsbyxmLHMpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBsPXQueC1uLngsaD10Lnktbi55LGQ9cy1vLHA9bCpsK2gqaDtpZihkKmQvYzxwKXJldHVybiBwPHUmJigwPT09bCYmKHArPShsPW1jKGUpKSpsKSwwPT09aCYmKHArPShoPW1jKGUpKSpoKSxwPGEmJihwPU1hdGguc3FydChhKnApKSxuLnZ4Kz1sKnQudmFsdWUqci9wLG4udnkrPWgqdC52YWx1ZSpyL3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PXUpKXsodC5kYXRhIT09bnx8dC5uZXh0KSYmKDA9PT1sJiYocCs9KGw9bWMoZSkpKmwpLDA9PT1oJiYocCs9KGg9bWMoZSkpKmgpLHA8YSYmKHA9TWF0aC5zcXJ0KGEqcCkpKTtkb3t0LmRhdGEhPT1uJiYoZD1pW3QuZGF0YS5pbmRleF0qci9wLG4udngrPWwqZCxuLnZ5Kz1oKmQpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIGYuaW5pdGlhbGl6ZT1mdW5jdGlvbihuLHIpe3Q9bixlPXIscygpfSxmLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YmMoK3QpLHMoKSxmKTpvfSxmLmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCxmKTpNYXRoLnNxcnQoYSl9LGYuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCp0LGYpOk1hdGguc3FydCh1KX0sZi50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQsZik6TWF0aC5zcXJ0KGMpfSxmfSx0LmZvcmNlUmFkaWFsPWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sYT1iYyguMSk7ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGE9MCx1PXIubGVuZ3RoO2E8dTsrK2Epe3ZhciBjPXJbYV0sZj1jLngtbnx8MWUtNixzPWMueS1lfHwxZS02LGw9TWF0aC5zcXJ0KGYqZitzKnMpLGg9KG9bYV0tbCkqaVthXSp0L2w7Yy52eCs9ZipoLGMudnkrPXMqaH19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBuLGU9ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKW9bbl09K3QocltuXSxuLHIpLGlbbl09aXNOYU4ob1tuXSk/MDorYShyW25dLG4scil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1iYygrdCkpLG51bGw9PW4mJihuPTApLG51bGw9PWUmJihlPTApLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YmMoK3QpLGMoKSx1KTphfSx1LnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmJjKCtuKSxjKCksdSk6dH0sdS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHUpOm59LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCx1KTplfSx1fSx0LmZvcmNlU2ltdWxhdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxvPTAsYT0uNix1PW5ldyBNYXAsYz1UaShsKSxmPU50KCJ0aWNrIiwiZW5kIikscz1mdW5jdGlvbigpe2xldCB0PTE7cmV0dXJuKCk9Pih0PSgxNjY0NTI1KnQrMTAxMzkwNDIyMyklVGMpL1RjfSgpO2Z1bmN0aW9uIGwoKXtoKCksZi5jYWxsKCJ0aWNrIixuKSxlPHImJihjLnN0b3AoKSxmLmNhbGwoImVuZCIsbikpfWZ1bmN0aW9uIGgocil7dmFyIGMsZixzPXQubGVuZ3RoO3ZvaWQgMD09PXImJihyPTEpO2Zvcih2YXIgbD0wO2w8cjsrK2wpZm9yKGUrPShvLWUpKmksdS5mb3JFYWNoKChmdW5jdGlvbih0KXt0KGUpfSkpLGM9MDtjPHM7KytjKW51bGw9PShmPXRbY10pLmZ4P2YueCs9Zi52eCo9YTooZi54PWYuZngsZi52eD0wKSxudWxsPT1mLmZ5P2YueSs9Zi52eSo9YTooZi55PWYuZnksZi52eT0wKTtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7Zm9yKHZhciBuLGU9MCxyPXQubGVuZ3RoO2U8cjsrK2Upe2lmKChuPXRbZV0pLmluZGV4PWUsbnVsbCE9bi5meCYmKG4ueD1uLmZ4KSxudWxsIT1uLmZ5JiYobi55PW4uZnkpLGlzTmFOKG4ueCl8fGlzTmFOKG4ueSkpe3ZhciBpPTEwKk1hdGguc3FydCguNStlKSxvPWUqa2M7bi54PWkqTWF0aC5jb3Mobyksbi55PWkqTWF0aC5zaW4obyl9KGlzTmFOKG4udngpfHxpc05hTihuLnZ5KSkmJihuLnZ4PW4udnk9MCl9fWZ1bmN0aW9uIHAobil7cmV0dXJuIG4uaW5pdGlhbGl6ZSYmbi5pbml0aWFsaXplKHQscyksbn1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGQoKSxuPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBjLnJlc3RhcnQobCksbn0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBjLnN0b3AoKSxufSxub2RlczpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGQoKSx1LmZvckVhY2gocCksbik6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3Qsbik6cn0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxuKToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLXQsbik6MS1hfSxyYW5kb21Tb3VyY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx1LmZvckVhY2gocCksbik6c30sZm9yY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1lP3UuZGVsZXRlKHQpOnUuc2V0KHQscChlKSksbik6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24obixlLHIpe3ZhciBpLG8sYSx1LGMsZj0wLHM9dC5sZW5ndGg7Zm9yKG51bGw9PXI/cj0xLzA6cio9cixmPTA7ZjxzOysrZikoYT0oaT1uLSh1PXRbZl0pLngpKmkrKG89ZS11LnkpKm8pPHImJihjPXUscj1hKTtyZXR1cm4gY30sb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhmLm9uKHQsZSksbik6Zi5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgbixlLHIsaT1iYyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksbz0wLGE9bi5sZW5ndGg7bzxhOysrbykoaT1uW29dKS52eCs9KHJbb10taS54KSplW29dKnR9ZnVuY3Rpb24gYSgpe2lmKG4pe3ZhciBvLGE9bi5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KGEpLHI9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKWVbb109aXNOYU4ocltvXT0rdChuW29dLG8sbikpPzA6K2kobltvXSxvLG4pfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YmMobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiYygrdCksYSgpLG8pOml9LG8ueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmJjKCtuKSxhKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGk9YmMoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLG89MCxhPW4ubGVuZ3RoO288YTsrK28pKGk9bltvXSkudnkrPShyW29dLWkueSkqZVtvXSp0fWZ1bmN0aW9uIGEoKXtpZihuKXt2YXIgbyxhPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKSxyPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyllW29dPWlzTmFOKHJbb109K3QobltvXSxvLG4pKT8wOitpKG5bb10sbyxuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWJjKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YmMoK3QpLGEoKSxvKTppfSxvLnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpiYygrbiksYSgpLG8pOnR9LG99LHQuZm9ybWF0RGVmYXVsdExvY2FsZT1MYyx0LmZvcm1hdExvY2FsZT1ZYyx0LmZvcm1hdFNwZWNpZmllcj1EYyx0LmZzdW09ZnVuY3Rpb24odCxuKXtjb25zdCBlPW5ldyBUO2lmKHZvaWQgMD09PW4pZm9yKGxldCBuIG9mIHQpKG49K24pJiZlLmFkZChuKTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KShpPStuKGksKytyLHQpKSYmZS5hZGQoaSl9cmV0dXJuK2V9LHQuZ2VvQWxiZXJzPVpoLHQuZ2VvQWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIHQsbixlLHIsaSxvLGE9WmgoKSx1PVdoKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxjPVdoKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGY9e3BvaW50OmZ1bmN0aW9uKHQsbil7bz1bdCxuXX19O2Z1bmN0aW9uIHModCl7dmFyIG49dFswXSxhPXRbMV07cmV0dXJuIG89bnVsbCxlLnBvaW50KG4sYSksb3x8KHIucG9pbnQobixhKSxvKXx8KGkucG9pbnQobixhKSxvKX1mdW5jdGlvbiBsKCl7cmV0dXJuIHQ9bj1udWxsLHN9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBuPWEuc2NhbGUoKSxlPWEudHJhbnNsYXRlKCkscj0odFswXS1lWzBdKS9uLGk9KHRbMV0tZVsxXSkvbjtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJnI+PS0uNDI1JiZyPC0uMjE0P3U6aT49LjE2NiYmaTwuMjM0JiZyPj0tLjIxNCYmcjwtLjExNT9jOmEpLmludmVydCh0KX0scy5zdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6KHI9W2Euc3RyZWFtKG49ZSksdS5zdHJlYW0oZSksYy5zdHJlYW0oZSldLGk9ci5sZW5ndGgsdD17cG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9LTE7KytlPGk7KXJbZV0ucG9pbnQodCxuKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ucG9seWdvbkVuZCgpfX0pO3ZhciByLGl9LHMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSx1LnByZWNpc2lvbih0KSxjLnByZWNpc2lvbih0KSxsKCkpOmEucHJlY2lzaW9uKCl9LHMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCksdS5zY2FsZSguMzUqdCksYy5zY2FsZSh0KSxzLnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSxzLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgbj1hLnNjYWxlKCksbz0rdFswXSxzPSt0WzFdO3JldHVybiBlPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tvLS40NTUqbixzLS4yMzgqbl0sW28rLjQ1NSpuLHMrLjIzOCpuXV0pLnN0cmVhbShmKSxyPXUudHJhbnNsYXRlKFtvLS4zMDcqbixzKy4yMDEqbl0pLmNsaXBFeHRlbnQoW1tvLS40MjUqbitYYyxzKy4xMipuK1hjXSxbby0uMjE0Km4tWGMscysuMjM0Km4tWGNdXSkuc3RyZWFtKGYpLGk9Yy50cmFuc2xhdGUoW28tLjIwNSpuLHMrLjIxMipuXSkuY2xpcEV4dGVudChbW28tLjIxNCpuK1hjLHMrLjE2NipuK1hjXSxbby0uMTE1Km4tWGMscysuMjM0Km4tWGNdXSkuc3RyZWFtKGYpLGwoKX0scy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSWgocyx0LG4pfSxzLmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2gocyx0LG4pfSxzLmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFVoKHMsdCxuKX0scy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQmgocyx0LG4pfSxzLnNjYWxlKDEwNzApfSx0Lmdlb0FyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIFlmPW5ldyBULE1mKHQsTGYpLDIqWWZ9LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIEhoKEpoKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXc9SmgsdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBIaCh0ZCkuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3PXRkLHQuZ2VvQm91bmRzPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYSx1O2lmKHpmPVBmPS0oTmY9Q2Y9MS8wKSxPZj1bXSxNZih0LHlzKSxlPU9mLmxlbmd0aCl7Zm9yKE9mLnNvcnQoVHMpLG49MSxvPVtyPU9mWzBdXTtuPGU7KytuKVNzKHIsKGk9T2Zbbl0pWzBdKXx8U3MocixpWzFdKT8oQXMoclswXSxpWzFdKT5BcyhyWzBdLHJbMV0pJiYoclsxXT1pWzFdKSxBcyhpWzBdLHJbMV0pPkFzKHJbMF0sclsxXSkmJihyWzBdPWlbMF0pKTpvLnB1c2gocj1pKTtmb3IoYT0tMS8wLG49MCxyPW9bZT1vLmxlbmd0aC0xXTtuPD1lO3I9aSwrK24paT1vW25dLCh1PUFzKHJbMV0saVswXSkpPmEmJihhPXUsTmY9aVswXSxQZj1yWzFdKX1yZXR1cm4gT2Y9VWY9bnVsbCxOZj09PTEvMHx8Q2Y9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbTmYsQ2ZdLFtQZix6Zl1dfSx0Lmdlb0NlbnRyb2lkPWZ1bmN0aW9uKHQpe3RzPW5zPWVzPXJzPWlzPW9zPWFzPXVzPTAsY3M9bmV3IFQsZnM9bmV3IFQsc3M9bmV3IFQsTWYodCxFcyk7dmFyIG49K2NzLGU9K2ZzLHI9K3NzLGk9dWYobixlLHIpO3JldHVybiBpPEdjJiYobj1vcyxlPWFzLHI9dXMsbnM8WGMmJihuPWVzLGU9cnMscj1pcyksKGk9dWYobixlLHIpKTxHYyk/W05hTixOYU5dOltlZihlLG4pKlFjLGdmKHIvaSkqUWNdfSx0Lmdlb0NpcmNsZT1mdW5jdGlvbigpe3ZhciB0LG4sZT1PcyhbMCwwXSkscj1Pcyg5MCksaT1Pcyg2KSxvPXtwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChlPW4oZSxyKSksZVswXSo9UWMsZVsxXSo9UWN9fTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpKYyxjPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKkpjO3JldHVybiB0PVtdLG49WXMoLWFbMF0qSmMsLWFbMV0qSmMsMCkuaW52ZXJ0LFhzKG8sdSxjLDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1uPW51bGwsYX1yZXR1cm4gYS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpPcyhbK3RbMF0sK3RbMV1dKSxhKTplfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9zKCt0KSxhKTpyfSxhLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok9zKCt0KSxhKTppfSxhfSx0Lmdlb0NsaXBBbnRpbWVyaWRpYW49aWwsdC5nZW9DbGlwQ2lyY2xlPW9sLHQuZ2VvQ2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPTAsaT0wLG89OTYwLGE9NTAwO3JldHVybiBlPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6dD1obChyLGksbyxhKShuPWUpfSxleHRlbnQ6ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3VbMF1bMF0saT0rdVswXVsxXSxvPSt1WzFdWzBdLGE9K3VbMV1bMV0sdD1uPW51bGwsZSk6W1tyLGldLFtvLGFdXX19fSx0Lmdlb0NsaXBSZWN0YW5nbGU9aGwsdC5nZW9Db25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiBHaChpZCkuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX0sdC5nZW9Db25pY0NvbmZvcm1hbFJhdz1pZCx0Lmdlb0NvbmljRXF1YWxBcmVhPVdoLHQuZ2VvQ29uaWNFcXVhbEFyZWFSYXc9VmgsdC5nZW9Db25pY0VxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIEdoKGFkKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSx0Lmdlb0NvbmljRXF1aWRpc3RhbnRSYXc9YWQsdC5nZW9Db250YWlucz1mdW5jdGlvbih0LG4pe3JldHVybih0JiZ4bC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3hsW3QudHlwZV06TWwpKHQsbil9LHQuZ2VvRGlzdGFuY2U9bWwsdC5nZW9FcXVhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIEhoKGhkKS5zY2FsZSgxNzcuMTU4KX0sdC5nZW9FcXVhbEVhcnRoUmF3PWhkLHQuZ2VvRXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIEhoKG9kKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0VxdWlyZWN0YW5ndWxhclJhdz1vZCx0Lmdlb0dub21vbmljPWZ1bmN0aW9uKCl7cmV0dXJuIEhoKGRkKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSx0Lmdlb0dub21vbmljUmF3PWRkLHQuZ2VvR3JhdGljdWxlPVBsLHQuZ2VvR3JhdGljdWxlMTA9ZnVuY3Rpb24oKXtyZXR1cm4gUGwoKSgpfSx0Lmdlb0lkZW50aXR5PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHIsaSxvLGEsdT0xLGM9MCxmPTAscz0xLGw9MSxoPTAsZD1udWxsLHA9MSxnPTEseT1SaCh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1iKFt0LG5dKTt0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pLHY9cWw7ZnVuY3Rpb24gXygpe3JldHVybiBwPXUqcyxnPXUqbCxvPWE9bnVsbCxifWZ1bmN0aW9uIGIoZSl7dmFyIHI9ZVswXSpwLGk9ZVsxXSpnO2lmKGgpe3ZhciBvPWkqdC1yKm47cj1yKnQraSpuLGk9b31yZXR1cm5bcitjLGkrZl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKGUpe3ZhciByPWVbMF0tYyxpPWVbMV0tZjtpZihoKXt2YXIgbz1pKnQrcipuO3I9cip0LWkqbixpPW99cmV0dXJuW3IvcCxpL2ddfSxiLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gbyYmYT09PXQ/bzpvPXkodihhPXQpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10LGQ9ZT1yPWk9bnVsbCxfKCkpOnZ9LGIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1udWxsPT10PyhkPWU9cj1pPW51bGwscWwpOmhsKGQ9K3RbMF1bMF0sZT0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLF8oKSk6bnVsbD09ZD9udWxsOltbZCxlXSxbcixpXV19LGIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsXygpKTp1fSxiLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSxmPSt0WzFdLF8oKSk6W2MsZl19LGIuYW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49c2YoaD1lJTM2MCpKYyksdD1yZihoKSxfKCkpOmgqUWN9LGIucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dD8tMToxLF8oKSk6czwwfSxiLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQ/LTE6MSxfKCkpOmw8MH0sYi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gSWgoYix0LG4pfSxiLmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gT2goYix0LG4pfSxiLmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFVoKGIsdCxuKX0sYi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQmgoYix0LG4pfSxifSx0Lmdlb0ludGVycG9sYXRlPWZ1bmN0aW9uKHQsbil7dmFyIGU9dFswXSpKYyxyPXRbMV0qSmMsaT1uWzBdKkpjLG89blsxXSpKYyxhPXJmKHIpLHU9c2YociksYz1yZihvKSxmPXNmKG8pLHM9YSpyZihlKSxsPWEqc2YoZSksaD1jKnJmKGkpLGQ9YypzZihpKSxwPTIqZ2YoaGYoeWYoby1yKSthKmMqeWYoaS1lKSkpLGc9c2YocCkseT1wP2Z1bmN0aW9uKHQpe3ZhciBuPXNmKHQqPXApL2csZT1zZihwLXQpL2cscj1lKnMrbipoLGk9ZSpsK24qZCxvPWUqdStuKmY7cmV0dXJuW2VmKGkscikqUWMsZWYobyxoZihyKnIraSppKSkqUWNdfTpmdW5jdGlvbigpe3JldHVybltlKlFjLHIqUWNdfTtyZXR1cm4geS5kaXN0YW5jZT1wLHl9LHQuZ2VvTGVuZ3RoPXZsLHQuZ2VvTWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZWQobmQpLnNjYWxlKDk2MS9LYyl9LHQuZ2VvTWVyY2F0b3JSYXc9bmQsdC5nZW9OYXR1cmFsRWFydGgxPWZ1bmN0aW9uKCl7cmV0dXJuIEhoKHBkKS5zY2FsZSgxNzUuMjk1KX0sdC5nZW9OYXR1cmFsRWFydGgxUmF3PXBkLHQuZ2VvT3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIEhoKGdkKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwLjAwMDAwMSl9LHQuZ2VvT3J0aG9ncmFwaGljUmF3PWdkLHQuZ2VvUGF0aD1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaT00LjU7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksTWYodCxlKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gby5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBNZih0LGUoJGwpKSwkbC5yZXN1bHQoKX0sby5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBNZih0LGUoUGgpKSxQaC5yZXN1bHQoKX0sby5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIE1mKHQsZSh0aCkpLHRoLnJlc3VsdCgpfSxvLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBNZih0LGUobWgpKSxtaC5yZXN1bHQoKX0sby5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PW4/KHQ9bnVsbCxxbCk6KHQ9bikuc3RyZWFtLG8pOnR9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhuPW51bGwsbmV3IHpoKTpuZXcgeGgobj10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxvKTpufSxvLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxvKTppfSxvLnByb2plY3Rpb24odCkuY29udGV4dChuKX0sdC5nZW9Qcm9qZWN0aW9uPUhoLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9WGgsdC5nZW9Sb3RhdGlvbj1Icyx0Lmdlb1N0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gSGgoeWQpLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz15ZCx0Lmdlb1N0cmVhbT1NZix0Lmdlb1RyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOlJoKHQpfX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgdD1lZCh2ZCksbj10LmNlbnRlcixlPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFstdFsxXSx0WzBdXSk6Wyh0PW4oKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PWUoKSlbMF0sdFsxXSx0WzJdLTkwXX0sZShbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9LHQuZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3PXZkLHQuZ3JheT1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgaXIodCwwLDAsbnVsbD09bj8xOm4pfSx0LmdyZWF0ZXN0PW90LHQuZ3JlYXRlc3RJbmRleD1mdW5jdGlvbih0LGU9bil7aWYoMT09PWUubGVuZ3RoKXJldHVybiB0dCh0LGUpO2xldCByLGk9LTEsbz0tMTtmb3IoY29uc3QgbiBvZiB0KSsrbywoaTwwPzA9PT1lKG4sbik6ZShuLHIpPjApJiYocj1uLGk9byk7cmV0dXJuIGl9LHQuZ3JvdXA9UCx0Lmdyb3VwU29ydD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDIhPT1lLmxlbmd0aD9VKFIodCxlLHIpLCgoW3QsZV0sW3IsaV0pPT5uKGUsaSl8fG4odCxyKSkpOlUoUCh0LHIpLCgoW3Qscl0sW2ksb10pPT5lKHIsbyl8fG4odCxpKSkpKS5tYXAoKChbdF0pPT50KSl9LHQuZ3JvdXBzPXosdC5oY2w9c3IsdC5oaWVyYXJjaHk9d2QsdC5oaXN0b2dyYW09USx0LmhzbD0kZSx0Lmh0bWw9ZmMsdC5pbWFnZT1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBvIGluIG4paVtvXT1uW29dO2kub25lcnJvcj1yLGkub25sb2FkPWZ1bmN0aW9uKCl7ZShpKX0saS5zcmM9dH0pKX0sdC5pbmRleD1mdW5jdGlvbih0LC4uLm4pe3JldHVybiBJKHQsQyxxLG4pfSx0LmluZGV4ZXM9ZnVuY3Rpb24odCwuLi5uKXtyZXR1cm4gSSh0LEFycmF5LmZyb20scSxuKX0sdC5pbnRlcnBvbGF0ZT1Icix0LmludGVycG9sYXRlQXJyYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4oSXIobik/cXI6T3IpKHQsbil9LHQuaW50ZXJwb2xhdGVCYXNpcz1Ucix0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9U3IsdC5pbnRlcnBvbGF0ZUJsdWVzPUNiLHQuaW50ZXJwb2xhdGVCckJHPUxfLHQuaW50ZXJwb2xhdGVCdUduPWFiLHQuaW50ZXJwb2xhdGVCdVB1PWNiLHQuaW50ZXJwb2xhdGVDaXZpZGlzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSx0LmludGVycG9sYXRlQ29vbD1qYix0LmludGVycG9sYXRlQ3ViZWhlbGl4PWZpLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0PVliLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPXNpLHQuaW50ZXJwb2xhdGVEYXRlPVVyLHQuaW50ZXJwb2xhdGVEaXNjcmV0ZT1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcihlKm4pKSldfX0sdC5pbnRlcnBvbGF0ZUduQnU9c2IsdC5pbnRlcnBvbGF0ZUdyZWVucz16Yix0LmludGVycG9sYXRlR3JleXM9UmIsdC5pbnRlcnBvbGF0ZUhjbD1haSx0LmludGVycG9sYXRlSGNsTG9uZz11aSx0LmludGVycG9sYXRlSHNsPXJpLHQuaW50ZXJwb2xhdGVIc2xMb25nPWlpLHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxuKXt2YXIgZT1OcigrdCwrbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuIG4tMzYwKk1hdGguZmxvb3Iobi8zNjApfX0sdC5pbnRlcnBvbGF0ZUluZmVybm89S2IsdC5pbnRlcnBvbGF0ZUxhYj1mdW5jdGlvbih0LG4pe3ZhciBlPVByKCh0PXJyKHQpKS5sLChuPXJyKG4pKS5sKSxyPVByKHQuYSxuLmEpLGk9UHIodC5iLG4uYiksbz1Qcih0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQubD1lKG4pLHQuYT1yKG4pLHQuYj1pKG4pLHQub3BhY2l0eT1vKG4pLHQrIiJ9fSx0LmludGVycG9sYXRlTWFnbWE9WmIsdC5pbnRlcnBvbGF0ZU51bWJlcj1Ccix0LmludGVycG9sYXRlTnVtYmVyQXJyYXk9cXIsdC5pbnRlcnBvbGF0ZU9iamVjdD1Zcix0LmludGVycG9sYXRlT3JSZD1oYix0LmludGVycG9sYXRlT3Jhbmdlcz1CYix0LmludGVycG9sYXRlUFJHbj0kXyx0LmludGVycG9sYXRlUGlZRz1YXyx0LmludGVycG9sYXRlUGxhc21hPVFiLHQuaW50ZXJwb2xhdGVQdUJ1PXliLHQuaW50ZXJwb2xhdGVQdUJ1R249cGIsdC5pbnRlcnBvbGF0ZVB1T3I9Vl8sdC5pbnRlcnBvbGF0ZVB1UmQ9X2IsdC5pbnRlcnBvbGF0ZVB1cnBsZXM9cWIsdC5pbnRlcnBvbGF0ZVJhaW5ib3c9ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBuPU1hdGguYWJzKHQtLjUpO3JldHVybiAkYi5oPTM2MCp0LTEwMCwkYi5zPTEuNS0xLjUqbiwkYi5sPS44LS45Km4sJGIrIiJ9LHQuaW50ZXJwb2xhdGVSZEJ1PVpfLHQuaW50ZXJwb2xhdGVSZEd5PVFfLHQuaW50ZXJwb2xhdGVSZFB1PW1iLHQuaW50ZXJwb2xhdGVSZFlsQnU9dGIsdC5pbnRlcnBvbGF0ZVJkWWxHbj1lYix0LmludGVycG9sYXRlUmVkcz1PYix0LmludGVycG9sYXRlUmdiPXpyLHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1Scix0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9RnIsdC5pbnRlcnBvbGF0ZVJvdW5kPVhyLHQuaW50ZXJwb2xhdGVTaW5lYm93PWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiB0PSguNS10KSpNYXRoLlBJLEhiLnI9MjU1KihuPU1hdGguc2luKHQpKSpuLEhiLmc9MjU1KihuPU1hdGguc2luKHQrWGIpKSpuLEhiLmI9MjU1KihuPU1hdGguc2luKHQrR2IpKSpuLEhiKyIifSx0LmludGVycG9sYXRlU3BlY3RyYWw9aWIsdC5pbnRlcnBvbGF0ZVN0cmluZz0kcix0LmludGVycG9sYXRlVHJhbnNmb3JtQ3NzPVFyLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9SnIsdC5pbnRlcnBvbGF0ZVR1cmJvPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzQuNjErdCooMTE3Mi4zMy10KigxMDc5My41Ni10KigzMzMwMC4xMi10KigzODM5NC40OS0xNDgyNS4wNSp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjMuMzErdCooNTU3LjMzK3QqKDEyMjUuMzMtdCooMzU3NC45Ni10KigxMDczLjc3KzcwNy41Nip0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjcuMit0KigzMjExLjEtdCooMTUzMjcuOTctdCooMjc4MTQtdCooMjI1NjkuMTgtNjgzOC42Nip0KSkpKSkpKSsiKSJ9LHQuaW50ZXJwb2xhdGVWaXJpZGlzPVdiLHQuaW50ZXJwb2xhdGVXYXJtPUxiLHQuaW50ZXJwb2xhdGVZbEduPUFiLHQuaW50ZXJwb2xhdGVZbEduQnU9d2IsdC5pbnRlcnBvbGF0ZVlsT3JCcj1TYix0LmludGVycG9sYXRlWWxPclJkPWtiLHQuaW50ZXJwb2xhdGVab29tPW5pLHQuaW50ZXJydXB0PUlpLHQuaW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsLi4ubil7dD1uZXcgSW50ZXJuU2V0KHQpLG49bi5tYXAodnQpO3Q6Zm9yKGNvbnN0IGUgb2YgdClmb3IoY29uc3QgciBvZiBuKWlmKCFyLmhhcyhlKSl7dC5kZWxldGUoZSk7Y29udGludWUgdH1yZXR1cm4gdH0sdC5pbnRlcnZhbD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IEFpLGk9bjtyZXR1cm4gbnVsbD09bj8oci5yZXN0YXJ0KHQsbixlKSxyKTooci5fcmVzdGFydD1yLnJlc3RhcnQsci5yZXN0YXJ0PWZ1bmN0aW9uKHQsbixlKXtuPStuLGU9bnVsbD09ZT93aSgpOitlLHIuX3Jlc3RhcnQoKGZ1bmN0aW9uIG8oYSl7YSs9aSxyLl9yZXN0YXJ0KG8saSs9bixlKSx0KGEpfSksbixlKX0sci5yZXN0YXJ0KHQsbixlKSxyKX0sdC5pc29Gb3JtYXQ9X18sdC5pc29QYXJzZT1tXyx0Lmpzb249ZnVuY3Rpb24odCxuKXtyZXR1cm4gZmV0Y2godCxuKS50aGVuKGFjKX0sdC5sYWI9cnIsdC5sY2g9ZnVuY3Rpb24odCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2ZyKHQpOm5ldyBscihlLG4sdCxudWxsPT1yPzE6cil9LHQubGVhc3Q9ZnVuY3Rpb24odCxlPW4pe2xldCByLGk9ITE7aWYoMT09PWUubGVuZ3RoKXtsZXQgbztmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB0PWUoYSk7KGk/bih0LG8pPDA6MD09PW4odCx0KSkmJihyPWEsbz10LGk9ITApfX1lbHNlIGZvcihjb25zdCBuIG9mIHQpKGk/ZShuLHIpPDA6MD09PWUobixuKSkmJihyPW4saT0hMCk7cmV0dXJuIHJ9LHQubGVhc3RJbmRleD1odCx0LmxpbmU9U20sdC5saW5lUmFkaWFsPVJtLHQubGluaz0kbSx0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuICRtKFVtKX0sdC5saW5rUmFkaWFsPWZ1bmN0aW9uKCl7Y29uc3QgdD0kbShZbSk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5saW5rVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gJG0oQm0pfSx0LmxvY2FsPUtuLHQubWFwPWZ1bmN0aW9uKHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlIik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigibWFwcGVyIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIEFycmF5LmZyb20odCwoKGUscik9Pm4oZSxyLHQpKSl9LHQubWF0Y2hlcj1IdCx0Lm1heD1KLHQubWF4SW5kZXg9dHQsdC5tZWFuPWZ1bmN0aW9uKHQsbil7bGV0IGU9MCxyPTA7aWYodm9pZCAwPT09bilmb3IobGV0IG4gb2YgdCludWxsIT1uJiYobj0rbik+PW4mJigrK2Uscis9bik7ZWxzZXtsZXQgaT0tMTtmb3IobGV0IG8gb2YgdCludWxsIT0obz1uKG8sKytpLHQpKSYmKG89K28pPj1vJiYoKytlLHIrPW8pfWlmKGUpcmV0dXJuIHIvZX0sdC5tZWRpYW49ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXQodCwuNSxuKX0sdC5tZWRpYW5JbmRleD1mdW5jdGlvbih0LG4pe3JldHVybiBjdCh0LC41LG4pfSx0Lm1lcmdlPWZ0LHQubWluPW50LHQubWluSW5kZXg9ZXQsdC5tb2RlPWZ1bmN0aW9uKHQsbil7Y29uc3QgZT1uZXcgSW50ZXJuTWFwO2lmKHZvaWQgMD09PW4pZm9yKGxldCBuIG9mIHQpbnVsbCE9biYmbj49biYmZS5zZXQobiwoZS5nZXQobil8fDApKzEpO2Vsc2V7bGV0IHI9LTE7Zm9yKGxldCBpIG9mIHQpbnVsbCE9KGk9bihpLCsrcix0KSkmJmk+PWkmJmUuc2V0KGksKGUuZ2V0KGkpfHwwKSsxKX1sZXQgcixpPTA7Zm9yKGNvbnN0W3Qsbl1vZiBlKW4+aSYmKGk9bixyPXQpO3JldHVybiByfSx0Lm5hbWVzcGFjZT1xdCx0Lm5hbWVzcGFjZXM9RnQsdC5uaWNlPVosdC5ub3c9d2ksdC5wYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxuPTEsZT0xLHI9Q2Q7ZnVuY3Rpb24gaShpKXtjb25zdCBvPURkKCk7cmV0dXJuIGkueD1uLzIsaS55PWUvMix0P2kuZWFjaEJlZm9yZShWZCh0KSkuZWFjaEFmdGVyKFdkKHIsLjUsbykpLmVhY2hCZWZvcmUoWmQoMSkpOmkuZWFjaEJlZm9yZShWZChHZCkpLmVhY2hBZnRlcihXZChDZCwxLG8pKS5lYWNoQWZ0ZXIoV2QocixpLnIvTWF0aC5taW4obixlKSxvKSkuZWFjaEJlZm9yZShaZChNYXRoLm1pbihuLGUpLygyKmkucikpKSxpfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1rZChuKSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0sZT0rdFsxXSxpKTpbbixlXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UGQoK3QpLGkpOnJ9LGl9LHQucGFja0VuY2xvc2U9ZnVuY3Rpb24odCl7cmV0dXJuIFJkKHQsRGQoKSl9LHQucGFja1NpYmxpbmdzPWZ1bmN0aW9uKHQpe3JldHVybiBYZCh0LERkKCkpLHR9LHQucGFpcnM9ZnVuY3Rpb24odCxuPXN0KXtjb25zdCBlPVtdO2xldCByLGk9ITE7Zm9yKGNvbnN0IG8gb2YgdClpJiZlLnB1c2gobihyLG8pKSxyPW8saT0hMDtyZXR1cm4gZX0sdC5wYXJ0aXRpb249ZnVuY3Rpb24oKXt2YXIgdD0xLG49MSxlPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBvPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1lLGkueDE9dCxpLnkxPW4vbyxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmUWQocixyLngwLHQqKHIuZGVwdGgrMSkvbixyLngxLHQqKHIuZGVwdGgrMikvbik7dmFyIGk9ci54MCxvPXIueTAsYT1yLngxLWUsdT1yLnkxLWU7YTxpJiYoaT1hPShpK2EpLzIpLHU8byYmKG89dT0obyt1KS8yKSxyLngwPWksci55MD1vLHIueDE9YSxyLnkxPXV9fShuLG8pKSxyJiZpLmVhY2hCZWZvcmUoS2QpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZVswXSxuPStlWzFdLGkpOlt0LG5dfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3QsaSk6ZX0saX0sdC5wYXRoPVBhLHQucGVybXV0ZT1PLHQucGllPWZ1bmN0aW9uKCl7dmFyIHQ9Tm0sbj1rbSxlPW51bGwscj1KYigwKSxpPUpiKHNtKSxvPUpiKDApO2Z1bmN0aW9uIGEoYSl7dmFyIHUsYyxmLHMsbCxoPShhPXhtKGEpKS5sZW5ndGgsZD0wLHA9bmV3IEFycmF5KGgpLGc9bmV3IEFycmF5KGgpLHk9K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLHY9TWF0aC5taW4oc20sTWF0aC5tYXgoLXNtLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLXkpKSxfPU1hdGgubWluKE1hdGguYWJzKHYpL2gsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9XyoodjwwPy0xOjEpO2Zvcih1PTA7dTxoOysrdSkobD1nW3BbdV09dV09K3QoYVt1XSx1LGEpKT4wJiYoZCs9bCk7Zm9yKG51bGwhPW4/cC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuKGdbdF0sZ1tlXSl9KSk6bnVsbCE9ZSYmcC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKGFbdF0sYVtuXSl9KSksdT0wLGY9ZD8odi1oKmIpL2Q6MDt1PGg7Kyt1LHk9cyljPXBbdV0scz15KygobD1nW2NdKT4wP2wqZjowKStiLGdbY109e2RhdGE6YVtjXSxpbmRleDp1LHZhbHVlOmwsc3RhcnRBbmdsZTp5LGVuZEFuZ2xlOnMscGFkQW5nbGU6X307cmV0dXJuIGd9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpKYigrbiksYSk6dH0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLGEpOm59LGEuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxhKTplfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYigrdCksYSk6cn0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpiKCt0KSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmIoK3QpLGEpOm99LGF9LHQucGllY2V3aXNlPWxpLHQucG9pbnRSYWRpYWw9cW0sdC5wb2ludGVyPXRlLHQucG9pbnRlcnM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50YXJnZXQmJih0PUpuKHQpLHZvaWQgMD09PW4mJihuPXQuY3VycmVudFRhcmdldCksdD10LnRvdWNoZXN8fFt0XSksQXJyYXkuZnJvbSh0LCh0PT50ZSh0LG4pKSl9LHQucG9seWdvbkFyZWE9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9LTEscj10Lmxlbmd0aCxpPXRbci0xXSxvPTA7KytlPHI7KW49aSxpPXRbZV0sbys9blsxXSppWzBdLW5bMF0qaVsxXTtyZXR1cm4gby8yfSx0LnBvbHlnb25DZW50cm9pZD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz0wLGE9MCx1PXRbaS0xXSxjPTA7KytyPGk7KW49dSx1PXRbcl0sYys9ZT1uWzBdKnVbMV0tdVswXSpuWzFdLG8rPShuWzBdK3VbMF0pKmUsYSs9KG5bMV0rdVsxXSkqZTtyZXR1cm5bby8oYyo9MyksYS9jXX0sdC5wb2x5Z29uQ29udGFpbnM9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUscixpPXQubGVuZ3RoLG89dFtpLTFdLGE9blswXSx1PW5bMV0sYz1vWzBdLGY9b1sxXSxzPSExLGw9MDtsPGk7KytsKWU9KG89dFtsXSlbMF0sKHI9b1sxXSk+dSE9Zj51JiZhPChjLWUpKih1LXIpLyhmLXIpK2UmJihzPSFzKSxjPWUsZj1yO3JldHVybiBzfSx0LnBvbHlnb25IdWxsPWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBuLGUscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSk7Zm9yKG49MDtuPGU7KytuKXJbbl09Wyt0W25dWzBdLCt0W25dWzFdLG5dO2ZvcihyLnNvcnQoX3ApLG49MDtuPGU7KytuKWlbbl09W3Jbbl1bMF0sLXJbbl1bMV1dO3ZhciBvPWJwKHIpLGE9YnAoaSksdT1hWzBdPT09b1swXSxjPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGY9W107Zm9yKG49by5sZW5ndGgtMTtuPj0wOy0tbilmLnB1c2godFtyW29bbl1dWzJdXSk7Zm9yKG49K3U7bjxhLmxlbmd0aC1jOysrbilmLnB1c2godFtyW2Fbbl1dWzJdXSk7cmV0dXJuIGZ9LHQucG9seWdvbkxlbmd0aD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1vWzBdLHU9b1sxXSxjPTA7KytyPGk7KW49YSxlPXUsbi09YT0obz10W3JdKVswXSxlLT11PW9bMV0sYys9TWF0aC5oeXBvdChuLGUpO3JldHVybiBjfSx0LnByZWNpc2lvbkZpeGVkPWpjLHQucHJlY2lzaW9uUHJlZml4PSRjLHQucHJlY2lzaW9uUm91bmQ9SGMsdC5xdWFkdHJlZT1nYyx0LnF1YW50aWxlPWF0LHQucXVhbnRpbGVJbmRleD1jdCx0LnF1YW50aWxlU29ydGVkPXV0LHQucXVhbnRpemU9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWVbcl09dChyLyhuLTEpKTtyZXR1cm4gZX0sdC5xdWlja3NlbGVjdD1ydCx0LnJhZGlhbEFyZWE9Rm0sdC5yYWRpYWxMaW5lPVJtLHQucmFuZG9tQmF0ZXM9U3AsdC5yYW5kb21CZXJub3VsbGk9TnAsdC5yYW5kb21CZXRhPXpwLHQucmFuZG9tQmlub21pYWw9RHAsdC5yYW5kb21DYXVjaHk9RnAsdC5yYW5kb21FeHBvbmVudGlhbD1FcCx0LnJhbmRvbUdhbW1hPVBwLHQucmFuZG9tR2VvbWV0cmljPUNwLHQucmFuZG9tSW50PXdwLHQucmFuZG9tSXJ3aW5IYWxsPVRwLHQucmFuZG9tTGNnPWZ1bmN0aW9uKHQ9TWF0aC5yYW5kb20oKSl7bGV0IG49MHwoMDw9dCYmdDwxP3QvT3A6TWF0aC5hYnModCkpO3JldHVybigpPT4obj0xNjY0NTI1Km4rMTAxMzkwNDIyM3wwLE9wKihuPj4+MCkpfSx0LnJhbmRvbUxvZ05vcm1hbD1BcCx0LnJhbmRvbUxvZ2lzdGljPXFwLHQucmFuZG9tTm9ybWFsPU1wLHQucmFuZG9tUGFyZXRvPWtwLHQucmFuZG9tUG9pc3Nvbj1JcCx0LnJhbmRvbVVuaWZvcm09eHAsdC5yYW5kb21XZWlidWxsPVJwLHQucmFuZ2U9bHQsdC5yYW5rPWZ1bmN0aW9uKHQsZT1uKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdFtTeW1ib2wuaXRlcmF0b3JdKXRocm93IG5ldyBUeXBlRXJyb3IoInZhbHVlcyBpcyBub3QgaXRlcmFibGUiKTtsZXQgcj1BcnJheS5mcm9tKHQpO2NvbnN0IGk9bmV3IEZsb2F0NjRBcnJheShyLmxlbmd0aCk7MiE9PWUubGVuZ3RoJiYocj1yLm1hcChlKSxlPW4pO2NvbnN0IG89KHQsbik9PmUoclt0XSxyW25dKTtsZXQgYSx1O3JldHVybiBVaW50MzJBcnJheS5mcm9tKHIsKCh0LG4pPT5uKSkuc29ydChlPT09bj8odCxuKT0+WShyW3RdLHJbbl0pOkIobykpLmZvckVhY2goKCh0LG4pPT57Y29uc3QgZT1vKHQsdm9pZCAwPT09YT90OmEpO2U+PTA/KCh2b2lkIDA9PT1hfHxlPjApJiYoYT10LHU9biksaVt0XT11KTppW3RdPU5hTn0pKSxpfSx0LnJlZHVjZT1mdW5jdGlvbih0LG4sZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlciBpcyBub3QgYSBmdW5jdGlvbiIpO2NvbnN0IHI9dFtTeW1ib2wuaXRlcmF0b3JdKCk7bGV0IGksbyxhPS0xO2lmKGFyZ3VtZW50cy5sZW5ndGg8Myl7aWYoKHtkb25lOmksdmFsdWU6ZX09ci5uZXh0KCkpLGkpcmV0dXJuOysrYX1mb3IoOyh7ZG9uZTppLHZhbHVlOm99PXIubmV4dCgpKSwhaTspZT1uKGUsbywrK2EsdCk7cmV0dXJuIGV9LHQucmV2ZXJzZT1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdFtTeW1ib2wuaXRlcmF0b3JdKXRocm93IG5ldyBUeXBlRXJyb3IoInZhbHVlcyBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gQXJyYXkuZnJvbSh0KS5yZXZlcnNlKCl9LHQucmdiPUZlLHQucmliYm9uPWZ1bmN0aW9uKCl7cmV0dXJuIFlhKCl9LHQucmliYm9uQXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gWWEoQmEpfSx0LnJvbGx1cD1SLHQucm9sbHVwcz1GLHQuc2NhbGVCYW5kPWpwLHQuc2NhbGVEaXZlcmdpbmc9ZnVuY3Rpb24gdCgpe3ZhciBuPW5nKEVfKCkoR3ApKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFRfKG4sdCgpKX0sQnAuYXBwbHkobixhcmd1bWVudHMpfSx0LnNjYWxlRGl2ZXJnaW5nTG9nPWZ1bmN0aW9uIHQoKXt2YXIgbj1mZyhFXygpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFRfKG4sdCgpKS5iYXNlKG4uYmFzZSgpKX0sQnAuYXBwbHkobixhcmd1bWVudHMpfSx0LnNjYWxlRGl2ZXJnaW5nUG93PWtfLHQuc2NhbGVEaXZlcmdpbmdTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9LHQuc2NhbGVEaXZlcmdpbmdTeW1sb2c9ZnVuY3Rpb24gdCgpe3ZhciBuPWhnKEVfKCkpO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVF8obix0KCkpLmNvbnN0YW50KG4uY29uc3RhbnQoKSl9LEJwLmFwcGx5KG4sYXJndW1lbnRzKX0sdC5zY2FsZUlkZW50aXR5PWZ1bmN0aW9uIHQobil7dmFyIGU7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbD09dHx8aXNOYU4odD0rdCk/ZTp0fXJldHVybiByLmludmVydD1yLHIuZG9tYWluPXIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49QXJyYXkuZnJvbSh0LEhwKSxyKTpuLnNsaWNlKCl9LHIudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHIpOmV9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB0KG4pLnVua25vd24oZSl9LG49YXJndW1lbnRzLmxlbmd0aD9BcnJheS5mcm9tKG4sSHApOlswLDFdLG5nKHIpfSx0LnNjYWxlSW1wbGljaXQ9WXAsdC5zY2FsZUxpbmVhcj1mdW5jdGlvbiB0KCl7dmFyIG49SnAoKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEtwKG4sdCgpKX0sVXAuYXBwbHkobixhcmd1bWVudHMpLG5nKG4pfSx0LnNjYWxlTG9nPWZ1bmN0aW9uIHQoKXtjb25zdCBuPWZnKFFwKCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBuLmNvcHk9KCk9PktwKG4sdCgpKS5iYXNlKG4uYmFzZSgpKSxVcC5hcHBseShuLGFyZ3VtZW50cyksbn0sdC5zY2FsZU9yZGluYWw9THAsdC5zY2FsZVBvaW50PWZ1bmN0aW9uKCl7cmV0dXJuICRwKGpwLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfSx0LnNjYWxlUG93PXZnLHQuc2NhbGVRdWFudGlsZT1mdW5jdGlvbiB0KCl7dmFyIGUscj1bXSxpPVtdLG89W107ZnVuY3Rpb24gYSgpe3ZhciB0PTAsbj1NYXRoLm1heCgxLGkubGVuZ3RoKTtmb3Iobz1uZXcgQXJyYXkobi0xKTsrK3Q8bjspb1t0LTFdPXV0KHIsdC9uKTtyZXR1cm4gdX1mdW5jdGlvbiB1KHQpe3JldHVybiBudWxsPT10fHxpc05hTih0PSt0KT9lOmlbbChvLHQpXX1yZXR1cm4gdS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG49aS5pbmRleE9mKHQpO3JldHVybiBuPDA/W05hTixOYU5dOltuPjA/b1tuLTFdOnJbMF0sbjxvLmxlbmd0aD9vW25dOnJbci5sZW5ndGgtMV1dfSx1LmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W107Zm9yKGxldCBuIG9mIHQpbnVsbD09bnx8aXNOYU4obj0rbil8fHIucHVzaChuKTtyZXR1cm4gci5zb3J0KG4pLGEoKX0sdS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1BcnJheS5mcm9tKHQpLGEoKSk6aS5zbGljZSgpfSx1LnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCx1KTplfSx1LnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBvLnNsaWNlKCl9LHUuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKHIpLnJhbmdlKGkpLnVua25vd24oZSl9LFVwLmFwcGx5KHUsYXJndW1lbnRzKX0sdC5zY2FsZVF1YW50aXplPWZ1bmN0aW9uIHQoKXt2YXIgbixlPTAscj0xLGk9MSxvPVsuNV0sYT1bMCwxXTtmdW5jdGlvbiB1KHQpe3JldHVybiBudWxsIT10JiZ0PD10P2FbbChvLHQsMCxpKV06bn1mdW5jdGlvbiBjKCl7dmFyIHQ9LTE7Zm9yKG89bmV3IEFycmF5KGkpOysrdDxpOylvW3RdPSgodCsxKSpyLSh0LWkpKmUpLyhpKzEpO3JldHVybiB1fXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW2Uscl09dCxlPStlLHI9K3IsYygpKTpbZSxyXX0sdS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0oYT1BcnJheS5mcm9tKHQpKS5sZW5ndGgtMSxjKCkpOmEuc2xpY2UoKX0sdS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG49YS5pbmRleE9mKHQpO3JldHVybiBuPDA/W05hTixOYU5dOm48MT9bZSxvWzBdXTpuPj1pP1tvW2ktMV0scl06W29bbi0xXSxvW25dXX0sdS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsdSk6dX0sdS50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2xpY2UoKX0sdS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oW2Uscl0pLnJhbmdlKGEpLnVua25vd24obil9LFVwLmFwcGx5KG5nKHUpLGFyZ3VtZW50cyl9LHQuc2NhbGVSYWRpYWw9ZnVuY3Rpb24gdCgpe3ZhciBuLGU9SnAoKSxyPVswLDFdLGk9ITE7ZnVuY3Rpb24gbyh0KXt2YXIgcj1iZyhlKHQpKTtyZXR1cm4gaXNOYU4ocik/bjppP01hdGgucm91bmQocik6cn1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaW52ZXJ0KF9nKHQpKX0sby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKHQpLG8pOmUuZG9tYWluKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUucmFuZ2UoKHI9QXJyYXkuZnJvbSh0LEhwKSkubWFwKF9nKSksbyk6ci5zbGljZSgpfSxvLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucmFuZ2UodCkucm91bmQoITApfSxvLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhdCxvKTppfSxvLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmNsYW1wKHQpLG8pOmUuY2xhbXAoKX0sby51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5kb21haW4oKSxyKS5yb3VuZChpKS5jbGFtcChlLmNsYW1wKCkpLnVua25vd24obil9LFVwLmFwcGx5KG8sYXJndW1lbnRzKSxuZyhvKX0sdC5zY2FsZVNlcXVlbnRpYWw9ZnVuY3Rpb24gdCgpe3ZhciBuPW5nKEFfKCkoR3ApKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFRfKG4sdCgpKX0sQnAuYXBwbHkobixhcmd1bWVudHMpfSx0LnNjYWxlU2VxdWVudGlhbExvZz1mdW5jdGlvbiB0KCl7dmFyIG49ZmcoQV8oKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBUXyhuLHQoKSkuYmFzZShuLmJhc2UoKSl9LEJwLmFwcGx5KG4sYXJndW1lbnRzKX0sdC5zY2FsZVNlcXVlbnRpYWxQb3c9U18sdC5zY2FsZVNlcXVlbnRpYWxRdWFudGlsZT1mdW5jdGlvbiB0KCl7dmFyIGU9W10scj1HcDtmdW5jdGlvbiBpKHQpe2lmKG51bGwhPXQmJiFpc05hTih0PSt0KSlyZXR1cm4gcigobChlLHQsMSktMSkvKGUubGVuZ3RoLTEpKX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2ZvcihsZXQgbiBvZiB0KW51bGw9PW58fGlzTmFOKG49K24pfHxlLnB1c2gobik7cmV0dXJuIGUuc29ydChuKSxpfSxpLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkucmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAoKCh0LG4pPT5yKG4vKGUubGVuZ3RoLTEpKSkpfSxpLnF1YW50aWxlcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOnQrMX0sKChuLHIpPT5hdChlLHIvdCkpKX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQocikuZG9tYWluKGUpfSxCcC5hcHBseShpLGFyZ3VtZW50cyl9LHQuc2NhbGVTZXF1ZW50aWFsU3FydD1mdW5jdGlvbigpe3JldHVybiBTXy5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfSx0LnNjYWxlU2VxdWVudGlhbFN5bWxvZz1mdW5jdGlvbiB0KCl7dmFyIG49aGcoQV8oKSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBUXyhuLHQoKSkuY29uc3RhbnQobi5jb25zdGFudCgpKX0sQnAuYXBwbHkobixhcmd1bWVudHMpfSx0LnNjYWxlU3FydD1mdW5jdGlvbigpe3JldHVybiB2Zy5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfSx0LnNjYWxlU3ltbG9nPWZ1bmN0aW9uIHQoKXt2YXIgbj1oZyhRcCgpKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEtwKG4sdCgpKS5jb25zdGFudChuLmNvbnN0YW50KCkpfSxVcC5hcHBseShuLGFyZ3VtZW50cyl9LHQuc2NhbGVUaHJlc2hvbGQ9ZnVuY3Rpb24gdCgpe3ZhciBuLGU9Wy41XSxyPVswLDFdLGk9MTtmdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10JiZ0PD10P3JbbChlLHQsMCxpKV06bn1yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9QXJyYXkuZnJvbSh0KSxpPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoLTEpLG8pOmUuc2xpY2UoKX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1BcnJheS5mcm9tKHQpLGk9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgtMSksbyk6ci5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgbj1yLmluZGV4T2YodCk7cmV0dXJuW2Vbbi0xXSxlW25dXX0sby51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSkucmFuZ2UocikudW5rbm93bihuKX0sVXAuYXBwbHkobyxhcmd1bWVudHMpfSx0LnNjYWxlVGltZT1mdW5jdGlvbigpe3JldHVybiBVcC5hcHBseShNXyhIeSxYeSxzeSx1eSxYZyxqZyxCZyxJZyxSZyx0LnRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfSx0LnNjYWxlVXRjPWZ1bmN0aW9uKCl7cmV0dXJuIFVwLmFwcGx5KE1fKGp5LCR5LEJ5LEl5LHd5LGJ5LHl5LGR5LFJnLHQudXRjRm9ybWF0KS5kb21haW4oW0RhdGUuVVRDKDJlMywwLDEpLERhdGUuVVRDKDJlMywwLDIpXSksYXJndW1lbnRzKX0sdC5zY2FuPWZ1bmN0aW9uKHQsbil7Y29uc3QgZT1odCh0LG4pO3JldHVybiBlPDA/dm9pZCAwOmV9LHQuc2NoZW1lQWNjZW50PVBfLHQuc2NoZW1lQmx1ZXM9TmIsdC5zY2hlbWVCckJHPVlfLHQuc2NoZW1lQnVHbj1vYix0LnNjaGVtZUJ1UHU9dWIsdC5zY2hlbWVDYXRlZ29yeTEwPUNfLHQuc2NoZW1lRGFyazI9el8sdC5zY2hlbWVHbkJ1PWZiLHQuc2NoZW1lR3JlZW5zPVBiLHQuc2NoZW1lR3JleXM9RGIsdC5zY2hlbWVPclJkPWxiLHQuc2NoZW1lT3Jhbmdlcz1VYix0LnNjaGVtZVBSR249al8sdC5zY2hlbWVQYWlyZWQ9RF8sdC5zY2hlbWVQYXN0ZWwxPVJfLHQuc2NoZW1lUGFzdGVsMj1GXyx0LnNjaGVtZVBpWUc9SF8sdC5zY2hlbWVQdUJ1PWdiLHQuc2NoZW1lUHVCdUduPWRiLHQuc2NoZW1lUHVPcj1HXyx0LnNjaGVtZVB1UmQ9dmIsdC5zY2hlbWVQdXJwbGVzPUZiLHQuc2NoZW1lUmRCdT1XXyx0LnNjaGVtZVJkR3k9S18sdC5zY2hlbWVSZFB1PWJiLHQuc2NoZW1lUmRZbEJ1PUpfLHQuc2NoZW1lUmRZbEduPW5iLHQuc2NoZW1lUmVkcz1JYix0LnNjaGVtZVNldDE9cV8sdC5zY2hlbWVTZXQyPUlfLHQuc2NoZW1lU2V0Mz1PXyx0LnNjaGVtZVNwZWN0cmFsPXJiLHQuc2NoZW1lVGFibGVhdTEwPVVfLHQuc2NoZW1lWWxHbj1NYix0LnNjaGVtZVlsR25CdT14Yix0LnNjaGVtZVlsT3JCcj1UYix0LnNjaGVtZVlsT3JSZD1FYix0LnNlbGVjdD1Xbix0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IEduKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEduKFtMdCh0KV0sWG4pfSx0LnNlbGVjdGlvbj1Wbix0LnNlbGVjdG9yPVl0LHQuc2VsZWN0b3JBbGw9JHQsdC5zaHVmZmxlPWR0LHQuc2h1ZmZsZXI9cHQsdC5zb21lPWZ1bmN0aW9uKHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigidGVzdCBpcyBub3QgYSBmdW5jdGlvbiIpO2xldCBlPS0xO2Zvcihjb25zdCByIG9mIHQpaWYobihyLCsrZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5zb3J0PVUsdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PUpiKFtdKSxuPUt4LGU9Wngscj1ReDtmdW5jdGlvbiBpKGkpe3ZhciBvLGEsdT1BcnJheS5mcm9tKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEp4KSxjPXUubGVuZ3RoLGY9LTE7Zm9yKGNvbnN0IHQgb2YgaSlmb3Iobz0wLCsrZjtvPGM7KytvKSh1W29dW2ZdPVswLCtyKHQsdVtvXS5rZXksZixpKV0pLmRhdGE9dDtmb3Iobz0wLGE9eG0obih1KSk7bzxjOysrbyl1W2Fbb11dLmluZGV4PW87cmV0dXJuIGUodSxhKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpKYihBcnJheS5mcm9tKG4pKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmIoK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9LeDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OkpiKEFycmF5LmZyb20odCkpLGkpOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/Wng6dCxpKTplfSxpfSx0LnN0YWNrT2Zmc2V0RGl2ZXJnaW5nPWZ1bmN0aW9uKHQsbil7aWYoKHU9dC5sZW5ndGgpPjApZm9yKHZhciBlLHIsaSxvLGEsdSxjPTAsZj10W25bMF1dLmxlbmd0aDtjPGY7KytjKWZvcihvPWE9MCxlPTA7ZTx1OysrZSkoaT0ocj10W25bZV1dW2NdKVsxXS1yWzBdKT4wPyhyWzBdPW8sclsxXT1vKz1pKTppPDA/KHJbMV09YSxyWzBdPWErPWkpOihyWzBdPTAsclsxXT1pKX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LG4pe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscixpLG89MCxhPXRbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihpPWU9MDtlPHI7KytlKWkrPXRbZV1bb11bMV18fDA7aWYoaSlmb3IoZT0wO2U8cjsrK2UpdFtlXVtvXVsxXS89aX1aeCh0LG4pfX0sdC5zdGFja09mZnNldE5vbmU9WngsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxuKXtpZigoZT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHI9MCxpPXRbblswXV0sbz1pLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCx1PTA7YTxlOysrYSl1Kz10W2FdW3JdWzFdfHwwO2lbcl1bMV0rPWlbcl1bMF09LXUvMn1aeCh0LG4pfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LG4pe2lmKChpPXQubGVuZ3RoKT4wJiYocj0oZT10W25bMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgZSxyLGksbz0wLGE9MTthPHI7KythKXtmb3IodmFyIHU9MCxjPTAsZj0wO3U8aTsrK3Upe2Zvcih2YXIgcz10W25bdV1dLGw9c1thXVsxXXx8MCxoPShsLShzW2EtMV1bMV18fDApKS8yLGQ9MDtkPHU7KytkKXt2YXIgcD10W25bZF1dO2grPShwW2FdWzFdfHwwKS0ocFthLTFdWzFdfHwwKX1jKz1sLGYrPWgqbH1lW2EtMV1bMV0rPWVbYS0xXVswXT1vLGMmJihvLT1mL2MpfWVbYS0xXVsxXSs9ZVthLTFdWzBdPW8sWngodCxuKX19LHQuc3RhY2tPcmRlckFwcGVhcmFuY2U9dHcsdC5zdGFja09yZGVyQXNjZW5kaW5nPWV3LHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGV3KHQpLnJldmVyc2UoKX0sdC5zdGFja09yZGVySW5zaWRlT3V0PWZ1bmN0aW9uKHQpe3ZhciBuLGUscj10Lmxlbmd0aCxpPXQubWFwKHJ3KSxvPXR3KHQpLGE9MCx1PTAsYz1bXSxmPVtdO2ZvcihuPTA7bjxyOysrbillPW9bbl0sYTx1PyhhKz1pW2VdLGMucHVzaChlKSk6KHUrPWlbZV0sZi5wdXNoKGUpKTtyZXR1cm4gZi5yZXZlcnNlKCkuY29uY2F0KGMpfSx0LnN0YWNrT3JkZXJOb25lPUt4LHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIEt4KHQpLnJldmVyc2UoKX0sdC5zdHJhdGlmeT1mdW5jdGlvbigpe3ZhciB0LG49ZXAsZT1ycDtmdW5jdGlvbiByKHIpe3ZhciBpLG8sYSx1LGMsZixzLGwsaD1BcnJheS5mcm9tKHIpLGQ9bixwPWUsZz1uZXcgTWFwO2lmKG51bGwhPXQpe2NvbnN0IG49aC5tYXAoKChuLGUpPT5mdW5jdGlvbih0KXtsZXQgbj0odD1gJHt0fWApLmxlbmd0aDtvcCh0LG4tMSkmJiFvcCh0LG4tMikmJih0PXQuc2xpY2UoMCwtMSkpO3JldHVybiIvIj09PXRbMF0/dDpgLyR7dH1gfSh0KG4sZSxyKSkpKSxlPW4ubWFwKGlwKSxpPW5ldyBTZXQobikuYWRkKCIiKTtmb3IoY29uc3QgdCBvZiBlKWkuaGFzKHQpfHwoaS5hZGQodCksbi5wdXNoKHQpLGUucHVzaChpcCh0KSksaC5wdXNoKG5wKSk7ZD0odCxlKT0+bltlXSxwPSh0LG4pPT5lW25dfWZvcihhPTAsaT1oLmxlbmd0aDthPGk7KythKW89aFthXSxmPWhbYV09bmV3IEVkKG8pLG51bGwhPShzPWQobyxhLHIpKSYmKHMrPSIiKSYmKGw9Zi5pZD1zLGcuc2V0KGwsZy5oYXMobCk/dHA6ZikpLG51bGwhPShzPXAobyxhLHIpKSYmKHMrPSIiKSYmKGYucGFyZW50PXMpO2ZvcihhPTA7YTxpOysrYSlpZihzPShmPWhbYV0pLnBhcmVudCl7aWYoIShjPWcuZ2V0KHMpKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrcyk7aWYoYz09PXRwKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK3MpO2MuY2hpbGRyZW4/Yy5jaGlsZHJlbi5wdXNoKGYpOmMuY2hpbGRyZW49W2ZdLGYucGFyZW50PWN9ZWxzZXtpZih1KXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTt1PWZ9aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYobnVsbCE9dCl7Zm9yKDt1LmRhdGE9PT1ucCYmMT09PXUuY2hpbGRyZW4ubGVuZ3RoOyl1PXUuY2hpbGRyZW5bMF0sLS1pO2ZvcihsZXQgdD1oLmxlbmd0aC0xO3Q+PTAmJihmPWhbdF0sZi5kYXRhPT09bnApOy0tdClmLmRhdGE9bnVsbH1pZih1LnBhcmVudD1KZCx1LmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWl9KSkuZWFjaEJlZm9yZShTZCksdS5wYXJlbnQ9bnVsbCxpPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiB1fXJldHVybiByLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWtkKHQpLHIpOm59LHIucGFyZW50SWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9a2QodCkscik6ZX0sci5wYXRoPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWtkKG4pLHIpOnR9LHJ9LHQuc3R5bGU9eW4sdC5zdWJzZXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX3Qobix0KX0sdC5zdW09ZnVuY3Rpb24odCxuKXtsZXQgZT0wO2lmKHZvaWQgMD09PW4pZm9yKGxldCBuIG9mIHQpKG49K24pJiYoZSs9bik7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCkoaT0rbihpLCsrcix0KSkmJihlKz1pKX1yZXR1cm4gZX0sdC5zdXBlcnNldD1fdCx0LnN2Zz1zYyx0LnN5bWJvbD1mdW5jdGlvbih0LG4pe2xldCBlPW51bGw7ZnVuY3Rpb24gcigpe2xldCByO2lmKGV8fChlPXI9UGEoKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhlLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkscilyZXR1cm4gZT1udWxsLHIrIiJ8fG51bGx9cmV0dXJuIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpKYih0fHxHbSksbj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkpiKHZvaWQgMD09PW4/NjQ6K24pLHIudHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkpiKG4pLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpiKCt0KSxyKTpufSxyLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOnQscik6ZX0scn0sdC5zeW1ib2xBc3Rlcmlzaz1YbSx0LnN5bWJvbENpcmNsZT1HbSx0LnN5bWJvbENyb3NzPVZtLHQuc3ltYm9sRGlhbW9uZD1LbSx0LnN5bWJvbERpYW1vbmQyPVFtLHQuc3ltYm9sUGx1cz1KbSx0LnN5bWJvbFNxdWFyZT10eCx0LnN5bWJvbFNxdWFyZTI9bngsdC5zeW1ib2xTdGFyPW94LHQuc3ltYm9sVHJpYW5nbGU9dXgsdC5zeW1ib2xUcmlhbmdsZTI9ZngsdC5zeW1ib2xXeWU9cHgsdC5zeW1ib2xYPWd4LHQuc3ltYm9scz15eCx0LnN5bWJvbHNGaWxsPXl4LHQuc3ltYm9sc1N0cm9rZT12eCx0LnRleHQ9ZWMsdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygyKihhdCh0LC43NSktYXQodCwuMjUpKSpNYXRoLnBvdyhfKHQpLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxuLGUpe3JldHVybiBNYXRoLmNlaWwoKGUtbikqTWF0aC5jYnJ0KF8odCkpLygzLjQ5Kk0odCkpKX0sdC50aHJlc2hvbGRTdHVyZ2VzPUssdC50aWNrRm9ybWF0PXRnLHQudGlja0luY3JlbWVudD1WLHQudGlja1N0ZXA9Vyx0LnRpY2tzPUcsdC50aW1lRGF5PWpnLHQudGltZURheXM9JGcsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT1nXyx0LnRpbWVGb3JtYXRMb2NhbGU9WnksdC50aW1lRnJpZGF5PUtnLHQudGltZUZyaWRheXM9aXksdC50aW1lSG91cj1CZyx0LnRpbWVIb3Vycz1ZZyx0LnRpbWVJbnRlcnZhbD13Zyx0LnRpbWVNaWxsaXNlY29uZD1BZyx0LnRpbWVNaWxsaXNlY29uZHM9VGcsdC50aW1lTWludXRlPUlnLHQudGltZU1pbnV0ZXM9T2csdC50aW1lTW9uZGF5PUdnLHQudGltZU1vbmRheXM9dHksdC50aW1lTW9udGg9dXksdC50aW1lTW9udGhzPWN5LHQudGltZVNhdHVyZGF5PVFnLHQudGltZVNhdHVyZGF5cz1veSx0LnRpbWVTZWNvbmQ9UmcsdC50aW1lU2Vjb25kcz1GZyx0LnRpbWVTdW5kYXk9WGcsdC50aW1lU3VuZGF5cz1KZyx0LnRpbWVUaHVyc2RheT1aZyx0LnRpbWVUaHVyc2RheXM9cnksdC50aW1lVGlja0ludGVydmFsPVh5LHQudGltZVRpY2tzPUh5LHQudGltZVR1ZXNkYXk9VmcsdC50aW1lVHVlc2RheXM9bnksdC50aW1lV2VkbmVzZGF5PVdnLHQudGltZVdlZG5lc2RheXM9ZXksdC50aW1lV2Vlaz1YZyx0LnRpbWVXZWVrcz1KZyx0LnRpbWVZZWFyPXN5LHQudGltZVllYXJzPWx5LHQudGltZW91dD1DaSx0LnRpbWVyPVRpLHQudGltZXJGbHVzaD1TaSx0LnRyYW5zaXRpb249aG8sdC50cmFuc3Bvc2U9Z3QsdC50cmVlPWZ1bmN0aW9uKCl7dmFyIHQ9YXAsbj0xLGU9MSxyPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgYz1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGksbyxhPW5ldyBscCh0LDApLHU9W2FdO249dS5wb3AoKTspaWYocj1uLl8uY2hpbGRyZW4pZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KG89ci5sZW5ndGgpLGk9by0xO2k+PTA7LS1pKXUucHVzaChlPW4uY2hpbGRyZW5baV09bmV3IGxwKHJbaV0saSkpLGUucGFyZW50PW47cmV0dXJuKGEucGFyZW50PW5ldyBscChudWxsLDApKS5jaGlsZHJlbj1bYV0sYX0oaSk7aWYoYy5lYWNoQWZ0ZXIobyksYy5wYXJlbnQubT0tYy56LGMuZWFjaEJlZm9yZShhKSxyKWkuZWFjaEJlZm9yZSh1KTtlbHNle3ZhciBmPWkscz1pLGw9aTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDxmLngmJihmPXQpLHQueD5zLngmJihzPXQpLHQuZGVwdGg+bC5kZXB0aCYmKGw9dCl9KSk7dmFyIGg9Zj09PXM/MTp0KGYscykvMixkPWgtZi54LHA9bi8ocy54K2grZCksZz1lLyhsLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K2QpKnAsdC55PXQuZGVwdGgqZ30pKX1yZXR1cm4gaX1mdW5jdGlvbiBvKG4pe3ZhciBlPW4uY2hpbGRyZW4scj1uLnBhcmVudC5jaGlsZHJlbixpPW4uaT9yW24uaS0xXTpudWxsO2lmKGUpeyFmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0wLHI9MCxpPXQuY2hpbGRyZW4sbz1pLmxlbmd0aDstLW8+PTA7KShuPWlbb10pLnorPWUsbi5tKz1lLGUrPW4ucysocis9bi5jKX0obik7dmFyIG89KGVbMF0ueitlW2UubGVuZ3RoLTFdLnopLzI7aT8obi56PWkueit0KG4uXyxpLl8pLG4ubT1uLnotbyk6bi56PW99ZWxzZSBpJiYobi56PWkueit0KG4uXyxpLl8pKTtuLnBhcmVudC5BPWZ1bmN0aW9uKG4sZSxyKXtpZihlKXtmb3IodmFyIGksbz1uLGE9bix1PWUsYz1vLnBhcmVudC5jaGlsZHJlblswXSxmPW8ubSxzPWEubSxsPXUubSxoPWMubTt1PWNwKHUpLG89dXAobyksdSYmbzspYz11cChjKSwoYT1jcChhKSkuYT1uLChpPXUueitsLW8uei1mK3QodS5fLG8uXykpPjAmJihmcChzcCh1LG4sciksbixpKSxmKz1pLHMrPWkpLGwrPXUubSxmKz1vLm0saCs9Yy5tLHMrPWEubTt1JiYhY3AoYSkmJihhLnQ9dSxhLm0rPWwtcyksbyYmIXVwKGMpJiYoYy50PW8sYy5tKz1mLWgscj1uKX1yZXR1cm4gcn0obixpLG4ucGFyZW50LkF8fHJbMF0pfWZ1bmN0aW9uIGEodCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHUodCl7dC54Kj1uLHQueT10LmRlcHRoKmV9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxuPSt0WzBdLGU9K3RbMV0saSk6cj9udWxsOltuLGVdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLG49K3RbMF0sZT0rdFsxXSxpKTpyP1tuLGVdOm51bGx9LGl9LHQudHJlZW1hcD1mdW5jdGlvbigpe3ZhciB0PWdwLG49ITEsZT0xLHI9MSxpPVswXSxvPUNkLGE9Q2QsdT1DZCxjPUNkLGY9Q2Q7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1lLHQueTE9cix0LmVhY2hCZWZvcmUobCksaT1bMF0sbiYmdC5lYWNoQmVmb3JlKEtkKSx0fWZ1bmN0aW9uIGwobil7dmFyIGU9aVtuLmRlcHRoXSxyPW4ueDArZSxzPW4ueTArZSxsPW4ueDEtZSxoPW4ueTEtZTtsPHImJihyPWw9KHIrbCkvMiksaDxzJiYocz1oPShzK2gpLzIpLG4ueDA9cixuLnkwPXMsbi54MT1sLG4ueTE9aCxuLmNoaWxkcmVuJiYoZT1pW24uZGVwdGgrMV09byhuKS8yLHIrPWYobiktZSxzKz1hKG4pLWUsKGwtPXUobiktZSk8ciYmKHI9bD0ocitsKS8yKSwoaC09YyhuKS1lKTxzJiYocz1oPShzK2gpLzIpLHQobixyLHMsbCxoKSl9cmV0dXJuIHMucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISF0LHMpOm59LHMuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLHMpOltlLHJdfSxzLnRpbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9TmQobikscyk6dH0scy5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3MucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTpzLnBhZGRpbmdJbm5lcigpfSxzLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlBkKCt0KSxzKTpvfSxzLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9zLnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6cy5wYWRkaW5nVG9wKCl9LHMucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlBkKCt0KSxzKTphfSxzLnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlBkKCt0KSxzKTp1fSxzLnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpQZCgrdCkscyk6Y30scy5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlBkKCt0KSxzKTpmfSxzfSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxuLGUscixpKXt2YXIgbyxhLHU9dC5jaGlsZHJlbixjPXUubGVuZ3RoLGY9bmV3IEFycmF5KGMrMSk7Zm9yKGZbMF09YT1vPTA7bzxjOysrbylmW28rMV09YSs9dVtvXS52YWx1ZTshZnVuY3Rpb24gdChuLGUscixpLG8sYSxjKXtpZihuPj1lLTEpe3ZhciBzPXVbbl07cmV0dXJuIHMueDA9aSxzLnkwPW8scy54MT1hLHZvaWQocy55MT1jKX12YXIgbD1mW25dLGg9ci8yK2wsZD1uKzEscD1lLTE7Zm9yKDtkPHA7KXt2YXIgZz1kK3A+Pj4xO2ZbZ108aD9kPWcrMTpwPWd9aC1mW2QtMV08ZltkXS1oJiZuKzE8ZCYmLS1kO3ZhciB5PWZbZF0tbCx2PXIteTtpZihhLWk+Yy1vKXt2YXIgXz1yPyhpKnYrYSp5KS9yOmE7dChuLGQseSxpLG8sXyxjKSx0KGQsZSx2LF8sbyxhLGMpfWVsc2V7dmFyIGI9cj8obyp2K2MqeSkvcjpjO3QobixkLHksaSxvLGEsYiksdChkLGUsdixpLGIsYSxjKX19KDAsYyx0LnZhbHVlLG4sZSxyLGkpfSx0LnRyZWVtYXBEaWNlPVFkLHQudHJlZW1hcFJlc3F1YXJpZnk9eXAsdC50cmVlbWFwU2xpY2U9aHAsdC50cmVlbWFwU2xpY2VEaWNlPWZ1bmN0aW9uKHQsbixlLHIsaSl7KDEmdC5kZXB0aD9ocDpRZCkodCxuLGUscixpKX0sdC50cmVlbWFwU3F1YXJpZnk9Z3AsdC50c3Y9b2MsdC50c3ZGb3JtYXQ9R3UsdC50c3ZGb3JtYXRCb2R5PVZ1LHQudHN2Rm9ybWF0Um93PVp1LHQudHN2Rm9ybWF0Um93cz1XdSx0LnRzdkZvcm1hdFZhbHVlPUt1LHQudHN2UGFyc2U9SHUsdC50c3ZQYXJzZVJvd3M9WHUsdC51bmlvbj1mdW5jdGlvbiguLi50KXtjb25zdCBuPW5ldyBJbnRlcm5TZXQ7Zm9yKGNvbnN0IGUgb2YgdClmb3IoY29uc3QgdCBvZiBlKW4uYWRkKHQpO3JldHVybiBufSx0LnV0Y0RheT1ieSx0LnV0Y0RheXM9bXksdC51dGNGcmlkYXk9RXksdC51dGNGcmlkYXlzPVJ5LHQudXRjSG91cj15eSx0LnV0Y0hvdXJzPXZ5LHQudXRjTWlsbGlzZWNvbmQ9QWcsdC51dGNNaWxsaXNlY29uZHM9VGcsdC51dGNNaW51dGU9ZHksdC51dGNNaW51dGVzPXB5LHQudXRjTW9uZGF5PU15LHQudXRjTW9uZGF5cz1DeSx0LnV0Y01vbnRoPUl5LHQudXRjTW9udGhzPU95LHQudXRjU2F0dXJkYXk9a3ksdC51dGNTYXR1cmRheXM9RnksdC51dGNTZWNvbmQ9UmcsdC51dGNTZWNvbmRzPUZnLHQudXRjU3VuZGF5PXd5LHQudXRjU3VuZGF5cz1OeSx0LnV0Y1RodXJzZGF5PVN5LHQudXRjVGh1cnNkYXlzPUR5LHQudXRjVGlja0ludGVydmFsPSR5LHQudXRjVGlja3M9anksdC51dGNUdWVzZGF5PUF5LHQudXRjVHVlc2RheXM9UHksdC51dGNXZWRuZXNkYXk9VHksdC51dGNXZWRuZXNkYXlzPXp5LHQudXRjV2Vlaz13eSx0LnV0Y1dlZWtzPU55LHQudXRjWWVhcj1CeSx0LnV0Y1llYXJzPVl5LHQudmFyaWFuY2U9dyx0LnZlcnNpb249IjcuNi4xIix0LndpbmRvdz1obix0LnhtbD1jYyx0LnppcD1mdW5jdGlvbigpe3JldHVybiBndChhcmd1bWVudHMpfSx0Lnpvb209ZnVuY3Rpb24oKXt2YXIgdCxuLGUscj1sdyxpPWh3LG89eXcsYT1wdyx1PWd3LGM9WzAsMS8wXSxmPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9bmksaD1OdCgic3RhcnQiLCJ6b29tIiwiZW5kIiksZD01MDAscD0wLGc9MTA7ZnVuY3Rpb24geSh0KXt0LnByb3BlcnR5KCJfX3pvb20iLGR3KS5vbigid2hlZWwuem9vbSIsTSx7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsQSkub24oImRibGNsaWNrLnpvb20iLFQpLmZpbHRlcih1KS5vbigidG91Y2hzdGFydC56b29tIixTKS5vbigidG91Y2htb3ZlLnpvb20iLEUpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLGspLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gdih0LG4pe3JldHVybihuPU1hdGgubWF4KGNbMF0sTWF0aC5taW4oY1sxXSxuKSkpPT09dC5rP3Q6bmV3IGF3KG4sdC54LHQueSl9ZnVuY3Rpb24gXyh0LG4sZSl7dmFyIHI9blswXS1lWzBdKnQuayxpPW5bMV0tZVsxXSp0Lms7cmV0dXJuIHI9PT10LngmJmk9PT10Lnk/dDpuZXcgYXcodC5rLHIsaSl9ZnVuY3Rpb24gYih0KXtyZXR1cm5bKCt0WzBdWzBdKyArdFsxXVswXSkvMiwoK3RbMF1bMV0rICt0WzFdWzFdKS8yXX1mdW5jdGlvbiBtKHQsbixlLHIpe3Qub24oInN0YXJ0Lnpvb20iLChmdW5jdGlvbigpe3godGhpcyxhcmd1bWVudHMpLmV2ZW50KHIpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIiwoZnVuY3Rpb24oKXt4KHRoaXMsYXJndW1lbnRzKS5ldmVudChyKS5lbmQoKX0pKS50d2Vlbigiem9vbSIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPWFyZ3VtZW50cyxhPXgodCxvKS5ldmVudChyKSx1PWkuYXBwbHkodCxvKSxjPW51bGw9PWU/Yih1KToiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHQsbyk6ZSxmPU1hdGgubWF4KHVbMV1bMF0tdVswXVswXSx1WzFdWzFdLXVbMF1bMV0pLHM9dC5fX3pvb20saD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHQsbyk6bixkPWwocy5pbnZlcnQoYykuY29uY2F0KGYvcy5rKSxoLmludmVydChjKS5jb25jYXQoZi9oLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1oO2Vsc2V7dmFyIG49ZCh0KSxlPWYvblsyXTt0PW5ldyBhdyhlLGNbMF0tblswXSplLGNbMV0tblsxXSplKX1hLnpvb20obnVsbCx0KX19KSl9ZnVuY3Rpb24geCh0LG4sZSl7cmV0dXJuIWUmJnQuX196b29taW5nfHxuZXcgdyh0LG4pfWZ1bmN0aW9uIHcodCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1pLmFwcGx5KHQsbiksdGhpcy50YXBzPTB9ZnVuY3Rpb24gTSh0LC4uLm4pe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZT14KHRoaXMsbikuZXZlbnQodCksaT10aGlzLl9fem9vbSx1PU1hdGgubWF4KGNbMF0sTWF0aC5taW4oY1sxXSxpLmsqTWF0aC5wb3coMixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxzPXRlKHQpO2lmKGUud2hlZWwpZS5tb3VzZVswXVswXT09PXNbMF0mJmUubW91c2VbMF1bMV09PT1zWzFdfHwoZS5tb3VzZVsxXT1pLmludmVydChlLm1vdXNlWzBdPXMpKSxjbGVhclRpbWVvdXQoZS53aGVlbCk7ZWxzZXtpZihpLms9PT11KXJldHVybjtlLm1vdXNlPVtzLGkuaW52ZXJ0KHMpXSxJaSh0aGlzKSxlLnN0YXJ0KCl9c3codCksZS53aGVlbD1zZXRUaW1lb3V0KGwsMTUwKSxlLnpvb20oIm1vdXNlIixvKF8odihpLHUpLGUubW91c2VbMF0sZS5tb3VzZVsxXSksZS5leHRlbnQsZikpfWZ1bmN0aW9uIGwoKXtlLndoZWVsPW51bGwsZS5lbmQoKX19ZnVuY3Rpb24gQSh0LC4uLm4pe2lmKCFlJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGk9dC5jdXJyZW50VGFyZ2V0LGE9eCh0aGlzLG4sITApLmV2ZW50KHQpLHU9V24odC52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGgsITApLm9uKCJtb3VzZXVwLnpvb20iLGQsITApLGM9dGUodCxpKSxzPXQuY2xpZW50WCxsPXQuY2xpZW50WTtvZSh0LnZpZXcpLGZ3KHQpLGEubW91c2U9W2MsdGhpcy5fX3pvb20uaW52ZXJ0KGMpXSxJaSh0aGlzKSxhLnN0YXJ0KCl9ZnVuY3Rpb24gaCh0KXtpZihzdyh0KSwhYS5tb3ZlZCl7dmFyIG49dC5jbGllbnRYLXMsZT10LmNsaWVudFktbDthLm1vdmVkPW4qbitlKmU+cH1hLmV2ZW50KHQpLnpvb20oIm1vdXNlIixvKF8oYS50aGF0Ll9fem9vbSxhLm1vdXNlWzBdPXRlKHQsaSksYS5tb3VzZVsxXSksYS5leHRlbnQsZikpfWZ1bmN0aW9uIGQodCl7dS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxhZSh0LnZpZXcsYS5tb3ZlZCksc3codCksYS5ldmVudCh0KS5lbmQoKX19ZnVuY3Rpb24gVCh0LC4uLm4pe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZT10aGlzLl9fem9vbSxhPXRlKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LHRoaXMpLHU9ZS5pbnZlcnQoYSksYz1lLmsqKHQuc2hpZnRLZXk/LjU6MiksbD1vKF8odihlLGMpLGEsdSksaS5hcHBseSh0aGlzLG4pLGYpO3N3KHQpLHM+MD9Xbih0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocykuY2FsbChtLGwsYSx0KTpXbih0aGlzKS5jYWxsKHkudHJhbnNmb3JtLGwsYSx0KX19ZnVuY3Rpb24gUyhlLC4uLmkpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbyxhLHUsYyxmPWUudG91Y2hlcyxzPWYubGVuZ3RoLGw9eCh0aGlzLGksZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKS5ldmVudChlKTtmb3IoZncoZSksYT0wO2E8czsrK2EpYz1bYz10ZSh1PWZbYV0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KGMpLHUuaWRlbnRpZmllcl0sbC50b3VjaDA/bC50b3VjaDF8fGwudG91Y2gwWzJdPT09Y1syXXx8KGwudG91Y2gxPWMsbC50YXBzPTApOihsLnRvdWNoMD1jLG89ITAsbC50YXBzPTErISF0KTt0JiYodD1jbGVhclRpbWVvdXQodCkpLG8mJihsLnRhcHM8MiYmKG49Y1swXSx0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dD1udWxsfSksZCkpLElpKHRoaXMpLGwuc3RhcnQoKSl9fWZ1bmN0aW9uIEUodCwuLi5uKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIGUscixpLGEsdT14KHRoaXMsbikuZXZlbnQodCksYz10LmNoYW5nZWRUb3VjaGVzLHM9Yy5sZW5ndGg7Zm9yKHN3KHQpLGU9MDtlPHM7KytlKWk9dGUocj1jW2VdLHRoaXMpLHUudG91Y2gwJiZ1LnRvdWNoMFsyXT09PXIuaWRlbnRpZmllcj91LnRvdWNoMFswXT1pOnUudG91Y2gxJiZ1LnRvdWNoMVsyXT09PXIuaWRlbnRpZmllciYmKHUudG91Y2gxWzBdPWkpO2lmKHI9dS50aGF0Ll9fem9vbSx1LnRvdWNoMSl7dmFyIGw9dS50b3VjaDBbMF0saD11LnRvdWNoMFsxXSxkPXUudG91Y2gxWzBdLHA9dS50b3VjaDFbMV0sZz0oZz1kWzBdLWxbMF0pKmcrKGc9ZFsxXS1sWzFdKSpnLHk9KHk9cFswXS1oWzBdKSp5Kyh5PXBbMV0taFsxXSkqeTtyPXYocixNYXRoLnNxcnQoZy95KSksaT1bKGxbMF0rZFswXSkvMiwobFsxXStkWzFdKS8yXSxhPVsoaFswXStwWzBdKS8yLChoWzFdK3BbMV0pLzJdfWVsc2V7aWYoIXUudG91Y2gwKXJldHVybjtpPXUudG91Y2gwWzBdLGE9dS50b3VjaDBbMV19dS56b29tKCJ0b3VjaCIsbyhfKHIsaSxhKSx1LmV4dGVudCxmKSl9fWZ1bmN0aW9uIGsodCwuLi5yKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIGksbyxhPXgodGhpcyxyKS5ldmVudCh0KSx1PXQuY2hhbmdlZFRvdWNoZXMsYz11Lmxlbmd0aDtmb3IoZncodCksZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSxkKSxpPTA7aTxjOysraSlvPXVbaV0sYS50b3VjaDAmJmEudG91Y2gwWzJdPT09by5pZGVudGlmaWVyP2RlbGV0ZSBhLnRvdWNoMDphLnRvdWNoMSYmYS50b3VjaDFbMl09PT1vLmlkZW50aWZpZXImJmRlbGV0ZSBhLnRvdWNoMTtpZihhLnRvdWNoMSYmIWEudG91Y2gwJiYoYS50b3VjaDA9YS50b3VjaDEsZGVsZXRlIGEudG91Y2gxKSxhLnRvdWNoMClhLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoYS50b3VjaDBbMF0pO2Vsc2UgaWYoYS5lbmQoKSwyPT09YS50YXBzJiYobz10ZShvLHRoaXMpLE1hdGguaHlwb3QoblswXS1vWzBdLG5bMV0tb1sxXSk8Zykpe3ZhciBmPVduKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7ZiYmZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4geS50cmFuc2Zvcm09ZnVuY3Rpb24odCxuLGUscil7dmFyIGk9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2kucHJvcGVydHkoIl9fem9vbSIsZHcpLHQhPT1pP20odCxuLGUscik6aS5pbnRlcnJ1cHQoKS5lYWNoKChmdW5jdGlvbigpe3godGhpcyxhcmd1bWVudHMpLmV2ZW50KHIpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLmVuZCgpfSkpfSx5LnNjYWxlQnk9ZnVuY3Rpb24odCxuLGUscil7eS5zY2FsZVRvKHQsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3pvb20uayxlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm47cmV0dXJuIHQqZX0pLGUscil9LHkuc2NhbGVUbz1mdW5jdGlvbih0LG4sZSxyKXt5LnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9dGhpcy5fX3pvb20sYT1udWxsPT1lP2IodCk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSx1PXIuaW52ZXJ0KGEpLGM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bjtyZXR1cm4gbyhfKHYocixjKSxhLHUpLHQsZil9KSxlLHIpfSx5LnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKHQsbixlLHIpe3kudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZil9KSxudWxsLHIpfSx5LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKHQsbixlLHIsYSl7eS50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLHU9bnVsbD09cj9iKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnI7cmV0dXJuIG8odXcudHJhbnNsYXRlKHVbMF0sdVsxXSkuc2NhbGUoYS5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uLCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSksdCxmKX0pLHIsYSl9LHcucHJvdG90eXBlPXtldmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmKHRoaXMuc291cmNlRXZlbnQ9dCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPW4uaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1uLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPW4uaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1uLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXt2YXIgbj1Xbih0aGlzLnRoYXQpLmRhdHVtKCk7aC5jYWxsKHQsdGhpcy50aGF0LG5ldyBvdyh0LHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDp5LHR5cGU6dCx0cmFuc2Zvcm06dGhpcy50aGF0Ll9fem9vbSxkaXNwYXRjaDpofSksbil9fSx5LndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppdygrdCkseSk6YX0seS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppdyghIXQpLHkpOnJ9LHkudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aXcoISF0KSx5KTp1fSx5LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oml3KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSx5KTppfSx5LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjWzBdPSt0WzBdLGNbMV09K3RbMV0seSk6W2NbMF0sY1sxXV19LHkudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmWzBdWzBdPSt0WzBdWzBdLGZbMV1bMF09K3RbMV1bMF0sZlswXVsxXT0rdFswXVsxXSxmWzFdWzFdPSt0WzFdWzFdLHkpOltbZlswXVswXSxmWzBdWzFdXSxbZlsxXVswXSxmWzFdWzFdXV19LHkuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQseSk6b30seS5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCx5KTpzfSx5LmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQseSk6bH0seS5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD95OnR9LHkuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0odD0rdCkqdCx5KTpNYXRoLnNxcnQocCl9LHkudGFwRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3QseSk6Z30seX0sdC56b29tSWRlbnRpdHk9dXcsdC56b29tVHJhbnNmb3JtPWN3LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKTs=","asset/force-graph.js":"data:application/javascript;base64,ICAvLwogIC8vIFNldHRpbmdzIGFkZGVkIGJ5IFdpbGxlbSBIZW5kcmlrcwogIC8vICghKSB0byBiZSBhZGRlZCB0byB5YW1sIG9yIG90aGVyIHNldHRpbmdzIGNvbmZpZwogIC8vCiAgLy8KICAvLyBMQUJFTCBTRVRUSU5HUwogIGNvbnN0IExBQkVMX01BUkdJTiA9IDIyOyAvLyBtYXJnaW4gYmV0d2VlbiBsYWJlbC10ZXh0IGFuZCBub2RlLCBoaWdoZXIgbnVtYmVyIC0+IG1vcmUgc3BhY2UKICBjb25zdCBMQUJFTF9WSVNJQklMSVRZX1NUQVJUX0sgPSAxLjU7IC8vIGF0IHRoaXMgaywgbGFiZWxzIGFyZSBzdGlsbCBpbnZpc2libGUKICBjb25zdCBMQUJFTF9WSVNJQklMSVRZX0VORF9LID0gNTsgLy8gYXQgdGhpcyBrLCBsYWJlbHMgYXJlIGZ1bGx5IHZpc2libGUKCi8vIENvcHlyaWdodCAyMDIxIE9ic2VydmFibGUsIEluYy4KLy8gUmVsZWFzZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgovLyBodHRwczovL29ic2VydmFibGVocS5jb20vQGQzL2Rpc2pvaW50LWZvcmNlLWRpcmVjdGVkLWdyYXBoCmZ1bmN0aW9uIEZvcmNlR3JhcGgoewogIG5vZGVzLCAvLyBhbiBpdGVyYWJsZSBvZiBub2RlIG9iamVjdHMgKHR5cGljYWxseSBbe2lkfSwg4oCmXSkKICBsaW5rcyAvLyBhbiBpdGVyYWJsZSBvZiBsaW5rIG9iamVjdHMgKHR5cGljYWxseSBbe3NvdXJjZSwgdGFyZ2V0fSwg4oCmXSkKfSwgewogIG5vZGVJZCA9IGQgPT4gZC5pZCwgLy8gZ2l2ZW4gZCBpbiBub2RlcywgcmV0dXJucyBhIHVuaXF1ZSBpZGVudGlmaWVyIChzdHJpbmcpCiAgbm9kZUdyb3VwLCAvLyBnaXZlbiBkIGluIG5vZGVzLCByZXR1cm5zIGFuIChvcmRpbmFsKSB2YWx1ZSBmb3IgY29sb3IKICBub2RlR3JvdXBzLCAvLyBhbiBhcnJheSBvZiBvcmRpbmFsIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIG5vZGUgZ3JvdXBzCiAgbm9kZVRpdGxlLCAvLyBnaXZlbiBkIGluIG5vZGVzLCBhIHRpdGxlIHN0cmluZwogIG5vZGVGaWxsID0gImN1cnJlbnRDb2xvciIsIC8vIG5vZGUgc3Ryb2tlIGZpbGwgKGlmIG5vdCB1c2luZyBhIGdyb3VwIGNvbG9yIGVuY29kaW5nKQogIG5vZGVTdHJva2UgPSAiI2ZmZiIsIC8vIG5vZGUgc3Ryb2tlIGNvbG9yCiAgbm9kZVN0cm9rZVdpZHRoID0gMS41LCAvLyBub2RlIHN0cm9rZSB3aWR0aCwgaW4gcGl4ZWxzCiAgbm9kZVN0cm9rZU9wYWNpdHkgPSAxLCAvLyBub2RlIHN0cm9rZSBvcGFjaXR5CiAgbm9kZVN0cmVuZ3RoLAogIGxpbmtTb3VyY2UgPSAoe3NvdXJjZX0pID0+IHNvdXJjZSwgLy8gZ2l2ZW4gZCBpbiBsaW5rcywgcmV0dXJucyBhIG5vZGUgaWRlbnRpZmllciBzdHJpbmcKICBsaW5rVGFyZ2V0ID0gKHt0YXJnZXR9KSA9PiB0YXJnZXQsIC8vIGdpdmVuIGQgaW4gbGlua3MsIHJldHVybnMgYSBub2RlIGlkZW50aWZpZXIgc3RyaW5nCiAgbGlua1N0cm9rZSA9ICIjOTk5IiwgLy8gbGluayBzdHJva2UgY29sb3IKICBsaW5rU3Ryb2tlT3BhY2l0eSA9IDAuNiwgLy8gbGluayBzdHJva2Ugb3BhY2l0eQogIGxpbmtTdHJva2VXaWR0aCA9IDEuNSwgLy8gZ2l2ZW4gZCBpbiBsaW5rcywgcmV0dXJucyBhIHN0cm9rZSB3aWR0aCBpbiBwaXhlbHMKICBsaW5rU3Ryb2tlTGluZWNhcCA9ICJyb3VuZCIsIC8vIGxpbmsgc3Ryb2tlIGxpbmVjYXAKICBsaW5rU3RyZW5ndGgsCiAgY29sb3JzID0gZDMuc2NoZW1lVGFibGVhdTEwLCAvLyBhbiBhcnJheSBvZiBjb2xvciBzdHJpbmdzLCBmb3IgdGhlIG5vZGUgZ3JvdXBzCiAgd2lkdGggPSA2NDAsIC8vIG91dGVyIHdpZHRoLCBpbiBwaXhlbHMKICBoZWlnaHQgPSA0MDAsIC8vIG91dGVyIGhlaWdodCwgaW4gcGl4ZWxzCiAgaW52YWxpZGF0aW9uIC8vIHdoZW4gdGhpcyBwcm9taXNlIHJlc29sdmVzLCBzdG9wIHRoZSBzaW11bGF0aW9uCn0gPSB7fSkgewogIC8vIENvbXB1dGUgdmFsdWVzLgoKICBjb25zdCBOID0gZDMubWFwKG5vZGVzLCBub2RlSWQpLm1hcChpbnRlcm4pOwogIGNvbnN0IEMgPSBkMy5tYXAobm9kZXMsIG5vZGVDb25uZWN0aXZpdHkuYmluZChudWxsLCBsaW5rcykpOwogIGNvbnN0IExTID0gZDMubWFwKGxpbmtzLCBsaW5rU291cmNlKS5tYXAoaW50ZXJuKTsKICBjb25zdCBMVCA9IGQzLm1hcChsaW5rcywgbGlua1RhcmdldCkubWFwKGludGVybik7CiAgaWYgKG5vZGVUaXRsZSA9PT0gdW5kZWZpbmVkKSBub2RlVGl0bGUgPSAoXywgaSkgPT4gTltpXTsKICBjb25zdCBUID0gbm9kZVRpdGxlID09IG51bGwgPyBudWxsIDogZDMubWFwKG5vZGVzLCBub2RlVGl0bGUpOwogIGNvbnN0IEcgPSBub2RlR3JvdXAgPT0gbnVsbCA/IG51bGwgOiBkMy5tYXAobm9kZXMsIG5vZGVHcm91cCkubWFwKGludGVybik7CiAgY29uc3QgVyA9IHR5cGVvZiBsaW5rU3Ryb2tlV2lkdGggIT09ICJmdW5jdGlvbiIgPyBudWxsIDogZDMubWFwKGxpbmtzLCBsaW5rU3Ryb2tlV2lkdGgpOwoKICAvLyBSZXBsYWNlIHRoZSBpbnB1dCBub2RlcyBhbmQgbGlua3Mgd2l0aCBtdXRhYmxlIG9iamVjdHMgZm9yIHRoZSBzaW11bGF0aW9uLgogIG5vZGVzID0gZDMubWFwKG5vZGVzLCAoXywgaSkgPT4gKHtpZDogTltpXSwgY29ubmVjdGl2aXR5OiBDW2ldfSkpOwogIGxpbmtzID0gZDMubWFwKGxpbmtzLCAoXywgaSkgPT4gKHtzb3VyY2U6IExTW2ldLCB0YXJnZXQ6IExUW2ldfSkpOwoKICAvLyBDb21wdXRlIG5vZGUgY29ubmVjdGl2aXR5CiAgZnVuY3Rpb24gaXNDb25uZWN0aW5nKG5vZGUsIGxpbmspIHsKICAgIHJldHVybiBsaW5rLnNvdXJjZSA9PSBub2RlLmlkIHx8IGxpbmsudGFyZ2V0ID09IG5vZGUuaWQ7CiAgfQogIAogIGZ1bmN0aW9uIG5vZGVDb25uZWN0aXZpdHkobGlua3MsIG5vZGUpIHsKICAgIHJldHVybiBsaW5rcy5yZWR1Y2UoKGFjYywgY3VycmVudExpbmspID0+IHsKICAgICAgcmV0dXJuIGFjYyArIChpc0Nvbm5lY3Rpbmcobm9kZSwgY3VycmVudExpbmspID8gMSA6IDApOwogICAgfSwgMCk7CiAgfQoKICAvLyBDb21wdXRlIGRlZmF1bHQgZG9tYWlucy4KICBpZiAoRyAmJiBub2RlR3JvdXBzID09PSB1bmRlZmluZWQpIG5vZGVHcm91cHMgPSBkMy5zb3J0KEcpOwoKICAvLyBDb25zdHJ1Y3QgdGhlIHNjYWxlcy4KICBjb25zdCBjb2xvciA9IG5vZGVHcm91cCA9PSBudWxsID8gbnVsbCA6IGQzLnNjYWxlT3JkaW5hbChub2RlR3JvdXBzLCBjb2xvcnMpOwoKICAvLyBDb25zdHJ1Y3QgdGhlIGZvcmNlcy4KICBjb25zdCBmb3JjZU5vZGUgPSBkMy5mb3JjZU1hbnlCb2R5KCk7CiAgY29uc3QgZm9yY2VMaW5rID0gZDMuZm9yY2VMaW5rKGxpbmtzKS5pZCgoe2luZGV4OiBpfSkgPT4gTltpXSk7CiAgaWYgKG5vZGVTdHJlbmd0aCAhPT0gdW5kZWZpbmVkKSBmb3JjZU5vZGUuc3RyZW5ndGgobm9kZVN0cmVuZ3RoKTsKICBpZiAobGlua1N0cmVuZ3RoICE9PSB1bmRlZmluZWQpIGZvcmNlTGluay5zdHJlbmd0aChsaW5rU3RyZW5ndGgpOwoKICBjb25zdCBzdmcgPSBkMy5jcmVhdGUoInN2ZyIpCiAgICAuYXR0cigid2lkdGgiLCB3aWR0aCkKICAgIC5hdHRyKCJoZWlnaHQiLCBoZWlnaHQpCiAgICAuYXR0cigidmlld0JveCIsIFstd2lkdGggLyAyLCAtaGVpZ2h0IC8gMiwgd2lkdGgsIGhlaWdodF0pCiAgICAuYXR0cigic3R5bGUiLCAibWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IGhlaWdodDogaW50cmluc2ljOyIpOwoKICBjb25zdCBsaW5rID0gc3ZnLmFwcGVuZCgiZyIpCiAgICAuYXR0cigic3Ryb2tlIiwgbGlua1N0cm9rZSkKICAgIC5hdHRyKCJzdHJva2Utb3BhY2l0eSIsIGxpbmtTdHJva2VPcGFjaXR5KQogICAgLmF0dHIoInN0cm9rZS13aWR0aCIsIHR5cGVvZiBsaW5rU3Ryb2tlV2lkdGggIT09ICJmdW5jdGlvbiIgPyBsaW5rU3Ryb2tlV2lkdGggOiBudWxsKQogICAgLmF0dHIoInN0cm9rZS1saW5lY2FwIiwgbGlua1N0cm9rZUxpbmVjYXApCiAgICAuc2VsZWN0QWxsKCJsaW5lIikKICAgIC5kYXRhKGxpbmtzKQogICAgLmpvaW4oImxpbmUiKTsKCiAgaWYgKFcpIGxpbmsuYXR0cigic3Ryb2tlLXdpZHRoIiwgKHtpbmRleDogaX0pID0+IFdbaV0pOwoKICAvLyBTY2FsZXMgZm9yIG5vZGUgc2l6ZSBiYXNlZCBvbiBjb25uZWN0aXZpdHkKICBjb25zdCBub2RlU2l6ZVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKQogICAgLmRvbWFpbihbZDMubWluKEMpLCBkMy5tYXgoQyldKQogICAgLnJhbmdlKFsyLCA4XSk7CgogIGNvbnN0IG5vZGUgPSBzdmcuYXBwZW5kKCJnIikKICAgIC5hdHRyKCJzdHJva2UiLCBub2RlU3Ryb2tlKQogICAgLmF0dHIoInN0cm9rZS1vcGFjaXR5Iiwgbm9kZVN0cm9rZU9wYWNpdHkpCiAgICAuYXR0cigic3Ryb2tlLXdpZHRoIiwgbm9kZVN0cm9rZVdpZHRoKQogICAgLnNlbGVjdEFsbCgiY2lyY2xlIikKICAgIC5kYXRhKG5vZGVzKQogICAgLmpvaW4oImNpcmNsZSIpCiAgICAuYXR0cigiciIsIGQgPT4gbm9kZVNpemVTY2FsZShkLmNvbm5lY3Rpdml0eSkpOwoKICBjb25zdCBsYWJlbHMgPSBzdmcuYXBwZW5kKCJnIikKICAgIC5zZWxlY3RBbGwoInRleHQiKQogICAgLmRhdGEobm9kZXMpCiAgICAuam9pbigndGV4dCcpCiAgICAudGV4dChkID0+IGQuaWQpCiAgICAuYXR0cignZm9udC1mYW1pbHknLCAnU2FucyxBcmlhbCcgKQogICAgLmF0dHIoJ2ZvbnQtc2l6ZScsICcwLjhlbScgKQogICAgLmF0dHIoJ2ZpbGwnLCAnIzIyMicgKQogICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpOwoKICBpZiAoRykgbm9kZS5hdHRyKCJmaWxsIiwgKHtpbmRleDogaX0pID0+IGNvbG9yKEdbaV0pKTsKICBpZiAoVCkgbm9kZS5hcHBlbmQoInRpdGxlIikudGV4dCgoe2luZGV4OiBpfSkgPT4gVFtpXSk7CgogIC8vIEhhbmRsZSBpbnZhbGlkYXRpb24uCiAgaWYgKGludmFsaWRhdGlvbiAhPSBudWxsKSBpbnZhbGlkYXRpb24udGhlbigoKSA9PiBzaW11bGF0aW9uLnN0b3AoKSk7CgogIGZ1bmN0aW9uIGludGVybih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTsKICB9CgogIGNvbnN0IHNpbXVsYXRpb24gPSBkMy5mb3JjZVNpbXVsYXRpb24obm9kZXMpCiAgICAgIC5mb3JjZSgibGluayIsIGZvcmNlTGluaykKICAgICAgLmZvcmNlKCJjaGFyZ2UiLCBmb3JjZU5vZGUpCiAgICAgIC5mb3JjZSgieCIsIGQzLmZvcmNlWCgpKQogICAgICAuZm9yY2UoInkiLCBkMy5mb3JjZVkoKSkKICAgICAgLm9uKCJ0aWNrIiwgdGlja2VkKTsKCiAgZnVuY3Rpb24gdGlja2VkKCkgewogICAgbGluawogICAgICAuYXR0cigieDEiLCBkID0+IGQuc291cmNlLngpCiAgICAgIC5hdHRyKCJ5MSIsIGQgPT4gZC5zb3VyY2UueSkKICAgICAgLmF0dHIoIngyIiwgZCA9PiBkLnRhcmdldC54KQogICAgICAuYXR0cigieTIiLCBkID0+IGQudGFyZ2V0LnkpOwoKICAgIG5vZGUKICAgICAgLmF0dHIoImN4IiwgZCA9PiBkLngpCiAgICAgIC5hdHRyKCJjeSIsIGQgPT4gZC55KTsKCiAgICBsYWJlbHMKICAgICAgLmF0dHIoJ3gnLCBkID0+IGQueCkKICAgICAgLmF0dHIoJ3knLCBkID0+IGQueSk7CiAgfQogCiAgLy8gWm9vbQogIGZ1bmN0aW9uIHJlc2l6ZU5vZGUoZCwgaykgewogICAgLy8gVE9ETzogTWFrZSBzdXJlIGQgaGFzIHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIGNvbm5lY3RlZG5lc3Mgb2YgYQogICAgLy8gbm9kZSBzbyB0aGF0IHdlIGNhbiB2YXJ5IG5vZGUgc2l6ZXMgYmFzZWQgb24gdGhhdC4KICAgIGNvbnN0IG1pbiA9IG5vZGVTaXplU2NhbGUoZC5jb25uZWN0aXZpdHkpOwogICAgY29uc3QgY3VyID0gbm9kZVNpemVTY2FsZShkLmNvbm5lY3Rpdml0eSkgKiBNYXRoLmxvZyhrKTsKICAgIHJldHVybiBNYXRoLm1heChtaW4sIGN1cik7CiAgfQoKICBmdW5jdGlvbiB6b29tZWQoZXZlbnQpIHsKICAgIGNvbnN0IHQgPSBldmVudC50cmFuc2Zvcm07CiAgICBjb25zdCB0cmFuc2xhdGUgPSAidHJhbnNsYXRlKCIgKyB0LnggKyAiLCIgKyB0LnkgKyAiKSIKICAgIG5vZGUKICAgICAgLmF0dHIoImN4IiwgZCA9PiBkLnggKiB0LmspCiAgICAgIC5hdHRyKCJjeSIsIGQgPT4gZC55ICogdC5rKQogICAgICAuYXR0cigiciIsIGQgPT4gcmVzaXplTm9kZShkLCB0LmspKQogICAgICAuYXR0cigndHJhbnNmb3JtJywgdHJhbnNsYXRlKTsKICAgIGxpbmsKICAgICAgLmF0dHIoIngxIiwgZCA9PiBkLnNvdXJjZS54ICogdC5rKQogICAgICAuYXR0cigieTEiLCBkID0+IGQuc291cmNlLnkgKiB0LmspCiAgICAgIC5hdHRyKCJ4MiIsIGQgPT4gZC50YXJnZXQueCAqIHQuaykKICAgICAgLmF0dHIoInkyIiwgZCA9PiBkLnRhcmdldC55ICogdC5rKQogICAgICAuYXR0cigndHJhbnNmb3JtJywgdHJhbnNsYXRlKTsKICAgIGxhYmVscwogICAgICAuYXR0cigndHJhbnNmb3JtJywgdHJhbnNsYXRlKQogICAgICAuYXR0cigneCcsIGQgPT4gZC54ICogdC5rICkKICAgICAgLmF0dHIoJ3knLCBkID0+IGQueSAqIHQuayArIExBQkVMX01BUkdJTiApCiAgICAgIC5hdHRyKCdvcGFjaXR5Jywgb3BhY2l0eV9hY3RpdmF0aW9uKGV2ZW50LnRyYW5zZm9ybS5rKSApOzsKICB9CgogIGNvbnN0IHpvb20gPSBkMy56b29tKCkKICAgIC5zY2FsZUV4dGVudChbMS8yLCA2NF0pCiAgICAub24oInpvb20iLCB6b29tZWQpOwogIAogIHN2Zy5jYWxsKHpvb20pCiAgICAuY2FsbCh6b29tLnRyYW5zbGF0ZVRvLCAwLCAwKTsKCgogIHJldHVybiBPYmplY3QuYXNzaWduKHN2Zy5ub2RlKCksIHtzY2FsZXM6IHtjb2xvcn19KTsKfQoKCmZ1bmN0aW9uIG9wYWNpdHlfYWN0aXZhdGlvbih6b29tX2xldmVsKXsKICAvKiBTdW1tYXJ5OiByZXR1cm5zIG9wYWNpdHkgdmFsdWUsIGRlcGVuZGluZyBvbiB6b29tIGxldmVsIGsKICAgKgogICAqIG9wYWNpdHkgaXMgYSB2YWx1ZSBiZXR3ZW4gWzAsMV0gd2hlcmUgMCBpcyBpbnZpc2libGUKICAgKgogICAqIERlc2NyaXB0aW9uOiBBIGxpbmVhciBvcGFjaXR5IGFjdGl2YXRpb24gZnVuY3Rpb24uCiAgICogLSBmb3IgTEFCRUxfVklTSUJJTElUWV9TVEFSVF9LIChhbmQgYmVsb3cpIC0+IDAgKGludmlzaWJsZSkKICAgKiAtIGZvciBMQUJFTF9WSVNJQklMSVRZX0VORF9LIChhbmQgYWJvdmUpIC0+IDEgKGZ1bGx5IHZpc2libGUpCiAgICogLSBiZXR3ZWVuOiBsaW5lYXIKICAgKgogICAqICBBU0NJSSBhcmUgb2YgYWN0aXZhdGlvbiBmdW5jdGlvbjogX19fXy8tLS0tCiAgICoKICAgKi8KCiAgaWYgKHpvb21fbGV2ZWwgPD0gIExBQkVMX1ZJU0lCSUxJVFlfU1RBUlRfSykgewogICAgcmV0dXJuIDA7CiAgfQogIGlmICh6b29tX2xldmVsID49ICBMQUJFTF9WSVNJQklMSVRZX0VORF9LKSB7CiAgICByZXR1cm4gMTsKICB9CgogIGNvbnN0IGxpbmVhcl9vcGFjaXR5ID0gKHpvb21fbGV2ZWwgLSBMQUJFTF9WSVNJQklMSVRZX1NUQVJUX0spIC8gKExBQkVMX1ZJU0lCSUxJVFlfRU5EX0sgLSBMQUJFTF9WSVNJQklMSVRZX1NUQVJUX0spOwoKICByZXR1cm4gbGluZWFyX29wYWNpdHk7Cn0K"},"functions":{"toggle":{"command":{"name":"Show Global Graph","key":"ctrl-shift-g","mac":"Cmd-shift-g"},"code":"(() => { var mod=(()=>{var f=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var a=(e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})},F=(e,t,n,o)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of w(t))!A.call(e,i)&&i!==n&&f(e,i,{get:()=>t[i],enumerable:!(o=b(t,i))||o.enumerable});return e};var M=e=>F(f({},\"__esModule\",{value:!0}),e);var Ve={};a(Ve,{default:()=>Le});var m={};a(m,{del:()=>C,get:()=>k,set:()=>S});typeof self>\"u\"&&(self={syscall:()=>{throw new Error(\"Not implemented here\")}});var r=self.syscall;function S(e,t){return r(\"clientStore.set\",e,t)}function k(e){return r(\"clientStore.get\",e)}function C(e){return r(\"clientStore.delete\",e)}var u={};a(u,{dispatch:()=>z,enableReadOnlyMode:()=>W,filterBox:()=>B,flashNotification:()=>j,getCurrentPage:()=>T,getCursor:()=>G,getSelection:()=>D,getText:()=>V,hidePanel:()=>N,insertAtCursor:()=>_,insertAtPos:()=>$,matchBefore:()=>J,moveCursor:()=>Q,navigate:()=>O,openUrl:()=>U,prompt:()=>H,reloadPage:()=>I,replaceRange:()=>R,save:()=>E,setPage:()=>L,setSelection:()=>q,showPanel:()=>K});function T(){return r(\"editor.getCurrentPage\")}function L(e){return r(\"editor.setPage\",e)}function V(){return r(\"editor.getText\")}function G(){return r(\"editor.getCursor\")}function D(){return r(\"editor.getSelection\")}function q(e,t){return r(\"editor.setSelection\",e,t)}function E(){return r(\"editor.save\")}function O(e,t,n=!1){return r(\"editor.navigate\",e,t,n)}function I(){return r(\"editor.reloadPage\")}function U(e){return r(\"editor.openUrl\",e)}function j(e,t=\"info\"){return r(\"editor.flashNotification\",e,t)}function B(e,t,n=\"\",o=\"\"){return r(\"editor.filterBox\",e,t,n,o)}function K(e,t,n,o=\"\"){return r(\"editor.showPanel\",e,t,n,o)}function N(e){return r(\"editor.hidePanel\",e)}function $(e,t){return r(\"editor.insertAtPos\",e,t)}function R(e,t,n){return r(\"editor.replaceRange\",e,t,n)}function Q(e){return r(\"editor.moveCursor\",e)}function _(e){return r(\"editor.insertAtCursor\",e)}function J(e){return r(\"editor.matchBefore\",e)}function z(e){return r(\"editor.dispatch\",e)}function H(e,t=\"\"){return r(\"editor.prompt\",e,t)}function W(e){return r(\"editor.enableReadOnlyMode\",e)}var p={};a(p,{batchSet:()=>Y,clearPageIndex:()=>ie,clearPageIndexForPage:()=>ne,del:()=>ee,deletePrefixForPage:()=>oe,get:()=>Z,query:()=>re,queryPrefix:()=>te,set:()=>X});function X(e,t,n){return r(\"index.set\",e,t,n)}function Y(e,t){return r(\"index.batchSet\",e,t)}function Z(e,t){return r(\"index.get\",e,t)}function ee(e,t){return r(\"index.delete\",e,t)}function te(e){return r(\"index.queryPrefix\",e)}function re(e){return r(\"index.query\",e)}function ne(e){return r(\"index.clearPageIndexForPage\",e)}function oe(e,t){return r(\"index.deletePrefixForPage\",e,t)}function ie(){return r(\"index.clearPageIndex\")}var g={};a(g,{deleteAttachment:()=>ye,deletePage:()=>pe,getAttachmentMeta:()=>fe,getPageMeta:()=>le,listAttachments:()=>de,listPages:()=>ue,listPlugs:()=>ge,readAttachment:()=>xe,readPage:()=>ce,writeAttachment:()=>Pe,writePage:()=>me});function ue(e=!1){return r(\"space.listPages\",e)}function le(e){return r(\"space.getPageMeta\",e)}function ce(e){return r(\"space.readPage\",e)}function me(e,t){return r(\"space.writePage\",e,t)}function pe(e){return r(\"space.deletePage\",e)}function ge(){return r(\"space.listPlugs\")}function de(){return r(\"space.listAttachments\")}function fe(e){return r(\"space.getAttachmentMeta\",e)}function xe(e){return r(\"space.readAttachment\",e)}function Pe(e,t,n){return r(\"space.writeAttachment\",e,t,n)}function ye(e){return r(\"space.deleteAttachment\",e)}var l={};a(l,{readAsset:()=>ve});function x(e){let t=atob(e),n=t.length,o=new Uint8Array(n);for(let i=0;i d.id,\n nodeTitle: d => d.id,\n nodeStrokeOpacity: 0.75,\n height: 600,\n width: 700,\n });\n const graph_div = document.querySelector('#graph');\n graph_div.appendChild(chart);\n `}async function Ce(e){let t=await Te(e),n=JSON.stringify(t);await h()&&await u.showPanel(\"lhs\",1,`\n \n \n \n
\n
\n \n `,await ke(n))}async function Te(e){let n=(await g.listPages()).map(({name:c})=>c),i=(await p.queryPrefix(\"pl:\")).map(({key:c,page:v})=>{let[,d]=c.split(\":\");return n.includes(d)||n.push(d),{source:v,target:d}});return{nodes:n.map(c=>({id:c})),links:i}}var Le=y;return M(Ve);})();\n return mod;})()"},"updateBacklinks":{"env":"client","events":["plug:load","editor:pageLoaded"],"code":"(() => { var mod=(()=>{var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var a=(e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0})},w=(e,t,n,o)=>{if(t&&typeof t==\"object\"||typeof t==\"function\")for(let i of v(t))!b.call(e,i)&&i!==n&&f(e,i,{get:()=>t[i],enumerable:!(o=h(t,i))||o.enumerable});return e};var A=e=>w(f({},\"__esModule\",{value:!0}),e);var Ve={};a(Ve,{default:()=>Le});var m={};a(m,{del:()=>S,get:()=>M,set:()=>F});typeof self>\"u\"&&(self={syscall:()=>{throw new Error(\"Not implemented here\")}});var r=self.syscall;function F(e,t){return r(\"clientStore.set\",e,t)}function M(e){return r(\"clientStore.get\",e)}function S(e){return r(\"clientStore.delete\",e)}var c={};a(c,{dispatch:()=>_,enableReadOnlyMode:()=>z,filterBox:()=>U,flashNotification:()=>I,getCurrentPage:()=>k,getCursor:()=>L,getSelection:()=>V,getText:()=>T,hidePanel:()=>B,insertAtCursor:()=>R,insertAtPos:()=>K,matchBefore:()=>Q,moveCursor:()=>$,navigate:()=>q,openUrl:()=>O,prompt:()=>J,reloadPage:()=>E,replaceRange:()=>N,save:()=>D,setPage:()=>C,setSelection:()=>G,showPanel:()=>j});function k(){return r(\"editor.getCurrentPage\")}function C(e){return r(\"editor.setPage\",e)}function T(){return r(\"editor.getText\")}function L(){return r(\"editor.getCursor\")}function V(){return r(\"editor.getSelection\")}function G(e,t){return r(\"editor.setSelection\",e,t)}function D(){return r(\"editor.save\")}function q(e,t,n=!1){return r(\"editor.navigate\",e,t,n)}function E(){return r(\"editor.reloadPage\")}function O(e){return r(\"editor.openUrl\",e)}function I(e,t=\"info\"){return r(\"editor.flashNotification\",e,t)}function U(e,t,n=\"\",o=\"\"){return r(\"editor.filterBox\",e,t,n,o)}function j(e,t,n,o=\"\"){return r(\"editor.showPanel\",e,t,n,o)}function B(e){return r(\"editor.hidePanel\",e)}function K(e,t){return r(\"editor.insertAtPos\",e,t)}function N(e,t,n){return r(\"editor.replaceRange\",e,t,n)}function $(e){return r(\"editor.moveCursor\",e)}function R(e){return r(\"editor.insertAtCursor\",e)}function Q(e){return r(\"editor.matchBefore\",e)}function _(e){return r(\"editor.dispatch\",e)}function J(e,t=\"\"){return r(\"editor.prompt\",e,t)}function z(e){return r(\"editor.enableReadOnlyMode\",e)}var p={};a(p,{batchSet:()=>W,clearPageIndex:()=>ne,clearPageIndexForPage:()=>te,del:()=>Y,deletePrefixForPage:()=>re,get:()=>X,query:()=>ee,queryPrefix:()=>Z,set:()=>H});function H(e,t,n){return r(\"index.set\",e,t,n)}function W(e,t){return r(\"index.batchSet\",e,t)}function X(e,t){return r(\"index.get\",e,t)}function Y(e,t){return r(\"index.delete\",e,t)}function Z(e){return r(\"index.queryPrefix\",e)}function ee(e){return r(\"index.query\",e)}function te(e){return r(\"index.clearPageIndexForPage\",e)}function re(e,t){return r(\"index.deletePrefixForPage\",e,t)}function ne(){return r(\"index.clearPageIndex\")}var d={};a(d,{deleteAttachment:()=>xe,deletePage:()=>ce,getAttachmentMeta:()=>de,getPageMeta:()=>ae,listAttachments:()=>pe,listPages:()=>se,listPlugs:()=>me,readAttachment:()=>ge,readPage:()=>ue,writeAttachment:()=>fe,writePage:()=>le});function se(e=!1){return r(\"space.listPages\",e)}function ae(e){return r(\"space.getPageMeta\",e)}function ue(e){return r(\"space.readPage\",e)}function le(e,t){return r(\"space.writePage\",e,t)}function ce(e){return r(\"space.deletePage\",e)}function me(){return r(\"space.listPlugs\")}function pe(){return r(\"space.listAttachments\")}function de(e){return r(\"space.getAttachmentMeta\",e)}function ge(e){return r(\"space.readAttachment\",e)}function fe(e,t,n){return r(\"space.writeAttachment\",e,t,n)}function xe(e){return r(\"space.deleteAttachment\",e)}var u={};a(u,{readAsset:()=>ye});function x(e){let t=atob(e),n=t.length,o=new Uint8Array(n);for(let i=0;i d.id,\n nodeTitle: d => d.id,\n nodeStrokeOpacity: 0.75,\n height: 600,\n width: 700,\n });\n const graph_div = document.querySelector('#graph');\n graph_div.appendChild(chart);\n `}async function Ce(e){let t=await Te(e),n=JSON.stringify(t);await Se()&&await c.showPanel(\"lhs\",1,`\n \n \n \n
\n
\n \n `,await ke(n))}async function Te(e){let n=(await d.listPages()).map(({name:l})=>l),i=(await p.queryPrefix(\"pl:\")).map(({key:l,page:y})=>{let[,g]=l.split(\":\");return n.includes(g)||n.push(g),{source:y,target:g}});return{nodes:n.map(l=>({id:l})),links:i}}var Le=P;return A(Ve);})();\n return mod;})()"}}} \ No newline at end of file diff --git a/_plug/katex.plug.json b/_plug/katex.plug.json deleted file mode 100644 index 9451a9c..0000000 --- a/_plug/katex.plug.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"katex","imports":["https://get.silverbullet.md/global.plug.json"],"functions":{"katexWidget":{"codeWidget":"latex","code":"(() => { var mod=(()=>{var d=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var o=(t,e)=>{for(var i in e)d(t,i,{get:e[i],enumerable:!0})},p=(t,e,i,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of a(e))!m.call(t,n)&&n!==i&&d(t,n,{get:()=>e[n],enumerable:!(r=l(e,n))||r.enumerable});return t};var c=t=>p(d({},\"__esModule\",{value:!0}),t);var x={};o(x,{default:()=>u});function s(t){return{html:`\n \n
\n
${t.replaceAll(\"<\",\"<\")}
`,script:`\n loadJsByUrl(\"https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/katex.min.js\").then(() => {\n katex.render(document.getElementById(\"formula\").innerText, document.getElementById(\"katex\"));\n updateHeight();\n });\n document.addEventListener(\"click\", () => {\n api({type: \"blur\"});\n });\n `}}var u=s;return c(x);})();\n return mod;})()"}},"assets":{}} \ No newline at end of file diff --git a/data.db b/data.db deleted file mode 100644 index ae323fc..0000000 Binary files a/data.db and /dev/null differ