forked from silverbulletmd/silverbullet-plug-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatlas.plug.js
More file actions
12 lines (12 loc) · 391 KB
/
atlas.plug.js
File metadata and controls
12 lines (12 loc) · 391 KB
1
2
3
4
5
6
7
8
9
10
11
12
var F=Object.defineProperty;var Y=(d,b)=>{for(var m in b)F(d,m,{get:b[m],enumerable:!0})};function I(d){let b=atob(d),m=b.length,l=new Uint8Array(m);for(let G=0;G<m;G++)l[G]=b.charCodeAt(G);return l}function s(d){typeof d=="string"&&(d=new TextEncoder().encode(d));let b="",m=d.byteLength;for(let l=0;l<m;l++)b+=String.fromCharCode(d[l]);return btoa(b)}var sb=new Uint8Array(16);var h=class{prefix;maxCaptureSize;originalConsole;logBuffer;constructor(b="",m=1e3){this.prefix=b,this.maxCaptureSize=m,this.logBuffer=[],this.prefix=b,this.originalConsole={log:console.log.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),debug:console.debug.bind(console)},this.patchConsole()}patchConsole(){let b=m=>(...l)=>{let G=this.prefix?[this.prefix,...l]:l;this.originalConsole[m](...G),this.captureLog(m,l)};console.log=b("log"),console.info=b("info"),console.warn=b("warn"),console.error=b("error"),console.debug=b("debug")}captureLog(b,m){let l={level:b,timestamp:Date.now(),message:m.map(G=>{if(typeof G=="string")return G;try{return JSON.stringify(G)}catch{return String(G)}}).join(" ")};this.logBuffer.push(l),this.logBuffer.length>this.maxCaptureSize&&this.logBuffer.shift()}async postToServer(b,m){if(this.logBuffer.length>0){let G=[...this.logBuffer];this.logBuffer=[];try{if(!(await fetch(b,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(G.map(X=>({...X,source:m})))})).ok)throw new Error("Failed to post logs to server")}catch(K){console.warn("Could not post logs to server",K.message),this.logBuffer.unshift(...G)}}}},t;function H(d=""){return t=new h(d),t}var y=d=>{throw new Error("Not initialized yet")},x=typeof window>"u"&&typeof globalThis.WebSocketPair>"u";typeof Deno>"u"&&(self.Deno={args:[],build:{arch:"x86_64"},env:{get(){}}});var o=new Map,V=0;x&&(globalThis.syscall=async(d,...b)=>await new Promise((m,l)=>{V++,o.set(V,{resolve:m,reject:l}),y({type:"sys",id:V,name:d,args:b})}));function R(d,b,m){x&&(y=m,self.addEventListener("message",l=>{(async()=>{let G=l.data;switch(G.type){case"inv":{let K=d[G.name];if(!K)throw new Error(`Function not loaded: ${G.name}`);try{let X=await Promise.resolve(K(...G.args||[]));y({type:"invr",id:G.id,result:X})}catch(X){console.error("An exception was thrown as a result of invoking function",G.name,"error:",X.message),y({type:"invr",id:G.id,error:X.message})}}break;case"sysr":{let K=G.id,X=o.get(K);if(!X)throw Error("Invalid request id");o.delete(K),G.error?X.reject(new Error(G.error)):X.resolve(G.result)}break}})().catch(console.error)}),y({type:"manifest",manifest:b}),H(`[${b.name} plug]`))}async function w(d,b){if(typeof d!="string"){let m=new Uint8Array(await d.arrayBuffer()),l=m.length>0?s(m):void 0;b={method:d.method,headers:Object.fromEntries(d.headers.entries()),base64Body:l},d=d.url}return syscall("sandboxFetch.fetch",d,b)}globalThis.nativeFetch=globalThis.fetch;function U(){globalThis.fetch=async function(d,b){let m=b&&b.body?s(new Uint8Array(await new Response(b.body).arrayBuffer())):void 0,l=await w(d,b&&{method:b.method,headers:b.headers,base64Body:m});return new Response(l.base64Body?I(l.base64Body):null,{status:l.status,headers:l.headers})}}x&&U();var c={};Y(c,{alert:()=>td,configureVimMode:()=>vd,confirm:()=>Id,copyToClipboard:()=>Pd,deleteLine:()=>Qd,dispatch:()=>Cd,downloadFile:()=>cd,filterBox:()=>Ld,flashNotification:()=>yd,fold:()=>Md,foldAll:()=>Nd,getCurrentEditor:()=>E,getCurrentPage:()=>v,getCurrentPageMeta:()=>D,getCurrentPath:()=>B,getCursor:()=>A,getRecentlyOpenedPages:()=>O,getSelection:()=>q,getText:()=>f,getUiOption:()=>Hd,goHistory:()=>pd,hidePanel:()=>sd,insertAtCursor:()=>ad,insertAtPos:()=>Vd,invokeCommand:()=>_,isMobile:()=>Bd,moveCursor:()=>xd,moveCursorToLine:()=>Sd,moveLineDown:()=>wd,moveLineUp:()=>Fd,navigate:()=>bd,newWindow:()=>ud,openCommandPalette:()=>md,openPageNavigator:()=>Zd,openSearchPanel:()=>jd,openUrl:()=>Kd,prompt:()=>nd,rebuildEditorState:()=>Wd,redo:()=>Jd,reloadConfigAndCommands:()=>Xd,reloadPage:()=>ld,reloadUI:()=>Gd,replaceRange:()=>od,save:()=>dd,sendMessage:()=>Dd,setSelection:()=>$,setText:()=>r,setUiOption:()=>Rd,showPanel:()=>Yd,showProgress:()=>hd,toggleComment:()=>ed,toggleFold:()=>Td,undo:()=>zd,unfold:()=>kd,unfoldAll:()=>gd,uploadFile:()=>id,vimEx:()=>Ud});typeof self>"u"&&(self={syscall:()=>{throw new Error("Not implemented here")}});function Z(d,...b){return globalThis.syscall(d,...b)}function v(){return Z("editor.getCurrentPage")}function D(){return Z("editor.getCurrentPageMeta")}function B(){return Z("editor.getCurrentPath")}function O(){return Z("editor.getRecentlyOpenedPages")}function E(){return Z("editor.getCurrentEditor")}function f(){return Z("editor.getText")}function r(d,b=!1){return Z("editor.setText",d,b)}function A(){return Z("editor.getCursor")}function q(){return Z("editor.getSelection")}function $(d,b){return Z("editor.setSelection",d,b)}function _(d,b){return Z("editor.invokeCommand",d,b)}function dd(){return Z("editor.save")}function bd(d,b=!1,m=!1){return Z("editor.navigate",d,b,m)}function Zd(d="page"){return Z("editor.openPageNavigator",d)}function md(){return Z("editor.openCommandPalette")}function ld(){return Z("editor.reloadPage")}function Gd(){return Z("editor.reloadUI")}function Wd(){return Z("editor.rebuildEditorState")}function Xd(){return Z("editor.reloadConfigAndCommands")}function Kd(d,b=!1){return Z("editor.openUrl",d,b)}function ud(){return Z("editor.newWindow")}function pd(d){return Z("editor.goHistory",d)}function cd(d,b){return Z("editor.downloadFile",d,b)}function id(d,b){return Z("editor.uploadFile",d,b)}function yd(d,b="info"){return Z("editor.flashNotification",d,b)}function Ld(d,b,m="",l=""){return Z("editor.filterBox",d,b,m,l)}function Yd(d,b,m,l=""){return Z("editor.showPanel",d,b,m,l)}function sd(d){return Z("editor.hidePanel",d)}function hd(d,b){return Z("editor.showProgress",d,b)}function Vd(d,b){return Z("editor.insertAtPos",d,b)}function od(d,b,m){return Z("editor.replaceRange",d,b,m)}function xd(d,b=!1){return Z("editor.moveCursor",d,b)}function Sd(d,b=1,m=!1){return Z("editor.moveCursorToLine",d,b,m)}function ad(d,b=!1,m=!1){return Z("editor.insertAtCursor",d,b,m)}function Cd(d){return Z("editor.dispatch",d)}function nd(d,b=""){return Z("editor.prompt",d,b)}function Id(d){return Z("editor.confirm",d)}function td(d){return Z("editor.alert",d)}function Hd(d){return Z("editor.getUiOption",d)}function Rd(d,b){return Z("editor.setUiOption",d,b)}function Md(){return Z("editor.fold")}function kd(){return Z("editor.unfold")}function Td(){return Z("editor.toggleFold")}function Nd(){return Z("editor.foldAll")}function gd(){return Z("editor.unfoldAll")}function zd(){return Z("editor.undo")}function Jd(){return Z("editor.redo")}function jd(){return Z("editor.openSearchPanel")}function Pd(d){return Z("editor.copyToClipboard",d)}function Qd(){return Z("editor.deleteLine")}function ed(){return Z("editor.toggleComment")}function Fd(){return Z("editor.moveLineUp")}function wd(){return Z("editor.moveLineDown")}function Ud(d){return Z("editor.vimEx",d)}function vd(){return Z("editor.configureVimMode")}function Dd(d,b){return Z("editor.sendMessage",d,b)}function Bd(){return Z("editor.isMobile")}var p={};Y(p,{del:()=>qd,get:()=>Ad,set:()=>rd});function rd(d,b){return Z("clientStore.set",d,b)}function Ad(d){return Z("clientStore.get",d)}function qd(d){return Z("clientStore.delete",d)}var i={};Y(i,{getFileMeta:()=>lb,listFiles:()=>mb,readAsset:()=>Zb});function bb(d){let b=atob(d),m=b.length,l=new Uint8Array(m);for(let G=0;G<m;G++)l[G]=b.charCodeAt(G);return l}function M(d){let b=d.split(",",2)[1];return bb(b)}var Tb=new Uint8Array(16);async function Zb(d,b,m="utf8"){let l=await Z("asset.readAsset",d,b);switch(m){case"utf8":return new TextDecoder().decode(M(l));case"dataurl":return l}}async function mb(d){return await Z("asset.listFiles",d)}async function lb(d,b){return await Z("asset.getFileMeta",d,b)}async function k(d,b=!1){let m=new Map,l=new Set,G=[],K=await Z("index.queryLuaObjects","link",{objectVariable:"l"},{});for(let X of K){let W=X.page,u=X.toPage;if(!W||!u||!a(W)||!a(u)||S(W)||S(u))continue;m.has(W)||m.set(W,{id:W,name:W,isCurrent:W===d,isOrphan:!1}),m.has(u)||m.set(u,{id:u,name:u,isCurrent:u===d,isOrphan:!1});let n=`${W}->${u}`;l.has(n)||(l.add(n),G.push({source:W,target:u}))}if(m.has(d)||m.set(d,{id:d,name:d,isCurrent:!0,isOrphan:!1}),b){let X=await yb();for(let W of X)m.has(W)||m.set(W,{id:W,name:W,isCurrent:W===d,isOrphan:!0})}return{nodes:Array.from(m.values()),edges:G}}async function yb(){let d=await Z("index.queryLuaObjects","page",{objectVariable:"p"},{}),b=new Set;for(let m of d){let l=m.name??m.ref;!l||!a(l)||S(l)||b.add(l)}return b}function S(d){return!!(/^(PLUGS|SETTINGS|CONFIG)$/.test(d)||d.startsWith("Library/")||d.startsWith("_"))}function a(d){return!(d.startsWith("http://")||d.startsWith("https://")||/\.(png|jpg|jpeg|gif|svg|webp|pdf|mp3|wav|ogg|mp4)$/i.test(d))}var C="atlas",L="atlasEnabled",T="atlasOptions",Lb={showOrphans:!1};async function N(){let d=await p.get(T);return{...Lb,...d}}async function g(d,b){let m=await N();m[d]=b,await p.set(T,m)}async function z(){await p.get(L)?(await p.set(L,!1),await c.hidePanel("rhs")):(await p.set(L,!0),await P())}async function J(){await p.get(L)&&await P()}async function j(d){d&&await c.navigate({page:d})}async function P(){let d=await c.getCurrentPage(),b=await N(),m=await k(d,!0),l=!!await c.getUiOption("darkMode"),[G,K,X]=await Promise.all([i.readAsset(C,"assets/d3.min.js"),i.readAsset(C,"assets/atlas-render.js"),i.readAsset(C,"assets/atlas-style.css")]),W=`
<style>${X}</style>
<div id="atlas-toolbar"></div>
<div id="atlas-container"></div>
`,u=`
${G}
window.__ATLAS_DATA__ = ${JSON.stringify(m)};
window.__ATLAS_DARK__ = ${JSON.stringify(l)};
window.__ATLAS_OPTIONS__ = ${JSON.stringify(b)};
${K}
`;await c.showPanel("rhs",1,W,u)}var Q={toggleAtlas:z,updateGraph:J,handleNavigate:j,setOption:g},e={name:"atlas",assets:{"assets/atlas-render.js":{data:"data:application/javascript;base64,Ly8gQXRsYXMgZ3JhcGggcmVuZGVyZXIg4oCUIHJ1bnMgaW5zaWRlIHRoZSBwYW5lbCBpZnJhbWUNCi8vIEV4cGVjdHM6IHdpbmRvdy5fX0FUTEFTX0RBVEFfXyA9IHsgbm9kZXM6IFsuLi5dLCBlZGdlczogWy4uLl0gfQ0KLy8gICAgICAgICAgd2luZG93Ll9fQVRMQVNfREFSS19fID0gYm9vbGVhbg0KLy8gICAgICAgICAgd2luZG93Ll9fQVRMQVNfT1BUSU9OU19fID0geyBzaG93T3JwaGFuczogYm9vbGVhbiB9DQooZnVuY3Rpb24gKCkgew0KICAidXNlIHN0cmljdCI7DQoNCiAgY29uc3QgZGF0YSA9IHdpbmRvdy5fX0FUTEFTX0RBVEFfXzsNCiAgaWYgKCFkYXRhIHx8ICFkYXRhLm5vZGVzLmxlbmd0aCkgcmV0dXJuOw0KDQogIGNvbnN0IG9wdGlvbnMgPSB3aW5kb3cuX19BVExBU19PUFRJT05TX18gfHwgeyBzaG93T3JwaGFuczogZmFsc2UgfTsNCg0KICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXRsYXMtY29udGFpbmVyIik7DQogIGlmICghY29udGFpbmVyKSByZXR1cm47DQoNCiAgLy8gLS0tIFRoZW1lIGRldGVjdGlvbiAtLS0NCiAgY29uc3Qgc2JUaGVtZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiKTsNCiAgY29uc3QgaXNEYXJrID0gc2JUaGVtZQ0KICAgID8gc2JUaGVtZSA9PT0gImRhcmsiDQogICAgOiAod2luZG93Ll9fQVRMQVNfREFSS19fID8/IG1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzKTsNCiAgY29uc29sZS5sb2coIltBdGxhc10gdGhlbWU6Iiwgc2JUaGVtZSwgImlzRGFyazoiLCBpc0RhcmspOw0KICBpZiAoIXNiVGhlbWUpIHsNCiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIiwgaXNEYXJrID8gImRhcmsiIDogImxpZ2h0Iik7DQogIH0NCg0KICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTsNCiAgY29uc3QgdiA9IChuYW1lKSA9PiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLnRyaW0oKTsNCg0KICBjb25zdCBwYWxldHRlID0gew0KICAgIGJnOiB2KCItLWF0bGFzLWJnIiksDQogICAgY3VycmVudE5vZGU6IHYoIi0tYXRsYXMtbm9kZS1jdXJyZW50IiksDQogICAgbmVpZ2hib3JOb2RlOiB2KCItLWF0bGFzLW5vZGUtbmVpZ2hib3IiKSwNCiAgICBvcnBoYW5Ob2RlOiB2KCItLWF0bGFzLW5vZGUtb3JwaGFuIiksDQogICAgZWRnZTogdigiLS1hdGxhcy1lZGdlIiksDQogICAgZWRnZUhpZ2hsaWdodDogdigiLS1hdGxhcy1lZGdlLWhpZ2hsaWdodCIpLA0KICAgIGxhYmVsOiB2KCItLWF0bGFzLWxhYmVsIiksDQogICAgbGFiZWxDdXJyZW50OiB2KCItLWF0bGFzLWxhYmVsLWN1cnJlbnQiKSwNCiAgICBkaW1Ob2RlOiB2KCItLWF0bGFzLW5vZGUtZGltIiksDQogICAgZGltRWRnZTogdigiLS1hdGxhcy1lZGdlLWRpbSIpLA0KICAgIGRpbUxhYmVsOiB2KCItLWF0bGFzLWxhYmVsLWRpbSIpLA0KICB9Ow0KDQogIC8vIC0tLSBUb29sYmFyIC0tLQ0KICBjb25zdCB0b29sYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImF0bGFzLXRvb2xiYXIiKTsNCiAgaWYgKHRvb2xiYXIpIHsNCiAgICBjb25zdCBvcnBoYW5CdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsNCiAgICBvcnBoYW5CdG4uY2xhc3NOYW1lID0gImF0bGFzLWJ0biIgKyAob3B0aW9ucy5zaG93T3JwaGFucyA/ICIgYWN0aXZlIiA6ICIiKTsNCiAgICBvcnBoYW5CdG4uaW5uZXJIVE1MID0gYDxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiB2aWV3Qm94PSIwIDAgMTYgMTYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPg0KICAgICAgPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjYiIHN0cm9rZS1kYXNoYXJyYXk9IjMsMiIvPg0KICAgIDwvc3ZnPjxzcGFuPk9ycGhhbnM8L3NwYW4+YDsNCiAgICBvcnBoYW5CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7DQogICAgICBvcHRpb25zLnNob3dPcnBoYW5zID0gIW9wdGlvbnMuc2hvd09ycGhhbnM7DQogICAgICBvcnBoYW5CdG4uY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIiwgb3B0aW9ucy5zaG93T3JwaGFucyk7DQogICAgICB0b2dnbGVPcnBoYW5WaXNpYmlsaXR5KG9wdGlvbnMuc2hvd09ycGhhbnMpOw0KICAgICAgLy8gRmlyZS1hbmQtZm9yZ2V0IHBlcnNpc3QgdG8gd29ya2VyDQogICAgICBzeXNjYWxsKCJzeXN0ZW0uaW52b2tlRnVuY3Rpb24iLCAiYXRsYXMuc2V0T3B0aW9uIiwgInNob3dPcnBoYW5zIiwgb3B0aW9ucy5zaG93T3JwaGFucyk7DQogICAgfSk7DQogICAgdG9vbGJhci5hcHBlbmRDaGlsZChvcnBoYW5CdG4pOw0KICB9DQoNCiAgLy8gLS0tIERpbWVuc2lvbnMgLS0tDQogIGNvbnN0IHdpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IDMwMDsNCiAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodCB8fCA0MDA7DQoNCiAgLy8gLS0tIFNWRyBzZXR1cCAtLS0NCiAgY29uc3Qgc3ZnID0gZDMNCiAgICAuc2VsZWN0KGNvbnRhaW5lcikNCiAgICAuYXBwZW5kKCJzdmciKQ0KICAgIC5hdHRyKCJ3aWR0aCIsICIxMDAlIikNCiAgICAuYXR0cigiaGVpZ2h0IiwgIjEwMCUiKQ0KICAgIC5hdHRyKCJ2aWV3Qm94IiwgWzAsIDAsIHdpZHRoLCBoZWlnaHRdKTsNCg0KICAvLyBab29tIGxheWVyDQogIGNvbnN0IGcgPSBzdmcuYXBwZW5kKCJnIik7DQoNCiAgY29uc3Qgem9vbSA9IGQzDQogICAgLnpvb20oKQ0KICAgIC5zY2FsZUV4dGVudChbMC4zLCA0XSkNCiAgICAub24oInpvb20iLCAoZXZlbnQpID0+IHsNCiAgICAgIGcuYXR0cigidHJhbnNmb3JtIiwgZXZlbnQudHJhbnNmb3JtKTsNCiAgICB9KTsNCiAgc3ZnLmNhbGwoem9vbSk7DQoNCiAgLy8gLS0tIEJ1aWxkIGFkamFjZW5jeSBmb3IgaG92ZXIgaGlnaGxpZ2h0aW5nIC0tLQ0KICBjb25zdCBhZGphY2VuY3kgPSBuZXcgTWFwKCk7DQogIGZvciAoY29uc3Qgbm9kZSBvZiBkYXRhLm5vZGVzKSB7DQogICAgYWRqYWNlbmN5LnNldChub2RlLmlkLCBuZXcgU2V0KCkpOw0KICB9DQogIGZvciAoY29uc3QgZWRnZSBvZiBkYXRhLmVkZ2VzKSB7DQogICAgaWYgKGFkamFjZW5jeS5oYXMoZWRnZS5zb3VyY2UpKSBhZGphY2VuY3kuZ2V0KGVkZ2Uuc291cmNlKS5hZGQoZWRnZS50YXJnZXQpOw0KICAgIGlmIChhZGphY2VuY3kuaGFzKGVkZ2UudGFyZ2V0KSkgYWRqYWNlbmN5LmdldChlZGdlLnRhcmdldCkuYWRkKGVkZ2Uuc291cmNlKTsNCiAgfQ0KDQogIC8vIC0tLSBEZWdyZWUgbWFwIGZvciBzY2FsaW5nIG5vZGUgc2l6ZSAtLS0NCiAgY29uc3QgZGVncmVlID0gbmV3IE1hcCgpOw0KICBmb3IgKGNvbnN0IG5vZGUgb2YgZGF0YS5ub2RlcykgZGVncmVlLnNldChub2RlLmlkLCAwKTsNCiAgZm9yIChjb25zdCBlZGdlIG9mIGRhdGEuZWRnZXMpIHsNCiAgICBkZWdyZWUuc2V0KGVkZ2Uuc291cmNlLCAoZGVncmVlLmdldChlZGdlLnNvdXJjZSkgfHwgMCkgKyAxKTsNCiAgICBkZWdyZWUuc2V0KGVkZ2UudGFyZ2V0LCAoZGVncmVlLmdldChlZGdlLnRhcmdldCkgfHwgMCkgKyAxKTsNCiAgfQ0KDQogIC8vIC0tLSBGb3JjZSBzaW11bGF0aW9uICh0dW5lZCBmb3IgZnVsbCBncmFwaCkgLS0tDQogIGNvbnN0IG5vZGVDb3VudCA9IGRhdGEubm9kZXMubGVuZ3RoOw0KICBjb25zdCBjaGFyZ2VTdHJlbmd0aCA9IG5vZGVDb3VudCA+IDUwID8gLTgwIDogbm9kZUNvdW50ID4gMjAgPyAtMTIwIDogLTIwMDsNCiAgY29uc3QgbGlua0Rpc3RhbmNlID0gbm9kZUNvdW50ID4gNTAgPyA2MCA6IG5vZGVDb3VudCA+IDIwID8gNzAgOiA4MDsNCg0KICBjb25zdCBzaW11bGF0aW9uID0gZDMNCiAgICAuZm9yY2VTaW11bGF0aW9uKGRhdGEubm9kZXMpDQogICAgLmZvcmNlKA0KICAgICAgImxpbmsiLA0KICAgICAgZDMNCiAgICAgICAgLmZvcmNlTGluayhkYXRhLmVkZ2VzKQ0KICAgICAgICAuaWQoKGQpID0+IGQuaWQpDQogICAgICAgIC5kaXN0YW5jZShsaW5rRGlzdGFuY2UpLA0KICAgICkNCiAgICAuZm9yY2UoImNoYXJnZSIsIGQzLmZvcmNlTWFueUJvZHkoKS5zdHJlbmd0aChjaGFyZ2VTdHJlbmd0aCkpDQogICAgLmZvcmNlKCJjZW50ZXIiLCBkMy5mb3JjZUNlbnRlcih3aWR0aCAvIDIsIGhlaWdodCAvIDIpKQ0KICAgIC5mb3JjZSgieCIsIGQzLmZvcmNlWCh3aWR0aCAvIDIpLnN0cmVuZ3RoKDAuMDUpKQ0KICAgIC5mb3JjZSgieSIsIGQzLmZvcmNlWShoZWlnaHQgLyAyKS5zdHJlbmd0aCgwLjA1KSkNCiAgICAuZm9yY2UoImNvbGxpc2lvbiIsIGQzLmZvcmNlQ29sbGlkZSgpLnJhZGl1cygxNSkpDQogICAgLmFscGhhRGVjYXkoMC4wMik7DQoNCiAgLy8gLS0tIEVkZ2VzIC0tLQ0KICBjb25zdCBsaW5rID0gZw0KICAgIC5hcHBlbmQoImciKQ0KICAgIC5hdHRyKCJjbGFzcyIsICJlZGdlcyIpDQogICAgLnNlbGVjdEFsbCgibGluZSIpDQogICAgLmRhdGEoZGF0YS5lZGdlcykNCiAgICAuam9pbigibGluZSIpDQogICAgLmF0dHIoInN0cm9rZSIsIHBhbGV0dGUuZWRnZSkNCiAgICAuYXR0cigic3Ryb2tlLXdpZHRoIiwgMS41KQ0KICAgIC5hdHRyKCJzdHJva2Utb3BhY2l0eSIsIDAuNik7DQoNCiAgLy8gLS0tIE5vZGUgZ3JvdXBzIC0tLQ0KICBjb25zdCBub2RlID0gZw0KICAgIC5hcHBlbmQoImciKQ0KICAgIC5hdHRyKCJjbGFzcyIsICJub2RlcyIpDQogICAgLnNlbGVjdEFsbCgiZyIpDQogICAgLmRhdGEoZGF0YS5ub2RlcykNCiAgICAuam9pbigiZyIpDQogICAgLmF0dHIoImNsYXNzIiwgKGQpID0+ICJub2RlLWdyb3VwIiArIChkLmlzT3JwaGFuID8gIiBvcnBoYW4iIDogIiIpKQ0KICAgIC5zdHlsZSgiY3Vyc29yIiwgInBvaW50ZXIiKTsNCg0KICAvLyBDaXJjbGVzIOKAlCByYWRpdXMgc2NhbGVzIHdpdGggY29ubmVjdGlvbiBjb3VudDsgb3JwaGFucyBhcmUgc21hbGxlcg0KICBub2RlDQogICAgLmFwcGVuZCgiY2lyY2xlIikNCiAgICAuYXR0cigiciIsIChkKSA9PiB7DQogICAgICBpZiAoZC5pc09ycGhhbikgcmV0dXJuIDM7DQogICAgICBjb25zdCBkZWcgPSBkZWdyZWUuZ2V0KGQuaWQpIHx8IDA7DQogICAgICBjb25zdCBiYXNlID0gZC5pc0N1cnJlbnQgPyA3IDogNDsNCiAgICAgIHJldHVybiBiYXNlICsgTWF0aC5taW4oZGVnLCAxMCkgKiAwLjQ7DQogICAgfSkNCiAgICAuYXR0cigiZmlsbCIsIChkKSA9PiB7DQogICAgICBpZiAoZC5pc09ycGhhbikgcmV0dXJuIHBhbGV0dGUub3JwaGFuTm9kZTsNCiAgICAgIHJldHVybiBkLmlzQ3VycmVudCA/IHBhbGV0dGUuY3VycmVudE5vZGUgOiBwYWxldHRlLm5laWdoYm9yTm9kZTsNCiAgICB9KQ0KICAgIC5hdHRyKCJmaWxsLW9wYWNpdHkiLCAoZCkgPT4gZC5pc09ycGhhbiA/IDAuNCA6IDEpDQogICAgLmF0dHIoInN0cm9rZSIsIChkKSA9PiBkLmlzT3JwaGFuID8gcGFsZXR0ZS5vcnBoYW5Ob2RlIDogIm5vbmUiKQ0KICAgIC5hdHRyKCJzdHJva2Utd2lkdGgiLCAoZCkgPT4gZC5pc09ycGhhbiA/IDEuNSA6IDApDQogICAgLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCAoZCkgPT4gZC5pc09ycGhhbiA/ICIyLDIiIDogIm5vbmUiKTsNCg0KICAvLyBMYWJlbHMg4oCUIGFsd2F5cyBvdXRzaWRlIHRoZSBjaXJjbGUNCiAgbm9kZQ0KICAgIC5hcHBlbmQoInRleHQiKQ0KICAgIC50ZXh0KChkKSA9PiB0cnVuY2F0ZShkLm5hbWUsIDIwKSkNCiAgICAuYXR0cigiZHgiLCAxMCkNCiAgICAuYXR0cigiZHkiLCA0KQ0KICAgIC5hdHRyKCJ0ZXh0LWFuY2hvciIsICJzdGFydCIpDQogICAgLmF0dHIoImZpbGwiLCAoZCkgPT4gew0KICAgICAgaWYgKGQuaXNPcnBoYW4pIHJldHVybiBwYWxldHRlLm9ycGhhbk5vZGU7DQogICAgICByZXR1cm4gZC5pc0N1cnJlbnQgPyBwYWxldHRlLmN1cnJlbnROb2RlIDogcGFsZXR0ZS5sYWJlbDsNCiAgICB9KQ0KICAgIC5hdHRyKCJmaWxsLW9wYWNpdHkiLCAoZCkgPT4gZC5pc09ycGhhbiA/IDAuNiA6IDEpDQogICAgLmF0dHIoImZvbnQtc2l6ZSIsICIxMHB4IikNCiAgICAuYXR0cigiZm9udC13ZWlnaHQiLCAoZCkgPT4gKGQuaXNDdXJyZW50ID8gIjYwMCIgOiAiNDAwIikpDQogICAgLmF0dHIoImZvbnQtZmFtaWx5IiwgInN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIpDQogICAgLmF0dHIoInBhaW50LW9yZGVyIiwgInN0cm9rZSIpDQogICAgLmF0dHIoInN0cm9rZSIsIHBhbGV0dGUuYmcpDQogICAgLmF0dHIoInN0cm9rZS13aWR0aCIsIDMpOw0KDQogIC8vIC0tLSBPcnBoYW4gdmlzaWJpbGl0eSAtLS0NCiAgZnVuY3Rpb24gdG9nZ2xlT3JwaGFuVmlzaWJpbGl0eShzaG93KSB7DQogICAgY29uc3Qgb3JwaGFucyA9IG5vZGUuZmlsdGVyKChkKSA9PiBkLmlzT3JwaGFuKTsNCiAgICBvcnBoYW5zDQogICAgICAudHJhbnNpdGlvbigpDQogICAgICAuZHVyYXRpb24oMzAwKQ0KICAgICAgLnN0eWxlKCJvcGFjaXR5Iiwgc2hvdyA/IDEgOiAwKQ0KICAgICAgLm9uKCJlbmQiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCBzaG93ID8gImF1dG8iIDogIm5vbmUiKTsNCiAgICAgIH0pOw0KICAgIC8vIFJlaGVhdCBzaW11bGF0aW9uIHNvIG9ycGhhbnMgc2V0dGxlIG5hdHVyYWxseSB3aGVuIHNob3duDQogICAgaWYgKHNob3cpIHsNCiAgICAgIHNpbXVsYXRpb24uYWxwaGEoMC4zKS5yZXN0YXJ0KCk7DQogICAgfQ0KICB9DQoNCiAgLy8gQXBwbHkgaW5pdGlhbCBvcnBoYW4gdmlzaWJpbGl0eQ0KICB0b2dnbGVPcnBoYW5WaXNpYmlsaXR5KG9wdGlvbnMuc2hvd09ycGhhbnMpOw0KDQogIC8vIC0tLSBEcmFnIGJlaGF2aW9yIC0tLQ0KICBjb25zdCBkcmFnID0gZDMNCiAgICAuZHJhZygpDQogICAgLm9uKCJzdGFydCIsIChldmVudCwgZCkgPT4gew0KICAgICAgaWYgKCFldmVudC5hY3RpdmUpIHNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7DQogICAgICBkLmZ4ID0gZC54Ow0KICAgICAgZC5meSA9IGQueTsNCiAgICB9KQ0KICAgIC5vbigiZHJhZyIsIChldmVudCwgZCkgPT4gew0KICAgICAgZC5meCA9IGV2ZW50Lng7DQogICAgICBkLmZ5ID0gZXZlbnQueTsNCiAgICB9KQ0KICAgIC5vbigiZW5kIiwgKGV2ZW50LCBkKSA9PiB7DQogICAgICBpZiAoIWV2ZW50LmFjdGl2ZSkgc2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwKTsNCiAgICAgIGQuZnggPSBudWxsOw0KICAgICAgZC5meSA9IG51bGw7DQogICAgfSk7DQogIG5vZGUuY2FsbChkcmFnKTsNCg0KICAvLyAtLS0gQ2xpY2sg4oaSIG5hdmlnYXRlIC0tLQ0KICBub2RlLm9uKCJjbGljayIsIChfZXZlbnQsIGQpID0+IHsNCiAgICBpZiAoZC5pc0N1cnJlbnQpIHJldHVybjsNCiAgICBzeXNjYWxsKCJzeXN0ZW0uaW52b2tlRnVuY3Rpb24iLCAiYXRsYXMuaGFuZGxlTmF2aWdhdGUiLCBkLmlkKTsNCiAgfSk7DQoNCiAgLy8gLS0tIEhvdmVyIGhpZ2hsaWdodGluZyAtLS0NCiAgbm9kZQ0KICAgIC5vbigibW91c2VlbnRlciIsIChfZXZlbnQsIGQpID0+IHsNCiAgICAgIGNvbnN0IG5laWdoYm9ycyA9IGFkamFjZW5jeS5nZXQoZC5pZCkgfHwgbmV3IFNldCgpOw0KDQogICAgICBub2RlLnNlbGVjdCgiY2lyY2xlIikuYXR0cigiZmlsbCIsIChuKSA9PiB7DQogICAgICAgIGlmIChuLmlkID09PSBkLmlkKSByZXR1cm4gbi5pc09ycGhhbiA/IHBhbGV0dGUub3JwaGFuTm9kZSA6IHBhbGV0dGUuY3VycmVudE5vZGU7DQogICAgICAgIGlmIChuZWlnaGJvcnMuaGFzKG4uaWQpKSB7DQogICAgICAgICAgcmV0dXJuIG4uaXNDdXJyZW50ID8gcGFsZXR0ZS5jdXJyZW50Tm9kZSA6IHBhbGV0dGUubmVpZ2hib3JOb2RlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBwYWxldHRlLmRpbU5vZGU7DQogICAgICB9KTsNCg0KICAgICAgbm9kZS5zZWxlY3QoInRleHQiKS5hdHRyKCJmaWxsIiwgKG4pID0+IHsNCiAgICAgICAgaWYgKG4uaWQgPT09IGQuaWQpIHJldHVybiBuLmlzQ3VycmVudCA/IHBhbGV0dGUubGFiZWxDdXJyZW50IDogKG4uaXNPcnBoYW4gPyBwYWxldHRlLm9ycGhhbk5vZGUgOiBwYWxldHRlLmxhYmVsKTsNCiAgICAgICAgaWYgKG5laWdoYm9ycy5oYXMobi5pZCkpIHsNCiAgICAgICAgICByZXR1cm4gbi5pc0N1cnJlbnQgPyBwYWxldHRlLmxhYmVsQ3VycmVudCA6IHBhbGV0dGUubGFiZWw7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHBhbGV0dGUuZGltTGFiZWw7DQogICAgICB9KTsNCg0KICAgICAgbGluaw0KICAgICAgICAuYXR0cigic3Ryb2tlIiwgKGwpID0+IHsNCiAgICAgICAgICBjb25zdCBzcmMgPSB0eXBlb2YgbC5zb3VyY2UgPT09ICJvYmplY3QiID8gbC5zb3VyY2UuaWQgOiBsLnNvdXJjZTsNCiAgICAgICAgICBjb25zdCB0Z3QgPSB0eXBlb2YgbC50YXJnZXQgPT09ICJvYmplY3QiID8gbC50YXJnZXQuaWQgOiBsLnRhcmdldDsNCiAgICAgICAgICBpZiAoc3JjID09PSBkLmlkIHx8IHRndCA9PT0gZC5pZCkgcmV0dXJuIHBhbGV0dGUuZWRnZUhpZ2hsaWdodDsNCiAgICAgICAgICByZXR1cm4gcGFsZXR0ZS5kaW1FZGdlOw0KICAgICAgICB9KQ0KICAgICAgICAuYXR0cigic3Ryb2tlLXdpZHRoIiwgKGwpID0+IHsNCiAgICAgICAgICBjb25zdCBzcmMgPSB0eXBlb2YgbC5zb3VyY2UgPT09ICJvYmplY3QiID8gbC5zb3VyY2UuaWQgOiBsLnNvdXJjZTsNCiAgICAgICAgICBjb25zdCB0Z3QgPSB0eXBlb2YgbC50YXJnZXQgPT09ICJvYmplY3QiID8gbC50YXJnZXQuaWQgOiBsLnRhcmdldDsNCiAgICAgICAgICBpZiAoc3JjID09PSBkLmlkIHx8IHRndCA9PT0gZC5pZCkgcmV0dXJuIDIuNTsNCiAgICAgICAgICByZXR1cm4gMS41Ow0KICAgICAgICB9KTsNCiAgICB9KQ0KICAgIC5vbigibW91c2VsZWF2ZSIsICgpID0+IHsNCiAgICAgIG5vZGUNCiAgICAgICAgLnNlbGVjdCgiY2lyY2xlIikNCiAgICAgICAgLmF0dHIoImZpbGwiLCAobikgPT4gew0KICAgICAgICAgIGlmIChuLmlzT3JwaGFuKSByZXR1cm4gcGFsZXR0ZS5vcnBoYW5Ob2RlOw0KICAgICAgICAgIHJldHVybiBuLmlzQ3VycmVudCA/IHBhbGV0dGUuY3VycmVudE5vZGUgOiBwYWxldHRlLm5laWdoYm9yTm9kZTsNCiAgICAgICAgfSk7DQoNCiAgICAgIG5vZGUNCiAgICAgICAgLnNlbGVjdCgidGV4dCIpDQogICAgICAgIC5hdHRyKCJmaWxsIiwgKG4pID0+IHsNCiAgICAgICAgICBpZiAobi5pc09ycGhhbikgcmV0dXJuIHBhbGV0dGUub3JwaGFuTm9kZTsNCiAgICAgICAgICByZXR1cm4gbi5pc0N1cnJlbnQgPyBwYWxldHRlLmxhYmVsQ3VycmVudCA6IHBhbGV0dGUubGFiZWw7DQogICAgICAgIH0pOw0KDQogICAgICBsaW5rLmF0dHIoInN0cm9rZSIsIHBhbGV0dGUuZWRnZSkuYXR0cigic3Ryb2tlLXdpZHRoIiwgMS41KTsNCiAgICB9KTsNCg0KICAvLyAtLS0gVGljayAtLS0NCiAgc2ltdWxhdGlvbi5vbigidGljayIsICgpID0+IHsNCiAgICBsaW5rDQogICAgICAuYXR0cigieDEiLCAoZCkgPT4gZC5zb3VyY2UueCkNCiAgICAgIC5hdHRyKCJ5MSIsIChkKSA9PiBkLnNvdXJjZS55KQ0KICAgICAgLmF0dHIoIngyIiwgKGQpID0+IGQudGFyZ2V0LngpDQogICAgICAuYXR0cigieTIiLCAoZCkgPT4gZC50YXJnZXQueSk7DQoNCiAgICBub2RlLmF0dHIoInRyYW5zZm9ybSIsIChkKSA9PiBgdHJhbnNsYXRlKCR7ZC54fSwke2QueX0pYCk7DQogIH0pOw0KDQogIC8vIC0tLSBIZWxwZXJzIC0tLQ0KICBmdW5jdGlvbiB0cnVuY2F0ZShzdHIsIG1heExlbikgew0KICAgIGlmIChzdHIubGVuZ3RoIDw9IG1heExlbikgcmV0dXJuIHN0cjsNCiAgICByZXR1cm4gc3RyLnNsaWNlKDAsIG1heExlbiAtIDEpICsgIlx1MjAyNiI7DQogIH0NCn0pKCk7DQo=",mtime:1771801102685},"assets/atlas-style.css":{data:"data:text/css;base64,OnJvb3QsDQo6cm9vdFtkYXRhLXRoZW1lPSJsaWdodCJdIHsNCiAgLS1hdGxhcy1iZzogI2ZmZmZmZjsNCiAgLS1hdGxhcy1ub2RlLWN1cnJlbnQ6ICMxZTY2ZjU7DQogIC0tYXRsYXMtbm9kZS1uZWlnaGJvcjogIzZjNmY4NTsNCiAgLS1hdGxhcy1ub2RlLW9ycGhhbjogIzg4MzllZjsNCiAgLS1hdGxhcy1lZGdlOiAjYmNjMGNjOw0KICAtLWF0bGFzLWVkZ2UtaGlnaGxpZ2h0OiAjMWU2NmY1Ow0KICAtLWF0bGFzLWxhYmVsOiAjNGM0ZjY5Ow0KICAtLWF0bGFzLWxhYmVsLWN1cnJlbnQ6ICNmZmZmZmY7DQogIC0tYXRsYXMtbm9kZS1kaW06ICNkY2UwZTg7DQogIC0tYXRsYXMtZWRnZS1kaW06ICNkY2UwZTg7DQogIC0tYXRsYXMtbGFiZWwtZGltOiAjYmNjMGNjOw0KICAtLWF0bGFzLXRvb2xiYXItYmc6ICNmMmY0Zjc7DQogIC0tYXRsYXMtdG9vbGJhci1ib3JkZXI6ICNkY2UwZTg7DQogIC0tYXRsYXMtYnRuLWhvdmVyOiAjZTZlOWVmOw0KICAtLWF0bGFzLWJ0bi1hY3RpdmU6ICMxZTY2ZjU7DQogIC0tYXRsYXMtYnRuLWFjdGl2ZS10ZXh0OiAjZmZmZmZmOw0KICAtLWF0bGFzLWJ0bi10ZXh0OiAjNGM0ZjY5Ow0KfQ0KDQo6cm9vdFtkYXRhLXRoZW1lPSJkYXJrIl0gew0KICAtLWF0bGFzLWJnOiAjMWUxZTJlOw0KICAtLWF0bGFzLW5vZGUtY3VycmVudDogIzg5YjRmYTsNCiAgLS1hdGxhcy1ub2RlLW5laWdoYm9yOiAjYTZhZGM4Ow0KICAtLWF0bGFzLW5vZGUtb3JwaGFuOiAjZjVjMmU3Ow0KICAtLWF0bGFzLWVkZ2U6ICM0NTQ3NWE7DQogIC0tYXRsYXMtZWRnZS1oaWdobGlnaHQ6ICM4OWI0ZmE7DQogIC0tYXRsYXMtbGFiZWw6ICNjZGQ2ZjQ7DQogIC0tYXRsYXMtbGFiZWwtY3VycmVudDogIzFlMWUyZTsNCiAgLS1hdGxhcy1ub2RlLWRpbTogIzMxMzI0NDsNCiAgLS1hdGxhcy1lZGdlLWRpbTogIzMxMzI0NDsNCiAgLS1hdGxhcy1sYWJlbC1kaW06ICM1ODViNzA7DQogIC0tYXRsYXMtdG9vbGJhci1iZzogIzE4MTgyNTsNCiAgLS1hdGxhcy10b29sYmFyLWJvcmRlcjogIzMxMzI0NDsNCiAgLS1hdGxhcy1idG4taG92ZXI6ICMzMTMyNDQ7DQogIC0tYXRsYXMtYnRuLWFjdGl2ZTogIzg5YjRmYTsNCiAgLS1hdGxhcy1idG4tYWN0aXZlLXRleHQ6ICMxZTFlMmU7DQogIC0tYXRsYXMtYnRuLXRleHQ6ICNjZGQ2ZjQ7DQp9DQoNCiogew0KICBtYXJnaW46IDA7DQogIHBhZGRpbmc6IDA7DQogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7DQp9DQoNCmh0bWwsIGJvZHkgew0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiAxMDAlOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOw0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KfQ0KDQojYXRsYXMtdG9vbGJhciB7DQogIGRpc3BsYXk6IGZsZXg7DQogIGdhcDogNHB4Ow0KICBwYWRkaW5nOiA0cHggOHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdGxhcy10b29sYmFyLWJnKTsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWF0bGFzLXRvb2xiYXItYm9yZGVyKTsNCiAgZmxleC1zaHJpbms6IDA7DQp9DQoNCi5hdGxhcy1idG4gew0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgZ2FwOiA0cHg7DQogIHBhZGRpbmc6IDNweCA4cHg7DQogIGJvcmRlcjogbm9uZTsNCiAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgY29sb3I6IHZhcigtLWF0bGFzLWJ0bi10ZXh0KTsNCiAgZm9udC1zaXplOiAxMXB4Ow0KICBmb250LWZhbWlseTogaW5oZXJpdDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7DQp9DQoNCi5hdGxhcy1idG46aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1hdGxhcy1idG4taG92ZXIpOw0KfQ0KDQouYXRsYXMtYnRuLmFjdGl2ZSB7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0bGFzLWJ0bi1hY3RpdmUpOw0KICBjb2xvcjogdmFyKC0tYXRsYXMtYnRuLWFjdGl2ZS10ZXh0KTsNCn0NCg0KLmF0bGFzLWJ0biBzdmcgew0KICBmbGV4LXNocmluazogMDsNCn0NCg0KI2F0bGFzLWNvbnRhaW5lciB7DQogIHdpZHRoOiAxMDAlOw0KICBmbGV4OiAxOw0KICBtaW4taGVpZ2h0OiAwOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWF0bGFzLWJnKTsNCn0NCg0KI2F0bGFzLWNvbnRhaW5lciBzdmcgew0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KLm5vZGUtZ3JvdXAgew0KICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7DQp9DQoNCi5ub2RlLWdyb3VwIGNpcmNsZSB7DQogIHRyYW5zaXRpb246IGZpbGwgMC4xNXMgZWFzZSwgciAwLjE1cyBlYXNlOw0KfQ0KDQoubm9kZS1ncm91cCB0ZXh0IHsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogIHVzZXItc2VsZWN0OiBub25lOw0KICB0cmFuc2l0aW9uOiBmaWxsIDAuMTVzIGVhc2U7DQp9DQoNCi5lZGdlcyBsaW5lIHsNCiAgdHJhbnNpdGlvbjogc3Ryb2tlIDAuMTVzIGVhc2UsIHN0cm9rZS13aWR0aCAwLjE1cyBlYXNlOw0KfQ0K",mtime:1771801102685},"assets/d3.min.js":{data:"data:application/javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZyB2Ny45LjAgQ29weXJpZ2h0IDIwMTAtMjAyMyBNaWtlIEJvc3RvY2sKIWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9uKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLG4pOm4oKHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBudWxsPT10fHxudWxsPT1uP05hTjp0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn1mdW5jdGlvbiBlKHQsbil7cmV0dXJuIG51bGw9PXR8fG51bGw9PW4/TmFOOm48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIHIodCl7bGV0IHIsbyxhO2Z1bmN0aW9uIHUodCxuLGU9MCxpPXQubGVuZ3RoKXtpZihlPGkpe2lmKDAhPT1yKG4sbikpcmV0dXJuIGk7ZG97Y29uc3Qgcj1lK2k+Pj4xO28odFtyXSxuKTwwP2U9cisxOmk9cn13aGlsZShlPGkpfXJldHVybiBlfXJldHVybiAyIT09dC5sZW5ndGg/KHI9bixvPShlLHIpPT5uKHQoZSksciksYT0obixlKT0+dChuKS1lKToocj10PT09bnx8dD09PWU/dDppLG89dCxhPXQpLHtsZWZ0OnUsY2VudGVyOmZ1bmN0aW9uKHQsbixlPTAscj10Lmxlbmd0aCl7Y29uc3QgaT11KHQsbixlLHItMSk7cmV0dXJuIGk+ZSYmYSh0W2ktMV0sbik+LWEodFtpXSxuKT9pLTE6aX0scmlnaHQ6ZnVuY3Rpb24odCxuLGU9MCxpPXQubGVuZ3RoKXtpZihlPGkpe2lmKDAhPT1yKG4sbikpcmV0dXJuIGk7ZG97Y29uc3Qgcj1lK2k+Pj4xO28odFtyXSxuKTw9MD9lPXIrMTppPXJ9d2hpbGUoZTxpKX1yZXR1cm4gZX19fWZ1bmN0aW9uIGkoKXtyZXR1cm4gMH1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9Y29uc3QgYT1yKG4pLHU9YS5yaWdodCxjPWEubGVmdCxmPXIobykuY2VudGVyO3ZhciBzPXU7Y29uc3QgbD1kKHkpLGg9ZCgoZnVuY3Rpb24odCl7Y29uc3Qgbj15KHQpO3JldHVybih0LGUscixpLG8pPT57bih0LGUsKHI8PD0yKSswLChpPDw9MikrMCxvPDw9Miksbih0LGUscisxLGkrMSxvKSxuKHQsZSxyKzIsaSsyLG8pLG4odCxlLHIrMyxpKzMsbyl9fSkpO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyPWUpe2lmKCEoKGU9K2UpPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCByeCIpO2lmKCEoKHI9K3IpPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCByeSIpO2xldHtkYXRhOmksd2lkdGg6byxoZWlnaHQ6YX09bjtpZighKChvPU1hdGguZmxvb3IobykpPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCB3aWR0aCIpO2lmKCEoKGE9TWF0aC5mbG9vcih2b2lkIDAhPT1hP2E6aS5sZW5ndGgvbykpPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCBoZWlnaHQiKTtpZighb3x8IWF8fCFlJiYhcilyZXR1cm4gbjtjb25zdCB1PWUmJnQoZSksYz1yJiZ0KHIpLGY9aS5zbGljZSgpO3JldHVybiB1JiZjPyhwKHUsZixpLG8sYSkscCh1LGksZixvLGEpLHAodSxmLGksbyxhKSxnKGMsaSxmLG8sYSksZyhjLGYsaSxvLGEpLGcoYyxpLGYsbyxhKSk6dT8ocCh1LGksZixvLGEpLHAodSxmLGksbyxhKSxwKHUsaSxmLG8sYSkpOmMmJihnKGMsaSxmLG8sYSksZyhjLGYsaSxvLGEpLGcoYyxpLGYsbyxhKSksbn19ZnVuY3Rpb24gcCh0LG4sZSxyLGkpe2ZvcihsZXQgbz0wLGE9cippO288YTspdChuLGUsbyxvKz1yLDEpfWZ1bmN0aW9uIGcodCxuLGUscixpKXtmb3IobGV0IG89MCxhPXIqaTtvPHI7KytvKXQobixlLG8sbythLHIpfWZ1bmN0aW9uIHkodCl7Y29uc3Qgbj1NYXRoLmZsb29yKHQpO2lmKG49PT10KXJldHVybiBmdW5jdGlvbih0KXtjb25zdCBuPTIqdCsxO3JldHVybihlLHIsaSxvLGEpPT57aWYoISgoby09YSk+PWkpKXJldHVybjtsZXQgdT10KnJbaV07Y29uc3QgYz1hKnQ7Zm9yKGxldCB0PWksbj1pK2M7dDxuO3QrPWEpdSs9cltNYXRoLm1pbihvLHQpXTtmb3IobGV0IHQ9aSxmPW87dDw9Zjt0Kz1hKXUrPXJbTWF0aC5taW4obyx0K2MpXSxlW3RdPXUvbix1LT1yW01hdGgubWF4KGksdC1jKV19fSh0KTtjb25zdCBlPXQtbixyPTIqdCsxO3JldHVybih0LGksbyxhLHUpPT57aWYoISgoYS09dSk+PW8pKXJldHVybjtsZXQgYz1uKmlbb107Y29uc3QgZj11Km4scz1mK3U7Zm9yKGxldCB0PW8sbj1vK2Y7dDxuO3QrPXUpYys9aVtNYXRoLm1pbihhLHQpXTtmb3IobGV0IG49byxsPWE7bjw9bDtuKz11KWMrPWlbTWF0aC5taW4oYSxuK2YpXSx0W25dPShjK2UqKGlbTWF0aC5tYXgobyxuLXMpXStpW01hdGgubWluKGEsbitzKV0pKS9yLGMtPWlbTWF0aC5tYXgobyxuLWYpXX19ZnVuY3Rpb24gdih0LG4pe2xldCBlPTA7aWYodm9pZCAwPT09bilmb3IobGV0IG4gb2YgdCludWxsIT1uJiYobj0rbik+PW4mJisrZTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KW51bGwhPShpPW4oaSwrK3IsdCkpJiYoaT0raSk+PWkmJisrZX1yZXR1cm4gZX1mdW5jdGlvbiBfKHQpe3JldHVybiAwfHQubGVuZ3RofWZ1bmN0aW9uIGIodCl7cmV0dXJuISh0PjApfWZ1bmN0aW9uIG0odCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0fHwibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIHgodCxuKXtsZXQgZSxyPTAsaT0wLG89MDtpZih2b2lkIDA9PT1uKWZvcihsZXQgbiBvZiB0KW51bGwhPW4mJihuPStuKT49biYmKGU9bi1pLGkrPWUvKytyLG8rPWUqKG4taSkpO2Vsc2V7bGV0IGE9LTE7Zm9yKGxldCB1IG9mIHQpbnVsbCE9KHU9bih1LCsrYSx0KSkmJih1PSt1KT49dSYmKGU9dS1pLGkrPWUvKytyLG8rPWUqKHUtaSkpfWlmKHI+MSlyZXR1cm4gby8oci0xKX1mdW5jdGlvbiB3KHQsbil7Y29uc3QgZT14KHQsbik7cmV0dXJuIGU/TWF0aC5zcXJ0KGUpOmV9ZnVuY3Rpb24gTSh0LG4pe2xldCBlLHI7aWYodm9pZCAwPT09bilmb3IoY29uc3QgbiBvZiB0KW51bGwhPW4mJih2b2lkIDA9PT1lP24+PW4mJihlPXI9bik6KGU+biYmKGU9bikscjxuJiYocj1uKSkpO2Vsc2V7bGV0IGk9LTE7Zm9yKGxldCBvIG9mIHQpbnVsbCE9KG89bihvLCsraSx0KSkmJih2b2lkIDA9PT1lP28+PW8mJihlPXI9byk6KGU+byYmKGU9bykscjxvJiYocj1vKSkpfXJldHVybltlLHJdfWNsYXNzIFR7Y29uc3RydWN0b3IoKXt0aGlzLl9wYXJ0aWFscz1uZXcgRmxvYXQ2NEFycmF5KDMyKSx0aGlzLl9uPTB9YWRkKHQpe2NvbnN0IG49dGhpcy5fcGFydGlhbHM7bGV0IGU9MDtmb3IobGV0IHI9MDtyPHRoaXMuX24mJnI8MzI7cisrKXtjb25zdCBpPW5bcl0sbz10K2ksYT1NYXRoLmFicyh0KTxNYXRoLmFicyhpKT90LShvLWkpOmktKG8tdCk7YSYmKG5bZSsrXT1hKSx0PW99cmV0dXJuIG5bZV09dCx0aGlzLl9uPWUrMSx0aGlzfXZhbHVlT2YoKXtjb25zdCB0PXRoaXMuX3BhcnRpYWxzO2xldCBuLGUscixpPXRoaXMuX24sbz0wO2lmKGk+MCl7Zm9yKG89dFstLWldO2k+MCYmKG49byxlPXRbLS1pXSxvPW4rZSxyPWUtKG8tbiksIXIpOyk7aT4wJiYocjwwJiZ0W2ktMV08MHx8cj4wJiZ0W2ktMV0+MCkmJihlPTIqcixuPW8rZSxlPT1uLW8mJihvPW4pKX1yZXR1cm4gb319Y2xhc3MgSW50ZXJuTWFwIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKHQsbj1OKXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse19pbnRlcm46e3ZhbHVlOm5ldyBNYXB9LF9rZXk6e3ZhbHVlOm59fSksbnVsbCE9dClmb3IoY29uc3RbbixlXW9mIHQpdGhpcy5zZXQobixlKX1nZXQodCl7cmV0dXJuIHN1cGVyLmdldChBKHRoaXMsdCkpfWhhcyh0KXtyZXR1cm4gc3VwZXIuaGFzKEEodGhpcyx0KSl9c2V0KHQsbil7cmV0dXJuIHN1cGVyLnNldChTKHRoaXMsdCksbil9ZGVsZXRlKHQpe3JldHVybiBzdXBlci5kZWxldGUoRSh0aGlzLHQpKX19Y2xhc3MgSW50ZXJuU2V0IGV4dGVuZHMgU2V0e2NvbnN0cnVjdG9yKHQsbj1OKXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse19pbnRlcm46e3ZhbHVlOm5ldyBNYXB9LF9rZXk6e3ZhbHVlOm59fSksbnVsbCE9dClmb3IoY29uc3QgbiBvZiB0KXRoaXMuYWRkKG4pfWhhcyh0KXtyZXR1cm4gc3VwZXIuaGFzKEEodGhpcyx0KSl9YWRkKHQpe3JldHVybiBzdXBlci5hZGQoUyh0aGlzLHQpKX1kZWxldGUodCl7cmV0dXJuIHN1cGVyLmRlbGV0ZShFKHRoaXMsdCkpfX1mdW5jdGlvbiBBKHtfaW50ZXJuOnQsX2tleTpufSxlKXtjb25zdCByPW4oZSk7cmV0dXJuIHQuaGFzKHIpP3QuZ2V0KHIpOmV9ZnVuY3Rpb24gUyh7X2ludGVybjp0LF9rZXk6bn0sZSl7Y29uc3Qgcj1uKGUpO3JldHVybiB0LmhhcyhyKT90LmdldChyKToodC5zZXQocixlKSxlKX1mdW5jdGlvbiBFKHtfaW50ZXJuOnQsX2tleTpufSxlKXtjb25zdCByPW4oZSk7cmV0dXJuIHQuaGFzKHIpJiYoZT10LmdldChyKSx0LmRlbGV0ZShyKSksZX1mdW5jdGlvbiBOKHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0P3QudmFsdWVPZigpOnR9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdH1mdW5jdGlvbiBDKHQsLi4ubil7cmV0dXJuIEYodCxrLGssbil9ZnVuY3Rpb24gUCh0LC4uLm4pe3JldHVybiBGKHQsQXJyYXkuZnJvbSxrLG4pfWZ1bmN0aW9uIHoodCxuKXtmb3IobGV0IGU9MSxyPW4ubGVuZ3RoO2U8cjsrK2UpdD10LmZsYXRNYXAoKHQ9PnQucG9wKCkubWFwKCgoW24sZV0pPT5bLi4udCxuLGVdKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiAkKHQsbiwuLi5lKXtyZXR1cm4gRih0LGssbixlKX1mdW5jdGlvbiBEKHQsbiwuLi5lKXtyZXR1cm4gRih0LEFycmF5LmZyb20sbixlKX1mdW5jdGlvbiBSKHQpe2lmKDEhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImR1cGxpY2F0ZSBrZXkiKTtyZXR1cm4gdFswXX1mdW5jdGlvbiBGKHQsbixlLHIpe3JldHVybiBmdW5jdGlvbiB0KGksbyl7aWYobz49ci5sZW5ndGgpcmV0dXJuIGUoaSk7Y29uc3QgYT1uZXcgSW50ZXJuTWFwLHU9cltvKytdO2xldCBjPS0xO2Zvcihjb25zdCB0IG9mIGkpe2NvbnN0IG49dSh0LCsrYyxpKSxlPWEuZ2V0KG4pO2U/ZS5wdXNoKHQpOmEuc2V0KG4sW3RdKX1mb3IoY29uc3RbbixlXW9mIGEpYS5zZXQobix0KGUsbykpO3JldHVybiBuKGEpfSh0LDApfWZ1bmN0aW9uIHEodCxuKXtyZXR1cm4gQXJyYXkuZnJvbShuLChuPT50W25dKSl9ZnVuY3Rpb24gVSh0LC4uLm4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W1N5bWJvbC5pdGVyYXRvcl0pdGhyb3cgbmV3IFR5cGVFcnJvcigidmFsdWVzIGlzIG5vdCBpdGVyYWJsZSIpO3Q9QXJyYXkuZnJvbSh0KTtsZXRbZV09bjtpZihlJiYyIT09ZS5sZW5ndGh8fG4ubGVuZ3RoPjEpe2NvbnN0IHI9VWludDMyQXJyYXkuZnJvbSh0LCgodCxuKT0+bikpO3JldHVybiBuLmxlbmd0aD4xPyhuPW4ubWFwKChuPT50Lm1hcChuKSkpLHIuc29ydCgoKHQsZSk9Pntmb3IoY29uc3QgciBvZiBuKXtjb25zdCBuPU8oclt0XSxyW2VdKTtpZihuKXJldHVybiBufX0pKSk6KGU9dC5tYXAoZSksci5zb3J0KCgodCxuKT0+TyhlW3RdLGVbbl0pKSkpLHEodCxyKX1yZXR1cm4gdC5zb3J0KEkoZSkpfWZ1bmN0aW9uIEkodD1uKXtpZih0PT09bilyZXR1cm4gTztpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjb21wYXJlIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuKG4sZSk9Pntjb25zdCByPXQobixlKTtyZXR1cm4gcnx8MD09PXI/cjooMD09PXQoZSxlKSktKDA9PT10KG4sbikpfX1mdW5jdGlvbiBPKHQsbil7cmV0dXJuKG51bGw9PXR8fCEodD49dCkpLShudWxsPT1ufHwhKG4+PW4pKXx8KHQ8bj8tMTp0Pm4/MTowKX12YXIgQj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gWSh0KXtyZXR1cm4oKT0+dH1jb25zdCBMPU1hdGguc3FydCg1MCksaj1NYXRoLnNxcnQoMTApLEg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIFgodCxuLGUpe2NvbnN0IHI9KG4tdCkvTWF0aC5tYXgoMCxlKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cxMChyKSksbz1yL01hdGgucG93KDEwLGkpLGE9bz49TD8xMDpvPj1qPzU6bz49SD8yOjE7bGV0IHUsYyxmO3JldHVybiBpPDA/KGY9TWF0aC5wb3coMTAsLWkpL2EsdT1NYXRoLnJvdW5kKHQqZiksYz1NYXRoLnJvdW5kKG4qZiksdS9mPHQmJisrdSxjL2Y+biYmLS1jLGY9LWYpOihmPU1hdGgucG93KDEwLGkpKmEsdT1NYXRoLnJvdW5kKHQvZiksYz1NYXRoLnJvdW5kKG4vZiksdSpmPHQmJisrdSxjKmY+biYmLS1jKSxjPHUmJi41PD1lJiZlPDI/WCh0LG4sMiplKTpbdSxjLGZdfWZ1bmN0aW9uIEcodCxuLGUpe2lmKCEoKGU9K2UpPjApKXJldHVybltdO2lmKCh0PSt0KT09PShuPStuKSlyZXR1cm5bdF07Y29uc3Qgcj1uPHQsW2ksbyxhXT1yP1gobix0LGUpOlgodCxuLGUpO2lmKCEobz49aSkpcmV0dXJuW107Y29uc3QgdT1vLWkrMSxjPW5ldyBBcnJheSh1KTtpZihyKWlmKGE8MClmb3IobGV0IHQ9MDt0PHU7Kyt0KWNbdF09KG8tdCkvLWE7ZWxzZSBmb3IobGV0IHQ9MDt0PHU7Kyt0KWNbdF09KG8tdCkqYTtlbHNlIGlmKGE8MClmb3IobGV0IHQ9MDt0PHU7Kyt0KWNbdF09KGkrdCkvLWE7ZWxzZSBmb3IobGV0IHQ9MDt0PHU7Kyt0KWNbdF09KGkrdCkqYTtyZXR1cm4gY31mdW5jdGlvbiBWKHQsbixlKXtyZXR1cm4gWCh0PSt0LG49K24sZT0rZSlbMl19ZnVuY3Rpb24gVyh0LG4sZSl7ZT0rZTtjb25zdCByPShuPStuKTwodD0rdCksaT1yP1Yobix0LGUpOlYodCxuLGUpO3JldHVybihyPy0xOjEpKihpPDA/MS8taTppKX1mdW5jdGlvbiBaKHQsbixlKXtsZXQgcjtmb3IoOzspe2NvbnN0IGk9Vih0LG4sZSk7aWYoaT09PXJ8fDA9PT1pfHwhaXNGaW5pdGUoaSkpcmV0dXJuW3Qsbl07aT4wPyh0PU1hdGguZmxvb3IodC9pKSppLG49TWF0aC5jZWlsKG4vaSkqaSk6aTwwJiYodD1NYXRoLmNlaWwodCppKS9pLG49TWF0aC5mbG9vcihuKmkpL2kpLHI9aX19ZnVuY3Rpb24gSyh0KXtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLmNlaWwoTWF0aC5sb2codih0KSkvTWF0aC5MTjIpKzEpfWZ1bmN0aW9uIFEoKXt2YXIgdD1rLG49TSxlPUs7ZnVuY3Rpb24gcihyKXtBcnJheS5pc0FycmF5KHIpfHwocj1BcnJheS5mcm9tKHIpKTt2YXIgaSxvLGEsdT1yLmxlbmd0aCxjPW5ldyBBcnJheSh1KTtmb3IoaT0wO2k8dTsrK2kpY1tpXT10KHJbaV0saSxyKTt2YXIgZj1uKGMpLGw9ZlswXSxoPWZbMV0sZD1lKGMsbCxoKTtpZighQXJyYXkuaXNBcnJheShkKSl7Y29uc3QgdD1oLGU9K2Q7aWYobj09PU0mJihbbCxoXT1aKGwsaCxlKSksKGQ9RyhsLGgsZSkpWzBdPD1sJiYoYT1WKGwsaCxlKSksZFtkLmxlbmd0aC0xXT49aClpZih0Pj1oJiZuPT09TSl7Y29uc3QgdD1WKGwsaCxlKTtpc0Zpbml0ZSh0KSYmKHQ+MD9oPShNYXRoLmZsb29yKGgvdCkrMSkqdDp0PDAmJihoPShNYXRoLmNlaWwoaCotdCkrMSkvLXQpKX1lbHNlIGQucG9wKCl9Zm9yKHZhciBwPWQubGVuZ3RoLGc9MCx5PXA7ZFtnXTw9bDspKytnO2Zvcig7ZFt5LTFdPmg7KS0teTsoZ3x8eTxwKSYmKGQ9ZC5zbGljZShnLHkpLHA9eS1nKTt2YXIgdixfPW5ldyBBcnJheShwKzEpO2ZvcihpPTA7aTw9cDsrK2kpKHY9X1tpXT1bXSkueDA9aT4wP2RbaS0xXTpsLHYueDE9aTxwP2RbaV06aDtpZihpc0Zpbml0ZShhKSl7aWYoYT4wKWZvcihpPTA7aTx1OysraSludWxsIT0obz1jW2ldKSYmbDw9byYmbzw9aCYmX1tNYXRoLm1pbihwLE1hdGguZmxvb3IoKG8tbCkvYSkpXS5wdXNoKHJbaV0pO2Vsc2UgaWYoYTwwKWZvcihpPTA7aTx1OysraSlpZihudWxsIT0obz1jW2ldKSYmbDw9byYmbzw9aCl7Y29uc3QgdD1NYXRoLmZsb29yKChsLW8pKmEpO19bTWF0aC5taW4ocCx0KyhkW3RdPD1vKSldLnB1c2gocltpXSl9fWVsc2UgZm9yKGk9MDtpPHU7KytpKW51bGwhPShvPWNbaV0pJiZsPD1vJiZvPD1oJiZfW3MoZCxvLDAscCldLnB1c2gocltpXSk7cmV0dXJuIF99cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpZKG4pLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WShbdFswXSx0WzFdXSkscik6bn0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WShBcnJheS5pc0FycmF5KHQpP0IuY2FsbCh0KTp0KSxyKTplfSxyfWZ1bmN0aW9uIEoodCxuKXtsZXQgZTtpZih2b2lkIDA9PT1uKWZvcihjb25zdCBuIG9mIHQpbnVsbCE9biYmKGU8bnx8dm9pZCAwPT09ZSYmbj49bikmJihlPW4pO2Vsc2V7bGV0IHI9LTE7Zm9yKGxldCBpIG9mIHQpbnVsbCE9KGk9bihpLCsrcix0KSkmJihlPGl8fHZvaWQgMD09PWUmJmk+PWkpJiYoZT1pKX1yZXR1cm4gZX1mdW5jdGlvbiB0dCh0LG4pe2xldCBlLHI9LTEsaT0tMTtpZih2b2lkIDA9PT1uKWZvcihjb25zdCBuIG9mIHQpKytpLG51bGwhPW4mJihlPG58fHZvaWQgMD09PWUmJm4+PW4pJiYoZT1uLHI9aSk7ZWxzZSBmb3IobGV0IG8gb2YgdCludWxsIT0obz1uKG8sKytpLHQpKSYmKGU8b3x8dm9pZCAwPT09ZSYmbz49bykmJihlPW8scj1pKTtyZXR1cm4gcn1mdW5jdGlvbiBudCh0LG4pe2xldCBlO2lmKHZvaWQgMD09PW4pZm9yKGNvbnN0IG4gb2YgdCludWxsIT1uJiYoZT5ufHx2b2lkIDA9PT1lJiZuPj1uKSYmKGU9bik7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1uKGksKytyLHQpKSYmKGU+aXx8dm9pZCAwPT09ZSYmaT49aSkmJihlPWkpfXJldHVybiBlfWZ1bmN0aW9uIGV0KHQsbil7bGV0IGUscj0tMSxpPS0xO2lmKHZvaWQgMD09PW4pZm9yKGNvbnN0IG4gb2YgdCkrK2ksbnVsbCE9biYmKGU+bnx8dm9pZCAwPT09ZSYmbj49bikmJihlPW4scj1pKTtlbHNlIGZvcihsZXQgbyBvZiB0KW51bGwhPShvPW4obywrK2ksdCkpJiYoZT5vfHx2b2lkIDA9PT1lJiZvPj1vKSYmKGU9byxyPWkpO3JldHVybiByfWZ1bmN0aW9uIHJ0KHQsbixlPTAscj0xLzAsaSl7aWYobj1NYXRoLmZsb29yKG4pLGU9TWF0aC5mbG9vcihNYXRoLm1heCgwLGUpKSxyPU1hdGguZmxvb3IoTWF0aC5taW4odC5sZW5ndGgtMSxyKSksIShlPD1uJiZuPD1yKSlyZXR1cm4gdDtmb3IoaT12b2lkIDA9PT1pP086SShpKTtyPmU7KXtpZihyLWU+NjAwKXtjb25zdCBvPXItZSsxLGE9bi1lKzEsdT1NYXRoLmxvZyhvKSxjPS41Kk1hdGguZXhwKDIqdS8zKSxmPS41Kk1hdGguc3FydCh1KmMqKG8tYykvbykqKGEtby8yPDA/LTE6MSk7cnQodCxuLE1hdGgubWF4KGUsTWF0aC5mbG9vcihuLWEqYy9vK2YpKSxNYXRoLm1pbihyLE1hdGguZmxvb3Iobisoby1hKSpjL28rZikpLGkpfWNvbnN0IG89dFtuXTtsZXQgYT1lLHU9cjtmb3IoaXQodCxlLG4pLGkodFtyXSxvKT4wJiZpdCh0LGUscik7YTx1Oyl7Zm9yKGl0KHQsYSx1KSwrK2EsLS11O2kodFthXSxvKTwwOykrK2E7Zm9yKDtpKHRbdV0sbyk+MDspLS11fTA9PT1pKHRbZV0sbyk/aXQodCxlLHUpOigrK3UsaXQodCx1LHIpKSx1PD1uJiYoZT11KzEpLG48PXUmJihyPXUtMSl9cmV0dXJuIHR9ZnVuY3Rpb24gaXQodCxuLGUpe2NvbnN0IHI9dFtuXTt0W25dPXRbZV0sdFtlXT1yfWZ1bmN0aW9uIG90KHQsZT1uKXtsZXQgcixpPSExO2lmKDE9PT1lLmxlbmd0aCl7bGV0IG87Zm9yKGNvbnN0IGEgb2YgdCl7Y29uc3QgdD1lKGEpOyhpP24odCxvKT4wOjA9PT1uKHQsdCkpJiYocj1hLG89dCxpPSEwKX19ZWxzZSBmb3IoY29uc3QgbiBvZiB0KShpP2UobixyKT4wOjA9PT1lKG4sbikpJiYocj1uLGk9ITApO3JldHVybiByfWZ1bmN0aW9uIGF0KHQsbixlKXtpZih0PUZsb2F0NjRBcnJheS5mcm9tKGZ1bmN0aW9uKih0LG4pe2lmKHZvaWQgMD09PW4pZm9yKGxldCBuIG9mIHQpbnVsbCE9biYmKG49K24pPj1uJiYoeWllbGQgbik7ZWxzZXtsZXQgZT0tMTtmb3IobGV0IHIgb2YgdCludWxsIT0ocj1uKHIsKytlLHQpKSYmKHI9K3IpPj1yJiYoeWllbGQgcil9fSh0LGUpKSwocj10Lmxlbmd0aCkmJiFpc05hTihuPStuKSl7aWYobjw9MHx8cjwyKXJldHVybiBudCh0KTtpZihuPj0xKXJldHVybiBKKHQpO3ZhciByLGk9KHItMSkqbixvPU1hdGguZmxvb3IoaSksYT1KKHJ0KHQsbykuc3ViYXJyYXkoMCxvKzEpKTtyZXR1cm4gYSsobnQodC5zdWJhcnJheShvKzEpKS1hKSooaS1vKX19ZnVuY3Rpb24gdXQodCxuLGU9byl7aWYoKHI9dC5sZW5ndGgpJiYhaXNOYU4obj0rbikpe2lmKG48PTB8fHI8MilyZXR1cm4rZSh0WzBdLDAsdCk7aWYobj49MSlyZXR1cm4rZSh0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqbixhPU1hdGguZmxvb3IoaSksdT0rZSh0W2FdLGEsdCk7cmV0dXJuIHUrKCtlKHRbYSsxXSxhKzEsdCktdSkqKGktYSl9fWZ1bmN0aW9uIGN0KHQsbixlPW8pe2lmKCFpc05hTihuPStuKSl7aWYocj1GbG9hdDY0QXJyYXkuZnJvbSh0LCgobixyKT0+byhlKHRbcl0scix0KSkpKSxuPD0wKXJldHVybiBldChyKTtpZihuPj0xKXJldHVybiB0dChyKTt2YXIgcixpPVVpbnQzMkFycmF5LmZyb20odCwoKHQsbik9Pm4pKSxhPXIubGVuZ3RoLTEsdT1NYXRoLmZsb29yKGEqbik7cmV0dXJuIHJ0KGksdSwwLGEsKCh0LG4pPT5PKHJbdF0scltuXSkpKSwodT1vdChpLnN1YmFycmF5KDAsdSsxKSwodD0+clt0XSkpKT49MD91Oi0xfX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gQXJyYXkuZnJvbShmdW5jdGlvbioodCl7Zm9yKGNvbnN0IG4gb2YgdCl5aWVsZCpufSh0KSl9ZnVuY3Rpb24gc3QodCxuKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiBsdCh0LG4sZSl7dD0rdCxuPStuLGU9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8obj10LHQ9MCwxKTppPDM/MTorZTtmb3IodmFyIHI9LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChuLXQpL2UpKSxvPW5ldyBBcnJheShpKTsrK3I8aTspb1tyXT10K3IqZTtyZXR1cm4gb31mdW5jdGlvbiBodCh0LGU9bil7aWYoMT09PWUubGVuZ3RoKXJldHVybiBldCh0LGUpO2xldCByLGk9LTEsbz0tMTtmb3IoY29uc3QgbiBvZiB0KSsrbywoaTwwPzA9PT1lKG4sbik6ZShuLHIpPDApJiYocj1uLGk9byk7cmV0dXJuIGl9dmFyIGR0PXB0KE1hdGgucmFuZG9tKTtmdW5jdGlvbiBwdCh0KXtyZXR1cm4gZnVuY3Rpb24obixlPTAscj1uLmxlbmd0aCl7bGV0IGk9ci0oZT0rZSk7Zm9yKDtpOyl7Y29uc3Qgcj10KCkqaS0tfDAsbz1uW2krZV07bltpK2VdPW5bcitlXSxuW3IrZV09b31yZXR1cm4gbn19ZnVuY3Rpb24gZ3QodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIG49LTEsZT1udCh0LHl0KSxyPW5ldyBBcnJheShlKTsrK248ZTspZm9yKHZhciBpLG89LTEsYT1yW25dPW5ldyBBcnJheShpKTsrK288aTspYVtvXT10W29dW25dO3JldHVybiByfWZ1bmN0aW9uIHl0KHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEludGVyblNldD90Om5ldyBJbnRlcm5TZXQodCl9ZnVuY3Rpb24gX3QodCxuKXtjb25zdCBlPXRbU3ltYm9sLml0ZXJhdG9yXSgpLHI9bmV3IFNldDtmb3IoY29uc3QgdCBvZiBuKXtjb25zdCBuPWJ0KHQpO2lmKHIuaGFzKG4pKWNvbnRpbnVlO2xldCBpLG87Zm9yKDsoe3ZhbHVlOmksZG9uZTpvfT1lLm5leHQoKSk7KXtpZihvKXJldHVybiExO2NvbnN0IHQ9YnQoaSk7aWYoci5hZGQodCksT2JqZWN0LmlzKG4sdCkpYnJlYWt9fXJldHVybiEwfWZ1bmN0aW9uIGJ0KHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0P3QudmFsdWVPZigpOnR9ZnVuY3Rpb24gbXQodCl7cmV0dXJuIHR9dmFyIHh0PTEsd3Q9MixNdD0zLFR0PTQsQXQ9MWUtNjtmdW5jdGlvbiBTdCh0KXtyZXR1cm4idHJhbnNsYXRlKCIrdCsiLDApIn1mdW5jdGlvbiBFdCh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KyIpIn1mdW5jdGlvbiBOdCh0KXtyZXR1cm4gbj0+K3Qobil9ZnVuY3Rpb24ga3QodCxuKXtyZXR1cm4gbj1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMipuKS8yLHQucm91bmQoKSYmKG49TWF0aC5yb3VuZChuKSksZT0+K3QoZSkrbn1mdW5jdGlvbiBDdCgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBQdCh0LG4pe3ZhciBlPVtdLHI9bnVsbCxpPW51bGwsbz02LGE9Nix1PTMsYz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmRldmljZVBpeGVsUmF0aW8+MT8wOi41LGY9dD09PXh0fHx0PT09VHQ/LTE6MSxzPXQ9PT1UdHx8dD09PXd0PyJ4IjoieSIsbD10PT09eHR8fHQ9PT1NdD9TdDpFdDtmdW5jdGlvbiBoKGgpe3ZhciBkPW51bGw9PXI/bi50aWNrcz9uLnRpY2tzLmFwcGx5KG4sZSk6bi5kb21haW4oKTpyLHA9bnVsbD09aT9uLnRpY2tGb3JtYXQ/bi50aWNrRm9ybWF0LmFwcGx5KG4sZSk6bXQ6aSxnPU1hdGgubWF4KG8sMCkrdSx5PW4ucmFuZ2UoKSx2PSt5WzBdK2MsXz0reVt5Lmxlbmd0aC0xXStjLGI9KG4uYmFuZHdpZHRoP2t0Ok50KShuLmNvcHkoKSxjKSxtPWguc2VsZWN0aW9uP2guc2VsZWN0aW9uKCk6aCx4PW0uc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLHc9bS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShkLG4pLm9yZGVyKCksTT13LmV4aXQoKSxUPXcuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxBPXcuc2VsZWN0KCJsaW5lIiksUz13LnNlbGVjdCgidGV4dCIpO3g9eC5tZXJnZSh4LmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSx3PXcubWVyZ2UoVCksQT1BLm1lcmdlKFQuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikuYXR0cihzKyIyIixmKm8pKSxTPVMubWVyZ2UoVC5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiY3VycmVudENvbG9yIikuYXR0cihzLGYqZykuYXR0cigiZHkiLHQ9PT14dD8iMGVtIjp0PT09TXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09bSYmKHg9eC50cmFuc2l0aW9uKGgpLHc9dy50cmFuc2l0aW9uKGgpLEE9QS50cmFuc2l0aW9uKGgpLFM9Uy50cmFuc2l0aW9uKGgpLE09TS50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLEF0KS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1iKHQpKT9sKHQrYyk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLFQuYXR0cigib3BhY2l0eSIsQXQpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGwoKG4mJmlzRmluaXRlKG49bih0KSk/bjpiKHQpKStjKX0pKSksTS5yZW1vdmUoKSx4LmF0dHIoImQiLHQ9PT1UdHx8dD09PXd0P2E/Ik0iK2YqYSsiLCIrdisiSCIrYysiViIrXysiSCIrZiphOiJNIitjKyIsIit2KyJWIitfOmE/Ik0iK3YrIiwiK2YqYSsiViIrYysiSCIrXysiViIrZiphOiJNIit2KyIsIitjKyJIIitfKSx3LmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKGIodCkrYyl9KSksQS5hdHRyKHMrIjIiLGYqbyksUy5hdHRyKHMsZipnKS50ZXh0KHApLG0uZmlsdGVyKEN0KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIix0PT09d3Q/InN0YXJ0Ijp0PT09VHQ/ImVuZCI6Im1pZGRsZSIpLG0uZWFjaCgoZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSkpfXJldHVybiBoLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0saC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPUFycmF5LmZyb20oYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9bXTpBcnJheS5mcm9tKHQpLGgpOmUuc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDpBcnJheS5mcm9tKHQpLGgpOnImJnIuc2xpY2UoKX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsaCk6aX0saC50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPSt0LGgpOm99LGgudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxoKTpvfSxoLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsaCk6YX0saC50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxoKTp1fSxoLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxoKTpjfSxofXZhciB6dD17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiAkdCgpe2Zvcih2YXIgdCxuPTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9e307bjxlOysrbil7aWYoISh0PWFyZ3VtZW50c1tuXSsiIil8fHQgaW4gcnx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBEdChyKX1mdW5jdGlvbiBEdCh0KXt0aGlzLl89dH1mdW5jdGlvbiBSdCh0LG4pe2Zvcih2YXIgZSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChlPXRbcl0pLm5hbWU9PT1uKXJldHVybiBlLnZhbHVlfWZ1bmN0aW9uIEZ0KHQsbixlKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09bil7dFtyXT16dCx0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9ZSYmdC5wdXNoKHtuYW1lOm4sdmFsdWU6ZX0pLHR9RHQucHJvdG90eXBlPSR0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RHQsb246ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dGhpcy5fLG89KHI9aSwodCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtpZihlPj0wJiYobj10LnNsaWNlKGUrMSksdD10LnNsaWNlKDAsZSkpLHQmJiFyLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTpufX0pKSksYT0tMSx1PW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9biYmImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK24pO2Zvcig7KythPHU7KWlmKGU9KHQ9b1thXSkudHlwZSlpW2VdPUZ0KGlbZV0sdC5uYW1lLG4pO2Vsc2UgaWYobnVsbD09bilmb3IoZSBpbiBpKWlbZV09RnQoaVtlXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8dTspaWYoKGU9KHQ9b1thXSkudHlwZSkmJihlPVJ0KGlbZV0sdC5uYW1lKSkpcmV0dXJuIGV9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxuPXRoaXMuXztmb3IodmFyIGUgaW4gbil0W2VdPW5bZV0uc2xpY2UoKTtyZXR1cm4gbmV3IER0KHQpfSxjYWxsOmZ1bmN0aW9uKHQsbil7aWYoKGU9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgZSxyLGk9bmV3IEFycmF5KGUpLG89MDtvPGU7KytvKWlbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLGU9KHI9dGhpcy5fW3RdKS5sZW5ndGg7bzxlOysrbylyW29dLnZhbHVlLmFwcGx5KG4saSl9LGFwcGx5OmZ1bmN0aW9uKHQsbixlKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgcj10aGlzLl9bdF0saT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldLnZhbHVlLmFwcGx5KG4sZSl9fTt2YXIgcXQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFV0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpxdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIEl0KHQpe3ZhciBuPXQrPSIiLGU9bi5pbmRleE9mKCI6Iik7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0obj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLFV0Lmhhc093blByb3BlcnR5KG4pP3tzcGFjZTpVdFtuXSxsb2NhbDp0fTp0fWZ1bmN0aW9uIE90KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09cXQmJm4uZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXF0P24uY3JlYXRlRWxlbWVudCh0KTpuLmNyZWF0ZUVsZW1lbnROUyhlLHQpfX1mdW5jdGlvbiBCdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBZdCh0KXt2YXIgbj1JdCh0KTtyZXR1cm4obi5sb2NhbD9CdDpPdCkobil9ZnVuY3Rpb24gTHQoKXt9ZnVuY3Rpb24ganQodCl7cmV0dXJuIG51bGw9PXQ/THQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX1mdW5jdGlvbiBIdCh0KXtyZXR1cm4gbnVsbD09dD9bXTpBcnJheS5pc0FycmF5KHQpP3Q6QXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBYdCgpe3JldHVybltdfWZ1bmN0aW9uIEd0KHQpe3JldHVybiBudWxsPT10P1h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19ZnVuY3Rpb24gVnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19ZnVuY3Rpb24gV3QodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLm1hdGNoZXModCl9fXZhciBadD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBLdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBRdD1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIEp0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gdG4odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9ZnVuY3Rpb24gbm4odCxuKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPW59ZnVuY3Rpb24gZW4odCxuLGUscixpLG8pe2Zvcih2YXIgYSx1PTAsYz1uLmxlbmd0aCxmPW8ubGVuZ3RoO3U8ZjsrK3UpKGE9blt1XSk/KGEuX19kYXRhX189b1t1XSxyW3VdPWEpOmVbdV09bmV3IG5uKHQsb1t1XSk7Zm9yKDt1PGM7Kyt1KShhPW5bdV0pJiYoaVt1XT1hKX1mdW5jdGlvbiBybih0LG4sZSxyLGksbyxhKXt2YXIgdSxjLGYscz1uZXcgTWFwLGw9bi5sZW5ndGgsaD1vLmxlbmd0aCxkPW5ldyBBcnJheShsKTtmb3IodT0wO3U8bDsrK3UpKGM9blt1XSkmJihkW3VdPWY9YS5jYWxsKGMsYy5fX2RhdGFfXyx1LG4pKyIiLHMuaGFzKGYpP2lbdV09YzpzLnNldChmLGMpKTtmb3IodT0wO3U8aDsrK3UpZj1hLmNhbGwodCxvW3VdLHUsbykrIiIsKGM9cy5nZXQoZikpPyhyW3VdPWMsYy5fX2RhdGFfXz1vW3VdLHMuZGVsZXRlKGYpKTplW3VdPW5ldyBubih0LG9bdV0pO2Zvcih1PTA7dTxsOysrdSkoYz1uW3VdKSYmcy5nZXQoZFt1XSk9PT1jJiYoaVt1XT1jKX1mdW5jdGlvbiBvbih0KXtyZXR1cm4gdC5fX2RhdGFfX31mdW5jdGlvbiBhbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJiJsZW5ndGgiaW4gdD90OkFycmF5LmZyb20odCl9ZnVuY3Rpb24gdW4odCxuKXtyZXR1cm4gdDxuPy0xOnQ+bj8xOnQ+PW4/MDpOYU59ZnVuY3Rpb24gY24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIGZuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gc24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBsbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBobih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gZG4odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gcG4odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGduKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uIHluKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixlKX19ZnVuY3Rpb24gdm4odCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixlKX19ZnVuY3Rpb24gX24odCxuKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG4pfHxwbih0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKX1mdW5jdGlvbiBibih0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gbW4odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPW59fWZ1bmN0aW9uIHhuKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPWV9fWZ1bmN0aW9uIHduKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBNbih0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBUbih0KX1mdW5jdGlvbiBUbih0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9d24odC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBBbih0LG4pe2Zvcih2YXIgZT1Nbih0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUuYWRkKG5bcl0pfWZ1bmN0aW9uIFNuKHQsbil7Zm9yKHZhciBlPU1uKHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5yZW1vdmUobltyXSl9ZnVuY3Rpb24gRW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7QW4odGhpcyx0KX19ZnVuY3Rpb24gTm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7U24odGhpcyx0KX19ZnVuY3Rpb24ga24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXsobi5hcHBseSh0aGlzLGFyZ3VtZW50cyk/QW46U24pKHRoaXMsdCl9fWZ1bmN0aW9uIENuKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBQbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIHpuKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09bj8iIjpufX1mdW5jdGlvbiAkbigpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIERuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIFJuKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gRm4oKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcW4oKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBVbigpe3JldHVybiBudWxsfWZ1bmN0aW9uIEluKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gT24oKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMSksbj10aGlzLnBhcmVudE5vZGU7cmV0dXJuIG4/bi5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fWZ1bmN0aW9uIEJuKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITApLG49dGhpcy5wYXJlbnROb2RlO3JldHVybiBuP24uaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBZbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fb247aWYobil7Zm9yKHZhciBlLHI9MCxpPS0xLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sdC50eXBlJiZlLnR5cGUhPT10LnR5cGV8fGUubmFtZSE9PXQubmFtZT9uWysraV09ZTp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZS50eXBlLGUubGlzdGVuZXIsZS5vcHRpb25zKTsrK2k/bi5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTG4odCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGk9dGhpcy5fX29uLG89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3QuY2FsbCh0aGlzLG4sdGhpcy5fX2RhdGFfXyl9fShuKTtpZihpKWZvcih2YXIgYT0wLHU9aS5sZW5ndGg7YTx1OysrYSlpZigocj1pW2FdKS50eXBlPT09dC50eXBlJiZyLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcixyLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihyLnR5cGUsci5saXN0ZW5lcj1vLHIub3B0aW9ucz1lKSx2b2lkKHIudmFsdWU9bik7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxvLGUpLHI9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOm4sbGlzdGVuZXI6byxvcHRpb25zOmV9LGk/aS5wdXNoKHIpOnRoaXMuX19vbj1bcl19fWZ1bmN0aW9uIGpuKHQsbixlKXt2YXIgcj1wbih0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShuLGUpOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksZT8oaS5pbml0RXZlbnQobixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlKSxpLmRldGFpbD1lLmRldGFpbCk6aS5pbml0RXZlbnQobiwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBIbih0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBqbih0aGlzLHQsbil9fWZ1bmN0aW9uIFhuKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGpuKHRoaXMsdCxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fW5uLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bm4sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxuKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX0sVG4ucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgR249W251bGxdO2Z1bmN0aW9uIFZuKHQsbil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1ufWZ1bmN0aW9uIFduKCl7cmV0dXJuIG5ldyBWbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEduKX1mdW5jdGlvbiBabih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFZuKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgVm4oW1t0XV0sR24pfVZuLnByb3RvdHlwZT1Xbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlZuLHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9anQodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sYSx1PW5baV0sYz11Lmxlbmd0aCxmPXJbaV09bmV3IEFycmF5KGMpLHM9MDtzPGM7KytzKShvPXVbc10pJiYoYT10LmNhbGwobyxvLl9fZGF0YV9fLHMsdSkpJiYoIl9fZGF0YV9fImluIG8mJihhLl9fZGF0YV9fPW8uX19kYXRhX18pLGZbc109YSk7cmV0dXJuIG5ldyBWbihyLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dD0iZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSHQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0odCk6R3QodCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9W10saT1bXSxvPTA7bzxlOysrbylmb3IodmFyIGEsdT1uW29dLGM9dS5sZW5ndGgsZj0wO2Y8YzsrK2YpKGE9dVtmXSkmJihyLnB1c2godC5jYWxsKGEsYS5fX2RhdGFfXyxmLHUpKSxpLnB1c2goYSkpO3JldHVybiBuZXcgVm4ocixpKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PXQ/S3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFp0LmNhbGwodGhpcy5jaGlsZHJlbix0KX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6V3QodCkpKX0sc2VsZWN0Q2hpbGRyZW46ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PXQ/SnQ6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFF0LmNhbGwodGhpcy5jaGlsZHJlbix0KX19KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6V3QodCkpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1WdCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyxhPW5baV0sdT1hLmxlbmd0aCxjPXJbaV09W10sZj0wO2Y8dTsrK2YpKG89YVtmXSkmJnQuY2FsbChvLG8uX19kYXRhX18sZixhKSYmYy5wdXNoKG8pO3JldHVybiBuZXcgVm4ocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsb24pO3ZhciBlPW4/cm46ZW4scj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KHQpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksYz1uZXcgQXJyYXkobyksZj0wO2Y8bzsrK2Ype3ZhciBzPXJbZl0sbD1pW2ZdLGg9bC5sZW5ndGgsZD1hbih0LmNhbGwocyxzJiZzLl9fZGF0YV9fLGYscikpLHA9ZC5sZW5ndGgsZz11W2ZdPW5ldyBBcnJheShwKSx5PWFbZl09bmV3IEFycmF5KHApO2UocyxsLGcseSxjW2ZdPW5ldyBBcnJheShoKSxkLG4pO2Zvcih2YXIgdixfLGI9MCxtPTA7YjxwOysrYilpZih2PWdbYl0pe2ZvcihiPj1tJiYobT1iKzEpOyEoXz15W21dKSYmKyttPHA7KTt2Ll9uZXh0PV98fG51bGx9fXJldHVybihhPW5ldyBWbihhLHIpKS5fZW50ZXI9dSxhLl9leGl0PWMsYX0sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFZuKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHRuKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgVm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcCh0biksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxuLGUpe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8ocj10KHIpKSYmKHI9ci5zZWxlY3Rpb24oKSk6cj1yLmFwcGVuZCh0KyIiKSxudWxsIT1uJiYoaT1uKGkpKSYmKGk9aS5zZWxlY3Rpb24oKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dCxlPXRoaXMuX2dyb3VwcyxyPW4uX2dyb3VwcyxpPWUubGVuZ3RoLG89ci5sZW5ndGgsYT1NYXRoLm1pbihpLG8pLHU9bmV3IEFycmF5KGkpLGM9MDtjPGE7KytjKWZvcih2YXIgZixzPWVbY10sbD1yW2NdLGg9cy5sZW5ndGgsZD11W2NdPW5ldyBBcnJheShoKSxwPTA7cDxoOysrcCkoZj1zW3BdfHxsW3BdKSYmKGRbcF09Zik7Zm9yKDtjPGk7KytjKXVbY109ZVtjXTtyZXR1cm4gbmV3IFZuKHUsdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0tMSxlPXQubGVuZ3RoOysrbjxlOylmb3IodmFyIHIsaT10W25dLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKSYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLGEpLGE9cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKTohbi0hZX10fHwodD11bik7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXtmb3IodmFyIGEsdT1lW29dLGM9dS5sZW5ndGgsZj1pW29dPW5ldyBBcnJheShjKSxzPTA7czxjOysrcykoYT11W3NdKSYmKGZbc109YSk7Zi5zb3J0KG4pfXJldHVybiBuZXcgVm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPTAsZT10Lmxlbmd0aDtuPGU7KytuKWZvcih2YXIgcj10W25dLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPXJbaV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe2xldCB0PTA7Zm9yKGNvbnN0IG4gb2YgdGhpcykrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIGksbz1uW2VdLGE9MCx1PW8ubGVuZ3RoO2E8dTsrK2EpKGk9b1thXSkmJnQuY2FsbChpLGkuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LG4pe3ZhciBlPUl0KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIGUubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnIuZ2V0QXR0cmlidXRlKGUpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PW4/ZS5sb2NhbD9mbjpjbjoiZnVuY3Rpb24iPT10eXBlb2Ygbj9lLmxvY2FsP2RuOmhuOmUubG9jYWw/bG46c24pKGUsbikpfSxzdHlsZTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/Z246ImZ1bmN0aW9uIj09dHlwZW9mIG4/dm46eW4pKHQsbixudWxsPT1lPyIiOmUpKTpfbih0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj9ibjoiZnVuY3Rpb24iPT10eXBlb2Ygbj94bjptbikodCxuKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxuKXt2YXIgZT13bih0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1Nbih0aGlzLm5vZGUoKSksaT0tMSxvPWUubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9rbjpuP0VuOk5uKShlLG4pKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9DbjooImZ1bmN0aW9uIj09dHlwZW9mIHQ/em46UG4pKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD8kbjooImZ1bmN0aW9uIj09dHlwZW9mIHQ/Um46RG4pKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChGbil9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChxbil9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oll0KHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbih0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WXQodCkscj1udWxsPT1uP1VuOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246anQobik7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goSW4pfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9CbjpPbil9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbz1mdW5jdGlvbih0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYobj10LnNsaWNlKGUrMSksdD10LnNsaWNlKDAsZSkpLHt0eXBlOnQsbmFtZTpufX0pKX0odCsiIiksYT1vLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2Zvcih1PW4/TG46WW4scj0wO3I8YTsrK3IpdGhpcy5lYWNoKHUob1tyXSxuLGUpKTtyZXR1cm4gdGhpc312YXIgdT10aGlzLm5vZGUoKS5fX29uO2lmKHUpZm9yKHZhciBjLGY9MCxzPXUubGVuZ3RoO2Y8czsrK2YpZm9yKHI9MCxjPXVbZl07cjxhOysrcilpZigoaT1vW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/WG46SG4pKHQsbikpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbiooKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49MCxlPXQubGVuZ3RoO248ZTsrK24pZm9yKHZhciByLGk9dFtuXSxvPTAsYT1pLmxlbmd0aDtvPGE7KytvKShyPWlbb10pJiYoeWllbGQgcil9fTt2YXIgS249MDtmdW5jdGlvbiBRbigpe3JldHVybiBuZXcgSm59ZnVuY3Rpb24gSm4oKXt0aGlzLl89IkAiKygrK0tuKS50b1N0cmluZygzNil9ZnVuY3Rpb24gdGUodCl7bGV0IG47Zm9yKDtuPXQuc291cmNlRXZlbnQ7KXQ9bjtyZXR1cm4gdH1mdW5jdGlvbiBuZSh0LG4pe2lmKHQ9dGUodCksdm9pZCAwPT09biYmKG49dC5jdXJyZW50VGFyZ2V0KSxuKXt2YXIgZT1uLm93bmVyU1ZHRWxlbWVudHx8bjtpZihlLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1lLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIHIueD10LmNsaWVudFgsci55PXQuY2xpZW50WSxbKHI9ci5tYXRyaXhUcmFuc2Zvcm0obi5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LHIueV19aWYobi5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBpPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtbi5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1uLmNsaWVudFRvcF19fXJldHVyblt0LnBhZ2VYLHQucGFnZVldfUpuLnByb3RvdHlwZT1Rbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkpuLGdldDpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fOyEobiBpbiB0KTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0W25dfSxzZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFt0aGlzLl9dPW59LHJlbW92ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fIGluIHQmJmRlbGV0ZSB0W3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2NvbnN0IGVlPXtwYXNzaXZlOiExfSxyZT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBpZSh0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG9lKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGFlKHQpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9Wm4odCkub24oImRyYWdzdGFydC5kcmFnIixvZSxyZSk7Im9uc2VsZWN0c3RhcnQiaW4gbj9lLm9uKCJzZWxlY3RzdGFydC5kcmFnIixvZSxyZSk6KG4uX19ub3NlbGVjdD1uLnN0eWxlLk1velVzZXJTZWxlY3Qsbi5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gdWUodCxuKXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPVpuKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7biYmKHIub24oImNsaWNrLmRyYWciLG9lLHJlKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Iub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGU/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9dmFyIGNlPXQ9PigpPT50O2Z1bmN0aW9uIGZlKHQse3NvdXJjZUV2ZW50Om4sc3ViamVjdDplLHRhcmdldDpyLGlkZW50aWZpZXI6aSxhY3RpdmU6byx4OmEseTp1LGR4OmMsZHk6ZixkaXNwYXRjaDpzfSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHN1YmplY3Q6e3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saWRlbnRpZmllcjp7dmFsdWU6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sYWN0aXZlOnt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx4Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx5Ont2YWx1ZTp1LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxkeDp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sZHk6e3ZhbHVlOmYsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOnN9fSl9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIXQuY3RybEtleSYmIXQuYnV0dG9ufWZ1bmN0aW9uIGxlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBoZSh0LG4pe3JldHVybiBudWxsPT1uP3t4OnQueCx5OnQueX06bn1mdW5jdGlvbiBkZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBwZSh0LG4sZSl7dC5wcm90b3R5cGU9bi5wcm90b3R5cGU9ZSxlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gZ2UodCxuKXt2YXIgZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gbillW3JdPW5bcl07cmV0dXJuIGV9ZnVuY3Rpb24geWUoKXt9ZmUucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIHZlPS43LF9lPTEvdmUsYmU9IlxccyooWystXT9cXGQrKVxccyoiLG1lPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIix4ZT0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHdlPS9eIyhbMC05YS1mXXszLDh9KSQvLE1lPW5ldyBSZWdFeHAoYF5yZ2JcXCgke2JlfSwke2JlfSwke2JlfVxcKSRgKSxUZT1uZXcgUmVnRXhwKGBecmdiXFwoJHt4ZX0sJHt4ZX0sJHt4ZX1cXCkkYCksQWU9bmV3IFJlZ0V4cChgXnJnYmFcXCgke2JlfSwke2JlfSwke2JlfSwke21lfVxcKSRgKSxTZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7eGV9LCR7eGV9LCR7eGV9LCR7bWV9XFwpJGApLEVlPW5ldyBSZWdFeHAoYF5oc2xcXCgke21lfSwke3hlfSwke3hlfVxcKSRgKSxOZT1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7bWV9LCR7eGV9LCR7eGV9LCR7bWV9XFwpJGApLGtlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIENlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gUGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiB6ZSh0KXt2YXIgbixlO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobj13ZS5leGVjKHQpKT8oZT1uWzFdLmxlbmd0aCxuPXBhcnNlSW50KG5bMV0sMTYpLDY9PT1lPyRlKG4pOjM9PT1lP25ldyBxZShuPj44JjE1fG4+PjQmMjQwLG4+PjQmMTV8MjQwJm4sKDE1Jm4pPDw0fDE1Jm4sMSk6OD09PWU/RGUobj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSwoMjU1Jm4pLzI1NSk6ND09PWU/RGUobj4+MTImMTV8bj4+OCYyNDAsbj4+OCYxNXxuPj40JjI0MCxuPj40JjE1fDI0MCZuLCgoMTUmbik8PDR8MTUmbikvMjU1KTpudWxsKToobj1NZS5leGVjKHQpKT9uZXcgcWUoblsxXSxuWzJdLG5bM10sMSk6KG49VGUuZXhlYyh0KSk/bmV3IHFlKDI1NSpuWzFdLzEwMCwyNTUqblsyXS8xMDAsMjU1Km5bM10vMTAwLDEpOihuPUFlLmV4ZWModCkpP0RlKG5bMV0sblsyXSxuWzNdLG5bNF0pOihuPVNlLmV4ZWModCkpP0RlKDI1NSpuWzFdLzEwMCwyNTUqblsyXS8xMDAsMjU1Km5bM10vMTAwLG5bNF0pOihuPUVlLmV4ZWModCkpP0xlKG5bMV0sblsyXS8xMDAsblszXS8xMDAsMSk6KG49TmUuZXhlYyh0KSk/TGUoblsxXSxuWzJdLzEwMCxuWzNdLzEwMCxuWzRdKTprZS5oYXNPd25Qcm9wZXJ0eSh0KT8kZShrZVt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IHFlKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gJGUodCl7cmV0dXJuIG5ldyBxZSh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gRGUodCxuLGUscil7cmV0dXJuIHI8PTAmJih0PW49ZT1OYU4pLG5ldyBxZSh0LG4sZSxyKX1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHllfHwodD16ZSh0KSksdD9uZXcgcWUoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IHFlfWZ1bmN0aW9uIEZlKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9SZSh0KTpuZXcgcWUodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHFlKHQsbixlLHIpe3RoaXMucj0rdCx0aGlzLmc9K24sdGhpcy5iPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBVZSgpe3JldHVybmAjJHtZZSh0aGlzLnIpfSR7WWUodGhpcy5nKX0ke1llKHRoaXMuYil9YH1mdW5jdGlvbiBJZSgpe2NvbnN0IHQ9T2UodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09dD8icmdiKCI6InJnYmEoIn0ke0JlKHRoaXMucil9LCAke0JlKHRoaXMuZyl9LCAke0JlKHRoaXMuYil9JHsxPT09dD8iKSI6YCwgJHt0fSlgfWB9ZnVuY3Rpb24gT2UodCl7cmV0dXJuIGlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKX1mdW5jdGlvbiBCZSh0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpfWZ1bmN0aW9uIFllKHQpe3JldHVybigodD1CZSh0KSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBMZSh0LG4sZSxyKXtyZXR1cm4gcjw9MD90PW49ZT1OYU46ZTw9MHx8ZT49MT90PW49TmFOOm48PTAmJih0PU5hTiksbmV3IFhlKHQsbixlLHIpfWZ1bmN0aW9uIGplKHQpe2lmKHQgaW5zdGFuY2VvZiBYZSlyZXR1cm4gbmV3IFhlKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHllfHwodD16ZSh0KSksIXQpcmV0dXJuIG5ldyBYZTtpZih0IGluc3RhbmNlb2YgWGUpcmV0dXJuIHQ7dmFyIG49KHQ9dC5yZ2IoKSkuci8yNTUsZT10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKG4sZSxyKSxvPU1hdGgubWF4KG4sZSxyKSxhPU5hTix1PW8taSxjPShvK2kpLzI7cmV0dXJuIHU/KGE9bj09PW8/KGUtcikvdSs2KihlPHIpOmU9PT1vPyhyLW4pL3UrMjoobi1lKS91KzQsdS89YzwuNT9vK2k6Mi1vLWksYSo9NjApOnU9Yz4wJiZjPDE/MDphLG5ldyBYZShhLHUsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEhlKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9qZSh0KTpuZXcgWGUodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFhlKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBHZSh0KXtyZXR1cm4odD0odHx8MCklMzYwKTwwP3QrMzYwOnR9ZnVuY3Rpb24gVmUodCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSx0fHwwKSl9ZnVuY3Rpb24gV2UodCxuLGUpe3JldHVybiAyNTUqKHQ8NjA/bisoZS1uKSp0LzYwOnQ8MTgwP2U6dDwyNDA/bisoZS1uKSooMjQwLXQpLzYwOm4pfXBlKHllLHplLHtjb3B5KHQpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsdCl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OkNlLGZvcm1hdEhleDpDZSxmb3JtYXRIZXg4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXtyZXR1cm4gamUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpQZSx0b1N0cmluZzpQZX0pLHBlKHFlLEZlLGdlKHllLHticmlnaHRlcih0KXtyZXR1cm4gdD1udWxsPT10P19lOk1hdGgucG93KF9lLHQpLG5ldyBxZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIHQ9bnVsbD09dD92ZTpNYXRoLnBvdyh2ZSx0KSxuZXcgcWUodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBxZShCZSh0aGlzLnIpLEJlKHRoaXMuZyksQmUodGhpcy5iKSxPZSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlVlLGZvcm1hdEhleDpVZSxmb3JtYXRIZXg4OmZ1bmN0aW9uKCl7cmV0dXJuYCMke1llKHRoaXMucil9JHtZZSh0aGlzLmcpfSR7WWUodGhpcy5iKX0ke1llKDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpJZSx0b1N0cmluZzpJZX0pKSxwZShYZSxIZSxnZSh5ZSx7YnJpZ2h0ZXIodCl7cmV0dXJuIHQ9bnVsbD09dD9fZTpNYXRoLnBvdyhfZSx0KSxuZXcgWGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIHQ9bnVsbD09dD92ZTpNYXRoLnBvdyh2ZSx0KSxuZXcgWGUodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLG49aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsZT10aGlzLmwscj1lKyhlPC41P2U6MS1lKSpuLGk9MiplLXI7cmV0dXJuIG5ldyBxZShXZSh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxXZSh0LGksciksV2UodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgWGUoR2UodGhpcy5oKSxWZSh0aGlzLnMpLFZlKHRoaXMubCksT2UodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtjb25zdCB0PU9lKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PXQ/ImhzbCgiOiJoc2xhKCJ9JHtHZSh0aGlzLmgpfSwgJHsxMDAqVmUodGhpcy5zKX0lLCAkezEwMCpWZSh0aGlzLmwpfSUkezE9PT10PyIpIjpgLCAke3R9KWB9YH19KSk7Y29uc3QgWmU9TWF0aC5QSS8xODAsS2U9MTgwL01hdGguUEksUWU9Ljk2NDIyLEplPTEsdHI9LjgyNTIxLG5yPTQvMjksZXI9Ni8yOSxycj0zKmVyKmVyLGlyPWVyKmVyKmVyO2Z1bmN0aW9uIG9yKHQpe2lmKHQgaW5zdGFuY2VvZiB1cilyZXR1cm4gbmV3IHVyKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHByKXJldHVybiBncih0KTt0IGluc3RhbmNlb2YgcWV8fCh0PVJlKHQpKTt2YXIgbixlLHI9bHIodC5yKSxpPWxyKHQuZyksbz1scih0LmIpLGE9Y3IoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSpvKS9KZSk7cmV0dXJuIHI9PT1pJiZpPT09bz9uPWU9YToobj1jcigoLjQzNjA3NDcqcisuMzg1MDY0OSppKy4xNDMwODA0Km8pL1FlKSxlPWNyKCguMDEzOTMyMipyKy4wOTcxMDQ1KmkrLjcxNDE3MzMqbykvdHIpKSxuZXcgdXIoMTE2KmEtMTYsNTAwKihuLWEpLDIwMCooYS1lKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGFyKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9vcih0KTpuZXcgdXIodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHVyKHQsbixlLHIpe3RoaXMubD0rdCx0aGlzLmE9K24sdGhpcy5iPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBjcih0KXtyZXR1cm4gdD5pcj9NYXRoLnBvdyh0LDEvMyk6dC9ycitucn1mdW5jdGlvbiBmcih0KXtyZXR1cm4gdD5lcj90KnQqdDpycioodC1ucil9ZnVuY3Rpb24gc3IodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBscih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBocih0KXtpZih0IGluc3RhbmNlb2YgcHIpcmV0dXJuIG5ldyBwcih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiB1cnx8KHQ9b3IodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBwcihOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIG49TWF0aC5hdGFuMih0LmIsdC5hKSpLZTtyZXR1cm4gbmV3IHByKG48MD9uKzM2MDpuLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGRyKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ocih0KTpuZXcgcHIodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHByKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLmM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBncih0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgdXIodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBuPXQuaCpaZTtyZXR1cm4gbmV3IHVyKHQubCxNYXRoLmNvcyhuKSp0LmMsTWF0aC5zaW4obikqdC5jLHQub3BhY2l0eSl9cGUodXIsYXIsZ2UoeWUse2JyaWdodGVyKHQpe3JldHVybiBuZXcgdXIodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXIodCl7cmV0dXJuIG5ldyB1cih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixuPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsZT1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgcWUoc3IoMy4xMzM4NTYxKihuPVFlKmZyKG4pKS0xLjYxNjg2NjcqKHQ9SmUqZnIodCkpLS40OTA2MTQ2KihlPXRyKmZyKGUpKSksc3IoLS45Nzg3Njg0Km4rMS45MTYxNDE1KnQrLjAzMzQ1NCplKSxzciguMDcxOTQ1MypuLS4yMjg5OTE0KnQrMS40MDUyNDI3KmUpLHRoaXMub3BhY2l0eSl9fSkpLHBlKHByLGRyLGdlKHllLHticmlnaHRlcih0KXtyZXR1cm4gbmV3IHByKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiBuZXcgcHIodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gZ3IodGhpcykucmdiKCl9fSkpO3ZhciB5cj0tLjE0ODYxLHZyPTEuNzgyNzcsX3I9LS4yOTIyNyxicj0tLjkwNjQ5LG1yPTEuOTcyOTQseHI9bXIqYnIsd3I9bXIqdnIsTXI9dnIqX3ItYnIqeXI7ZnVuY3Rpb24gVHIodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBBcilyZXR1cm4gbmV3IEFyKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIHFlfHwodD1SZSh0KSk7dmFyIG49dC5yLzI1NSxlPXQuZy8yNTUscj10LmIvMjU1LGk9KE1yKnIreHIqbi13ciplKS8oTXIreHItd3IpLG89ci1pLGE9KG1yKihlLWkpLV9yKm8pL2JyLHU9TWF0aC5zcXJ0KGEqYStvKm8pLyhtcippKigxLWkpKSxjPXU/TWF0aC5hdGFuMihhLG8pKktlLTEyMDpOYU47cmV0dXJuIG5ldyBBcihjPDA/YyszNjA6Yyx1LGksdC5vcGFjaXR5KX0odCk6bmV3IEFyKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBBcih0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5zPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gU3IodCxuLGUscixpKXt2YXIgbz10KnQsYT1vKnQ7cmV0dXJuKCgxLTMqdCszKm8tYSkqbisoNC02Km8rMyphKSplKygxKzMqdCszKm8tMyphKSpyK2EqaSkvNn1mdW5jdGlvbiBFcih0KXt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lPD0wP2U9MDplPj0xPyhlPTEsbi0xKTpNYXRoLmZsb29yKGUqbiksaT10W3JdLG89dFtyKzFdLGE9cj4wP3Rbci0xXToyKmktbyx1PXI8bi0xP3RbcisyXToyKm8taTtyZXR1cm4gU3IoKGUtci9uKSpuLGEsaSxvLHUpfX1mdW5jdGlvbiBOcih0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKm4pLGk9dFsocituLTEpJW5dLG89dFtyJW5dLGE9dFsocisxKSVuXSx1PXRbKHIrMiklbl07cmV0dXJuIFNyKChlLXIvbikqbixpLG8sYSx1KX19cGUoQXIsVHIsZ2UoeWUse2JyaWdodGVyKHQpe3JldHVybiB0PW51bGw9PXQ/X2U6TWF0aC5wb3coX2UsdCksbmV3IEFyKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyKHQpe3JldHVybiB0PW51bGw9PXQ/dmU6TWF0aC5wb3codmUsdCksbmV3IEFyKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpaZSxuPSt0aGlzLmwsZT1pc05hTih0aGlzLnMpPzA6dGhpcy5zKm4qKDEtbikscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgcWUoMjU1KihuK2UqKHlyKnIrdnIqaSkpLDI1NSoobitlKihfcipyK2JyKmkpKSwyNTUqKG4rZSoobXIqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBrcj10PT4oKT0+dDtmdW5jdGlvbiBDcih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCtlKm59fWZ1bmN0aW9uIFByKHQsbil7dmFyIGU9bi10O3JldHVybiBlP0NyKHQsZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTprcihpc05hTih0KT9uOnQpfWZ1bmN0aW9uIHpyKHQpe3JldHVybiAxPT0odD0rdCk/JHI6ZnVuY3Rpb24obixlKXtyZXR1cm4gZS1uP2Z1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD1NYXRoLnBvdyh0LGUpLG49TWF0aC5wb3cobixlKS10LGU9MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnBvdyh0K3IqbixlKX19KG4sZSx0KTprcihpc05hTihuKT9lOm4pfX1mdW5jdGlvbiAkcih0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9Dcih0LGUpOmtyKGlzTmFOKHQpP246dCl9dmFyIERyPWZ1bmN0aW9uIHQobil7dmFyIGU9enIobik7ZnVuY3Rpb24gcih0LG4pe3ZhciByPWUoKHQ9RmUodCkpLnIsKG49RmUobikpLnIpLGk9ZSh0Lmcsbi5nKSxvPWUodC5iLG4uYiksYT0kcih0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1yKG4pLHQuZz1pKG4pLHQuYj1vKG4pLHQub3BhY2l0eT1hKG4pLHQrIiJ9fXJldHVybiByLmdhbW1hPXQscn0oMSk7ZnVuY3Rpb24gUnIodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlLHIsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKTtmb3IoZT0wO2U8aTsrK2Upcj1GZShuW2VdKSxvW2VdPXIucnx8MCxhW2VdPXIuZ3x8MCx1W2VdPXIuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSx1PXQodSksci5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIHIucj1vKHQpLHIuZz1hKHQpLHIuYj11KHQpLHIrIiJ9fX12YXIgRnI9UnIoRXIpLHFyPVJyKE5yKTtmdW5jdGlvbiBVcih0LG4pe258fChuPVtdKTt2YXIgZSxyPXQ/TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpOjAsaT1uLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihlPTA7ZTxyOysrZSlpW2VdPXRbZV0qKDEtbykrbltlXSpvO3JldHVybiBpfX1mdW5jdGlvbiBJcih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24gT3IodCxuKXt2YXIgZSxyPW4/bi5sZW5ndGg6MCxpPXQ/TWF0aC5taW4ocix0Lmxlbmd0aCk6MCxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShyKTtmb3IoZT0wO2U8aTsrK2Upb1tlXT1Hcih0W2VdLG5bZV0pO2Zvcig7ZTxyOysrZSlhW2VdPW5bZV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihlPTA7ZTxpOysrZSlhW2VdPW9bZV0odCk7cmV0dXJuIGF9fWZ1bmN0aW9uIEJyKHQsbil7dmFyIGU9bmV3IERhdGU7cmV0dXJuIHQ9K3Qsbj0rbixmdW5jdGlvbihyKXtyZXR1cm4gZS5zZXRUaW1lKHQqKDEtcikrbipyKSxlfX1mdW5jdGlvbiBZcih0LG4pe3JldHVybiB0PSt0LG49K24sZnVuY3Rpb24oZSl7cmV0dXJuIHQqKDEtZSkrbiplfX1mdW5jdGlvbiBMcih0LG4pe3ZhciBlLHI9e30saT17fTtmb3IoZSBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2Ygbnx8KG49e30pLG4pZSBpbiB0P3JbZV09R3IodFtlXSxuW2VdKTppW2VdPW5bZV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihlIGluIHIpaVtlXT1yW2VdKHQpO3JldHVybiBpfX12YXIganI9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEhyPW5ldyBSZWdFeHAoanIuc291cmNlLCJnIik7ZnVuY3Rpb24gWHIodCxuKXt2YXIgZSxyLGksbz1qci5sYXN0SW5kZXg9SHIubGFzdEluZGV4PTAsYT0tMSx1PVtdLGM9W107Zm9yKHQrPSIiLG4rPSIiOyhlPWpyLmV4ZWModCkpJiYocj1Ici5leGVjKG4pKTspKGk9ci5pbmRleCk+byYmKGk9bi5zbGljZShvLGkpLHVbYV0/dVthXSs9aTp1WysrYV09aSksKGU9ZVswXSk9PT0ocj1yWzBdKT91W2FdP3VbYV0rPXI6dVsrK2FdPXI6KHVbKythXT1udWxsLGMucHVzaCh7aTphLHg6WXIoZSxyKX0pKSxvPUhyLmxhc3RJbmRleDtyZXR1cm4gbzxuLmxlbmd0aCYmKGk9bi5zbGljZShvKSx1W2FdP3VbYV0rPWk6dVsrK2FdPWkpLHUubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0obik6KG49Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9MDtyPG47KytyKXVbKGU9Y1tyXSkuaV09ZS54KHQpO3JldHVybiB1LmpvaW4oIiIpfSl9ZnVuY3Rpb24gR3IodCxuKXt2YXIgZSxyPXR5cGVvZiBuO3JldHVybiBudWxsPT1ufHwiYm9vbGVhbiI9PT1yP2tyKG4pOigibnVtYmVyIj09PXI/WXI6InN0cmluZyI9PT1yPyhlPXplKG4pKT8obj1lLERyKTpYcjpuIGluc3RhbmNlb2YgemU/RHI6biBpbnN0YW5jZW9mIERhdGU/QnI6SXIobik/VXI6QXJyYXkuaXNBcnJheShuKT9PcjoiZnVuY3Rpb24iIT10eXBlb2Ygbi52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Ygbi50b1N0cmluZ3x8aXNOYU4obik/THI6WXIpKHQsbil9ZnVuY3Rpb24gVnIodCxuKXtyZXR1cm4gdD0rdCxuPStuLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtZSkrbiplKX19dmFyIFdyLFpyPTE4MC9NYXRoLlBJLEtyPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIFFyKHQsbixlLHIsaSxvKXt2YXIgYSx1LGM7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtuKm4pKSYmKHQvPWEsbi89YSksKGM9dCplK24qcikmJihlLT10KmMsci09bipjKSwodT1NYXRoLnNxcnQoZSplK3IqcikpJiYoZS89dSxyLz11LGMvPXUpLHQqcjxuKmUmJih0PS10LG49LW4sYz0tYyxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihuLHQpKlpyLHNrZXdYOk1hdGguYXRhbihjKSpacixzY2FsZVg6YSxzY2FsZVk6dX19ZnVuY3Rpb24gSnIodCxuLGUscil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKG8sYSl7dmFyIHU9W10sYz1bXTtyZXR1cm4gbz10KG8pLGE9dChhKSxmdW5jdGlvbih0LHIsaSxvLGEsdSl7aWYodCE9PWl8fHIhPT1vKXt2YXIgYz1hLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbixudWxsLGUpO3UucHVzaCh7aTpjLTQseDpZcih0LGkpfSx7aTpjLTIseDpZcihyLG8pfSl9ZWxzZShpfHxvKSYmYS5wdXNoKCJ0cmFuc2xhdGUoIitpK24rbytlKX0oby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxhLnRyYW5zbGF0ZVgsYS50cmFuc2xhdGVZLHUsYyksZnVuY3Rpb24odCxuLGUsbyl7dCE9PW4/KHQtbj4xODA/bis9MzYwOm4tdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTplLnB1c2goaShlKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6WXIodCxuKX0pKTpuJiZlLnB1c2goaShlKSsicm90YXRlKCIrbityKX0oby5yb3RhdGUsYS5yb3RhdGUsdSxjKSxmdW5jdGlvbih0LG4sZSxvKXt0IT09bj9vLnB1c2goe2k6ZS5wdXNoKGkoZSkrInNrZXdYKCIsbnVsbCxyKS0yLHg6WXIodCxuKX0pOm4mJmUucHVzaChpKGUpKyJza2V3WCgiK24rcil9KG8uc2tld1gsYS5za2V3WCx1LGMpLGZ1bmN0aW9uKHQsbixlLHIsbyxhKXtpZih0IT09ZXx8biE9PXIpe3ZhciB1PW8ucHVzaChpKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTthLnB1c2goe2k6dS00LHg6WXIodCxlKX0se2k6dS0yLHg6WXIobixyKX0pfWVsc2UgMT09PWUmJjE9PT1yfHxvLnB1c2goaShvKSsic2NhbGUoIitlKyIsIityKyIpIil9KG8uc2NhbGVYLG8uc2NhbGVZLGEuc2NhbGVYLGEuc2NhbGVZLHUsYyksbz1hPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9LTEscj1jLmxlbmd0aDsrK2U8cjspdVsobj1jW2VdKS5pXT1uLngodCk7cmV0dXJuIHUuam9pbigiIil9fX12YXIgdGk9SnIoKGZ1bmN0aW9uKHQpe2NvbnN0IG49bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkodCsiIik7cmV0dXJuIG4uaXNJZGVudGl0eT9LcjpRcihuLmEsbi5iLG4uYyxuLmQsbi5lLG4uZil9KSwicHgsICIsInB4KSIsImRlZykiKSxuaT1KcigoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/S3I6KFdyfHwoV3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksV3Iuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PVdyLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP1FyKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOktyKX0pLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gZWkodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9dmFyIHJpPWZ1bmN0aW9uIHQobixlLHIpe2Z1bmN0aW9uIGkodCxpKXt2YXIgbyxhLHU9dFswXSxjPXRbMV0sZj10WzJdLHM9aVswXSxsPWlbMV0saD1pWzJdLGQ9cy11LHA9bC1jLGc9ZCpkK3AqcDtpZihnPDFlLTEyKWE9TWF0aC5sb2coaC9mKS9uLG89ZnVuY3Rpb24odCl7cmV0dXJuW3UrdCpkLGMrdCpwLGYqTWF0aC5leHAobip0KmEpXX07ZWxzZXt2YXIgeT1NYXRoLnNxcnQoZyksdj0oaCpoLWYqZityKmcpLygyKmYqZSp5KSxfPShoKmgtZipmLXIqZykvKDIqaCplKnkpLGI9TWF0aC5sb2coTWF0aC5zcXJ0KHYqdisxKS12KSxtPU1hdGgubG9nKE1hdGguc3FydChfKl8rMSktXyk7YT0obS1iKS9uLG89ZnVuY3Rpb24odCl7dmFyIHI9dCphLGk9ZWkoYiksbz1mLyhlKnkpKihpKmZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCgyKnQpKS0xKS8odCsxKX0obipyK2IpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShiKSk7cmV0dXJuW3UrbypkLGMrbypwLGYqaS9laShuKnIrYildfX1yZXR1cm4gby5kdXJhdGlvbj0xZTMqYSpuL01hdGguU1FSVDIsb31yZXR1cm4gaS5yaG89ZnVuY3Rpb24obil7dmFyIGU9TWF0aC5tYXgoLjAwMSwrbikscj1lKmU7cmV0dXJuIHQoZSxyLHIqcil9LGl9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiBpaSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPUhlKG4pKS5oLChlPUhlKGUpKS5oKSxpPSRyKG4ucyxlLnMpLG89JHIobi5sLGUubCksYT0kcihuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4ucz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgb2k9aWkoUHIpLGFpPWlpKCRyKTtmdW5jdGlvbiB1aSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPWRyKG4pKS5oLChlPWRyKGUpKS5oKSxpPSRyKG4uYyxlLmMpLG89JHIobi5sLGUubCksYT0kcihuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4uYz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fX12YXIgY2k9dWkoUHIpLGZpPXVpKCRyKTtmdW5jdGlvbiBzaSh0KXtyZXR1cm4gZnVuY3Rpb24gbihlKXtmdW5jdGlvbiByKG4scil7dmFyIGk9dCgobj1UcihuKSkuaCwocj1UcihyKSkuaCksbz0kcihuLnMsci5zKSxhPSRyKG4ubCxyLmwpLHU9JHIobi5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLmg9aSh0KSxuLnM9byh0KSxuLmw9YShNYXRoLnBvdyh0LGUpKSxuLm9wYWNpdHk9dSh0KSxuKyIifX1yZXR1cm4gZT0rZSxyLmdhbW1hPW4scn0oMSl9dmFyIGxpPXNpKFByKSxoaT1zaSgkcik7ZnVuY3Rpb24gZGkodCxuKXt2b2lkIDA9PT1uJiYobj10LHQ9R3IpO2Zvcih2YXIgZT0wLHI9bi5sZW5ndGgtMSxpPW5bMF0sbz1uZXcgQXJyYXkocjwwPzA6cik7ZTxyOylvW2VdPXQoaSxpPW5bKytlXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IodCo9cikpKTtyZXR1cm4gb1tuXSh0LW4pfX12YXIgcGksZ2kseWk9MCx2aT0wLF9pPTAsYmk9MWUzLG1pPTAseGk9MCx3aT0wLE1pPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFRpPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIEFpKCl7cmV0dXJuIHhpfHwoVGkoU2kpLHhpPU1pLm5vdygpK3dpKX1mdW5jdGlvbiBTaSgpe3hpPTB9ZnVuY3Rpb24gRWkoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIE5pKHQsbixlKXt2YXIgcj1uZXcgRWk7cmV0dXJuIHIucmVzdGFydCh0LG4sZSkscn1mdW5jdGlvbiBraSgpe0FpKCksKyt5aTtmb3IodmFyIHQsbj1waTtuOykodD14aS1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKHZvaWQgMCx0KSxuPW4uX25leHQ7LS15aX1mdW5jdGlvbiBDaSgpe3hpPShtaT1NaS5ub3coKSkrd2kseWk9dmk9MDt0cnl7a2koKX1maW5hbGx5e3lpPTAsZnVuY3Rpb24oKXt2YXIgdCxuLGU9cGkscj0xLzA7Zm9yKDtlOyllLl9jYWxsPyhyPmUuX3RpbWUmJihyPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihuPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PW46cGk9bik7Z2k9dCx6aShyKX0oKSx4aT0wfX1mdW5jdGlvbiBQaSgpe3ZhciB0PU1pLm5vdygpLG49dC1taTtuPmJpJiYod2ktPW4sbWk9dCl9ZnVuY3Rpb24gemkodCl7eWl8fCh2aSYmKHZpPWNsZWFyVGltZW91dCh2aSkpLHQteGk+MjQ/KHQ8MS8wJiYodmk9c2V0VGltZW91dChDaSx0LU1pLm5vdygpLXdpKSksX2kmJihfaT1jbGVhckludGVydmFsKF9pKSkpOihfaXx8KG1pPU1pLm5vdygpLF9pPXNldEludGVydmFsKFBpLGJpKSkseWk9MSxUaShDaSkpKX1mdW5jdGlvbiAkaSh0LG4sZSl7dmFyIHI9bmV3IEVpO3JldHVybiBuPW51bGw9PW4/MDorbixyLnJlc3RhcnQoKGU9PntyLnN0b3AoKSx0KGUrbil9KSxuLGUpLHJ9RWkucHJvdG90eXBlPU5pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RWkscmVzdGFydDpmdW5jdGlvbih0LG4sZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtlPShudWxsPT1lP0FpKCk6K2UpKyhudWxsPT1uPzA6K24pLHRoaXMuX25leHR8fGdpPT09dGhpc3x8KGdpP2dpLl9uZXh0PXRoaXM6cGk9dGhpcyxnaT10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1lLHppKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHppKCkpfX07dmFyIERpPSR0KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFJpPVtdLEZpPTAscWk9MSxVaT0yLElpPTMsT2k9NCxCaT01LFlpPTY7ZnVuY3Rpb24gTGkodCxuLGUscixpLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKGUgaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxuLGUpe3ZhciByLGk9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyh0KXtlLnN0YXRlPXFpLGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD10JiZhKHQtZS5kZWxheSl9ZnVuY3Rpb24gYShvKXt2YXIgZixzLGwsaDtpZihlLnN0YXRlIT09cWkpcmV0dXJuIGMoKTtmb3IoZiBpbiBpKWlmKChoPWlbZl0pLm5hbWU9PT1lLm5hbWUpe2lmKGguc3RhdGU9PT1JaSlyZXR1cm4gJGkoYSk7aC5zdGF0ZT09PU9pPyhoLnN0YXRlPVlpLGgudGltZXIuc3RvcCgpLGgub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18saC5pbmRleCxoLmdyb3VwKSxkZWxldGUgaVtmXSk6K2Y8biYmKGguc3RhdGU9WWksaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW2ZdKX1pZigkaSgoZnVuY3Rpb24oKXtlLnN0YXRlPT09SWkmJihlLnN0YXRlPU9pLGUudGltZXIucmVzdGFydCh1LGUuZGVsYXksZS50aW1lKSx1KG8pKX0pKSxlLnN0YXRlPVVpLGUub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGUuc3RhdGU9PT1VaSl7Zm9yKGUuc3RhdGU9SWkscj1uZXcgQXJyYXkobD1lLnR3ZWVuLmxlbmd0aCksZj0wLHM9LTE7ZjxsOysrZikoaD1lLnR3ZWVuW2ZdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCkpJiYoclsrK3NdPWgpO3IubGVuZ3RoPXMrMX19ZnVuY3Rpb24gdShuKXtmb3IodmFyIGk9bjxlLmR1cmF0aW9uP2UuZWFzZS5jYWxsKG51bGwsbi9lLmR1cmF0aW9uKTooZS50aW1lci5yZXN0YXJ0KGMpLGUuc3RhdGU9QmksMSksbz0tMSxhPXIubGVuZ3RoOysrbzxhOylyW29dLmNhbGwodCxpKTtlLnN0YXRlPT09QmkmJihlLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksYygpKX1mdW5jdGlvbiBjKCl7Zm9yKHZhciByIGluIGUuc3RhdGU9WWksZS50aW1lci5zdG9wKCksZGVsZXRlIGlbbl0saSlyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufWlbbl09ZSxlLnRpbWVyPU5pKG8sMCxlLnRpbWUpfSh0LGUse25hbWU6bixpbmRleDpyLGdyb3VwOmksb246RGksdHdlZW46UmksdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6Rml9KX1mdW5jdGlvbiBqaSh0LG4pe3ZhciBlPVhpKHQsbik7aWYoZS5zdGF0ZT5GaSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEhpKHQsbil7dmFyIGU9WGkodCxuKTtpZihlLnN0YXRlPklpKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIFhpKHQsbil7dmFyIGU9dC5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW25dKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gR2kodCxuKXt2YXIgZSxyLGksbz10Ll9fdHJhbnNpdGlvbixhPSEwO2lmKG8pe2ZvcihpIGluIG49bnVsbD09bj9udWxsOm4rIiIsbykoZT1vW2ldKS5uYW1lPT09bj8ocj1lLnN0YXRlPlVpJiZlLnN0YXRlPEJpLGUuc3RhdGU9WWksZS50aW1lci5zdG9wKCksZS5vbi5jYWxsKHI/ImludGVycnVwdCI6ImNhbmNlbCIsdCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksZGVsZXRlIG9baV0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBWaSh0LG4pe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9SGkodGhpcyx0KSxvPWkudHdlZW47aWYobyE9PWUpZm9yKHZhciBhPTAsdT0ocj1lPW8pLmxlbmd0aDthPHU7KythKWlmKHJbYV0ubmFtZT09PW4peyhyPXIuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9aS50d2Vlbj1yfX1mdW5jdGlvbiBXaSh0LG4sZSl7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SGkodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PXIpe2k9KHI9YSkuc2xpY2UoKTtmb3IodmFyIHU9e25hbWU6bix2YWx1ZTplfSxjPTAsZj1pLmxlbmd0aDtjPGY7KytjKWlmKGlbY10ubmFtZT09PW4pe2lbY109dTticmVha31jPT09ZiYmaS5wdXNoKHUpfW8udHdlZW49aX19ZnVuY3Rpb24gWmkodCxuLGUpe3ZhciByPXQuX2lkO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9SGkodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtuXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKSxmdW5jdGlvbih0KXtyZXR1cm4gWGkodCxyKS52YWx1ZVtuXX19ZnVuY3Rpb24gS2kodCxuKXt2YXIgZTtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBuP1lyOm4gaW5zdGFuY2VvZiB6ZT9EcjooZT16ZShuKSk/KG49ZSxEcik6WHIpKHQsbil9ZnVuY3Rpb24gUWkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIEppKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gdG8odCxuLGUpe3ZhciByLGksbz1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBhPT09bz9udWxsOmE9PT1yP2k6aT1uKHI9YSxlKX19ZnVuY3Rpb24gbm8odCxuLGUpe3ZhciByLGksbz1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gYT09PW8/bnVsbDphPT09cj9pOmk9bihyPWEsZSl9fWZ1bmN0aW9uIGVvKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsdSxjPWUodGhpcyk7aWYobnVsbCE9YylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZSh0KSk9PT0odT1jKyIiKT9udWxsOmE9PT1yJiZ1PT09aT9vOihpPXUsbz1uKHI9YSxjKSk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHJvKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsdSxjPWUodGhpcyk7aWYobnVsbCE9YylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09KHU9YysiIik/bnVsbDphPT09ciYmdT09PWk/bzooaT11LG89bihyPWEsYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gaW8odCxuKXt2YXIgZSxyO2Z1bmN0aW9uIGkoKXt2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihlPShyPWkpJiZmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuLmNhbGwodGhpcyxlKSl9fSh0LGkpKSxlfXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gb28odCxuKXt2YXIgZSxyO2Z1bmN0aW9uIGkoKXt2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJihlPShyPWkpJiZmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZSh0LG4uY2FsbCh0aGlzLGUpKX19KHQsaSkpLGV9cmV0dXJuIGkuX3ZhbHVlPW4saX1mdW5jdGlvbiBhbyh0LG4pe3JldHVybiBmdW5jdGlvbigpe2ppKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB1byh0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7amkodGhpcyx0KS5kZWxheT1ufX1mdW5jdGlvbiBjbyh0LG4pe3JldHVybiBmdW5jdGlvbigpe0hpKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBmbyh0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7SGkodGhpcyx0KS5kdXJhdGlvbj1ufX12YXIgc289V24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIGxvKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fXZhciBobz0wO2Z1bmN0aW9uIHBvKHQsbixlLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bix0aGlzLl9uYW1lPWUsdGhpcy5faWQ9cn1mdW5jdGlvbiBnbyh0KXtyZXR1cm4gV24oKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIHlvKCl7cmV0dXJuKytob312YXIgdm89V24ucHJvdG90eXBlO3BvLnByb3RvdHlwZT1nby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBvLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWp0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciB1LGMsZj1yW2FdLHM9Zi5sZW5ndGgsbD1vW2FdPW5ldyBBcnJheShzKSxoPTA7aDxzOysraCkodT1mW2hdKSYmKGM9dC5jYWxsKHUsdS5fX2RhdGFfXyxoLGYpKSYmKCJfX2RhdGFfXyJpbiB1JiYoYy5fX2RhdGFfXz11Ll9fZGF0YV9fKSxsW2hdPWMsTGkobFtoXSxuLGUsaCxsLFhpKHUsZSkpKTtyZXR1cm4gbmV3IHBvKG8sdGhpcy5fcGFyZW50cyxuLGUpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1HdCh0KSk7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89W10sYT1bXSx1PTA7dTxpOysrdSlmb3IodmFyIGMsZj1yW3VdLHM9Zi5sZW5ndGgsbD0wO2w8czsrK2wpaWYoYz1mW2xdKXtmb3IodmFyIGgsZD10LmNhbGwoYyxjLl9fZGF0YV9fLGwsZikscD1YaShjLGUpLGc9MCx5PWQubGVuZ3RoO2c8eTsrK2cpKGg9ZFtnXSkmJkxpKGgsbixlLGcsZCxwKTtvLnB1c2goZCksYS5wdXNoKGMpfXJldHVybiBuZXcgcG8obyxhLG4sZSl9LHNlbGVjdENoaWxkOnZvLnNlbGVjdENoaWxkLHNlbGVjdENoaWxkcmVuOnZvLnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9VnQodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sYT1uW2ldLHU9YS5sZW5ndGgsYz1yW2ldPVtdLGY9MDtmPHU7KytmKShvPWFbZl0pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGYsYSkmJmMucHVzaChvKTtyZXR1cm4gbmV3IHBvKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPXQuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz1NYXRoLm1pbihyLGkpLGE9bmV3IEFycmF5KHIpLHU9MDt1PG87Kyt1KWZvcih2YXIgYyxmPW5bdV0scz1lW3VdLGw9Zi5sZW5ndGgsaD1hW3VdPW5ldyBBcnJheShsKSxkPTA7ZDxsOysrZCkoYz1mW2RdfHxzW2RdKSYmKGhbZF09Yyk7Zm9yKDt1PHI7Kyt1KWFbdV09blt1XTtyZXR1cm4gbmV3IHBvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzbyh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxuPXRoaXMuX2lkLGU9eW8oKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYSx1PXJbb10sYz11Lmxlbmd0aCxmPTA7ZjxjOysrZilpZihhPXVbZl0pe3ZhciBzPVhpKGEsbik7TGkoYSx0LGUsZix1LHt0aW1lOnMudGltZStzLmRlbGF5K3MuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlfSl9cmV0dXJuIG5ldyBwbyhyLHRoaXMuX3BhcmVudHMsdCxlKX0sY2FsbDp2by5jYWxsLG5vZGVzOnZvLm5vZGVzLG5vZGU6dm8ubm9kZSxzaXplOnZvLnNpemUsZW1wdHk6dm8uZW1wdHksZWFjaDp2by5lYWNoLG9uOmZ1bmN0aW9uKHQsbil7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9YaSh0aGlzLm5vZGUoKSxlKS5vbi5vbih0KTp0aGlzLmVhY2goZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbz1mdW5jdGlvbih0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KChmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KSl9KG4pP2ppOkhpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyx0KSx1PWEub247dSE9PXImJihpPShyPXUpLmNvcHkoKSkub24obixlKSxhLm9uPWl9fShlLHQsbikpfSxhdHRyOmZ1bmN0aW9uKHQsbil7dmFyIGU9SXQodCkscj0idHJhbnNmb3JtIj09PWU/bmk6S2k7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/KGUubG9jYWw/cm86ZW8pKGUscixaaSh0aGlzLCJhdHRyLiIrdCxuKSk6bnVsbD09bj8oZS5sb2NhbD9KaTpRaSkoZSk6KGUubG9jYWw/bm86dG8pKGUscixuKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciBlPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dmFyIHI9SXQodCk7cmV0dXJuIHRoaXMudHdlZW4oZSwoci5sb2NhbD9pbzpvbykocixuKSl9LHN0eWxlOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT90aTpLaTtyZXR1cm4gbnVsbD09bj90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LG4pe3ZhciBlLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1fbih0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksX24odGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PWUmJmE9PT1yP2k6aT1uKGU9byxyPWEpfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsbG8odCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9X24odGhpcyx0KSx1PWUodGhpcyksYz11KyIiO3JldHVybiBudWxsPT11JiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXU9X24odGhpcyx0KSksYT09PWM/bnVsbDphPT09ciYmYz09PWk/bzooaT1jLG89bihyPWEsdSkpfX0odCxyLFppKHRoaXMsInN0eWxlLiIrdCxuKSkpLmVhY2goZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbyxhPSJzdHlsZS4iK24sdT0iZW5kLiIrYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1IaSh0aGlzLHQpLGY9Yy5vbixzPW51bGw9PWMudmFsdWVbYV0/b3x8KG89bG8obikpOnZvaWQgMDtmPT09ZSYmaT09PXN8fChyPShlPWYpLmNvcHkoKSkub24odSxpPXMpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9X24odGhpcyx0KTtyZXR1cm4gYT09PW8/bnVsbDphPT09cj9pOmk9bihyPWEsZSl9fSh0LHIsbiksZSkub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxuLGUpe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1uKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsZnVuY3Rpb24odCxuLGUpe3ZhciByLGk7ZnVuY3Rpb24gbygpe3ZhciBvPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09aSYmKHI9KGk9bykmJmZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4uY2FsbCh0aGlzLHIpLGUpfX0odCxvLGUpKSxyfXJldHVybiBvLl92YWx1ZT1uLG99KHQsbixudWxsPT1lPyIiOmUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19KFppKHRoaXMsInRleHQiLHQpKTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fShudWxsPT10PyIiOnQrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKHQpe3ZhciBuPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixmdW5jdGlvbih0KXt2YXIgbixlO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PWUmJihuPShlPXIpJiZmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy50ZXh0Q29udGVudD10LmNhbGwodGhpcyxuKX19KHIpKSxufXJldHVybiByLl92YWx1ZT10LHJ9KHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT10KXJldHVybjtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQpKX0sdHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcixpPVhpKHRoaXMubm9kZSgpLGUpLnR3ZWVuLG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoKHI9aVtvXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bj9WaTpXaSkoZSx0LG4pKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9hbzp1bykobix0KSk6WGkodGhpcy5ub2RlKCksbikuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/Y286Zm8pKG4sdCkpOlhpKHRoaXMubm9kZSgpLG4pLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbih0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtIaSh0aGlzLHQpLmVhc2U9bn19KG4sdCkpOlhpKHRoaXMubm9kZSgpLG4pLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO0hpKHRoaXMsdCkuZWFzZT1lfX0odGhpcy5faWQsdCkpfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgdCxuLGU9dGhpcyxyPWUuX2lkLGk9ZS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihvLGEpe3ZhciB1PXt2YWx1ZTphfSxjPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taSYmbygpfX07ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPUhpKHRoaXMsciksaT1lLm9uO2khPT10JiYoKG49KHQ9aSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKHUpLG4uXy5pbnRlcnJ1cHQucHVzaCh1KSxuLl8uZW5kLnB1c2goYykpLGUub249bn0pKSwwPT09aSYmbygpfSkpfSxbU3ltYm9sLml0ZXJhdG9yXTp2b1tTeW1ib2wuaXRlcmF0b3JdfTtmdW5jdGlvbiBfbyh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn1mdW5jdGlvbiBibyh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn12YXIgbW89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSx4bz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSx3bz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LG4pOjItTWF0aC5wb3coMi10LG4pKS8yfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfSgzKSxNbz1NYXRoLlBJLFRvPU1vLzI7ZnVuY3Rpb24gQW8odCl7cmV0dXJuKDEtTWF0aC5jb3MoTW8qdCkpLzJ9ZnVuY3Rpb24gU28odCl7cmV0dXJuIDEuMDAwOTc3NTE3MTA2NTQ5NCooTWF0aC5wb3coMiwtMTAqdCktLjAwMDk3NjU2MjUpfWZ1bmN0aW9uIEVvKHQpe3JldHVybigodCo9Mik8PTE/U28oMS10KToyLVNvKHQtMSkpLzJ9ZnVuY3Rpb24gTm8odCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIGtvPTQvMTEsQ289Ni8xMSxQbz04LzExLHpvPTMvNCwkbz05LzExLERvPTEwLzExLFJvPTE1LzE2LEZvPTIxLzIyLHFvPTYzLzY0LFVvPTEva28va287ZnVuY3Rpb24gSW8odCl7cmV0dXJuKHQ9K3QpPGtvP1VvKnQqdDp0PFBvP1VvKih0LT1DbykqdCt6bzp0PERvP1VvKih0LT0kbykqdCtSbzpVbyoodC09Rm8pKnQrcW99dmFyIE9vPTEuNzAxNTgsQm89ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybih0PSt0KSp0KihuKih0LTEpK3QpfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oT28pLFlvPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4tLXQqdCooKHQrMSkqbit0KSsxfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0oT28pLExvPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigobisxKSp0LW4pOih0LT0yKSp0KigobisxKSp0K24pKzIpLzJ9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfShPbyksam89MipNYXRoLlBJLEhvPWZ1bmN0aW9uIHQobixlKXt2YXIgcj1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPWpvKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuKlNvKC0gLS10KSpNYXRoLnNpbigoci10KS9lKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKmpvKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksWG89ZnVuY3Rpb24gdChuLGUpe3ZhciByPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89am8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtbipTbyh0PSt0KSpNYXRoLnNpbigodCtyKS9lKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKmpvKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksR289ZnVuY3Rpb24gdChuLGUpe3ZhciByPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89am8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP24qU28oLXQpKk1hdGguc2luKChyLXQpL2UpOjItbipTbyh0KSpNYXRoLnNpbigocit0KS9lKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKmpvKX0saS5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0saX0oMSwuMyksVm89e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmJvfTtmdW5jdGlvbiBXbyh0LG4pe2Zvcih2YXIgZTshKGU9dC5fX3RyYW5zaXRpb24pfHwhKGU9ZVtuXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke259IG5vdCBmb3VuZGApO3JldHVybiBlfVduLnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtHaSh0aGlzLHQpfSkpfSxXbi5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgbixlO3QgaW5zdGFuY2VvZiBwbz8obj10Ll9pZCx0PXQuX25hbWUpOihuPXlvKCksKGU9Vm8pLnRpbWU9QWkoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhLHU9cltvXSxjPXUubGVuZ3RoLGY9MDtmPGM7KytmKShhPXVbZl0pJiZMaShhLHQsbixmLHUsZXx8V28oYSxuKSk7cmV0dXJuIG5ldyBwbyhyLHRoaXMuX3BhcmVudHMsdCxuKX07dmFyIFpvPVtudWxsXTt2YXIgS289dD0+KCk9PnQ7ZnVuY3Rpb24gUW8odCx7c291cmNlRXZlbnQ6bix0YXJnZXQ6ZSxzZWxlY3Rpb246cixtb2RlOmksZGlzcGF0Y2g6b30pe09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3R5cGU6e3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNvdXJjZUV2ZW50Ont2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0YXJnZXQ6e3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNlbGVjdGlvbjp7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sbW9kZTp7dmFsdWU6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sXzp7dmFsdWU6b319KX1mdW5jdGlvbiBKbyh0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgdGE9e25hbWU6ImRyYWcifSxuYT17bmFtZToic3BhY2UifSxlYT17bmFtZToiaGFuZGxlIn0scmE9e25hbWU6ImNlbnRlciJ9O2NvbnN0e2FiczppYSxtYXg6b2EsbWluOmFhfT1NYXRoO2Z1bmN0aW9uIHVhKHQpe3JldHVyblsrdFswXSwrdFsxXV19ZnVuY3Rpb24gY2EodCl7cmV0dXJuW3VhKHRbMF0pLHVhKHRbMV0pXX12YXIgZmE9e25hbWU6IngiLGhhbmRsZXM6WyJ3IiwiZSJdLm1hcCh2YSksaW5wdXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD9udWxsOltbK3RbMF0sblswXVsxXV0sWyt0WzFdLG5bMV1bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX19LHNhPXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAodmEpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PXQ/bnVsbDpbW25bMF1bMF0sK3RbMF1dLFtuWzFdWzBdLCt0WzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19fSxsYT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAodmEpLGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P251bGw6Y2EodCl9LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LGhhPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxkYT17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0scGE9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LGdhPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHlhPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9O2Z1bmN0aW9uIHZhKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIF9hKHQpe3JldHVybiF0LmN0cmxLZXkmJiF0LmJ1dHRvbn1mdW5jdGlvbiBiYSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIG1hKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHhhKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gd2EodCl7dmFyIG4sZT1iYSxyPV9hLGk9bWEsbz0hMCxhPSR0KCJzdGFydCIsImJydXNoIiwiZW5kIiksdT02O2Z1bmN0aW9uIGMobil7dmFyIGU9bi5wcm9wZXJ0eSgiX19icnVzaCIsZykuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW3ZhKCJvdmVybGF5IildKTtlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGhhLm92ZXJsYXkpLm1lcmdlKGUpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9eGEodGhpcykuZXh0ZW50O1puKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxuLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW3ZhKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGhhLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciByPW4uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBoYVt0LnR5cGVdfSkpLG4uZWFjaChmKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsaCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixoKS5vbigidG91Y2htb3ZlLmJydXNoIixkKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHApLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBmKCl7dmFyIHQ9Wm4odGhpcyksbj14YSh0aGlzKS5zZWxlY3Rpb247bj8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsblswXVswXSkuYXR0cigieSIsblswXVsxXSkuYXR0cigid2lkdGgiLG5bMV1bMF0tblswXVswXSkuYXR0cigiaGVpZ2h0IixuWzFdWzFdLW5bMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9uWzFdWzBdLXUvMjpuWzBdWzBdLXUvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP25bMV1bMV0tdS8yOm5bMF1bMV0tdS8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/blsxXVswXS1uWzBdWzBdK3U6dX0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9uWzFdWzFdLW5bMF1bMV0rdTp1fSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gcyh0LG4sZSl7dmFyIHI9dC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIXJ8fGUmJnIuY2xlYW4/bmV3IGwodCxuLGUpOnJ9ZnVuY3Rpb24gbCh0LG4sZSl7dGhpcy50aGF0PXQsdGhpcy5hcmdzPW4sdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPWV9ZnVuY3Rpb24gaChlKXtpZigoIW58fGUudG91Y2hlcykmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgaSxhLHUsYyxsLGgsZCxwLGcseSx2LF89dGhpcyxiPWUudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsbT0ic2VsZWN0aW9uIj09PShvJiZlLm1ldGFLZXk/Yj0ib3ZlcmxheSI6Yik/dGE6byYmZS5hbHRLZXk/cmE6ZWEseD10PT09c2E/bnVsbDpnYVtiXSx3PXQ9PT1mYT9udWxsOnlhW2JdLE09eGEoXyksVD1NLmV4dGVudCxBPU0uc2VsZWN0aW9uLFM9VFswXVswXSxFPVRbMF1bMV0sTj1UWzFdWzBdLGs9VFsxXVsxXSxDPTAsUD0wLHo9eCYmdyYmbyYmZS5zaGlmdEtleSwkPUFycmF5LmZyb20oZS50b3VjaGVzfHxbZV0sKHQ9Pntjb25zdCBuPXQuaWRlbnRpZmllcjtyZXR1cm4odD1uZSh0LF8pKS5wb2ludDA9dC5zbGljZSgpLHQuaWRlbnRpZmllcj1uLHR9KSk7R2koXyk7dmFyIEQ9cyhfLGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTtpZigib3ZlcmxheSI9PT1iKXtBJiYoZz0hMCk7Y29uc3Qgbj1bJFswXSwkWzFdfHwkWzBdXTtNLnNlbGVjdGlvbj1BPVtbaT10PT09c2E/UzphYShuWzBdWzBdLG5bMV1bMF0pLHU9dD09PWZhP0U6YWEoblswXVsxXSxuWzFdWzFdKV0sW2w9dD09PXNhP046b2EoblswXVswXSxuWzFdWzBdKSxkPXQ9PT1mYT9rOm9hKG5bMF1bMV0sblsxXVsxXSldXSwkLmxlbmd0aD4xJiZJKGUpfWVsc2UgaT1BWzBdWzBdLHU9QVswXVsxXSxsPUFbMV1bMF0sZD1BWzFdWzFdO2E9aSxjPXUsaD1sLHA9ZDt2YXIgUj1abihfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxGPVIuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsaGFbYl0pO2lmKGUudG91Y2hlcylELm1vdmVkPVUsRC5lbmRlZD1PO2Vsc2V7dmFyIHE9Wm4oZS52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixVLCEwKS5vbigibW91c2V1cC5icnVzaCIsTywhMCk7byYmcS5vbigia2V5ZG93bi5icnVzaCIsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgMTY6ej14JiZ3O2JyZWFrO2Nhc2UgMTg6bT09PWVhJiYoeCYmKGw9aC1DKngsaT1hK0MqeCksdyYmKGQ9cC1QKncsdT1jK1AqdyksbT1yYSxJKHQpKTticmVhaztjYXNlIDMyOm0hPT1lYSYmbSE9PXJhfHwoeDwwP2w9aC1DOng+MCYmKGk9YS1DKSx3PDA/ZD1wLVA6dz4wJiYodT1jLVApLG09bmEsRi5hdHRyKCJjdXJzb3IiLGhhLnNlbGVjdGlvbiksSSh0KSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59Sm8odCl9KSwhMCkub24oImtleXVwLmJydXNoIiwoZnVuY3Rpb24odCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSAxNjp6JiYoeT12PXo9ITEsSSh0KSk7YnJlYWs7Y2FzZSAxODptPT09cmEmJih4PDA/bD1oOng+MCYmKGk9YSksdzwwP2Q9cDp3PjAmJih1PWMpLG09ZWEsSSh0KSk7YnJlYWs7Y2FzZSAzMjptPT09bmEmJih0LmFsdEtleT8oeCYmKGw9aC1DKngsaT1hK0MqeCksdyYmKGQ9cC1QKncsdT1jK1AqdyksbT1yYSk6KHg8MD9sPWg6eD4wJiYoaT1hKSx3PDA/ZD1wOnc+MCYmKHU9YyksbT1lYSksRi5hdHRyKCJjdXJzb3IiLGhhW2JdKSxJKHQpKTticmVhaztkZWZhdWx0OnJldHVybn1Kbyh0KX0pLCEwKSxhZShlLnZpZXcpfWYuY2FsbChfKSxELnN0YXJ0KGUsbS5uYW1lKX1mdW5jdGlvbiBVKHQpe2Zvcihjb25zdCBuIG9mIHQuY2hhbmdlZFRvdWNoZXN8fFt0XSlmb3IoY29uc3QgdCBvZiAkKXQuaWRlbnRpZmllcj09PW4uaWRlbnRpZmllciYmKHQuY3VyPW5lKG4sXykpO2lmKHomJiF5JiYhdiYmMT09PSQubGVuZ3RoKXtjb25zdCB0PSRbMF07aWEodC5jdXJbMF0tdFswXSk+aWEodC5jdXJbMV0tdFsxXSk/dj0hMDp5PSEwfWZvcihjb25zdCB0IG9mICQpdC5jdXImJih0WzBdPXQuY3VyWzBdLHRbMV09dC5jdXJbMV0pO2c9ITAsSm8odCksSSh0KX1mdW5jdGlvbiBJKHQpe2NvbnN0IG49JFswXSxlPW4ucG9pbnQwO3ZhciByO3N3aXRjaChDPW5bMF0tZVswXSxQPW5bMV0tZVsxXSxtKXtjYXNlIG5hOmNhc2UgdGE6eCYmKEM9b2EoUy1pLGFhKE4tbCxDKSksYT1pK0MsaD1sK0MpLHcmJihQPW9hKEUtdSxhYShrLWQsUCkpLGM9dStQLHA9ZCtQKTticmVhaztjYXNlIGVhOiRbMV0/KHgmJihhPW9hKFMsYWEoTiwkWzBdWzBdKSksaD1vYShTLGFhKE4sJFsxXVswXSkpLHg9MSksdyYmKGM9b2EoRSxhYShrLCRbMF1bMV0pKSxwPW9hKEUsYWEoaywkWzFdWzFdKSksdz0xKSk6KHg8MD8oQz1vYShTLWksYWEoTi1pLEMpKSxhPWkrQyxoPWwpOng+MCYmKEM9b2EoUy1sLGFhKE4tbCxDKSksYT1pLGg9bCtDKSx3PDA/KFA9b2EoRS11LGFhKGstdSxQKSksYz11K1AscD1kKTp3PjAmJihQPW9hKEUtZCxhYShrLWQsUCkpLGM9dSxwPWQrUCkpO2JyZWFrO2Nhc2UgcmE6eCYmKGE9b2EoUyxhYShOLGktQyp4KSksaD1vYShTLGFhKE4sbCtDKngpKSksdyYmKGM9b2EoRSxhYShrLHUtUCp3KSkscD1vYShFLGFhKGssZCtQKncpKSl9aDxhJiYoeCo9LTEscj1pLGk9bCxsPXIscj1hLGE9aCxoPXIsYiBpbiBkYSYmRi5hdHRyKCJjdXJzb3IiLGhhW2I9ZGFbYl1dKSkscDxjJiYodyo9LTEscj11LHU9ZCxkPXIscj1jLGM9cCxwPXIsYiBpbiBwYSYmRi5hdHRyKCJjdXJzb3IiLGhhW2I9cGFbYl1dKSksTS5zZWxlY3Rpb24mJihBPU0uc2VsZWN0aW9uKSx5JiYoYT1BWzBdWzBdLGg9QVsxXVswXSksdiYmKGM9QVswXVsxXSxwPUFbMV1bMV0pLEFbMF1bMF09PT1hJiZBWzBdWzFdPT09YyYmQVsxXVswXT09PWgmJkFbMV1bMV09PT1wfHwoTS5zZWxlY3Rpb249W1thLGNdLFtoLHBdXSxmLmNhbGwoXyksRC5icnVzaCh0LG0ubmFtZSkpfWZ1bmN0aW9uIE8odCl7aWYoZnVuY3Rpb24odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0odCksdC50b3VjaGVzKXtpZih0LnRvdWNoZXMubGVuZ3RoKXJldHVybjtuJiZjbGVhclRpbWVvdXQobiksbj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe249bnVsbH0pLDUwMCl9ZWxzZSB1ZSh0LnZpZXcsZykscS5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7Ui5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLEYuYXR0cigiY3Vyc29yIixoYS5vdmVybGF5KSxNLnNlbGVjdGlvbiYmKEE9TS5zZWxlY3Rpb24pLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdWzBdPT09dFsxXVswXXx8dFswXVsxXT09PXRbMV1bMV19KEEpJiYoTS5zZWxlY3Rpb249bnVsbCxmLmNhbGwoXykpLEQuZW5kKHQsbS5uYW1lKX19ZnVuY3Rpb24gZCh0KXtzKHRoaXMsYXJndW1lbnRzKS5tb3ZlZCh0KX1mdW5jdGlvbiBwKHQpe3ModGhpcyxhcmd1bWVudHMpLmVuZGVkKHQpfWZ1bmN0aW9uIGcoKXt2YXIgbj10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIG4uZXh0ZW50PWNhKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxuLmRpbT10LG59cmV0dXJuIGMubW92ZT1mdW5jdGlvbihuLGUscil7bi50d2Vlbj9uLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKHQpe3ModGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQodCl9KSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLChmdW5jdGlvbih0KXtzKHRoaXMsYXJndW1lbnRzKS5lbmQodCl9KSkudHdlZW4oImJydXNoIiwoZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9bi5fX2JydXNoLGk9cyhuLGFyZ3VtZW50cyksbz1yLnNlbGVjdGlvbixhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSxyLmV4dGVudCksdT1HcihvLGEpO2Z1bmN0aW9uIGModCl7ci5zZWxlY3Rpb249MT09PXQmJm51bGw9PT1hP251bGw6dSh0KSxmLmNhbGwobiksaS5icnVzaCgpfXJldHVybiBudWxsIT09byYmbnVsbCE9PWE/YzpjKDEpfSkpOm4uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj10aGlzLGk9YXJndW1lbnRzLG89bi5fX2JydXNoLGE9dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KG4saSk6ZSxvLmV4dGVudCksdT1zKG4saSkuYmVmb3Jlc3RhcnQoKTtHaShuKSxvLnNlbGVjdGlvbj1udWxsPT09YT9udWxsOmEsZi5jYWxsKG4pLHUuc3RhcnQocikuYnJ1c2gocikuZW5kKHIpfSkpfSxjLmNsZWFyPWZ1bmN0aW9uKHQsbil7Yy5tb3ZlKHQsbnVsbCxuKX0sbC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiLHQsbikpOnRoaXMuZW1pdCgiYnJ1c2giLHQpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giLHQsbiksdGhpc30sZW5kOmZ1bmN0aW9uKHQsbil7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIix0LG4pKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKG4sZSxyKXt2YXIgaT1abih0aGlzLnRoYXQpLmRhdHVtKCk7YS5jYWxsKG4sdGhpcy50aGF0LG5ldyBRbyhuLHtzb3VyY2VFdmVudDplLHRhcmdldDpjLHNlbGVjdGlvbjp0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbiksbW9kZTpyLGRpc3BhdGNoOmF9KSxpKX19LGMuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S28oY2EodCkpLGMpOmV9LGMuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S28oISF0KSxjKTpyfSxjLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OktvKCEhdCksYyk6aX0sYy5oYW5kbGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGMpOnV9LGMua2V5TW9kaWZpZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxjKTpvfSxjLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9YS5vbi5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1hP2M6dH0sY312YXIgTWE9TWF0aC5hYnMsVGE9TWF0aC5jb3MsQWE9TWF0aC5zaW4sU2E9TWF0aC5QSSxFYT1TYS8yLE5hPTIqU2Esa2E9TWF0aC5tYXgsQ2E9MWUtMTI7ZnVuY3Rpb24gUGEodCxuKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOm4tdH0sKChuLGUpPT50K2UpKX1mdW5jdGlvbiB6YSh0LG4pe3ZhciBlPTAscj1udWxsLGk9bnVsbCxvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgdSxjPWEubGVuZ3RoLGY9bmV3IEFycmF5KGMpLHM9UGEoMCxjKSxsPW5ldyBBcnJheShjKmMpLGg9bmV3IEFycmF5KGMpLGQ9MDthPUZsb2F0NjRBcnJheS5mcm9tKHtsZW5ndGg6YypjfSxuPyh0LG4pPT5hW24lY11bbi9jfDBdOih0LG4pPT5hW24vY3wwXVtuJWNdKTtmb3IobGV0IG49MDtuPGM7KytuKXtsZXQgZT0wO2ZvcihsZXQgcj0wO3I8YzsrK3IpZSs9YVtuKmMrcl0rdCphW3IqYytuXTtkKz1mW25dPWV9dT0oZD1rYSgwLE5hLWUqYykvZCk/ZTpOYS9jO3tsZXQgbj0wO3ImJnMuc29ydCgoKHQsbik9PnIoZlt0XSxmW25dKSkpO2Zvcihjb25zdCBlIG9mIHMpe2NvbnN0IHI9bjtpZih0KXtjb25zdCB0PVBhKDErfmMsYykuZmlsdGVyKCh0PT50PDA/YVt+dCpjK2VdOmFbZSpjK3RdKSk7aSYmdC5zb3J0KCgodCxuKT0+aSh0PDA/LWFbfnQqYytlXTphW2UqYyt0XSxuPDA/LWFbfm4qYytlXTphW2UqYytuXSkpKTtmb3IoY29uc3QgciBvZiB0KWlmKHI8MCl7KGxbfnIqYytlXXx8KGxbfnIqYytlXT17c291cmNlOm51bGwsdGFyZ2V0Om51bGx9KSkudGFyZ2V0PXtpbmRleDplLHN0YXJ0QW5nbGU6bixlbmRBbmdsZTpuKz1hW35yKmMrZV0qZCx2YWx1ZTphW35yKmMrZV19fWVsc2V7KGxbZSpjK3JdfHwobFtlKmMrcl09e3NvdXJjZTpudWxsLHRhcmdldDpudWxsfSkpLnNvdXJjZT17aW5kZXg6ZSxzdGFydEFuZ2xlOm4sZW5kQW5nbGU6bis9YVtlKmMrcl0qZCx2YWx1ZTphW2UqYytyXX19aFtlXT17aW5kZXg6ZSxzdGFydEFuZ2xlOnIsZW5kQW5nbGU6bix2YWx1ZTpmW2VdfX1lbHNle2NvbnN0IHQ9UGEoMCxjKS5maWx0ZXIoKHQ9PmFbZSpjK3RdfHxhW3QqYytlXSkpO2kmJnQuc29ydCgoKHQsbik9PmkoYVtlKmMrdF0sYVtlKmMrbl0pKSk7Zm9yKGNvbnN0IHIgb2YgdCl7bGV0IHQ7aWYoZTxyPyh0PWxbZSpjK3JdfHwobFtlKmMrcl09e3NvdXJjZTpudWxsLHRhcmdldDpudWxsfSksdC5zb3VyY2U9e2luZGV4OmUsc3RhcnRBbmdsZTpuLGVuZEFuZ2xlOm4rPWFbZSpjK3JdKmQsdmFsdWU6YVtlKmMrcl19KToodD1sW3IqYytlXXx8KGxbcipjK2VdPXtzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbH0pLHQudGFyZ2V0PXtpbmRleDplLHN0YXJ0QW5nbGU6bixlbmRBbmdsZTpuKz1hW2UqYytyXSpkLHZhbHVlOmFbZSpjK3JdfSxlPT09ciYmKHQuc291cmNlPXQudGFyZ2V0KSksdC5zb3VyY2UmJnQudGFyZ2V0JiZ0LnNvdXJjZS52YWx1ZTx0LnRhcmdldC52YWx1ZSl7Y29uc3Qgbj10LnNvdXJjZTt0LnNvdXJjZT10LnRhcmdldCx0LnRhcmdldD1ufX1oW2VdPXtpbmRleDplLHN0YXJ0QW5nbGU6cixlbmRBbmdsZTpuLHZhbHVlOmZbZV19fW4rPXV9fXJldHVybihsPU9iamVjdC52YWx1ZXMobCkpLmdyb3Vwcz1oLG8/bC5zb3J0KG8pOmx9cmV0dXJuIGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9a2EoMCx0KSxhKTplfSxhLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxhKTpyfSxhLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxhKTppfSxhLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz1udWxsOihuPXQsbz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKX0pLl89dCxhKTpvJiZvLl87dmFyIG59LGF9Y29uc3QgJGE9TWF0aC5QSSxEYT0yKiRhLFJhPTFlLTYsRmE9RGEtUmE7ZnVuY3Rpb24gcWEodCl7dGhpcy5fKz10WzBdO2ZvcihsZXQgbj0xLGU9dC5sZW5ndGg7bjxlOysrbil0aGlzLl8rPWFyZ3VtZW50c1tuXSt0W25dfWxldCBVYT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09dD9xYTpmdW5jdGlvbih0KXtsZXQgbj1NYXRoLmZsb29yKHQpO2lmKCEobj49MCkpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt0fWApO2lmKG4+MTUpcmV0dXJuIHFhO2NvbnN0IGU9MTAqKm47cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMuXys9dFswXTtmb3IobGV0IG49MSxyPXQubGVuZ3RoO248cjsrK24pdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1tuXSplKS9lK3Rbbl19fSh0KX1tb3ZlVG8odCxuKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K3R9LCR7dGhpcy5feTA9dGhpcy5feTE9K259YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyh0LG4pe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rdH0sJHt0aGlzLl95MT0rbn1gfXF1YWRyYXRpY0N1cnZlVG8odCxuLGUscil7dGhpcy5fYXBwZW5kYFEkeyt0fSwkeytufSwke3RoaXMuX3gxPStlfSwke3RoaXMuX3kxPStyfWB9YmV6aWVyQ3VydmVUbyh0LG4sZSxyLGksbyl7dGhpcy5fYXBwZW5kYEMkeyt0fSwkeytufSwkeytlfSwkeytyfSwke3RoaXMuX3gxPStpfSwke3RoaXMuX3kxPStvfWB9YXJjVG8odCxuLGUscixpKXtpZih0PSt0LG49K24sZT0rZSxyPStyLChpPStpKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2l9YCk7bGV0IG89dGhpcy5feDEsYT10aGlzLl95MSx1PWUtdCxjPXItbixmPW8tdCxzPWEtbixsPWYqZitzKnM7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT10fSwke3RoaXMuX3kxPW59YDtlbHNlIGlmKGw+UmEpaWYoTWF0aC5hYnMocyp1LWMqZik+UmEmJmkpe2xldCBoPWUtbyxkPXItYSxwPXUqdStjKmMsZz1oKmgrZCpkLHk9TWF0aC5zcXJ0KHApLHY9TWF0aC5zcXJ0KGwpLF89aSpNYXRoLnRhbigoJGEtTWF0aC5hY29zKChwK2wtZykvKDIqeSp2KSkpLzIpLGI9Xy92LG09Xy95O01hdGguYWJzKGItMSk+UmEmJnRoaXMuX2FwcGVuZGBMJHt0K2IqZn0sJHtuK2Iqc31gLHRoaXMuX2FwcGVuZGBBJHtpfSwke2l9LDAsMCwkeysocypoPmYqZCl9LCR7dGhpcy5feDE9dCttKnV9LCR7dGhpcy5feTE9bittKmN9YH1lbHNlIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT10fSwke3RoaXMuX3kxPW59YDtlbHNlO31hcmModCxuLGUscixpLG8pe2lmKHQ9K3Qsbj0rbixvPSEhbywoZT0rZSk8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtlfWApO2xldCBhPWUqTWF0aC5jb3MociksdT1lKk1hdGguc2luKHIpLGM9dCthLGY9bit1LHM9MV5vLGw9bz9yLWk6aS1yO251bGw9PT10aGlzLl94MT90aGlzLl9hcHBlbmRgTSR7Y30sJHtmfWA6KE1hdGguYWJzKHRoaXMuX3gxLWMpPlJhfHxNYXRoLmFicyh0aGlzLl95MS1mKT5SYSkmJnRoaXMuX2FwcGVuZGBMJHtjfSwke2Z9YCxlJiYobDwwJiYobD1sJURhK0RhKSxsPkZhP3RoaXMuX2FwcGVuZGBBJHtlfSwke2V9LDAsMSwke3N9LCR7dC1hfSwke24tdX1BJHtlfSwke2V9LDAsMSwke3N9LCR7dGhpcy5feDE9Y30sJHt0aGlzLl95MT1mfWA6bD5SYSYmdGhpcy5fYXBwZW5kYEEke2V9LCR7ZX0sMCwkeysobD49JGEpfSwke3N9LCR7dGhpcy5feDE9dCtlKk1hdGguY29zKGkpfSwke3RoaXMuX3kxPW4rZSpNYXRoLnNpbihpKX1gKX1yZWN0KHQsbixlLHIpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rdH0sJHt0aGlzLl95MD10aGlzLl95MT0rbn1oJHtlPStlfXYkeytyfWgkey1lfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319O2Z1bmN0aW9uIElhKCl7cmV0dXJuIG5ldyBVYX1JYS5wcm90b3R5cGU9VWEucHJvdG90eXBlO3ZhciBPYT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gQmEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIFlhKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBMYSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gamEodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIEhhKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gWGEodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gR2EoKXtyZXR1cm4gMH1mdW5jdGlvbiBWYSgpe3JldHVybiAxMH1mdW5jdGlvbiBXYSh0KXt2YXIgbj1ZYSxlPUxhLHI9amEsaT1qYSxvPUhhLGE9WGEsdT1HYSxjPW51bGw7ZnVuY3Rpb24gZigpe3ZhciBmLHM9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsZD1PYS5jYWxsKGFyZ3VtZW50cykscD0rci5hcHBseSh0aGlzLChkWzBdPXMsZCkpLGc9by5hcHBseSh0aGlzLGQpLUVhLHk9YS5hcHBseSh0aGlzLGQpLUVhLHY9K2kuYXBwbHkodGhpcywoZFswXT1sLGQpKSxfPW8uYXBwbHkodGhpcyxkKS1FYSxiPWEuYXBwbHkodGhpcyxkKS1FYTtpZihjfHwoYz1mPUlhKCkpLGg+Q2EmJihNYSh5LWcpPjIqaCtDYT95Pmc/KGcrPWgseS09aCk6KGctPWgseSs9aCk6Zz15PShnK3kpLzIsTWEoYi1fKT4yKmgrQ2E/Yj5fPyhfKz1oLGItPWgpOihfLT1oLGIrPWgpOl89Yj0oXytiKS8yKSxjLm1vdmVUbyhwKlRhKGcpLHAqQWEoZykpLGMuYXJjKDAsMCxwLGcseSksZyE9PV98fHkhPT1iKWlmKHQpe3ZhciBtPXYtK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHg9KF8rYikvMjtjLnF1YWRyYXRpY0N1cnZlVG8oMCwwLG0qVGEoXyksbSpBYShfKSksYy5saW5lVG8odipUYSh4KSx2KkFhKHgpKSxjLmxpbmVUbyhtKlRhKGIpLG0qQWEoYikpfWVsc2UgYy5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCx2KlRhKF8pLHYqQWEoXykpLGMuYXJjKDAsMCx2LF8sYik7aWYoYy5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwKlRhKGcpLHAqQWEoZykpLGMuY2xvc2VQYXRoKCksZilyZXR1cm4gYz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIHQmJihmLmhlYWRSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpCYSgrbiksZik6dH0pLGYucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCYSgrdCksZik6cn0sZi5zb3VyY2VSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCYSgrdCksZik6cn0sZi50YXJnZXRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCYSgrdCksZik6aX0sZi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QmEoK3QpLGYpOm99LGYuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpCYSgrdCksZik6YX0sZi5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkJhKCt0KSxmKTp1fSxmLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGYpOm59LGYudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsZik6ZX0sZi5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PXQ/bnVsbDp0LGYpOmN9LGZ9dmFyIFphPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBLYSh0LG4pe3JldHVybiB0LW59dmFyIFFhPXQ9PigpPT50O2Z1bmN0aW9uIEphKHQsbil7Zm9yKHZhciBlLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoZT10dSh0LG5bcl0pKXJldHVybiBlO3JldHVybiAwfWZ1bmN0aW9uIHR1KHQsbil7Zm9yKHZhciBlPW5bMF0scj1uWzFdLGk9LTEsbz0wLGE9dC5sZW5ndGgsdT1hLTE7bzxhO3U9bysrKXt2YXIgYz10W29dLGY9Y1swXSxzPWNbMV0sbD10W3VdLGg9bFswXSxkPWxbMV07aWYobnUoYyxsLG4pKXJldHVybiAwO3M+ciE9ZD5yJiZlPChoLWYpKihyLXMpLyhkLXMpK2YmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBudSh0LG4sZSl7dmFyIHIsaSxvLGE7cmV0dXJuIGZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oblswXS10WzBdKSooZVsxXS10WzFdKT09KGVbMF0tdFswXSkqKG5bMV0tdFsxXSl9KHQsbixlKSYmKGk9dFtyPSsodFswXT09PW5bMF0pXSxvPWVbcl0sYT1uW3JdLGk8PW8mJm88PWF8fGE8PW8mJm88PWkpfWZ1bmN0aW9uIGV1KCl7fXZhciBydT1bW10sW1tbMSwxLjVdLFsuNSwxXV1dLFtbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsuNSwxXV1dLFtbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWy41LDFdXSxbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLC41XSxbMSwxLjVdXV0sW1tbMSwuNV0sWy41LDFdXV0sW1tbLjUsMV0sWzEsLjVdXV0sW1tbMSwxLjVdLFsxLC41XV1dLFtbWy41LDFdLFsxLC41XV0sW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbMSwuNV1dXSxbW1suNSwxXSxbMS41LDFdXV0sW1tbMSwxLjVdLFsxLjUsMV1dXSxbW1suNSwxXSxbMSwxLjVdXV0sW11dO2Z1bmN0aW9uIGl1KCl7dmFyIHQ9MSxuPTEsZT1LLHI9dTtmdW5jdGlvbiBpKHQpe3ZhciBuPWUodCk7aWYoQXJyYXkuaXNBcnJheShuKSluPW4uc2xpY2UoKS5zb3J0KEthKTtlbHNle2NvbnN0IGU9TSh0LG91KTtmb3Iobj1HKC4uLlooZVswXSxlWzFdLG4pLG4pO25bbi5sZW5ndGgtMV0+PWVbMV07KW4ucG9wKCk7Zm9yKDtuWzFdPGVbMF07KW4uc2hpZnQoKX1yZXR1cm4gbi5tYXAoKG49Pm8odCxuKSkpfWZ1bmN0aW9uIG8oZSxpKXtjb25zdCBvPW51bGw9PWk/TmFOOitpO2lmKGlzTmFOKG8pKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCB2YWx1ZTogJHtpfWApO3ZhciB1PVtdLGM9W107cmV0dXJuIGZ1bmN0aW9uKGUscixpKXt2YXIgbyx1LGMsZixzLGwsaD1uZXcgQXJyYXksZD1uZXcgQXJyYXk7bz11PS0xLGY9YXUoZVswXSxyKSxydVtmPDwxXS5mb3JFYWNoKHApO2Zvcig7KytvPHQtMTspYz1mLGY9YXUoZVtvKzFdLHIpLHJ1W2N8Zjw8MV0uZm9yRWFjaChwKTtydVtmfDBdLmZvckVhY2gocCk7Zm9yKDsrK3U8bi0xOyl7Zm9yKG89LTEsZj1hdShlW3UqdCt0XSxyKSxzPWF1KGVbdSp0XSxyKSxydVtmPDwxfHM8PDJdLmZvckVhY2gocCk7KytvPHQtMTspYz1mLGY9YXUoZVt1KnQrdCtvKzFdLHIpLGw9cyxzPWF1KGVbdSp0K28rMV0scikscnVbY3xmPDwxfHM8PDJ8bDw8M10uZm9yRWFjaChwKTtydVtmfHM8PDNdLmZvckVhY2gocCl9bz0tMSxzPWVbdSp0XT49cixydVtzPDwyXS5mb3JFYWNoKHApO2Zvcig7KytvPHQtMTspbD1zLHM9YXUoZVt1KnQrbysxXSxyKSxydVtzPDwyfGw8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgbixlLHI9W3RbMF1bMF0rbyx0WzBdWzFdK3VdLGM9W3RbMV1bMF0rbyx0WzFdWzFdK3VdLGY9YShyKSxzPWEoYyk7KG49ZFtmXSk/KGU9aFtzXSk/KGRlbGV0ZSBkW24uZW5kXSxkZWxldGUgaFtlLnN0YXJ0XSxuPT09ZT8obi5yaW5nLnB1c2goYyksaShuLnJpbmcpKTpoW24uc3RhcnRdPWRbZS5lbmRdPXtzdGFydDpuLnN0YXJ0LGVuZDplLmVuZCxyaW5nOm4ucmluZy5jb25jYXQoZS5yaW5nKX0pOihkZWxldGUgZFtuLmVuZF0sbi5yaW5nLnB1c2goYyksZFtuLmVuZD1zXT1uKToobj1oW3NdKT8oZT1kW2ZdKT8oZGVsZXRlIGhbbi5zdGFydF0sZGVsZXRlIGRbZS5lbmRdLG49PT1lPyhuLnJpbmcucHVzaChjKSxpKG4ucmluZykpOmhbZS5zdGFydF09ZFtuLmVuZF09e3N0YXJ0OmUuc3RhcnQsZW5kOm4uZW5kLHJpbmc6ZS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBoW24uc3RhcnRdLG4ucmluZy51bnNoaWZ0KHIpLGhbbi5zdGFydD1mXT1uKTpoW2ZdPWRbc109e3N0YXJ0OmYsZW5kOnMscmluZzpbcixjXX19cnVbczw8M10uZm9yRWFjaChwKX0oZSxvLChmdW5jdGlvbih0KXtyKHQsZSxvKSxmdW5jdGlvbih0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoLHI9dFtlLTFdWzFdKnRbMF1bMF0tdFtlLTFdWzBdKnRbMF1bMV07KytuPGU7KXIrPXRbbi0xXVsxXSp0W25dWzBdLXRbbi0xXVswXSp0W25dWzFdO3JldHVybiByfSh0KT4wP3UucHVzaChbdF0pOmMucHVzaCh0KX0pKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPTAscj11Lmxlbmd0aDtlPHI7KytlKWlmKC0xIT09SmEoKG49dVtlXSlbMF0sdCkpcmV0dXJuIHZvaWQgbi5wdXNoKHQpfSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6dX19ZnVuY3Rpb24gYShuKXtyZXR1cm4gMipuWzBdK25bMV0qKHQrMSkqNH1mdW5jdGlvbiB1KGUscixpKXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBvPWVbMF0sYT1lWzFdLHU9MHxvLGM9MHxhLGY9dXUocltjKnQrdV0pO28+MCYmbzx0JiZ1PT09byYmKGVbMF09Y3Uobyx1dShyW2MqdCt1LTFdKSxmLGkpKSxhPjAmJmE8biYmYz09PWEmJihlWzFdPWN1KGEsdXUoclsoYy0xKSp0K3VdKSxmLGkpKX0pKX1yZXR1cm4gaS5jb250b3VyPW8saS5zaXplPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVyblt0LG5dO3ZhciByPU1hdGguZmxvb3IoZVswXSksbz1NYXRoLmZsb29yKGVbMV0pO2lmKCEocj49MCYmbz49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1yLG49byxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP1FhKFphLmNhbGwodCkpOlFhKHQpLGkpOmV9LGkuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQ/dTpldSxpKTpyPT09dX0saX1mdW5jdGlvbiBvdSh0KXtyZXR1cm4gaXNGaW5pdGUodCk/dDpOYU59ZnVuY3Rpb24gYXUodCxuKXtyZXR1cm4gbnVsbCE9dCYmK3Q+PW59ZnVuY3Rpb24gdXUodCl7cmV0dXJuIG51bGw9PXR8fGlzTmFOKHQ9K3QpPy0xLzA6dH1mdW5jdGlvbiBjdSh0LG4sZSxyKXtjb25zdCBpPXItbixvPWUtbixhPWlzRmluaXRlKGkpfHxpc0Zpbml0ZShvKT9pL286TWF0aC5zaWduKGkpL01hdGguc2lnbihvKTtyZXR1cm4gaXNOYU4oYSk/dDp0K2EtLjV9ZnVuY3Rpb24gZnUodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gc3UodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbHUoKXtyZXR1cm4gMX1jb25zdCBodT0xMzQyMTc3MjksZHU9MzMzMDY2OTA3Mzg3NTQ3MDZlLTMyO2Z1bmN0aW9uIHB1KHQsbixlLHIsaSl7bGV0IG8sYSx1LGMsZj1uWzBdLHM9clswXSxsPTAsaD0wO3M+Zj09cz4tZj8obz1mLGY9blsrK2xdKToobz1zLHM9clsrK2hdKTtsZXQgZD0wO2lmKGw8dCYmaDxlKWZvcihzPmY9PXM+LWY/KGE9ZitvLHU9by0oYS1mKSxmPW5bKytsXSk6KGE9cytvLHU9by0oYS1zKSxzPXJbKytoXSksbz1hLDAhPT11JiYoaVtkKytdPXUpO2w8dCYmaDxlOylzPmY9PXM+LWY/KGE9bytmLGM9YS1vLHU9by0oYS1jKSsoZi1jKSxmPW5bKytsXSk6KGE9bytzLGM9YS1vLHU9by0oYS1jKSsocy1jKSxzPXJbKytoXSksbz1hLDAhPT11JiYoaVtkKytdPXUpO2Zvcig7bDx0OylhPW8rZixjPWEtbyx1PW8tKGEtYykrKGYtYyksZj1uWysrbF0sbz1hLDAhPT11JiYoaVtkKytdPXUpO2Zvcig7aDxlOylhPW8rcyxjPWEtbyx1PW8tKGEtYykrKHMtYykscz1yWysraF0sbz1hLDAhPT11JiYoaVtkKytdPXUpO3JldHVybiAwPT09byYmMCE9PWR8fChpW2QrK109byksZH1mdW5jdGlvbiBndSh0KXtyZXR1cm4gbmV3IEZsb2F0NjRBcnJheSh0KX1jb25zdCB5dT0yMjIwNDQ2MDQ5MjUwMzE0NmUtMzIsdnU9MTEwOTMzNTY0Nzk2NzA0ODdlLTQ3LF91PWd1KDQpLGJ1PWd1KDgpLG11PWd1KDEyKSx4dT1ndSgxNiksd3U9Z3UoNCk7ZnVuY3Rpb24gTXUodCxuLGUscixpLG8pe2NvbnN0IGE9KG4tbykqKGUtaSksdT0odC1pKSooci1vKSxjPWEtdSxmPU1hdGguYWJzKGErdSk7cmV0dXJuIE1hdGguYWJzKGMpPj0zMzMwNjY5MDczODc1NDcxNmUtMzIqZj9jOi1mdW5jdGlvbih0LG4sZSxyLGksbyxhKXtsZXQgdSxjLGYscyxsLGgsZCxwLGcseSx2LF8sYixtLHgsdyxNLFQ7Y29uc3QgQT10LWksUz1lLWksRT1uLW8sTj1yLW87bT1BKk4saD1odSpBLGQ9aC0oaC1BKSxwPUEtZCxoPWh1Kk4sZz1oLShoLU4pLHk9Ti1nLHg9cCp5LShtLWQqZy1wKmctZCp5KSx3PUUqUyxoPWh1KkUsZD1oLShoLUUpLHA9RS1kLGg9aHUqUyxnPWgtKGgtUykseT1TLWcsTT1wKnktKHctZCpnLXAqZy1kKnkpLHY9eC1NLGw9eC12LF91WzBdPXgtKHYrbCkrKGwtTSksXz1tK3YsbD1fLW0sYj1tLShfLWwpKyh2LWwpLHY9Yi13LGw9Yi12LF91WzFdPWItKHYrbCkrKGwtdyksVD1fK3YsbD1ULV8sX3VbMl09Xy0oVC1sKSsodi1sKSxfdVszXT1UO2xldCBrPWZ1bmN0aW9uKHQsbil7bGV0IGU9blswXTtmb3IobGV0IHI9MTtyPHQ7cisrKWUrPW5bcl07cmV0dXJuIGV9KDQsX3UpLEM9eXUqYTtpZihrPj1DfHwtaz49QylyZXR1cm4gaztpZihsPXQtQSx1PXQtKEErbCkrKGwtaSksbD1lLVMsZj1lLShTK2wpKyhsLWkpLGw9bi1FLGM9bi0oRStsKSsobC1vKSxsPXItTixzPXItKE4rbCkrKGwtbyksMD09PXUmJjA9PT1jJiYwPT09ZiYmMD09PXMpcmV0dXJuIGs7aWYoQz12dSphK2R1Kk1hdGguYWJzKGspLGsrPUEqcytOKnUtKEUqZitTKmMpLGs+PUN8fC1rPj1DKXJldHVybiBrO209dSpOLGg9aHUqdSxkPWgtKGgtdSkscD11LWQsaD1odSpOLGc9aC0oaC1OKSx5PU4tZyx4PXAqeS0obS1kKmctcCpnLWQqeSksdz1jKlMsaD1odSpjLGQ9aC0oaC1jKSxwPWMtZCxoPWh1KlMsZz1oLShoLVMpLHk9Uy1nLE09cCp5LSh3LWQqZy1wKmctZCp5KSx2PXgtTSxsPXgtdix3dVswXT14LSh2K2wpKyhsLU0pLF89bSt2LGw9Xy1tLGI9bS0oXy1sKSsodi1sKSx2PWItdyxsPWItdix3dVsxXT1iLSh2K2wpKyhsLXcpLFQ9Xyt2LGw9VC1fLHd1WzJdPV8tKFQtbCkrKHYtbCksd3VbM109VDtjb25zdCBQPXB1KDQsX3UsNCx3dSxidSk7bT1BKnMsaD1odSpBLGQ9aC0oaC1BKSxwPUEtZCxoPWh1KnMsZz1oLShoLXMpLHk9cy1nLHg9cCp5LShtLWQqZy1wKmctZCp5KSx3PUUqZixoPWh1KkUsZD1oLShoLUUpLHA9RS1kLGg9aHUqZixnPWgtKGgtZikseT1mLWcsTT1wKnktKHctZCpnLXAqZy1kKnkpLHY9eC1NLGw9eC12LHd1WzBdPXgtKHYrbCkrKGwtTSksXz1tK3YsbD1fLW0sYj1tLShfLWwpKyh2LWwpLHY9Yi13LGw9Yi12LHd1WzFdPWItKHYrbCkrKGwtdyksVD1fK3YsbD1ULV8sd3VbMl09Xy0oVC1sKSsodi1sKSx3dVszXT1UO2NvbnN0IHo9cHUoUCxidSw0LHd1LG11KTttPXUqcyxoPWh1KnUsZD1oLShoLXUpLHA9dS1kLGg9aHUqcyxnPWgtKGgtcykseT1zLWcseD1wKnktKG0tZCpnLXAqZy1kKnkpLHc9YypmLGg9aHUqYyxkPWgtKGgtYykscD1jLWQsaD1odSpmLGc9aC0oaC1mKSx5PWYtZyxNPXAqeS0ody1kKmctcCpnLWQqeSksdj14LU0sbD14LXYsd3VbMF09eC0oditsKSsobC1NKSxfPW0rdixsPV8tbSxiPW0tKF8tbCkrKHYtbCksdj1iLXcsbD1iLXYsd3VbMV09Yi0oditsKSsobC13KSxUPV8rdixsPVQtXyx3dVsyXT1fLShULWwpKyh2LWwpLHd1WzNdPVQ7Y29uc3QgJD1wdSh6LG11LDQsd3UseHUpO3JldHVybiB4dVskLTFdfSh0LG4sZSxyLGksbyxmKX1jb25zdCBUdT1NYXRoLnBvdygyLC01MiksQXU9bmV3IFVpbnQzMkFycmF5KDUxMik7Y2xhc3MgU3V7c3RhdGljIGZyb20odCxuPXp1LGU9JHUpe2NvbnN0IHI9dC5sZW5ndGgsaT1uZXcgRmxvYXQ2NEFycmF5KDIqcik7Zm9yKGxldCBvPTA7bzxyO28rKyl7Y29uc3Qgcj10W29dO2lbMipvXT1uKHIpLGlbMipvKzFdPWUocil9cmV0dXJuIG5ldyBTdShpKX1jb25zdHJ1Y3Rvcih0KXtjb25zdCBuPXQubGVuZ3RoPj4xO2lmKG4+MCYmIm51bWJlciIhPXR5cGVvZiB0WzBdKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgY29vcmRzIHRvIGNvbnRhaW4gbnVtYmVycy4iKTt0aGlzLmNvb3Jkcz10O2NvbnN0IGU9TWF0aC5tYXgoMipuLTUsMCk7dGhpcy5fdHJpYW5nbGVzPW5ldyBVaW50MzJBcnJheSgzKmUpLHRoaXMuX2hhbGZlZGdlcz1uZXcgSW50MzJBcnJheSgzKmUpLHRoaXMuX2hhc2hTaXplPU1hdGguY2VpbChNYXRoLnNxcnQobikpLHRoaXMuX2h1bGxQcmV2PW5ldyBVaW50MzJBcnJheShuKSx0aGlzLl9odWxsTmV4dD1uZXcgVWludDMyQXJyYXkobiksdGhpcy5faHVsbFRyaT1uZXcgVWludDMyQXJyYXkobiksdGhpcy5faHVsbEhhc2g9bmV3IEludDMyQXJyYXkodGhpcy5faGFzaFNpemUpLHRoaXMuX2lkcz1uZXcgVWludDMyQXJyYXkobiksdGhpcy5fZGlzdHM9bmV3IEZsb2F0NjRBcnJheShuKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2NvbnN0e2Nvb3Jkczp0LF9odWxsUHJldjpuLF9odWxsTmV4dDplLF9odWxsVHJpOnIsX2h1bGxIYXNoOml9PXRoaXMsbz10Lmxlbmd0aD4+MTtsZXQgYT0xLzAsdT0xLzAsYz0tMS8wLGY9LTEvMDtmb3IobGV0IG49MDtuPG87bisrKXtjb25zdCBlPXRbMipuXSxyPXRbMipuKzFdO2U8YSYmKGE9ZSkscjx1JiYodT1yKSxlPmMmJihjPWUpLHI+ZiYmKGY9ciksdGhpcy5faWRzW25dPW59Y29uc3Qgcz0oYStjKS8yLGw9KHUrZikvMjtsZXQgaCxkLHA7Zm9yKGxldCBuPTAsZT0xLzA7bjxvO24rKyl7Y29uc3Qgcj1FdShzLGwsdFsyKm5dLHRbMipuKzFdKTtyPGUmJihoPW4sZT1yKX1jb25zdCBnPXRbMipoXSx5PXRbMipoKzFdO2ZvcihsZXQgbj0wLGU9MS8wO248bztuKyspe2lmKG49PT1oKWNvbnRpbnVlO2NvbnN0IHI9RXUoZyx5LHRbMipuXSx0WzIqbisxXSk7cjxlJiZyPjAmJihkPW4sZT1yKX1sZXQgdj10WzIqZF0sXz10WzIqZCsxXSxiPTEvMDtmb3IobGV0IG49MDtuPG87bisrKXtpZihuPT09aHx8bj09PWQpY29udGludWU7Y29uc3QgZT1rdShnLHksdixfLHRbMipuXSx0WzIqbisxXSk7ZTxiJiYocD1uLGI9ZSl9bGV0IG09dFsyKnBdLHg9dFsyKnArMV07aWYoYj09PTEvMCl7Zm9yKGxldCBuPTA7bjxvO24rKyl0aGlzLl9kaXN0c1tuXT10WzIqbl0tdFswXXx8dFsyKm4rMV0tdFsxXTtDdSh0aGlzLl9pZHMsdGhpcy5fZGlzdHMsMCxvLTEpO2NvbnN0IG49bmV3IFVpbnQzMkFycmF5KG8pO2xldCBlPTA7Zm9yKGxldCB0PTAscj0tMS8wO3Q8bzt0Kyspe2NvbnN0IGk9dGhpcy5faWRzW3RdLG89dGhpcy5fZGlzdHNbaV07bz5yJiYobltlKytdPWkscj1vKX1yZXR1cm4gdGhpcy5odWxsPW4uc3ViYXJyYXkoMCxlKSx0aGlzLnRyaWFuZ2xlcz1uZXcgVWludDMyQXJyYXkoMCksdm9pZCh0aGlzLmhhbGZlZGdlcz1uZXcgVWludDMyQXJyYXkoMCkpfWlmKE11KGcseSx2LF8sbSx4KTwwKXtjb25zdCB0PWQsbj12LGU9XztkPXAsdj1tLF89eCxwPXQsbT1uLHg9ZX1jb25zdCB3PWZ1bmN0aW9uKHQsbixlLHIsaSxvKXtjb25zdCBhPWUtdCx1PXItbixjPWktdCxmPW8tbixzPWEqYSt1KnUsbD1jKmMrZipmLGg9LjUvKGEqZi11KmMpLGQ9dCsoZipzLXUqbCkqaCxwPW4rKGEqbC1jKnMpKmg7cmV0dXJue3g6ZCx5OnB9fShnLHksdixfLG0seCk7dGhpcy5fY3g9dy54LHRoaXMuX2N5PXcueTtmb3IobGV0IG49MDtuPG87bisrKXRoaXMuX2Rpc3RzW25dPUV1KHRbMipuXSx0WzIqbisxXSx3Lngsdy55KTtDdSh0aGlzLl9pZHMsdGhpcy5fZGlzdHMsMCxvLTEpLHRoaXMuX2h1bGxTdGFydD1oO2xldCBNPTM7ZVtoXT1uW3BdPWQsZVtkXT1uW2hdPXAsZVtwXT1uW2RdPWgscltoXT0wLHJbZF09MSxyW3BdPTIsaS5maWxsKC0xKSxpW3RoaXMuX2hhc2hLZXkoZyx5KV09aCxpW3RoaXMuX2hhc2hLZXkodixfKV09ZCxpW3RoaXMuX2hhc2hLZXkobSx4KV09cCx0aGlzLnRyaWFuZ2xlc0xlbj0wLHRoaXMuX2FkZFRyaWFuZ2xlKGgsZCxwLC0xLC0xLC0xKTtmb3IobGV0IG8sYSx1PTA7dTx0aGlzLl9pZHMubGVuZ3RoO3UrKyl7Y29uc3QgYz10aGlzLl9pZHNbdV0sZj10WzIqY10scz10WzIqYysxXTtpZih1PjAmJk1hdGguYWJzKGYtbyk8PVR1JiZNYXRoLmFicyhzLWEpPD1UdSljb250aW51ZTtpZihvPWYsYT1zLGM9PT1ofHxjPT09ZHx8Yz09PXApY29udGludWU7bGV0IGw9MDtmb3IobGV0IHQ9MCxuPXRoaXMuX2hhc2hLZXkoZixzKTt0PHRoaXMuX2hhc2hTaXplJiYobD1pWyhuK3QpJXRoaXMuX2hhc2hTaXplXSwtMT09PWx8fGw9PT1lW2xdKTt0KyspO2w9bltsXTtsZXQgZyx5PWw7Zm9yKDtnPWVbeV0sTXUoZixzLHRbMip5XSx0WzIqeSsxXSx0WzIqZ10sdFsyKmcrMV0pPj0wOylpZih5PWcseT09PWwpe3k9LTE7YnJlYWt9aWYoLTE9PT15KWNvbnRpbnVlO2xldCB2PXRoaXMuX2FkZFRyaWFuZ2xlKHksYyxlW3ldLC0xLC0xLHJbeV0pO3JbY109dGhpcy5fbGVnYWxpemUodisyKSxyW3ldPXYsTSsrO2xldCBfPWVbeV07Zm9yKDtnPWVbX10sTXUoZixzLHRbMipfXSx0WzIqXysxXSx0WzIqZ10sdFsyKmcrMV0pPDA7KXY9dGhpcy5fYWRkVHJpYW5nbGUoXyxjLGcscltjXSwtMSxyW19dKSxyW2NdPXRoaXMuX2xlZ2FsaXplKHYrMiksZVtfXT1fLE0tLSxfPWc7aWYoeT09PWwpZm9yKDtnPW5beV0sTXUoZixzLHRbMipnXSx0WzIqZysxXSx0WzIqeV0sdFsyKnkrMV0pPDA7KXY9dGhpcy5fYWRkVHJpYW5nbGUoZyxjLHksLTEsclt5XSxyW2ddKSx0aGlzLl9sZWdhbGl6ZSh2KzIpLHJbZ109dixlW3ldPXksTS0tLHk9Zzt0aGlzLl9odWxsU3RhcnQ9bltjXT15LGVbeV09bltfXT1jLGVbY109XyxpW3RoaXMuX2hhc2hLZXkoZixzKV09YyxpW3RoaXMuX2hhc2hLZXkodFsyKnldLHRbMip5KzFdKV09eX10aGlzLmh1bGw9bmV3IFVpbnQzMkFycmF5KE0pO2ZvcihsZXQgdD0wLG49dGhpcy5faHVsbFN0YXJ0O3Q8TTt0KyspdGhpcy5odWxsW3RdPW4sbj1lW25dO3RoaXMudHJpYW5nbGVzPXRoaXMuX3RyaWFuZ2xlcy5zdWJhcnJheSgwLHRoaXMudHJpYW5nbGVzTGVuKSx0aGlzLmhhbGZlZGdlcz10aGlzLl9oYWxmZWRnZXMuc3ViYXJyYXkoMCx0aGlzLnRyaWFuZ2xlc0xlbil9X2hhc2hLZXkodCxuKXtyZXR1cm4gTWF0aC5mbG9vcihmdW5jdGlvbih0LG4pe2NvbnN0IGU9dC8oTWF0aC5hYnModCkrTWF0aC5hYnMobikpO3JldHVybihuPjA/My1lOjErZSkvNH0odC10aGlzLl9jeCxuLXRoaXMuX2N5KSp0aGlzLl9oYXNoU2l6ZSkldGhpcy5faGFzaFNpemV9X2xlZ2FsaXplKHQpe2NvbnN0e190cmlhbmdsZXM6bixfaGFsZmVkZ2VzOmUsY29vcmRzOnJ9PXRoaXM7bGV0IGk9MCxvPTA7Zm9yKDs7KXtjb25zdCBhPWVbdF0sdT10LXQlMztpZihvPXUrKHQrMiklMywtMT09PWEpe2lmKDA9PT1pKWJyZWFrO3Q9QXVbLS1pXTtjb250aW51ZX1jb25zdCBjPWEtYSUzLGY9dSsodCsxKSUzLHM9YysoYSsyKSUzLGw9bltvXSxoPW5bdF0sZD1uW2ZdLHA9bltzXTtpZihOdShyWzIqbF0sclsyKmwrMV0sclsyKmhdLHJbMipoKzFdLHJbMipkXSxyWzIqZCsxXSxyWzIqcF0sclsyKnArMV0pKXtuW3RdPXAsblthXT1sO2NvbnN0IHI9ZVtzXTtpZigtMT09PXIpe2xldCBuPXRoaXMuX2h1bGxTdGFydDtkb3tpZih0aGlzLl9odWxsVHJpW25dPT09cyl7dGhpcy5faHVsbFRyaVtuXT10O2JyZWFrfW49dGhpcy5faHVsbFByZXZbbl19d2hpbGUobiE9PXRoaXMuX2h1bGxTdGFydCl9dGhpcy5fbGluayh0LHIpLHRoaXMuX2xpbmsoYSxlW29dKSx0aGlzLl9saW5rKG8scyk7Y29uc3QgdT1jKyhhKzEpJTM7aTxBdS5sZW5ndGgmJihBdVtpKytdPXUpfWVsc2V7aWYoMD09PWkpYnJlYWs7dD1BdVstLWldfX1yZXR1cm4gb31fbGluayh0LG4pe3RoaXMuX2hhbGZlZGdlc1t0XT1uLC0xIT09biYmKHRoaXMuX2hhbGZlZGdlc1tuXT10KX1fYWRkVHJpYW5nbGUodCxuLGUscixpLG8pe2NvbnN0IGE9dGhpcy50cmlhbmdsZXNMZW47cmV0dXJuIHRoaXMuX3RyaWFuZ2xlc1thXT10LHRoaXMuX3RyaWFuZ2xlc1thKzFdPW4sdGhpcy5fdHJpYW5nbGVzW2ErMl09ZSx0aGlzLl9saW5rKGEsciksdGhpcy5fbGluayhhKzEsaSksdGhpcy5fbGluayhhKzIsbyksdGhpcy50cmlhbmdsZXNMZW4rPTMsYX19ZnVuY3Rpb24gRXUodCxuLGUscil7Y29uc3QgaT10LWUsbz1uLXI7cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gTnUodCxuLGUscixpLG8sYSx1KXtjb25zdCBjPXQtYSxmPW4tdSxzPWUtYSxsPXItdSxoPWktYSxkPW8tdSxwPXMqcytsKmwsZz1oKmgrZCpkO3JldHVybiBjKihsKmctcCpkKS1mKihzKmctcCpoKSsoYypjK2YqZikqKHMqZC1sKmgpPDB9ZnVuY3Rpb24ga3UodCxuLGUscixpLG8pe2NvbnN0IGE9ZS10LHU9ci1uLGM9aS10LGY9by1uLHM9YSphK3UqdSxsPWMqYytmKmYsaD0uNS8oYSpmLXUqYyksZD0oZipzLXUqbCkqaCxwPShhKmwtYypzKSpoO3JldHVybiBkKmQrcCpwfWZ1bmN0aW9uIEN1KHQsbixlLHIpe2lmKHItZTw9MjApZm9yKGxldCBpPWUrMTtpPD1yO2krKyl7Y29uc3Qgcj10W2ldLG89bltyXTtsZXQgYT1pLTE7Zm9yKDthPj1lJiZuW3RbYV1dPm87KXRbYSsxXT10W2EtLV07dFthKzFdPXJ9ZWxzZXtsZXQgaT1lKzEsbz1yO1B1KHQsZStyPj4xLGkpLG5bdFtlXV0+blt0W3JdXSYmUHUodCxlLHIpLG5bdFtpXV0+blt0W3JdXSYmUHUodCxpLHIpLG5bdFtlXV0+blt0W2ldXSYmUHUodCxlLGkpO2NvbnN0IGE9dFtpXSx1PW5bYV07Zm9yKDs7KXtkb3tpKyt9d2hpbGUoblt0W2ldXTx1KTtkb3tvLS19d2hpbGUoblt0W29dXT51KTtpZihvPGkpYnJlYWs7UHUodCxpLG8pfXRbZSsxXT10W29dLHRbb109YSxyLWkrMT49by1lPyhDdSh0LG4saSxyKSxDdSh0LG4sZSxvLTEpKTooQ3UodCxuLGUsby0xKSxDdSh0LG4saSxyKSl9fWZ1bmN0aW9uIFB1KHQsbixlKXtjb25zdCByPXRbbl07dFtuXT10W2VdLHRbZV09cn1mdW5jdGlvbiB6dSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiAkdSh0KXtyZXR1cm4gdFsxXX1jb25zdCBEdT0xZS02O2NsYXNzIFJ1e2NvbnN0cnVjdG9yKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9bW92ZVRvKHQsbil7dGhpcy5fKz1gTSR7dGhpcy5feDA9dGhpcy5feDE9K3R9LCR7dGhpcy5feTA9dGhpcy5feTE9K259YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9bGluZVRvKHQsbil7dGhpcy5fKz1gTCR7dGhpcy5feDE9K3R9LCR7dGhpcy5feTE9K259YH1hcmModCxuLGUpe2NvbnN0IHI9KHQ9K3QpKyhlPStlKSxpPW49K247aWYoZTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzIik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9YE0ke3J9LCR7aX1gOihNYXRoLmFicyh0aGlzLl94MS1yKT5EdXx8TWF0aC5hYnModGhpcy5feTEtaSk+RHUpJiYodGhpcy5fKz0iTCIrcisiLCIraSksZSYmKHRoaXMuXys9YEEke2V9LCR7ZX0sMCwxLDEsJHt0LWV9LCR7bn1BJHtlfSwke2V9LDAsMSwxLCR7dGhpcy5feDE9cn0sJHt0aGlzLl95MT1pfWApfXJlY3QodCxuLGUscil7dGhpcy5fKz1gTSR7dGhpcy5feDA9dGhpcy5feDE9K3R9LCR7dGhpcy5feTA9dGhpcy5feTE9K259aCR7K2V9diR7K3J9aCR7LWV9WmB9dmFsdWUoKXtyZXR1cm4gdGhpcy5ffHxudWxsfX1jbGFzcyBGdXtjb25zdHJ1Y3Rvcigpe3RoaXMuXz1bXX1tb3ZlVG8odCxuKXt0aGlzLl8ucHVzaChbdCxuXSl9Y2xvc2VQYXRoKCl7dGhpcy5fLnB1c2godGhpcy5fWzBdLnNsaWNlKCkpfWxpbmVUbyh0LG4pe3RoaXMuXy5wdXNoKFt0LG5dKX12YWx1ZSgpe3JldHVybiB0aGlzLl8ubGVuZ3RoP3RoaXMuXzpudWxsfX1jbGFzcyBxdXtjb25zdHJ1Y3Rvcih0LFtuLGUscixpXT1bMCwwLDk2MCw1MDBdKXtpZighKChyPStyKT49KG49K24pJiYoaT0raSk+PShlPStlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJvdW5kcyIpO3RoaXMuZGVsYXVuYXk9dCx0aGlzLl9jaXJjdW1jZW50ZXJzPW5ldyBGbG9hdDY0QXJyYXkoMip0LnBvaW50cy5sZW5ndGgpLHRoaXMudmVjdG9ycz1uZXcgRmxvYXQ2NEFycmF5KDIqdC5wb2ludHMubGVuZ3RoKSx0aGlzLnhtYXg9cix0aGlzLnhtaW49bix0aGlzLnltYXg9aSx0aGlzLnltaW49ZSx0aGlzLl9pbml0KCl9dXBkYXRlKCl7cmV0dXJuIHRoaXMuZGVsYXVuYXkudXBkYXRlKCksdGhpcy5faW5pdCgpLHRoaXN9X2luaXQoKXtjb25zdHtkZWxhdW5heTp7cG9pbnRzOnQsaHVsbDpuLHRyaWFuZ2xlczplfSx2ZWN0b3JzOnJ9PXRoaXM7bGV0IGksbztjb25zdCBhPXRoaXMuY2lyY3VtY2VudGVycz10aGlzLl9jaXJjdW1jZW50ZXJzLnN1YmFycmF5KDAsZS5sZW5ndGgvMyoyKTtmb3IobGV0IHIsdSxjPTAsZj0wLHM9ZS5sZW5ndGg7YzxzO2MrPTMsZis9Mil7Y29uc3Qgcz0yKmVbY10sbD0yKmVbYysxXSxoPTIqZVtjKzJdLGQ9dFtzXSxwPXRbcysxXSxnPXRbbF0seT10W2wrMV0sdj10W2hdLF89dFtoKzFdLGI9Zy1kLG09eS1wLHg9di1kLHc9Xy1wLE09MiooYip3LW0qeCk7aWYoTWF0aC5hYnMoTSk8MWUtOSl7aWYodm9pZCAwPT09aSl7aT1vPTA7Zm9yKGNvbnN0IGUgb2YgbilpKz10WzIqZV0sbys9dFsyKmUrMV07aS89bi5sZW5ndGgsby89bi5sZW5ndGh9Y29uc3QgZT0xZTkqTWF0aC5zaWduKChpLWQpKnctKG8tcCkqeCk7cj0oZCt2KS8yLWUqdyx1PShwK18pLzIrZSp4fWVsc2V7Y29uc3QgdD0xL00sbj1iKmIrbSptLGU9eCp4K3cqdztyPWQrKHcqbi1tKmUpKnQsdT1wKyhiKmUteCpuKSp0fWFbZl09cixhW2YrMV09dX1sZXQgdSxjLGYscz1uW24ubGVuZ3RoLTFdLGw9NCpzLGg9dFsyKnNdLGQ9dFsyKnMrMV07ci5maWxsKDApO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7KytlKXM9bltlXSx1PWwsYz1oLGY9ZCxsPTQqcyxoPXRbMipzXSxkPXRbMipzKzFdLHJbdSsyXT1yW2xdPWYtZCxyW3UrM109cltsKzFdPWgtY31yZW5kZXIodCl7Y29uc3Qgbj1udWxsPT10P3Q9bmV3IFJ1OnZvaWQgMCx7ZGVsYXVuYXk6e2hhbGZlZGdlczplLGluZWRnZXM6cixodWxsOml9LGNpcmN1bWNlbnRlcnM6byx2ZWN0b3JzOmF9PXRoaXM7aWYoaS5sZW5ndGg8PTEpcmV0dXJuIG51bGw7Zm9yKGxldCBuPTAscj1lLmxlbmd0aDtuPHI7KytuKXtjb25zdCByPWVbbl07aWYocjxuKWNvbnRpbnVlO2NvbnN0IGk9MipNYXRoLmZsb29yKG4vMyksYT0yKk1hdGguZmxvb3Ioci8zKSx1PW9baV0sYz1vW2krMV0sZj1vW2FdLHM9b1thKzFdO3RoaXMuX3JlbmRlclNlZ21lbnQodSxjLGYscyx0KX1sZXQgdSxjPWlbaS5sZW5ndGgtMV07Zm9yKGxldCBuPTA7bjxpLmxlbmd0aDsrK24pe3U9YyxjPWlbbl07Y29uc3QgZT0yKk1hdGguZmxvb3IocltjXS8zKSxmPW9bZV0scz1vW2UrMV0sbD00KnUsaD10aGlzLl9wcm9qZWN0KGYscyxhW2wrMl0sYVtsKzNdKTtoJiZ0aGlzLl9yZW5kZXJTZWdtZW50KGYscyxoWzBdLGhbMV0sdCl9cmV0dXJuIG4mJm4udmFsdWUoKX1yZW5kZXJCb3VuZHModCl7Y29uc3Qgbj1udWxsPT10P3Q9bmV3IFJ1OnZvaWQgMDtyZXR1cm4gdC5yZWN0KHRoaXMueG1pbix0aGlzLnltaW4sdGhpcy54bWF4LXRoaXMueG1pbix0aGlzLnltYXgtdGhpcy55bWluKSxuJiZuLnZhbHVlKCl9cmVuZGVyQ2VsbCh0LG4pe2NvbnN0IGU9bnVsbD09bj9uPW5ldyBSdTp2b2lkIDAscj10aGlzLl9jbGlwKHQpO2lmKG51bGw9PT1yfHwhci5sZW5ndGgpcmV0dXJuO24ubW92ZVRvKHJbMF0sclsxXSk7bGV0IGk9ci5sZW5ndGg7Zm9yKDtyWzBdPT09cltpLTJdJiZyWzFdPT09cltpLTFdJiZpPjE7KWktPTI7Zm9yKGxldCB0PTI7dDxpO3QrPTIpclt0XT09PXJbdC0yXSYmclt0KzFdPT09clt0LTFdfHxuLmxpbmVUbyhyW3RdLHJbdCsxXSk7cmV0dXJuIG4uY2xvc2VQYXRoKCksZSYmZS52YWx1ZSgpfSpjZWxsUG9seWdvbnMoKXtjb25zdHtkZWxhdW5heTp7cG9pbnRzOnR9fT10aGlzO2ZvcihsZXQgbj0wLGU9dC5sZW5ndGgvMjtuPGU7KytuKXtjb25zdCB0PXRoaXMuY2VsbFBvbHlnb24obik7dCYmKHQuaW5kZXg9bix5aWVsZCB0KX19Y2VsbFBvbHlnb24odCl7Y29uc3Qgbj1uZXcgRnU7cmV0dXJuIHRoaXMucmVuZGVyQ2VsbCh0LG4pLG4udmFsdWUoKX1fcmVuZGVyU2VnbWVudCh0LG4sZSxyLGkpe2xldCBvO2NvbnN0IGE9dGhpcy5fcmVnaW9uY29kZSh0LG4pLHU9dGhpcy5fcmVnaW9uY29kZShlLHIpOzA9PT1hJiYwPT09dT8oaS5tb3ZlVG8odCxuKSxpLmxpbmVUbyhlLHIpKToobz10aGlzLl9jbGlwU2VnbWVudCh0LG4sZSxyLGEsdSkpJiYoaS5tb3ZlVG8ob1swXSxvWzFdKSxpLmxpbmVUbyhvWzJdLG9bM10pKX1jb250YWlucyh0LG4sZSl7cmV0dXJuKG49K24pPT1uJiYoZT0rZSk9PWUmJnRoaXMuZGVsYXVuYXkuX3N0ZXAodCxuLGUpPT09dH0qbmVpZ2hib3JzKHQpe2NvbnN0IG49dGhpcy5fY2xpcCh0KTtpZihuKWZvcihjb25zdCBlIG9mIHRoaXMuZGVsYXVuYXkubmVpZ2hib3JzKHQpKXtjb25zdCB0PXRoaXMuX2NsaXAoZSk7aWYodCl0OmZvcihsZXQgcj0wLGk9bi5sZW5ndGg7cjxpO3IrPTIpZm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bys9MilpZihuW3JdPT09dFtvXSYmbltyKzFdPT09dFtvKzFdJiZuWyhyKzIpJWldPT09dFsobythLTIpJWFdJiZuWyhyKzMpJWldPT09dFsobythLTEpJWFdKXt5aWVsZCBlO2JyZWFrIHR9fX1fY2VsbCh0KXtjb25zdHtjaXJjdW1jZW50ZXJzOm4sZGVsYXVuYXk6e2luZWRnZXM6ZSxoYWxmZWRnZXM6cix0cmlhbmdsZXM6aX19PXRoaXMsbz1lW3RdO2lmKC0xPT09bylyZXR1cm4gbnVsbDtjb25zdCBhPVtdO2xldCB1PW87ZG97Y29uc3QgZT1NYXRoLmZsb29yKHUvMyk7aWYoYS5wdXNoKG5bMiplXSxuWzIqZSsxXSksdT11JTM9PTI/dS0yOnUrMSxpW3VdIT09dClicmVhazt1PXJbdV19d2hpbGUodSE9PW8mJi0xIT09dSk7cmV0dXJuIGF9X2NsaXAodCl7aWYoMD09PXQmJjE9PT10aGlzLmRlbGF1bmF5Lmh1bGwubGVuZ3RoKXJldHVyblt0aGlzLnhtYXgsdGhpcy55bWluLHRoaXMueG1heCx0aGlzLnltYXgsdGhpcy54bWluLHRoaXMueW1heCx0aGlzLnhtaW4sdGhpcy55bWluXTtjb25zdCBuPXRoaXMuX2NlbGwodCk7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7Y29uc3R7dmVjdG9yczplfT10aGlzLHI9NCp0O3JldHVybiB0aGlzLl9zaW1wbGlmeShlW3JdfHxlW3IrMV0/dGhpcy5fY2xpcEluZmluaXRlKHQsbixlW3JdLGVbcisxXSxlW3IrMl0sZVtyKzNdKTp0aGlzLl9jbGlwRmluaXRlKHQsbikpfV9jbGlwRmluaXRlKHQsbil7Y29uc3QgZT1uLmxlbmd0aDtsZXQgcixpLG8sYSx1PW51bGwsYz1uW2UtMl0sZj1uW2UtMV0scz10aGlzLl9yZWdpb25jb2RlKGMsZiksbD0wO2ZvcihsZXQgaD0wO2g8ZTtoKz0yKWlmKHI9YyxpPWYsYz1uW2hdLGY9bltoKzFdLG89cyxzPXRoaXMuX3JlZ2lvbmNvZGUoYyxmKSwwPT09byYmMD09PXMpYT1sLGw9MCx1P3UucHVzaChjLGYpOnU9W2MsZl07ZWxzZXtsZXQgbixlLGgsZCxwO2lmKDA9PT1vKXtpZihudWxsPT09KG49dGhpcy5fY2xpcFNlZ21lbnQocixpLGMsZixvLHMpKSljb250aW51ZTtbZSxoLGQscF09bn1lbHNle2lmKG51bGw9PT0obj10aGlzLl9jbGlwU2VnbWVudChjLGYscixpLHMsbykpKWNvbnRpbnVlO1tkLHAsZSxoXT1uLGE9bCxsPXRoaXMuX2VkZ2Vjb2RlKGUsaCksYSYmbCYmdGhpcy5fZWRnZSh0LGEsbCx1LHUubGVuZ3RoKSx1P3UucHVzaChlLGgpOnU9W2UsaF19YT1sLGw9dGhpcy5fZWRnZWNvZGUoZCxwKSxhJiZsJiZ0aGlzLl9lZGdlKHQsYSxsLHUsdS5sZW5ndGgpLHU/dS5wdXNoKGQscCk6dT1bZCxwXX1pZih1KWE9bCxsPXRoaXMuX2VkZ2Vjb2RlKHVbMF0sdVsxXSksYSYmbCYmdGhpcy5fZWRnZSh0LGEsbCx1LHUubGVuZ3RoKTtlbHNlIGlmKHRoaXMuY29udGFpbnModCwodGhpcy54bWluK3RoaXMueG1heCkvMiwodGhpcy55bWluK3RoaXMueW1heCkvMikpcmV0dXJuW3RoaXMueG1heCx0aGlzLnltaW4sdGhpcy54bWF4LHRoaXMueW1heCx0aGlzLnhtaW4sdGhpcy55bWF4LHRoaXMueG1pbix0aGlzLnltaW5dO3JldHVybiB1fV9jbGlwU2VnbWVudCh0LG4sZSxyLGksbyl7Y29uc3QgYT1pPG87Zm9yKGEmJihbdCxuLGUscixpLG9dPVtlLHIsdCxuLG8saV0pOzspe2lmKDA9PT1pJiYwPT09bylyZXR1cm4gYT9bZSxyLHQsbl06W3QsbixlLHJdO2lmKGkmbylyZXR1cm4gbnVsbDtsZXQgdSxjLGY9aXx8bzs4JmY/KHU9dCsoZS10KSoodGhpcy55bWF4LW4pLyhyLW4pLGM9dGhpcy55bWF4KTo0JmY/KHU9dCsoZS10KSoodGhpcy55bWluLW4pLyhyLW4pLGM9dGhpcy55bWluKToyJmY/KGM9bisoci1uKSoodGhpcy54bWF4LXQpLyhlLXQpLHU9dGhpcy54bWF4KTooYz1uKyhyLW4pKih0aGlzLnhtaW4tdCkvKGUtdCksdT10aGlzLnhtaW4pLGk/KHQ9dSxuPWMsaT10aGlzLl9yZWdpb25jb2RlKHQsbikpOihlPXUscj1jLG89dGhpcy5fcmVnaW9uY29kZShlLHIpKX19X2NsaXBJbmZpbml0ZSh0LG4sZSxyLGksbyl7bGV0IGEsdT1BcnJheS5mcm9tKG4pO2lmKChhPXRoaXMuX3Byb2plY3QodVswXSx1WzFdLGUscikpJiZ1LnVuc2hpZnQoYVswXSxhWzFdKSwoYT10aGlzLl9wcm9qZWN0KHVbdS5sZW5ndGgtMl0sdVt1Lmxlbmd0aC0xXSxpLG8pKSYmdS5wdXNoKGFbMF0sYVsxXSksdT10aGlzLl9jbGlwRmluaXRlKHQsdSkpZm9yKGxldCBuLGU9MCxyPXUubGVuZ3RoLGk9dGhpcy5fZWRnZWNvZGUodVtyLTJdLHVbci0xXSk7ZTxyO2UrPTIpbj1pLGk9dGhpcy5fZWRnZWNvZGUodVtlXSx1W2UrMV0pLG4mJmkmJihlPXRoaXMuX2VkZ2UodCxuLGksdSxlKSxyPXUubGVuZ3RoKTtlbHNlIHRoaXMuY29udGFpbnModCwodGhpcy54bWluK3RoaXMueG1heCkvMiwodGhpcy55bWluK3RoaXMueW1heCkvMikmJih1PVt0aGlzLnhtaW4sdGhpcy55bWluLHRoaXMueG1heCx0aGlzLnltaW4sdGhpcy54bWF4LHRoaXMueW1heCx0aGlzLnhtaW4sdGhpcy55bWF4XSk7cmV0dXJuIHV9X2VkZ2UodCxuLGUscixpKXtmb3IoO24hPT1lOyl7bGV0IGUsbztzd2l0Y2gobil7Y2FzZSA1Om49NDtjb250aW51ZTtjYXNlIDQ6bj02LGU9dGhpcy54bWF4LG89dGhpcy55bWluO2JyZWFrO2Nhc2UgNjpuPTI7Y29udGludWU7Y2FzZSAyOm49MTAsZT10aGlzLnhtYXgsbz10aGlzLnltYXg7YnJlYWs7Y2FzZSAxMDpuPTg7Y29udGludWU7Y2FzZSA4Om49OSxlPXRoaXMueG1pbixvPXRoaXMueW1heDticmVhaztjYXNlIDk6bj0xO2NvbnRpbnVlO2Nhc2UgMTpuPTUsZT10aGlzLnhtaW4sbz10aGlzLnltaW59cltpXT09PWUmJnJbaSsxXT09PW98fCF0aGlzLmNvbnRhaW5zKHQsZSxvKXx8KHIuc3BsaWNlKGksMCxlLG8pLGkrPTIpfXJldHVybiBpfV9wcm9qZWN0KHQsbixlLHIpe2xldCBpLG8sYSx1PTEvMDtpZihyPDApe2lmKG48PXRoaXMueW1pbilyZXR1cm4gbnVsbDsoaT0odGhpcy55bWluLW4pL3IpPHUmJihhPXRoaXMueW1pbixvPXQrKHU9aSkqZSl9ZWxzZSBpZihyPjApe2lmKG4+PXRoaXMueW1heClyZXR1cm4gbnVsbDsoaT0odGhpcy55bWF4LW4pL3IpPHUmJihhPXRoaXMueW1heCxvPXQrKHU9aSkqZSl9aWYoZT4wKXtpZih0Pj10aGlzLnhtYXgpcmV0dXJuIG51bGw7KGk9KHRoaXMueG1heC10KS9lKTx1JiYobz10aGlzLnhtYXgsYT1uKyh1PWkpKnIpfWVsc2UgaWYoZTwwKXtpZih0PD10aGlzLnhtaW4pcmV0dXJuIG51bGw7KGk9KHRoaXMueG1pbi10KS9lKTx1JiYobz10aGlzLnhtaW4sYT1uKyh1PWkpKnIpfXJldHVybltvLGFdfV9lZGdlY29kZSh0LG4pe3JldHVybih0PT09dGhpcy54bWluPzE6dD09PXRoaXMueG1heD8yOjApfChuPT09dGhpcy55bWluPzQ6bj09PXRoaXMueW1heD84OjApfV9yZWdpb25jb2RlKHQsbil7cmV0dXJuKHQ8dGhpcy54bWluPzE6dD50aGlzLnhtYXg/MjowKXwobjx0aGlzLnltaW4/NDpuPnRoaXMueW1heD84OjApfV9zaW1wbGlmeSh0KXtpZih0JiZ0Lmxlbmd0aD40KXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rPTIpe2NvbnN0IGU9KG4rMikldC5sZW5ndGgscj0obis0KSV0Lmxlbmd0aDsodFtuXT09PXRbZV0mJnRbZV09PT10W3JdfHx0W24rMV09PT10W2UrMV0mJnRbZSsxXT09PXRbcisxXSkmJih0LnNwbGljZShlLDIpLG4tPTIpfXQubGVuZ3RofHwodD1udWxsKX1yZXR1cm4gdH19Y29uc3QgVXU9MipNYXRoLlBJLEl1PU1hdGgucG93O2Z1bmN0aW9uIE91KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEJ1KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFl1KHQsbixlKXtyZXR1cm5bdCtNYXRoLnNpbih0K24pKmUsbitNYXRoLmNvcyh0LW4pKmVdfWNsYXNzIEx1e3N0YXRpYyBmcm9tKHQsbj1PdSxlPUJ1LHIpe3JldHVybiBuZXcgTHUoImxlbmd0aCJpbiB0P2Z1bmN0aW9uKHQsbixlLHIpe2NvbnN0IGk9dC5sZW5ndGgsbz1uZXcgRmxvYXQ2NEFycmF5KDIqaSk7Zm9yKGxldCBhPTA7YTxpOysrYSl7Y29uc3QgaT10W2FdO29bMiphXT1uLmNhbGwocixpLGEsdCksb1syKmErMV09ZS5jYWxsKHIsaSxhLHQpfXJldHVybiBvfSh0LG4sZSxyKTpGbG9hdDY0QXJyYXkuZnJvbShmdW5jdGlvbioodCxuLGUscil7bGV0IGk9MDtmb3IoY29uc3QgbyBvZiB0KXlpZWxkIG4uY2FsbChyLG8saSx0KSx5aWVsZCBlLmNhbGwocixvLGksdCksKytpfSh0LG4sZSxyKSkpfWNvbnN0cnVjdG9yKHQpe3RoaXMuX2RlbGF1bmF0b3I9bmV3IFN1KHQpLHRoaXMuaW5lZGdlcz1uZXcgSW50MzJBcnJheSh0Lmxlbmd0aC8yKSx0aGlzLl9odWxsSW5kZXg9bmV3IEludDMyQXJyYXkodC5sZW5ndGgvMiksdGhpcy5wb2ludHM9dGhpcy5fZGVsYXVuYXRvci5jb29yZHMsdGhpcy5faW5pdCgpfXVwZGF0ZSgpe3JldHVybiB0aGlzLl9kZWxhdW5hdG9yLnVwZGF0ZSgpLHRoaXMuX2luaXQoKSx0aGlzfV9pbml0KCl7Y29uc3QgdD10aGlzLl9kZWxhdW5hdG9yLG49dGhpcy5wb2ludHM7aWYodC5odWxsJiZ0Lmh1bGwubGVuZ3RoPjImJmZ1bmN0aW9uKHQpe2NvbnN0e3RyaWFuZ2xlczpuLGNvb3JkczplfT10O2ZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCs9Myl7Y29uc3Qgcj0yKm5bdF0saT0yKm5bdCsxXSxvPTIqblt0KzJdO2lmKChlW29dLWVbcl0pKihlW2krMV0tZVtyKzFdKS0oZVtpXS1lW3JdKSooZVtvKzFdLWVbcisxXSk+MWUtMTApcmV0dXJuITF9cmV0dXJuITB9KHQpKXt0aGlzLmNvbGxpbmVhcj1JbnQzMkFycmF5LmZyb20oe2xlbmd0aDpuLmxlbmd0aC8yfSwoKHQsbik9Pm4pKS5zb3J0KCgodCxlKT0+blsyKnRdLW5bMiplXXx8blsyKnQrMV0tblsyKmUrMV0pKTtjb25zdCB0PXRoaXMuY29sbGluZWFyWzBdLGU9dGhpcy5jb2xsaW5lYXJbdGhpcy5jb2xsaW5lYXIubGVuZ3RoLTFdLHI9W25bMip0XSxuWzIqdCsxXSxuWzIqZV0sblsyKmUrMV1dLGk9MWUtOCpNYXRoLmh5cG90KHJbM10tclsxXSxyWzJdLXJbMF0pO2ZvcihsZXQgdD0wLGU9bi5sZW5ndGgvMjt0PGU7Kyt0KXtjb25zdCBlPVl1KG5bMip0XSxuWzIqdCsxXSxpKTtuWzIqdF09ZVswXSxuWzIqdCsxXT1lWzFdfXRoaXMuX2RlbGF1bmF0b3I9bmV3IFN1KG4pfWVsc2UgZGVsZXRlIHRoaXMuY29sbGluZWFyO2NvbnN0IGU9dGhpcy5oYWxmZWRnZXM9dGhpcy5fZGVsYXVuYXRvci5oYWxmZWRnZXMscj10aGlzLmh1bGw9dGhpcy5fZGVsYXVuYXRvci5odWxsLGk9dGhpcy50cmlhbmdsZXM9dGhpcy5fZGVsYXVuYXRvci50cmlhbmdsZXMsbz10aGlzLmluZWRnZXMuZmlsbCgtMSksYT10aGlzLl9odWxsSW5kZXguZmlsbCgtMSk7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47Kyt0KXtjb25zdCBuPWlbdCUzPT0yP3QtMjp0KzFdOy0xIT09ZVt0XSYmLTEhPT1vW25dfHwob1tuXT10KX1mb3IobGV0IHQ9MCxuPXIubGVuZ3RoO3Q8bjsrK3QpYVtyW3RdXT10O3IubGVuZ3RoPD0yJiZyLmxlbmd0aD4wJiYodGhpcy50cmlhbmdsZXM9bmV3IEludDMyQXJyYXkoMykuZmlsbCgtMSksdGhpcy5oYWxmZWRnZXM9bmV3IEludDMyQXJyYXkoMykuZmlsbCgtMSksdGhpcy50cmlhbmdsZXNbMF09clswXSxvW3JbMF1dPTEsMj09PXIubGVuZ3RoJiYob1tyWzFdXT0wLHRoaXMudHJpYW5nbGVzWzFdPXJbMV0sdGhpcy50cmlhbmdsZXNbMl09clsxXSkpfXZvcm9ub2kodCl7cmV0dXJuIG5ldyBxdSh0aGlzLHQpfSpuZWlnaGJvcnModCl7Y29uc3R7aW5lZGdlczpuLGh1bGw6ZSxfaHVsbEluZGV4OnIsaGFsZmVkZ2VzOmksdHJpYW5nbGVzOm8sY29sbGluZWFyOmF9PXRoaXM7aWYoYSl7Y29uc3Qgbj1hLmluZGV4T2YodCk7cmV0dXJuIG4+MCYmKHlpZWxkIGFbbi0xXSksdm9pZChuPGEubGVuZ3RoLTEmJih5aWVsZCBhW24rMV0pKX1jb25zdCB1PW5bdF07aWYoLTE9PT11KXJldHVybjtsZXQgYz11LGY9LTE7ZG97aWYoeWllbGQgZj1vW2NdLGM9YyUzPT0yP2MtMjpjKzEsb1tjXSE9PXQpcmV0dXJuO2lmKGM9aVtjXSwtMT09PWMpe2NvbnN0IG49ZVsoclt0XSsxKSVlLmxlbmd0aF07cmV0dXJuIHZvaWQobiE9PWYmJih5aWVsZCBuKSl9fXdoaWxlKGMhPT11KX1maW5kKHQsbixlPTApe2lmKCh0PSt0KSE9dHx8KG49K24pIT1uKXJldHVybi0xO2NvbnN0IHI9ZTtsZXQgaTtmb3IoOyhpPXRoaXMuX3N0ZXAoZSx0LG4pKT49MCYmaSE9PWUmJmkhPT1yOyllPWk7cmV0dXJuIGl9X3N0ZXAodCxuLGUpe2NvbnN0e2luZWRnZXM6cixodWxsOmksX2h1bGxJbmRleDpvLGhhbGZlZGdlczphLHRyaWFuZ2xlczp1LHBvaW50czpjfT10aGlzO2lmKC0xPT09clt0XXx8IWMubGVuZ3RoKXJldHVybih0KzEpJShjLmxlbmd0aD4+MSk7bGV0IGY9dCxzPUl1KG4tY1syKnRdLDIpK0l1KGUtY1syKnQrMV0sMik7Y29uc3QgbD1yW3RdO2xldCBoPWw7ZG97bGV0IHI9dVtoXTtjb25zdCBsPUl1KG4tY1syKnJdLDIpK0l1KGUtY1syKnIrMV0sMik7aWYobDxzJiYocz1sLGY9ciksaD1oJTM9PTI/aC0yOmgrMSx1W2hdIT09dClicmVhaztpZihoPWFbaF0sLTE9PT1oKXtpZihoPWlbKG9bdF0rMSklaS5sZW5ndGhdLGghPT1yJiZJdShuLWNbMipoXSwyKStJdShlLWNbMipoKzFdLDIpPHMpcmV0dXJuIGg7YnJlYWt9fXdoaWxlKGghPT1sKTtyZXR1cm4gZn1yZW5kZXIodCl7Y29uc3Qgbj1udWxsPT10P3Q9bmV3IFJ1OnZvaWQgMCx7cG9pbnRzOmUsaGFsZmVkZ2VzOnIsdHJpYW5nbGVzOml9PXRoaXM7Zm9yKGxldCBuPTAsbz1yLmxlbmd0aDtuPG87KytuKXtjb25zdCBvPXJbbl07aWYobzxuKWNvbnRpbnVlO2NvbnN0IGE9MippW25dLHU9MippW29dO3QubW92ZVRvKGVbYV0sZVthKzFdKSx0LmxpbmVUbyhlW3VdLGVbdSsxXSl9cmV0dXJuIHRoaXMucmVuZGVySHVsbCh0KSxuJiZuLnZhbHVlKCl9cmVuZGVyUG9pbnRzKHQsbil7dm9pZCAwIT09bnx8dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQubW92ZVRvfHwobj10LHQ9bnVsbCksbj1udWxsPT1uPzI6K247Y29uc3QgZT1udWxsPT10P3Q9bmV3IFJ1OnZvaWQgMCx7cG9pbnRzOnJ9PXRoaXM7Zm9yKGxldCBlPTAsaT1yLmxlbmd0aDtlPGk7ZSs9Mil7Y29uc3QgaT1yW2VdLG89cltlKzFdO3QubW92ZVRvKGkrbixvKSx0LmFyYyhpLG8sbiwwLFV1KX1yZXR1cm4gZSYmZS52YWx1ZSgpfXJlbmRlckh1bGwodCl7Y29uc3Qgbj1udWxsPT10P3Q9bmV3IFJ1OnZvaWQgMCx7aHVsbDplLHBvaW50czpyfT10aGlzLGk9MiplWzBdLG89ZS5sZW5ndGg7dC5tb3ZlVG8ocltpXSxyW2krMV0pO2ZvcihsZXQgbj0xO248bzsrK24pe2NvbnN0IGk9MiplW25dO3QubGluZVRvKHJbaV0scltpKzFdKX1yZXR1cm4gdC5jbG9zZVBhdGgoKSxuJiZuLnZhbHVlKCl9aHVsbFBvbHlnb24oKXtjb25zdCB0PW5ldyBGdTtyZXR1cm4gdGhpcy5yZW5kZXJIdWxsKHQpLHQudmFsdWUoKX1yZW5kZXJUcmlhbmdsZSh0LG4pe2NvbnN0IGU9bnVsbD09bj9uPW5ldyBSdTp2b2lkIDAse3BvaW50czpyLHRyaWFuZ2xlczppfT10aGlzLG89MippW3QqPTNdLGE9MippW3QrMV0sdT0yKmlbdCsyXTtyZXR1cm4gbi5tb3ZlVG8ocltvXSxyW28rMV0pLG4ubGluZVRvKHJbYV0sclthKzFdKSxuLmxpbmVUbyhyW3VdLHJbdSsxXSksbi5jbG9zZVBhdGgoKSxlJiZlLnZhbHVlKCl9KnRyaWFuZ2xlUG9seWdvbnMoKXtjb25zdHt0cmlhbmdsZXM6dH09dGhpcztmb3IobGV0IG49MCxlPXQubGVuZ3RoLzM7bjxlOysrbil5aWVsZCB0aGlzLnRyaWFuZ2xlUG9seWdvbihuKX10cmlhbmdsZVBvbHlnb24odCl7Y29uc3Qgbj1uZXcgRnU7cmV0dXJuIHRoaXMucmVuZGVyVHJpYW5nbGUodCxuKSxuLnZhbHVlKCl9fXZhciBqdT17fSxIdT17fSxYdT0zNCxHdT0xMCxWdT0xMztmdW5jdGlvbiBXdSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrbisnXSB8fCAiIid9KSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gWnUodCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxlPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gbnx8ZS5wdXNoKG5bcl09cil9KSksZX1mdW5jdGlvbiBLdSh0LG4pe3ZhciBlPXQrIiIscj1lLmxlbmd0aDtyZXR1cm4gcjxuP25ldyBBcnJheShuLXIrMSkuam9pbigwKStlOmV9ZnVuY3Rpb24gUXUodCl7dmFyIG4sZT10LmdldFVUQ0hvdXJzKCkscj10LmdldFVUQ01pbnV0ZXMoKSxpPXQuZ2V0VVRDU2Vjb25kcygpLG89dC5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4odCk/IkludmFsaWQgRGF0ZSI6KChuPXQuZ2V0VVRDRnVsbFllYXIoKSk8MD8iLSIrS3UoLW4sNik6bj45OTk5PyIrIitLdShuLDYpOkt1KG4sNCkpKyItIitLdSh0LmdldFVUQ01vbnRoKCkrMSwyKSsiLSIrS3UodC5nZXRVVENEYXRlKCksMikrKG8/IlQiK0t1KGUsMikrIjoiK0t1KHIsMikrIjoiK0t1KGksMikrIi4iK0t1KG8sMykrIloiOmk/IlQiK0t1KGUsMikrIjoiK0t1KHIsMikrIjoiK0t1KGksMikrIloiOnJ8fGU/IlQiK0t1KGUsMikrIjoiK0t1KHIsMikrIloiOiIiKX1mdW5jdGlvbiBKdSh0KXt2YXIgbj1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxlPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsbil7dmFyIHIsaT1bXSxvPXQubGVuZ3RoLGE9MCx1PTAsYz1vPD0wLGY9ITE7ZnVuY3Rpb24gcygpe2lmKGMpcmV0dXJuIEh1O2lmKGYpcmV0dXJuIGY9ITEsanU7dmFyIG4scixpPWE7aWYodC5jaGFyQ29kZUF0KGkpPT09WHUpe2Zvcig7YSsrPG8mJnQuY2hhckNvZGVBdChhKSE9PVh1fHx0LmNoYXJDb2RlQXQoKythKT09PVh1Oyk7cmV0dXJuKG49YSk+PW8/Yz0hMDoocj10LmNoYXJDb2RlQXQoYSsrKSk9PT1HdT9mPSEwOnI9PT1WdSYmKGY9ITAsdC5jaGFyQ29kZUF0KGEpPT09R3UmJisrYSksdC5zbGljZShpKzEsbi0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDthPG87KXtpZigocj10LmNoYXJDb2RlQXQobj1hKyspKT09PUd1KWY9ITA7ZWxzZSBpZihyPT09VnUpZj0hMCx0LmNoYXJDb2RlQXQoYSk9PT1HdSYmKythO2Vsc2UgaWYociE9PWUpY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxuKX1yZXR1cm4gYz0hMCx0LnNsaWNlKGksbyl9Zm9yKHQuY2hhckNvZGVBdChvLTEpPT09R3UmJi0tbyx0LmNoYXJDb2RlQXQoby0xKT09PVZ1JiYtLW87KHI9cygpKSE9PUh1Oyl7Zm9yKHZhciBsPVtdO3IhPT1qdSYmciE9PUh1OylsLnB1c2gocikscj1zKCk7biYmbnVsbD09KGw9bihsLHUrKykpfHxpLnB1c2gobCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShuLGUpe3JldHVybiBuLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIGUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gYShuW3RdKX0pKS5qb2luKHQpfSkpfWZ1bmN0aW9uIG8obil7cmV0dXJuIG4ubWFwKGEpLmpvaW4odCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbnVsbD09dD8iIjp0IGluc3RhbmNlb2YgRGF0ZT9RdSh0KTpuLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxuKXt2YXIgZSxpLG89cih0LChmdW5jdGlvbih0LHIpe2lmKGUpcmV0dXJuIGUodCxyLTEpO2k9dCxlPW4/ZnVuY3Rpb24odCxuKXt2YXIgZT1XdSh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gbihlKHIpLGksdCl9fSh0LG4pOld1KHQpfSkpO3JldHVybiBvLmNvbHVtbnM9aXx8W10sb30scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKG4sZSl7cmV0dXJuIG51bGw9PWUmJihlPVp1KG4pKSxbZS5tYXAoYSkuam9pbih0KV0uY29uY2F0KGkobixlKSkuam9pbigiXG4iKX0sZm9ybWF0Qm9keTpmdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uJiYobj1adSh0KSksaSh0LG4pLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKG8pLmpvaW4oIlxuIil9LGZvcm1hdFJvdzpvLGZvcm1hdFZhbHVlOmF9fXZhciB0Yz1KdSgiLCIpLG5jPXRjLnBhcnNlLGVjPXRjLnBhcnNlUm93cyxyYz10Yy5mb3JtYXQsaWM9dGMuZm9ybWF0Qm9keSxvYz10Yy5mb3JtYXRSb3dzLGFjPXRjLmZvcm1hdFJvdyx1Yz10Yy5mb3JtYXRWYWx1ZSxjYz1KdSgiXHQiKSxmYz1jYy5wYXJzZSxzYz1jYy5wYXJzZVJvd3MsbGM9Y2MuZm9ybWF0LGhjPWNjLmZvcm1hdEJvZHksZGM9Y2MuZm9ybWF0Um93cyxwYz1jYy5mb3JtYXRSb3csZ2M9Y2MuZm9ybWF0VmFsdWU7Y29uc3QgeWM9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCk7ZnVuY3Rpb24gdmModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX1mdW5jdGlvbiBfYyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX1mdW5jdGlvbiBiYyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfWZ1bmN0aW9uIG1jKHQsbil7cmV0dXJuIGZldGNoKHQsbikudGhlbihiYyl9ZnVuY3Rpb24geGModCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9dm9pZCAwKSxtYyhuLGUpLnRoZW4oKGZ1bmN0aW9uKG4pe3JldHVybiB0KG4scil9KSl9fXZhciB3Yz14YyhuYyksTWM9eGMoZmMpO2Z1bmN0aW9uIFRjKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtpZigyMDQhPT10LnN0YXR1cyYmMjA1IT09dC5zdGF0dXMpcmV0dXJuIHQuanNvbigpfWZ1bmN0aW9uIEFjKHQpe3JldHVybihuLGUpPT5tYyhuLGUpLnRoZW4oKG49PihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcobix0KSkpfXZhciBTYz1BYygiYXBwbGljYXRpb24veG1sIiksRWM9QWMoInRleHQvaHRtbCIpLE5jPUFjKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24ga2ModCxuLGUscil7aWYoaXNOYU4obil8fGlzTmFOKGUpKXJldHVybiB0O3ZhciBpLG8sYSx1LGMsZixzLGwsaCxkPXQuX3Jvb3QscD17ZGF0YTpyfSxnPXQuX3gwLHk9dC5feTAsdj10Ll94MSxfPXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigoZj1uPj0obz0oZyt2KS8yKSk/Zz1vOnY9bywocz1lPj0oYT0oeStfKS8yKSk/eT1hOl89YSxpPWQsIShkPWRbbD1zPDwxfGZdKSlyZXR1cm4gaVtsXT1wLHQ7aWYodT0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLG49PT11JiZlPT09YylyZXR1cm4gcC5uZXh0PWQsaT9pW2xdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbbF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChmPW4+PShvPShnK3YpLzIpKT9nPW86dj1vLChzPWU+PShhPSh5K18pLzIpKT95PWE6Xz1hfXdoaWxlKChsPXM8PDF8Zik9PShoPShjPj1hKTw8MXx1Pj1vKSk7cmV0dXJuIGlbaF09ZCxpW2xdPXAsdH1mdW5jdGlvbiBDYyh0LG4sZSxyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9bix0aGlzLnkwPWUsdGhpcy54MT1yLHRoaXMueTE9aX1mdW5jdGlvbiBQYyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB6Yyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiAkYyh0LG4sZSl7dmFyIHI9bmV3IERjKG51bGw9PW4/UGM6bixudWxsPT1lP3pjOmUsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIERjKHQsbixlLHIsaSxvKXt0aGlzLl94PXQsdGhpcy5feT1uLHRoaXMuX3gwPWUsdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gUmModCl7Zm9yKHZhciBuPXtkYXRhOnQuZGF0YX0sZT1uO3Q9dC5uZXh0OyllPWUubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBufXZhciBGYz0kYy5wcm90b3R5cGU9RGMucHJvdG90eXBlO2Z1bmN0aW9uIHFjKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBVYyh0KXtyZXR1cm4gMWUtNioodCgpLS41KX1mdW5jdGlvbiBJYyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gT2ModCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIEJjKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIFljKHQsbil7dmFyIGU9dC5nZXQobik7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJub2RlIG5vdCBmb3VuZDogIituKTtyZXR1cm4gZX1GYy5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsbixlPW5ldyBEYyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gZTtpZighci5sZW5ndGgpcmV0dXJuIGUuX3Jvb3Q9UmMociksZTtmb3IodD1be3NvdXJjZTpyLHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3I9dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj1yLnNvdXJjZVtpXSkmJihuLmxlbmd0aD90LnB1c2goe3NvdXJjZTpuLHRhcmdldDpyLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpyLnRhcmdldFtpXT1SYyhuKSk7cmV0dXJuIGV9LEZjLmFkZD1mdW5jdGlvbih0KXtjb25zdCBuPSt0aGlzLl94LmNhbGwobnVsbCx0KSxlPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4ga2ModGhpcy5jb3ZlcihuLGUpLG4sZSx0KX0sRmMuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksYz0xLzAsZj0xLzAscz0tMS8wLGw9LTEvMDtmb3IoZT0wO2U8bzsrK2UpaXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsbj10W2VdKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLG4pKXx8KGFbZV09cix1W2VdPWkscjxjJiYoYz1yKSxyPnMmJihzPXIpLGk8ZiYmKGY9aSksaT5sJiYobD1pKSk7aWYoYz5zfHxmPmwpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIoYyxmKS5jb3ZlcihzLGwpLGU9MDtlPG87KytlKWtjKHRoaXMsYVtlXSx1W2VdLHRbZV0pO3JldHVybiB0aGlzfSxGYy5jb3Zlcj1mdW5jdGlvbih0LG4pe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihuPStuKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihlKSlpPShlPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKG4pKSsxO2Vsc2V7Zm9yKHZhciBhLHUsYz1pLWV8fDEsZj10aGlzLl9yb290O2U+dHx8dD49aXx8cj5ufHxuPj1vOylzd2l0Y2godT0objxyKTw8MXx0PGUsKGE9bmV3IEFycmF5KDQpKVt1XT1mLGY9YSxjKj0yLHUpe2Nhc2UgMDppPWUrYyxvPXIrYzticmVhaztjYXNlIDE6ZT1pLWMsbz1yK2M7YnJlYWs7Y2FzZSAyOmk9ZStjLHI9by1jO2JyZWFrO2Nhc2UgMzplPWktYyxyPW8tY310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9Zil9cmV0dXJuIHRoaXMuX3gwPWUsdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc30sRmMuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG97dC5wdXNoKG4uZGF0YSl9d2hpbGUobj1uLm5leHQpfSkpLHR9LEZjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sRmMuZmluZD1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvLGEsdSxjLGYscz10aGlzLl94MCxsPXRoaXMuX3kwLGg9dGhpcy5feDEsZD10aGlzLl95MSxwPVtdLGc9dGhpcy5fcm9vdDtmb3IoZyYmcC5wdXNoKG5ldyBDYyhnLHMsbCxoLGQpKSxudWxsPT1lP2U9MS8wOihzPXQtZSxsPW4tZSxoPXQrZSxkPW4rZSxlKj1lKTtjPXAucG9wKCk7KWlmKCEoIShnPWMubm9kZSl8fChpPWMueDApPmh8fChvPWMueTApPmR8fChhPWMueDEpPHN8fCh1PWMueTEpPGwpKWlmKGcubGVuZ3RoKXt2YXIgeT0oaSthKS8yLHY9KG8rdSkvMjtwLnB1c2gobmV3IENjKGdbM10seSx2LGEsdSksbmV3IENjKGdbMl0saSx2LHksdSksbmV3IENjKGdbMV0seSxvLGEsdiksbmV3IENjKGdbMF0saSxvLHksdikpLChmPShuPj12KTw8MXx0Pj15KSYmKGM9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS1mXSxwW3AubGVuZ3RoLTEtZl09Yyl9ZWxzZXt2YXIgXz10LSt0aGlzLl94LmNhbGwobnVsbCxnLmRhdGEpLGI9bi0rdGhpcy5feS5jYWxsKG51bGwsZy5kYXRhKSxtPV8qXytiKmI7aWYobTxlKXt2YXIgeD1NYXRoLnNxcnQoZT1tKTtzPXQteCxsPW4teCxoPXQreCxkPW4reCxyPWcuZGF0YX19cmV0dXJuIHJ9LEZjLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgbixlLHIsaSxvLGEsdSxjLGYscyxsLGgsZD10aGlzLl9yb290LHA9dGhpcy5feDAsZz10aGlzLl95MCx5PXRoaXMuX3gxLHY9dGhpcy5feTE7aWYoIWQpcmV0dXJuIHRoaXM7aWYoZC5sZW5ndGgpZm9yKDs7KXtpZigoZj1vPj0odT0ocCt5KS8yKSk/cD11Onk9dSwocz1hPj0oYz0oZyt2KS8yKSk/Zz1jOnY9YyxuPWQsIShkPWRbbD1zPDwxfGZdKSlyZXR1cm4gdGhpcztpZighZC5sZW5ndGgpYnJlYWs7KG5bbCsxJjNdfHxuW2wrMiYzXXx8bltsKzMmM10pJiYoZT1uLGg9bCl9Zm9yKDtkLmRhdGEhPT10OylpZihyPWQsIShkPWQubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9ZC5uZXh0KSYmZGVsZXRlIGQubmV4dCxyPyhpP3IubmV4dD1pOmRlbGV0ZSByLm5leHQsdGhpcyk6bj8oaT9uW2xdPWk6ZGVsZXRlIG5bbF0sKGQ9blswXXx8blsxXXx8blsyXXx8blszXSkmJmQ9PT0oblszXXx8blsyXXx8blsxXXx8blswXSkmJiFkLmxlbmd0aCYmKGU/ZVtoXT1kOnRoaXMuX3Jvb3Q9ZCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sRmMucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wLGU9dC5sZW5ndGg7bjxlOysrbil0aGlzLnJlbW92ZSh0W25dKTtyZXR1cm4gdGhpc30sRmMucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxGYy5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKWRveysrdH13aGlsZShuPW4ubmV4dCl9KSksdH0sRmMudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyxhLHU9W10sYz10aGlzLl9yb290O2ZvcihjJiZ1LnB1c2gobmV3IENjKGMsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPXUucG9wKCk7KWlmKCF0KGM9bi5ub2RlLHI9bi54MCxpPW4ueTAsbz1uLngxLGE9bi55MSkmJmMubGVuZ3RoKXt2YXIgZj0ocitvKS8yLHM9KGkrYSkvMjsoZT1jWzNdKSYmdS5wdXNoKG5ldyBDYyhlLGYscyxvLGEpKSwoZT1jWzJdKSYmdS5wdXNoKG5ldyBDYyhlLHIscyxmLGEpKSwoZT1jWzFdKSYmdS5wdXNoKG5ldyBDYyhlLGYsaSxvLHMpKSwoZT1jWzBdKSYmdS5wdXNoKG5ldyBDYyhlLHIsaSxmLHMpKX1yZXR1cm4gdGhpc30sRmMudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgbixlPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJmUucHVzaChuZXcgQ2ModGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249ZS5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHU9bi55MCxjPW4ueDEsZj1uLnkxLHM9KGErYykvMixsPSh1K2YpLzI7KG89aVswXSkmJmUucHVzaChuZXcgQ2MobyxhLHUscyxsKSksKG89aVsxXSkmJmUucHVzaChuZXcgQ2MobyxzLHUsYyxsKSksKG89aVsyXSkmJmUucHVzaChuZXcgQ2MobyxhLGwscyxmKSksKG89aVszXSkmJmUucHVzaChuZXcgQ2MobyxzLGwsYyxmKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyl0KG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc30sRmMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LEZjLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTtjb25zdCBMYz0xNjY0NTI1LGpjPTEwMTM5MDQyMjMsSGM9NDI5NDk2NzI5NjtmdW5jdGlvbiBYYyh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIEdjKHQpe3JldHVybiB0Lnl9dmFyIFZjPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiBXYyh0LG4pe2lmKChlPSh0PW4/dC50b0V4cG9uZW50aWFsKG4tMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxyPXQuc2xpY2UoMCxlKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShlKzEpXX1mdW5jdGlvbiBaYyh0KXtyZXR1cm4odD1XYyhNYXRoLmFicyh0KSkpP3RbMV06TmFOfXZhciBLYyxRYz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBKYyh0KXtpZighKG49UWMuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgbjtyZXR1cm4gbmV3IHRmKHtmaWxsOm5bMV0sYWxpZ246blsyXSxzaWduOm5bM10sc3ltYm9sOm5bNF0semVybzpuWzVdLHdpZHRoOm5bNl0sY29tbWE6bls3XSxwcmVjaXNpb246bls4XSYmbls4XS5zbGljZSgxKSx0cmltOm5bOV0sdHlwZTpuWzEwXX0pfWZ1bmN0aW9uIHRmKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIG5mKHQsbil7dmFyIGU9V2ModCxuKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgcj1lWzBdLGk9ZVsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX1KYy5wcm90b3R5cGU9dGYucHJvdG90eXBlLHRmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBlZj17IiUiOih0LG4pPT4oMTAwKnQpLnRvRml4ZWQobiksYjp0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpLGM6dD0+dCsiIixkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZToodCxuKT0+dC50b0V4cG9uZW50aWFsKG4pLGY6KHQsbik9PnQudG9GaXhlZChuKSxnOih0LG4pPT50LnRvUHJlY2lzaW9uKG4pLG86dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KSxwOih0LG4pPT5uZigxMDAqdCxuKSxyOm5mLHM6ZnVuY3Rpb24odCxuKXt2YXIgZT1XYyh0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdLG89aS0oS2M9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLGE9ci5sZW5ndGg7cmV0dXJuIG89PT1hP3I6bz5hP3IrbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP3Iuc2xpY2UoMCxvKSsiLiIrci5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStXYyh0LE1hdGgubWF4KDAsbitvLTEpKVswXX0sWDp0PT5NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6dD0+TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9O2Z1bmN0aW9uIHJmKHQpe3JldHVybiB0fXZhciBvZixhZj1BcnJheS5wcm90b3R5cGUubWFwLHVmPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBjZih0KXt2YXIgbixlLHI9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/cmY6KG49YWYuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksZT10LnRob3VzYW5kcysiIixmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxvPVtdLGE9MCx1PW5bMF0sYz0wO2k+MCYmdT4wJiYoYyt1KzE+ciYmKHU9TWF0aC5tYXgoMSxyLWMpKSxvLnB1c2godC5zdWJzdHJpbmcoaS09dSxpK3UpKSwhKChjKz11KzEpPnIpKTspdT1uW2E9KGErMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKGUpfSksaT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMF0rIiIsbz12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMV0rIiIsYT12b2lkIDA9PT10LmRlY2ltYWw/Ii4iOnQuZGVjaW1hbCsiIix1PXZvaWQgMD09PXQubnVtZXJhbHM/cmY6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKG4pe3JldHVybiB0WytuXX0pKX19KGFmLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxjPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGY9dm9pZCAwPT09dC5taW51cz8i4oiSIjp0Lm1pbnVzKyIiLHM9dm9pZCAwPT09dC5uYW4/Ik5hTiI6dC5uYW4rIiI7ZnVuY3Rpb24gbCh0KXt2YXIgbj0odD1KYyh0KSkuZmlsbCxlPXQuYWxpZ24sbD10LnNpZ24saD10LnN5bWJvbCxkPXQuemVybyxwPXQud2lkdGgsZz10LmNvbW1hLHk9dC5wcmVjaXNpb24sdj10LnRyaW0sXz10LnR5cGU7Im4iPT09Xz8oZz0hMCxfPSJnIik6ZWZbX118fCh2b2lkIDA9PT15JiYoeT0xMiksdj0hMCxfPSJnIiksKGR8fCIwIj09PW4mJiI9Ij09PWUpJiYoZD0hMCxuPSIwIixlPSI9Iik7dmFyIGI9IiQiPT09aD9pOiIjIj09PWgmJi9bYm94WF0vLnRlc3QoXyk/IjAiK18udG9Mb3dlckNhc2UoKToiIixtPSIkIj09PWg/bzovWyVwXS8udGVzdChfKT9jOiIiLHg9ZWZbX10sdz0vW2RlZmdwcnMlXS8udGVzdChfKTtmdW5jdGlvbiBNKHQpe3ZhciBpLG8sYyxoPWIsTT1tO2lmKCJjIj09PV8pTT14KHQpK00sdD0iIjtlbHNle3ZhciBUPSh0PSt0KTwwfHwxL3Q8MDtpZih0PWlzTmFOKHQpP3M6eChNYXRoLmFicyh0KSx5KSx2JiYodD1mdW5jdGlvbih0KXt0OmZvcih2YXIgbixlPXQubGVuZ3RoLHI9MSxpPS0xO3I8ZTsrK3Ipc3dpdGNoKHRbcl0pe2Nhc2UiLiI6aT1uPXI7YnJlYWs7Y2FzZSIwIjowPT09aSYmKGk9ciksbj1yO2JyZWFrO2RlZmF1bHQ6aWYoISt0W3JdKWJyZWFrIHQ7aT4wJiYoaT0wKX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKG4rMSk6dH0odCkpLFQmJjA9PSt0JiYiKyIhPT1sJiYoVD0hMSksaD0oVD8iKCI9PT1sP2w6ZjoiLSI9PT1sfHwiKCI9PT1sPyIiOmwpK2gsTT0oInMiPT09Xz91Zls4K0tjLzNdOiIiKStNKyhUJiYiKCI9PT1sPyIpIjoiIiksdylmb3IoaT0tMSxvPXQubGVuZ3RoOysraTxvOylpZig0OD4oYz10LmNoYXJDb2RlQXQoaSkpfHxjPjU3KXtNPSg0Nj09PWM/YSt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkrTSx0PXQuc2xpY2UoMCxpKTticmVha319ZyYmIWQmJih0PXIodCwxLzApKTt2YXIgQT1oLmxlbmd0aCt0Lmxlbmd0aCtNLmxlbmd0aCxTPUE8cD9uZXcgQXJyYXkocC1BKzEpLmpvaW4obik6IiI7c3dpdGNoKGcmJmQmJih0PXIoUyt0LFMubGVuZ3RoP3AtTS5sZW5ndGg6MS8wKSxTPSIiKSxlKXtjYXNlIjwiOnQ9aCt0K00rUzticmVhaztjYXNlIj0iOnQ9aCtTK3QrTTticmVhaztjYXNlIl4iOnQ9Uy5zbGljZSgwLEE9Uy5sZW5ndGg+PjEpK2grdCtNK1Muc2xpY2UoQSk7YnJlYWs7ZGVmYXVsdDp0PVMraCt0K019cmV0dXJuIHUodCl9cmV0dXJuIHk9dm9pZCAwPT09eT82Oi9bZ3Byc10vLnRlc3QoXyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSx5KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCx5KSksTS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxNfXJldHVybntmb3JtYXQ6bCxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxuKXt2YXIgZT1sKCgodD1KYyh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoWmMobikvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPXVmWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUoaSp0KStvfX19fWZ1bmN0aW9uIGZmKG4pe3JldHVybiBvZj1jZihuKSx0LmZvcm1hdD1vZi5mb3JtYXQsdC5mb3JtYXRQcmVmaXg9b2YuZm9ybWF0UHJlZml4LG9mfWZ1bmN0aW9uIHNmKHQpe3JldHVybiBNYXRoLm1heCgwLC1aYyhNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIGxmKHQsbil7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoWmMobikvMykpKS1aYyhNYXRoLmFicyh0KSkpfWZ1bmN0aW9uIGhmKHQsbil7cmV0dXJuIHQ9TWF0aC5hYnModCksbj1NYXRoLmFicyhuKS10LE1hdGgubWF4KDAsWmMobiktWmModCkpKzF9dC5mb3JtYXQ9dm9pZCAwLHQuZm9ybWF0UHJlZml4PXZvaWQgMCxmZih7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTt2YXIgZGY9MWUtNixwZj0xZS0xMixnZj1NYXRoLlBJLHlmPWdmLzIsdmY9Z2YvNCxfZj0yKmdmLGJmPTE4MC9nZixtZj1nZi8xODAseGY9TWF0aC5hYnMsd2Y9TWF0aC5hdGFuLE1mPU1hdGguYXRhbjIsVGY9TWF0aC5jb3MsQWY9TWF0aC5jZWlsLFNmPU1hdGguZXhwLEVmPU1hdGguaHlwb3QsTmY9TWF0aC5sb2csa2Y9TWF0aC5wb3csQ2Y9TWF0aC5zaW4sUGY9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LHpmPU1hdGguc3FydCwkZj1NYXRoLnRhbjtmdW5jdGlvbiBEZih0KXtyZXR1cm4gdD4xPzA6dDwtMT9nZjpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gUmYodCl7cmV0dXJuIHQ+MT95Zjp0PC0xPy15ZjpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRmYodCl7cmV0dXJuKHQ9Q2YodC8yKSkqdH1mdW5jdGlvbiBxZigpe31mdW5jdGlvbiBVZih0LG4pe3QmJk9mLmhhc093blByb3BlcnR5KHQudHlwZSkmJk9mW3QudHlwZV0odCxuKX12YXIgSWY9e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXtVZih0Lmdlb21ldHJ5LG4pfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmZlYXR1cmVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspVWYoZVtyXS5nZW9tZXRyeSxuKX19LE9mPXtTcGhlcmU6ZnVuY3Rpb24odCxuKXtuLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LG4pe3Q9dC5jb29yZGluYXRlcyxuLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspdD1lW3JdLG4ucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7QmYodC5jb29yZGluYXRlcyxuLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KUJmKGVbcl0sbiwwKX0sUG9seWdvbjpmdW5jdGlvbih0LG4pe1lmKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspWWYoZVtyXSxuKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KVVmKGVbcl0sbil9fTtmdW5jdGlvbiBCZih0LG4sZSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoLWU7Zm9yKG4ubGluZVN0YXJ0KCk7KytpPG87KXI9dFtpXSxuLnBvaW50KHJbMF0sclsxXSxyWzJdKTtuLmxpbmVFbmQoKX1mdW5jdGlvbiBZZih0LG4pe3ZhciBlPS0xLHI9dC5sZW5ndGg7Zm9yKG4ucG9seWdvblN0YXJ0KCk7KytlPHI7KUJmKHRbZV0sbiwxKTtuLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBMZih0LG4pe3QmJklmLmhhc093blByb3BlcnR5KHQudHlwZSk/SWZbdC50eXBlXSh0LG4pOlVmKHQsbil9dmFyIGpmLEhmLFhmLEdmLFZmLFdmLFpmLEtmLFFmLEpmLHRzLG5zLGVzLHJzLGlzLG9zLGFzPW5ldyBULHVzPW5ldyBULGNzPXtwb2ludDpxZixsaW5lU3RhcnQ6cWYsbGluZUVuZDpxZixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthcz1uZXcgVCxjcy5saW5lU3RhcnQ9ZnMsY3MubGluZUVuZD1zc30scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PSthczt1cy5hZGQodDwwP19mK3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9cWZ9LHNwaGVyZTpmdW5jdGlvbigpe3VzLmFkZChfZil9fTtmdW5jdGlvbiBmcygpe2NzLnBvaW50PWxzfWZ1bmN0aW9uIHNzKCl7aHMoamYsSGYpfWZ1bmN0aW9uIGxzKHQsbil7Y3MucG9pbnQ9aHMsamY9dCxIZj1uLFhmPXQqPW1mLEdmPVRmKG49KG4qPW1mKS8yK3ZmKSxWZj1DZihuKX1mdW5jdGlvbiBocyh0LG4pe3ZhciBlPSh0Kj1tZiktWGYscj1lPj0wPzE6LTEsaT1yKmUsbz1UZihuPShuKj1tZikvMit2ZiksYT1DZihuKSx1PVZmKmEsYz1HZipvK3UqVGYoaSksZj11KnIqQ2YoaSk7YXMuYWRkKE1mKGYsYykpLFhmPXQsR2Y9byxWZj1hfWZ1bmN0aW9uIGRzKHQpe3JldHVybltNZih0WzFdLHRbMF0pLFJmKHRbMl0pXX1mdW5jdGlvbiBwcyh0KXt2YXIgbj10WzBdLGU9dFsxXSxyPVRmKGUpO3JldHVybltyKlRmKG4pLHIqQ2YobiksQ2YoZSldfWZ1bmN0aW9uIGdzKHQsbil7cmV0dXJuIHRbMF0qblswXSt0WzFdKm5bMV0rdFsyXSpuWzJdfWZ1bmN0aW9uIHlzKHQsbil7cmV0dXJuW3RbMV0qblsyXS10WzJdKm5bMV0sdFsyXSpuWzBdLXRbMF0qblsyXSx0WzBdKm5bMV0tdFsxXSpuWzBdXX1mdW5jdGlvbiB2cyh0LG4pe3RbMF0rPW5bMF0sdFsxXSs9blsxXSx0WzJdKz1uWzJdfWZ1bmN0aW9uIF9zKHQsbil7cmV0dXJuW3RbMF0qbix0WzFdKm4sdFsyXSpuXX1mdW5jdGlvbiBicyh0KXt2YXIgbj16Zih0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89bix0WzFdLz1uLHRbMl0vPW59dmFyIG1zLHhzLHdzLE1zLFRzLEFzLFNzLEVzLE5zLGtzLENzLFBzLHpzLCRzLERzLFJzLEZzPXtwb2ludDpxcyxsaW5lU3RhcnQ6SXMsbGluZUVuZDpPcyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtGcy5wb2ludD1CcyxGcy5saW5lU3RhcnQ9WXMsRnMubGluZUVuZD1Mcyxycz1uZXcgVCxjcy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2NzLnBvbHlnb25FbmQoKSxGcy5wb2ludD1xcyxGcy5saW5lU3RhcnQ9SXMsRnMubGluZUVuZD1PcyxhczwwPyhXZj0tKEtmPTE4MCksWmY9LShRZj05MCkpOnJzPmRmP1FmPTkwOnJzPC1kZiYmKFpmPS05MCksb3NbMF09V2Ysb3NbMV09S2Z9LHNwaGVyZTpmdW5jdGlvbigpe1dmPS0oS2Y9MTgwKSxaZj0tKFFmPTkwKX19O2Z1bmN0aW9uIHFzKHQsbil7aXMucHVzaChvcz1bV2Y9dCxLZj10XSksbjxaZiYmKFpmPW4pLG4+UWYmJihRZj1uKX1mdW5jdGlvbiBVcyh0LG4pe3ZhciBlPXBzKFt0Km1mLG4qbWZdKTtpZihlcyl7dmFyIHI9eXMoZXMsZSksaT15cyhbclsxXSwtclswXSwwXSxyKTticyhpKSxpPWRzKGkpO3ZhciBvLGE9dC1KZix1PWE+MD8xOi0xLGM9aVswXSpiZip1LGY9eGYoYSk+MTgwO2ZeKHUqSmY8YyYmYzx1KnQpPyhvPWlbMV0qYmYpPlFmJiYoUWY9byk6Zl4odSpKZjwoYz0oYyszNjApJTM2MC0xODApJiZjPHUqdCk/KG89LWlbMV0qYmYpPFpmJiYoWmY9byk6KG48WmYmJihaZj1uKSxuPlFmJiYoUWY9bikpLGY/dDxKZj9qcyhXZix0KT5qcyhXZixLZikmJihLZj10KTpqcyh0LEtmKT5qcyhXZixLZikmJihXZj10KTpLZj49V2Y/KHQ8V2YmJihXZj10KSx0PktmJiYoS2Y9dCkpOnQ+SmY/anMoV2YsdCk+anMoV2YsS2YpJiYoS2Y9dCk6anModCxLZik+anMoV2YsS2YpJiYoV2Y9dCl9ZWxzZSBpcy5wdXNoKG9zPVtXZj10LEtmPXRdKTtuPFpmJiYoWmY9biksbj5RZiYmKFFmPW4pLGVzPWUsSmY9dH1mdW5jdGlvbiBJcygpe0ZzLnBvaW50PVVzfWZ1bmN0aW9uIE9zKCl7b3NbMF09V2Ysb3NbMV09S2YsRnMucG9pbnQ9cXMsZXM9bnVsbH1mdW5jdGlvbiBCcyh0LG4pe2lmKGVzKXt2YXIgZT10LUpmO3JzLmFkZCh4ZihlKT4xODA/ZSsoZT4wPzM2MDotMzYwKTplKX1lbHNlIHRzPXQsbnM9bjtjcy5wb2ludCh0LG4pLFVzKHQsbil9ZnVuY3Rpb24gWXMoKXtjcy5saW5lU3RhcnQoKX1mdW5jdGlvbiBMcygpe0JzKHRzLG5zKSxjcy5saW5lRW5kKCkseGYocnMpPmRmJiYoV2Y9LShLZj0xODApKSxvc1swXT1XZixvc1sxXT1LZixlcz1udWxsfWZ1bmN0aW9uIGpzKHQsbil7cmV0dXJuKG4tPXQpPDA/biszNjA6bn1mdW5jdGlvbiBIcyh0LG4pe3JldHVybiB0WzBdLW5bMF19ZnVuY3Rpb24gWHModCxuKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1uJiZuPD10WzFdOm48dFswXXx8dFsxXTxufXZhciBHcz17c3BoZXJlOnFmLHBvaW50OlZzLGxpbmVTdGFydDpacyxsaW5lRW5kOkpzLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0dzLmxpbmVTdGFydD10bCxHcy5saW5lRW5kPW5sfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7R3MubGluZVN0YXJ0PVpzLEdzLmxpbmVFbmQ9SnN9fTtmdW5jdGlvbiBWcyh0LG4pe3QqPW1mO3ZhciBlPVRmKG4qPW1mKTtXcyhlKlRmKHQpLGUqQ2YodCksQ2YobikpfWZ1bmN0aW9uIFdzKHQsbixlKXsrK21zLHdzKz0odC13cykvbXMsTXMrPShuLU1zKS9tcyxUcys9KGUtVHMpL21zfWZ1bmN0aW9uIFpzKCl7R3MucG9pbnQ9S3N9ZnVuY3Rpb24gS3ModCxuKXt0Kj1tZjt2YXIgZT1UZihuKj1tZik7JHM9ZSpUZih0KSxEcz1lKkNmKHQpLFJzPUNmKG4pLEdzLnBvaW50PVFzLFdzKCRzLERzLFJzKX1mdW5jdGlvbiBRcyh0LG4pe3QqPW1mO3ZhciBlPVRmKG4qPW1mKSxyPWUqVGYodCksaT1lKkNmKHQpLG89Q2YobiksYT1NZih6ZigoYT1EcypvLVJzKmkpKmErKGE9UnMqci0kcypvKSphKyhhPSRzKmktRHMqcikqYSksJHMqcitEcyppK1JzKm8pO3hzKz1hLEFzKz1hKigkcysoJHM9cikpLFNzKz1hKihEcysoRHM9aSkpLEVzKz1hKihScysoUnM9bykpLFdzKCRzLERzLFJzKX1mdW5jdGlvbiBKcygpe0dzLnBvaW50PVZzfWZ1bmN0aW9uIHRsKCl7R3MucG9pbnQ9ZWx9ZnVuY3Rpb24gbmwoKXtybChQcyx6cyksR3MucG9pbnQ9VnN9ZnVuY3Rpb24gZWwodCxuKXtQcz10LHpzPW4sdCo9bWYsbio9bWYsR3MucG9pbnQ9cmw7dmFyIGU9VGYobik7JHM9ZSpUZih0KSxEcz1lKkNmKHQpLFJzPUNmKG4pLFdzKCRzLERzLFJzKX1mdW5jdGlvbiBybCh0LG4pe3QqPW1mO3ZhciBlPVRmKG4qPW1mKSxyPWUqVGYodCksaT1lKkNmKHQpLG89Q2YobiksYT1EcypvLVJzKmksdT1ScypyLSRzKm8sYz0kcyppLURzKnIsZj1FZihhLHUsYykscz1SZihmKSxsPWYmJi1zL2Y7TnMuYWRkKGwqYSksa3MuYWRkKGwqdSksQ3MuYWRkKGwqYykseHMrPXMsQXMrPXMqKCRzKygkcz1yKSksU3MrPXMqKERzKyhEcz1pKSksRXMrPXMqKFJzKyhScz1vKSksV3MoJHMsRHMsUnMpfWZ1bmN0aW9uIGlsKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvbCh0LG4pe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT10KGUsciksbihlWzBdLGVbMV0pfXJldHVybiB0LmludmVydCYmbi5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybihlPW4uaW52ZXJ0KGUscikpJiZ0LmludmVydChlWzBdLGVbMV0pfSksZX1mdW5jdGlvbiBhbCh0LG4pe3JldHVybiB4Zih0KT5nZiYmKHQtPU1hdGgucm91bmQodC9fZikqX2YpLFt0LG5dfWZ1bmN0aW9uIHVsKHQsbixlKXtyZXR1cm4odCU9X2YpP258fGU/b2woZmwodCksc2wobixlKSk6ZmwodCk6bnx8ZT9zbChuLGUpOmFsfWZ1bmN0aW9uIGNsKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiB4ZihuKz10KT5nZiYmKG4tPU1hdGgucm91bmQobi9fZikqX2YpLFtuLGVdfX1mdW5jdGlvbiBmbCh0KXt2YXIgbj1jbCh0KTtyZXR1cm4gbi5pbnZlcnQ9Y2woLXQpLG59ZnVuY3Rpb24gc2wodCxuKXt2YXIgZT1UZih0KSxyPUNmKHQpLGk9VGYobiksbz1DZihuKTtmdW5jdGlvbiBhKHQsbil7dmFyIGE9VGYobiksdT1UZih0KSphLGM9Q2YodCkqYSxmPUNmKG4pLHM9ZiplK3UqcjtyZXR1cm5bTWYoYyppLXMqbyx1KmUtZipyKSxSZihzKmkrYypvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGE9VGYobiksdT1UZih0KSphLGM9Q2YodCkqYSxmPUNmKG4pLHM9ZippLWMqbztyZXR1cm5bTWYoYyppK2Yqbyx1KmUrcypyKSxSZihzKmUtdSpyKV19LGF9ZnVuY3Rpb24gbGwodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4obj10KG5bMF0qbWYsblsxXSptZikpWzBdKj1iZixuWzFdKj1iZixufXJldHVybiB0PXVsKHRbMF0qbWYsdFsxXSptZix0Lmxlbmd0aD4yP3RbMl0qbWY6MCksbi5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuKG49dC5pbnZlcnQoblswXSptZixuWzFdKm1mKSlbMF0qPWJmLG5bMV0qPWJmLG59LG59ZnVuY3Rpb24gaGwodCxuLGUscixpLG8pe2lmKGUpe3ZhciBhPVRmKG4pLHU9Q2YobiksYz1yKmU7bnVsbD09aT8oaT1uK3IqX2Ysbz1uLWMvMik6KGk9ZGwoYSxpKSxvPWRsKGEsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqX2YpKTtmb3IodmFyIGYscz1pO3I+MD9zPm86czxvO3MtPWMpZj1kcyhbYSwtdSpUZihzKSwtdSpDZihzKV0pLHQucG9pbnQoZlswXSxmWzFdKX19ZnVuY3Rpb24gZGwodCxuKXsobj1wcyhuKSlbMF0tPXQsYnMobik7dmFyIGU9RGYoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKStfZi1kZiklX2Z9ZnVuY3Rpb24gcGwoKXt2YXIgdCxuPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihuLGUscil7dC5wdXNoKFtuLGUscl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLnB1c2godD1bXSl9LGxpbmVFbmQ6cWYscmVqb2luOmZ1bmN0aW9uKCl7bi5sZW5ndGg+MSYmbi5wdXNoKG4ucG9wKCkuY29uY2F0KG4uc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1uO3JldHVybiBuPVtdLHQ9bnVsbCxlfX19ZnVuY3Rpb24gZ2wodCxuKXtyZXR1cm4geGYodFswXS1uWzBdKTxkZiYmeGYodFsxXS1uWzFdKTxkZn1mdW5jdGlvbiB5bCh0LG4sZSxyKXt0aGlzLng9dCx0aGlzLno9bix0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIHZsKHQsbixlLHIsaSl7dmFyIG8sYSx1PVtdLGM9W107aWYodC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighKChuPXQubGVuZ3RoLTEpPD0wKSl7dmFyIG4sZSxyPXRbMF0sYT10W25dO2lmKGdsKHIsYSkpe2lmKCFyWzJdJiYhYVsyXSl7Zm9yKGkubGluZVN0YXJ0KCksbz0wO288bjsrK28paS5wb2ludCgocj10W29dKVswXSxyWzFdKTtyZXR1cm4gdm9pZCBpLmxpbmVFbmQoKX1hWzBdKz0yKmRmfXUucHVzaChlPW5ldyB5bChyLHQsbnVsbCwhMCkpLGMucHVzaChlLm89bmV3IHlsKHIsbnVsbCxlLCExKSksdS5wdXNoKGU9bmV3IHlsKGEsdCxudWxsLCExKSksYy5wdXNoKGUubz1uZXcgeWwoYSxudWxsLGUsITApKX19KSksdS5sZW5ndGgpe2ZvcihjLnNvcnQobiksX2wodSksX2woYyksbz0wLGE9Yy5sZW5ndGg7bzxhOysrbyljW29dLmU9ZT0hZTtmb3IodmFyIGYscyxsPXVbMF07Oyl7Zm9yKHZhciBoPWwsZD0hMDtoLnY7KWlmKChoPWgubik9PT1sKXJldHVybjtmPWgueixpLmxpbmVTdGFydCgpO2Rve2lmKGgudj1oLm8udj0hMCxoLmUpe2lmKGQpZm9yKG89MCxhPWYubGVuZ3RoO288YTsrK28paS5wb2ludCgocz1mW29dKVswXSxzWzFdKTtlbHNlIHIoaC54LGgubi54LDEsaSk7aD1oLm59ZWxzZXtpZihkKWZvcihmPWgucC56LG89Zi5sZW5ndGgtMTtvPj0wOy0tbylpLnBvaW50KChzPWZbb10pWzBdLHNbMV0pO2Vsc2UgcihoLngsaC5wLngsLTEsaSk7aD1oLnB9Zj0oaD1oLm8pLnosZD0hZH13aGlsZSghaC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIF9sKHQpe2lmKG49dC5sZW5ndGgpe2Zvcih2YXIgbixlLHI9MCxpPXRbMF07KytyPG47KWkubj1lPXRbcl0sZS5wPWksaT1lO2kubj1lPXRbMF0sZS5wPWl9fWZ1bmN0aW9uIGJsKHQpe3JldHVybiB4Zih0WzBdKTw9Z2Y/dFswXTpQZih0WzBdKSooKHhmKHRbMF0pK2dmKSVfZi1nZil9ZnVuY3Rpb24gbWwodCxuKXt2YXIgZT1ibChuKSxyPW5bMV0saT1DZihyKSxvPVtDZihlKSwtVGYoZSksMF0sYT0wLHU9MCxjPW5ldyBUOzE9PT1pP3I9eWYrZGY6LTE9PT1pJiYocj0teWYtZGYpO2Zvcih2YXIgZj0wLHM9dC5sZW5ndGg7ZjxzOysrZilpZihoPShsPXRbZl0pLmxlbmd0aClmb3IodmFyIGwsaCxkPWxbaC0xXSxwPWJsKGQpLGc9ZFsxXS8yK3ZmLHk9Q2YoZyksdj1UZihnKSxfPTA7XzxoOysrXyxwPW0seT13LHY9TSxkPWIpe3ZhciBiPWxbX10sbT1ibChiKSx4PWJbMV0vMit2Zix3PUNmKHgpLE09VGYoeCksQT1tLXAsUz1BPj0wPzE6LTEsRT1TKkEsTj1FPmdmLGs9eSp3O2lmKGMuYWRkKE1mKGsqUypDZihFKSx2Kk0raypUZihFKSkpLGErPU4/QStTKl9mOkEsTl5wPj1lXm0+PWUpe3ZhciBDPXlzKHBzKGQpLHBzKGIpKTticyhDKTt2YXIgUD15cyhvLEMpO2JzKFApO3ZhciB6PShOXkE+PTA/LTE6MSkqUmYoUFsyXSk7KHI+enx8cj09PXomJihDWzBdfHxDWzFdKSkmJih1Kz1OXkE+PTA/MTotMSl9fXJldHVybihhPC1kZnx8YTxkZiYmYzwtcGYpXjEmdX1mdW5jdGlvbiB4bCh0LG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG8sYSx1LGM9bihpKSxmPXBsKCkscz1uKGYpLGw9ITEsaD17cG9pbnQ6ZCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnkscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7aC5wb2ludD12LGgubGluZVN0YXJ0PV8saC5saW5lRW5kPWIsYT1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7aC5wb2ludD1kLGgubGluZVN0YXJ0PWcsaC5saW5lRW5kPXksYT1mdChhKTt2YXIgdD1tbChvLHIpO2EubGVuZ3RoPyhsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSx2bChhLE1sLHQsZSxpKSk6dCYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLGE9bz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIGQobixlKXt0KG4sZSkmJmkucG9pbnQobixlKX1mdW5jdGlvbiBwKHQsbil7Yy5wb2ludCh0LG4pfWZ1bmN0aW9uIGcoKXtoLnBvaW50PXAsYy5saW5lU3RhcnQoKX1mdW5jdGlvbiB5KCl7aC5wb2ludD1kLGMubGluZUVuZCgpfWZ1bmN0aW9uIHYodCxuKXt1LnB1c2goW3Qsbl0pLHMucG9pbnQodCxuKX1mdW5jdGlvbiBfKCl7cy5saW5lU3RhcnQoKSx1PVtdfWZ1bmN0aW9uIGIoKXt2KHVbMF1bMF0sdVswXVsxXSkscy5saW5lRW5kKCk7dmFyIHQsbixlLHIsYz1zLmNsZWFuKCksaD1mLnJlc3VsdCgpLGQ9aC5sZW5ndGg7aWYodS5wb3AoKSxvLnB1c2godSksdT1udWxsLGQpaWYoMSZjKXtpZigobj0oZT1oWzBdKS5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksdD0wO3Q8bjsrK3QpaS5wb2ludCgocj1lW3RdKVswXSxyWzFdKTtpLmxpbmVFbmQoKX19ZWxzZSBkPjEmJjImYyYmaC5wdXNoKGgucG9wKCkuY29uY2F0KGguc2hpZnQoKSkpLGEucHVzaChoLmZpbHRlcih3bCkpfXJldHVybiBofX1mdW5jdGlvbiB3bCh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBNbCh0LG4pe3JldHVybigodD10LngpWzBdPDA/dFsxXS15Zi1kZjp5Zi10WzFdKS0oKG49bi54KVswXTwwP25bMV0teWYtZGY6eWYtblsxXSl9YWwuaW52ZXJ0PWFsO3ZhciBUbD14bCgoZnVuY3Rpb24oKXtyZXR1cm4hMH0pLChmdW5jdGlvbih0KXt2YXIgbixlPU5hTixyPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxuPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHU9bz4wP2dmOi1nZixjPXhmKG8tZSk7eGYoYy1nZik8ZGY/KHQucG9pbnQoZSxyPShyK2EpLzI+MD95ZjoteWYpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQodSxyKSx0LnBvaW50KG8sciksbj0wKTppIT09dSYmYz49Z2YmJih4ZihlLWkpPGRmJiYoZS09aSpkZikseGYoby11KTxkZiYmKG8tPXUqZGYpLHI9ZnVuY3Rpb24odCxuLGUscil7dmFyIGksbyxhPUNmKHQtZSk7cmV0dXJuIHhmKGEpPmRmP3dmKChDZihuKSoobz1UZihyKSkqQ2YoZSktQ2YocikqKGk9VGYobikpKkNmKHQpKS8oaSpvKmEpKToobityKS8yfShlLHIsbyxhKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsciksbj0wKSx0LnBvaW50KGU9byxyPWEpLGk9dX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGU9cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItbn19fSksKGZ1bmN0aW9uKHQsbixlLHIpe3ZhciBpO2lmKG51bGw9PXQpaT1lKnlmLHIucG9pbnQoLWdmLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KGdmLGkpLHIucG9pbnQoZ2YsMCksci5wb2ludChnZiwtaSksci5wb2ludCgwLC1pKSxyLnBvaW50KC1nZiwtaSksci5wb2ludCgtZ2YsMCksci5wb2ludCgtZ2YsaSk7ZWxzZSBpZih4Zih0WzBdLW5bMF0pPmRmKXt2YXIgbz10WzBdPG5bMF0/Z2Y6LWdmO2k9ZSpvLzIsci5wb2ludCgtbyxpKSxyLnBvaW50KDAsaSksci5wb2ludChvLGkpfWVsc2Ugci5wb2ludChuWzBdLG5bMV0pfSksWy1nZiwteWZdKTtmdW5jdGlvbiBBbCh0KXt2YXIgbj1UZih0KSxlPTIqbWYscj1uPjAsaT14ZihuKT5kZjtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIFRmKHQpKlRmKGUpPm59ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9WzEsMCwwXSxvPXlzKHBzKHQpLHBzKGUpKSxhPWdzKG8sbyksdT1vWzBdLGM9YS11KnU7aWYoIWMpcmV0dXJuIXImJnQ7dmFyIGY9biphL2Mscz0tbip1L2MsbD15cyhpLG8pLGg9X3MoaSxmKTt2cyhoLF9zKG8scykpO3ZhciBkPWwscD1ncyhoLGQpLGc9Z3MoZCxkKSx5PXAqcC1nKihncyhoLGgpLTEpO2lmKCEoeTwwKSl7dmFyIHY9emYoeSksXz1fcyhkLCgtcC12KS9nKTtpZih2cyhfLGgpLF89ZHMoXyksIXIpcmV0dXJuIF87dmFyIGIsbT10WzBdLHg9ZVswXSx3PXRbMV0sTT1lWzFdO3g8bSYmKGI9bSxtPXgseD1iKTt2YXIgVD14LW0sQT14ZihULWdmKTxkZjtpZighQSYmTTx3JiYoYj13LHc9TSxNPWIpLEF8fFQ8ZGY/QT93K00+MF5fWzFdPCh4ZihfWzBdLW0pPGRmP3c6TSk6dzw9X1sxXSYmX1sxXTw9TTpUPmdmXihtPD1fWzBdJiZfWzBdPD14KSl7dmFyIFM9X3MoZCwoLXArdikvZyk7cmV0dXJuIHZzKFMsaCksW18sZHMoUyldfX19ZnVuY3Rpb24gdShuLGUpe3ZhciBpPXI/dDpnZi10LG89MDtyZXR1cm4gbjwtaT9vfD0xOm4+aSYmKG98PTIpLGU8LWk/b3w9NDplPmkmJihvfD04KSxvfXJldHVybiB4bChvLChmdW5jdGlvbih0KXt2YXIgbixlLGMsZixzO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmPWM9ITEscz0xfSxwb2ludDpmdW5jdGlvbihsLGgpe3ZhciBkLHA9W2wsaF0sZz1vKGwsaCkseT1yP2c/MDp1KGwsaCk6Zz91KGwrKGw8MD9nZjotZ2YpLGgpOjA7aWYoIW4mJihmPWM9ZykmJnQubGluZVN0YXJ0KCksZyE9PWMmJighKGQ9YShuLHApKXx8Z2wobixkKXx8Z2wocCxkKSkmJihwWzJdPTEpLGchPT1jKXM9MCxnPyh0LmxpbmVTdGFydCgpLGQ9YShwLG4pLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9YShuLHApLHQucG9pbnQoZFswXSxkWzFdLDIpLHQubGluZUVuZCgpKSxuPWQ7ZWxzZSBpZihpJiZuJiZyXmcpe3ZhciB2O3kmZXx8ISh2PWEocCxuLCEwKSl8fChzPTAscj8odC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSksdC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh2WzBdWzBdLHZbMF1bMV0sMykpKX0hZ3x8biYmZ2wobixwKXx8dC5wb2ludChwWzBdLHBbMV0pLG49cCxjPWcsZT15fSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmdC5saW5lRW5kKCksbj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBzfChmJiZjKTw8MX19fSksKGZ1bmN0aW9uKG4scixpLG8pe2hsKG8sdCxlLGksbixyKX0pLHI/WzAsLXRdOlstZ2YsdC1nZl0pfXZhciBTbCxFbCxObCxrbCxDbD0xZTksUGw9LUNsO2Z1bmN0aW9uIHpsKHQsbixlLHIpe2Z1bmN0aW9uIGkoaSxvKXtyZXR1cm4gdDw9aSYmaTw9ZSYmbjw9byYmbzw9cn1mdW5jdGlvbiBvKGksbyx1LGYpe3ZhciBzPTAsbD0wO2lmKG51bGw9PWl8fChzPWEoaSx1KSkhPT0obD1hKG8sdSkpfHxjKGksbyk8MF51PjApZG97Zi5wb2ludCgwPT09c3x8Mz09PXM/dDplLHM+MT9yOm4pfXdoaWxlKChzPShzK3UrNCklNCkhPT1sKTtlbHNlIGYucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKHIsaSl7cmV0dXJuIHhmKHJbMF0tdCk8ZGY/aT4wPzA6Mzp4ZihyWzBdLWUpPGRmP2k+MD8yOjE6eGYoclsxXS1uKTxkZj9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gdSh0LG4pe3JldHVybiBjKHQueCxuLngpfWZ1bmN0aW9uIGModCxuKXt2YXIgZT1hKHQsMSkscj1hKG4sMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT9uWzFdLXRbMV06MT09PWU/dFswXS1uWzBdOjI9PT1lP3RbMV0tblsxXTpuWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjLGYscyxsLGgsZCxwLGcseSx2LF8sYj1hLG09cGwoKSx4PXtwb2ludDp3LGxpbmVTdGFydDpmdW5jdGlvbigpe3gucG9pbnQ9TSxmJiZmLnB1c2gocz1bXSk7dj0hMCx5PSExLHA9Zz1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiYoTShsLGgpLGQmJnkmJm0ucmVqb2luKCksYy5wdXNoKG0ucmVzdWx0KCkpKTt4LnBvaW50PXcseSYmYi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2I9bSxjPVtdLGY9W10sXz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBuPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsZT0wLGk9Zi5sZW5ndGg7ZTxpOysrZSlmb3IodmFyIG8sYSx1PWZbZV0sYz0xLHM9dS5sZW5ndGgsbD11WzBdLGg9bFswXSxkPWxbMV07YzxzOysrYylvPWgsYT1kLGg9KGw9dVtjXSlbMF0sZD1sWzFdLGE8PXI/ZD5yJiYoaC1vKSooci1hKT4oZC1hKSoodC1vKSYmKytuOmQ8PXImJihoLW8pKihyLWEpPChkLWEpKih0LW8pJiYtLW47cmV0dXJuIG59KCksZT1fJiZuLGk9KGM9ZnQoYykpLmxlbmd0aDsoZXx8aSkmJihhLnBvbHlnb25TdGFydCgpLGUmJihhLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLGkmJnZsKGMsdSxuLG8sYSksYS5wb2x5Z29uRW5kKCkpO2I9YSxjPWY9cz1udWxsfX07ZnVuY3Rpb24gdyh0LG4pe2kodCxuKSYmYi5wb2ludCh0LG4pfWZ1bmN0aW9uIE0obyxhKXt2YXIgdT1pKG8sYSk7aWYoZiYmcy5wdXNoKFtvLGFdKSx2KWw9byxoPWEsZD11LHY9ITEsdSYmKGIubGluZVN0YXJ0KCksYi5wb2ludChvLGEpKTtlbHNlIGlmKHUmJnkpYi5wb2ludChvLGEpO2Vsc2V7dmFyIGM9W3A9TWF0aC5tYXgoUGwsTWF0aC5taW4oQ2wscCkpLGc9TWF0aC5tYXgoUGwsTWF0aC5taW4oQ2wsZykpXSxtPVtvPU1hdGgubWF4KFBsLE1hdGgubWluKENsLG8pKSxhPU1hdGgubWF4KFBsLE1hdGgubWluKENsLGEpKV07IWZ1bmN0aW9uKHQsbixlLHIsaSxvKXt2YXIgYSx1PXRbMF0sYz10WzFdLGY9MCxzPTEsbD1uWzBdLXUsaD1uWzFdLWM7aWYoYT1lLXUsbHx8IShhPjApKXtpZihhLz1sLGw8MCl7aWYoYTxmKXJldHVybjthPHMmJihzPWEpfWVsc2UgaWYobD4wKXtpZihhPnMpcmV0dXJuO2E+ZiYmKGY9YSl9aWYoYT1pLXUsbHx8IShhPDApKXtpZihhLz1sLGw8MCl7aWYoYT5zKXJldHVybjthPmYmJihmPWEpfWVsc2UgaWYobD4wKXtpZihhPGYpcmV0dXJuO2E8cyYmKHM9YSl9aWYoYT1yLWMsaHx8IShhPjApKXtpZihhLz1oLGg8MCl7aWYoYTxmKXJldHVybjthPHMmJihzPWEpfWVsc2UgaWYoaD4wKXtpZihhPnMpcmV0dXJuO2E+ZiYmKGY9YSl9aWYoYT1vLWMsaHx8IShhPDApKXtpZihhLz1oLGg8MCl7aWYoYT5zKXJldHVybjthPmYmJihmPWEpfWVsc2UgaWYoaD4wKXtpZihhPGYpcmV0dXJuO2E8cyYmKHM9YSl9cmV0dXJuIGY+MCYmKHRbMF09dStmKmwsdFsxXT1jK2YqaCksczwxJiYoblswXT11K3MqbCxuWzFdPWMrcypoKSwhMH19fX19KGMsbSx0LG4sZSxyKT91JiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KG8sYSksXz0hMSk6KHl8fChiLmxpbmVTdGFydCgpLGIucG9pbnQoY1swXSxjWzFdKSksYi5wb2ludChtWzBdLG1bMV0pLHV8fGIubGluZUVuZCgpLF89ITEpfXA9byxnPWEseT11fXJldHVybiB4fX12YXIgJGw9e3NwaGVyZTpxZixwb2ludDpxZixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXskbC5wb2ludD1SbCwkbC5saW5lRW5kPURsfSxsaW5lRW5kOnFmLHBvbHlnb25TdGFydDpxZixwb2x5Z29uRW5kOnFmfTtmdW5jdGlvbiBEbCgpeyRsLnBvaW50PSRsLmxpbmVFbmQ9cWZ9ZnVuY3Rpb24gUmwodCxuKXtFbD10Kj1tZixObD1DZihuKj1tZiksa2w9VGYobiksJGwucG9pbnQ9Rmx9ZnVuY3Rpb24gRmwodCxuKXt0Kj1tZjt2YXIgZT1DZihuKj1tZikscj1UZihuKSxpPXhmKHQtRWwpLG89VGYoaSksYT1yKkNmKGkpLHU9a2wqZS1ObCpyKm8sYz1ObCplK2tsKnIqbztTbC5hZGQoTWYoemYoYSphK3UqdSksYykpLEVsPXQsTmw9ZSxrbD1yfWZ1bmN0aW9uIHFsKHQpe3JldHVybiBTbD1uZXcgVCxMZih0LCRsKSwrU2x9dmFyIFVsPVtudWxsLG51bGxdLElsPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpVbH07ZnVuY3Rpb24gT2wodCxuKXtyZXR1cm4gVWxbMF09dCxVbFsxXT1uLHFsKElsKX12YXIgQmw9e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gTGwodC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKExsKGVbcl0uZ2VvbWV0cnksbikpcmV0dXJuITA7cmV0dXJuITF9fSxZbD17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsbil7cmV0dXJuIGpsKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGpsKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gSGwodC5jb29yZGluYXRlcyxuKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihIbChlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIFhsKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoWGwoZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKExsKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBMbCh0LG4pe3JldHVybiEoIXR8fCFZbC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmWWxbdC50eXBlXSh0LG4pfWZ1bmN0aW9uIGpsKHQsbil7cmV0dXJuIDA9PT1PbCh0LG4pfWZ1bmN0aW9uIEhsKHQsbil7Zm9yKHZhciBlLHIsaSxvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtpZigwPT09KHI9T2wodFtvXSxuKSkpcmV0dXJuITA7aWYobz4wJiYoaT1PbCh0W29dLHRbby0xXSkpPjAmJmU8PWkmJnI8PWkmJihlK3ItaSkqKDEtTWF0aC5wb3coKGUtcikvaSwyKSk8cGYqaSlyZXR1cm4hMDtlPXJ9cmV0dXJuITF9ZnVuY3Rpb24gWGwodCxuKXtyZXR1cm4hIW1sKHQubWFwKEdsKSxWbChuKSl9ZnVuY3Rpb24gR2wodCl7cmV0dXJuKHQ9dC5tYXAoVmwpKS5wb3AoKSx0fWZ1bmN0aW9uIFZsKHQpe3JldHVyblt0WzBdKm1mLHRbMV0qbWZdfWZ1bmN0aW9uIFdsKHQsbixlKXt2YXIgcj1sdCh0LG4tZGYsZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKG4pe3JldHVyblt0LG5dfSkpfX1mdW5jdGlvbiBabCh0LG4sZSl7dmFyIHI9bHQodCxuLWRmLGUpLmNvbmNhdChuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihuKXtyZXR1cm5bbix0XX0pKX19ZnVuY3Rpb24gS2woKXt2YXIgdCxuLGUscixpLG8sYSx1LGMsZixzLGwsaD0xMCxkPWgscD05MCxnPTM2MCx5PTIuNTtmdW5jdGlvbiB2KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6XygpfX1mdW5jdGlvbiBfKCl7cmV0dXJuIGx0KEFmKHIvcCkqcCxlLHApLm1hcChzKS5jb25jYXQobHQoQWYodS9nKSpnLGEsZykubWFwKGwpKS5jb25jYXQobHQoQWYobi9oKSpoLHQsaCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4geGYodCVwKT5kZn0pKS5tYXAoYykpLmNvbmNhdChsdChBZihvL2QpKmQsaSxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB4Zih0JWcpPmRmfSkpLm1hcChmKSl9cmV0dXJuIHYubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gXygpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSkpfSx2Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3MocikuY29uY2F0KGwoYSkuc2xpY2UoMSkscyhlKS5yZXZlcnNlKCkuc2xpY2UoMSksbCh1KS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHYuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3YuZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6di5leHRlbnRNaW5vcigpfSx2LmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sdT0rdFswXVsxXSxhPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSx1PmEmJih0PXUsdT1hLGE9dCksdi5wcmVjaXNpb24oeSkpOltbcix1XSxbZSxhXV19LHYuZXh0ZW50TWlub3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2VbMF1bMF0sdD0rZVsxXVswXSxvPStlWzBdWzFdLGk9K2VbMV1bMV0sbj50JiYoZT1uLG49dCx0PWUpLG8+aSYmKGU9byxvPWksaT1lKSx2LnByZWNpc2lvbih5KSk6W1tuLG9dLFt0LGldXX0sdi5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Yuc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTp2LnN0ZXBNaW5vcigpfSx2LnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSxnPSt0WzFdLHYpOltwLGddfSx2LnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdFswXSxkPSt0WzFdLHYpOltoLGRdfSx2LnByZWNpc2lvbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0raCxjPVdsKG8saSw5MCksZj1abChuLHQseSkscz1XbCh1LGEsOTApLGw9WmwocixlLHkpLHYpOnl9LHYuZXh0ZW50TWFqb3IoW1stMTgwLC05MCtkZl0sWzE4MCw5MC1kZl1dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLWRmXSxbMTgwLDgwK2RmXV0pfXZhciBRbCxKbCx0aCxuaCxlaD10PT50LHJoPW5ldyBULGloPW5ldyBULG9oPXtwb2ludDpxZixsaW5lU3RhcnQ6cWYsbGluZUVuZDpxZixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtvaC5saW5lU3RhcnQ9YWgsb2gubGluZUVuZD1maH0scG9seWdvbkVuZDpmdW5jdGlvbigpe29oLmxpbmVTdGFydD1vaC5saW5lRW5kPW9oLnBvaW50PXFmLHJoLmFkZCh4ZihpaCkpLGloPW5ldyBUfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1yaC8yO3JldHVybiByaD1uZXcgVCx0fX07ZnVuY3Rpb24gYWgoKXtvaC5wb2ludD11aH1mdW5jdGlvbiB1aCh0LG4pe29oLnBvaW50PWNoLFFsPXRoPXQsSmw9bmg9bn1mdW5jdGlvbiBjaCh0LG4pe2loLmFkZChuaCp0LXRoKm4pLHRoPXQsbmg9bn1mdW5jdGlvbiBmaCgpe2NoKFFsLEpsKX12YXIgc2g9b2gsbGg9MS8wLGhoPWxoLGRoPS1saCxwaD1kaCxnaD17cG9pbnQ6ZnVuY3Rpb24odCxuKXt0PGxoJiYobGg9dCk7dD5kaCYmKGRoPXQpO248aGgmJihoaD1uKTtuPnBoJiYocGg9bil9LGxpbmVTdGFydDpxZixsaW5lRW5kOnFmLHBvbHlnb25TdGFydDpxZixwb2x5Z29uRW5kOnFmLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbbGgsaGhdLFtkaCxwaF1dO3JldHVybiBkaD1waD0tKGhoPWxoPTEvMCksdH19O3ZhciB5aCx2aCxfaCxiaCxtaD1naCx4aD0wLHdoPTAsTWg9MCxUaD0wLEFoPTAsU2g9MCxFaD0wLE5oPTAsa2g9MCxDaD17cG9pbnQ6UGgsbGluZVN0YXJ0OnpoLGxpbmVFbmQ6UmgscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q2gubGluZVN0YXJ0PUZoLENoLmxpbmVFbmQ9cWh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtDaC5wb2ludD1QaCxDaC5saW5lU3RhcnQ9emgsQ2gubGluZUVuZD1SaH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9a2g/W0VoL2toLE5oL2toXTpTaD9bVGgvU2gsQWgvU2hdOk1oP1t4aC9NaCx3aC9NaF06W05hTixOYU5dO3JldHVybiB4aD13aD1NaD1UaD1BaD1TaD1FaD1OaD1raD0wLHR9fTtmdW5jdGlvbiBQaCh0LG4pe3hoKz10LHdoKz1uLCsrTWh9ZnVuY3Rpb24gemgoKXtDaC5wb2ludD0kaH1mdW5jdGlvbiAkaCh0LG4pe0NoLnBvaW50PURoLFBoKF9oPXQsYmg9bil9ZnVuY3Rpb24gRGgodCxuKXt2YXIgZT10LV9oLHI9bi1iaCxpPXpmKGUqZStyKnIpO1RoKz1pKihfaCt0KS8yLEFoKz1pKihiaCtuKS8yLFNoKz1pLFBoKF9oPXQsYmg9bil9ZnVuY3Rpb24gUmgoKXtDaC5wb2ludD1QaH1mdW5jdGlvbiBGaCgpe0NoLnBvaW50PVVofWZ1bmN0aW9uIHFoKCl7SWgoeWgsdmgpfWZ1bmN0aW9uIFVoKHQsbil7Q2gucG9pbnQ9SWgsUGgoeWg9X2g9dCx2aD1iaD1uKX1mdW5jdGlvbiBJaCh0LG4pe3ZhciBlPXQtX2gscj1uLWJoLGk9emYoZSplK3Iqcik7VGgrPWkqKF9oK3QpLzIsQWgrPWkqKGJoK24pLzIsU2grPWksRWgrPShpPWJoKnQtX2gqbikqKF9oK3QpLE5oKz1pKihiaCtuKSxraCs9MyppLFBoKF9oPXQsYmg9bil9dmFyIE9oPUNoO2Z1bmN0aW9uIEJoKHQpe3RoaXMuX2NvbnRleHQ9dH1CaC5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYWRpdXM9dCx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2NvbnRleHQubGluZVRvKHQsbik7YnJlYWs7ZGVmYXVsdDp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0K3RoaXMuX3JhZGl1cyxuKSx0aGlzLl9jb250ZXh0LmFyYyh0LG4sdGhpcy5fcmFkaXVzLDAsX2YpfX0scmVzdWx0OnFmfTt2YXIgWWgsTGgsamgsSGgsWGgsR2g9bmV3IFQsVmg9e3BvaW50OnFmLGxpbmVTdGFydDpmdW5jdGlvbigpe1ZoLnBvaW50PVdofSxsaW5lRW5kOmZ1bmN0aW9uKCl7WWgmJlpoKExoLGpoKSxWaC5wb2ludD1xZn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WWg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtZaD1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rR2g7cmV0dXJuIEdoPW5ldyBULHR9fTtmdW5jdGlvbiBXaCh0LG4pe1ZoLnBvaW50PVpoLExoPUhoPXQsamg9WGg9bn1mdW5jdGlvbiBaaCh0LG4pe0hoLT10LFhoLT1uLEdoLmFkZCh6ZihIaCpIaCtYaCpYaCkpLEhoPXQsWGg9bn12YXIgS2g9Vmg7bGV0IFFoLEpoLHRkLG5kO2NsYXNzIGVke2NvbnN0cnVjdG9yKHQpe3RoaXMuX2FwcGVuZD1udWxsPT10P3JkOmZ1bmN0aW9uKHQpe2NvbnN0IG49TWF0aC5mbG9vcih0KTtpZighKG4+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt0fWApO2lmKG4+MTUpcmV0dXJuIHJkO2lmKG4hPT1RaCl7Y29uc3QgdD0xMCoqbjtRaD1uLEpoPWZ1bmN0aW9uKG4pe2xldCBlPTE7dGhpcy5fKz1uWzBdO2Zvcihjb25zdCByPW4ubGVuZ3RoO2U8cjsrK2UpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1tlXSp0KS90K25bZV19fXJldHVybiBKaH0odCksdGhpcy5fcmFkaXVzPTQuNSx0aGlzLl89IiJ9cG9pbnRSYWRpdXModCl7cmV0dXJuIHRoaXMuX3JhZGl1cz0rdCx0aGlzfXBvbHlnb25TdGFydCgpe3RoaXMuX2xpbmU9MH1wb2x5Z29uRW5kKCl7dGhpcy5fbGluZT1OYU59bGluZVN0YXJ0KCl7dGhpcy5fcG9pbnQ9MH1saW5lRW5kKCl7MD09PXRoaXMuX2xpbmUmJih0aGlzLl8rPSJaIiksdGhpcy5fcG9pbnQ9TmFOfXBvaW50KHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fYXBwZW5kYE0ke3R9LCR7bn1gLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX2FwcGVuZGBMJHt0fSwke259YDticmVhaztkZWZhdWx0OmlmKHRoaXMuX2FwcGVuZGBNJHt0fSwke259YCx0aGlzLl9yYWRpdXMhPT10ZHx8dGhpcy5fYXBwZW5kIT09Smgpe2NvbnN0IHQ9dGhpcy5fcmFkaXVzLG49dGhpcy5fO3RoaXMuXz0iIix0aGlzLl9hcHBlbmRgbTAsJHt0fWEke3R9LCR7dH0gMCAxLDEgMCwkey0yKnR9YSR7dH0sJHt0fSAwIDEsMSAwLCR7Mip0fXpgLHRkPXQsSmg9dGhpcy5fYXBwZW5kLG5kPXRoaXMuXyx0aGlzLl89bn10aGlzLl8rPW5kfX1yZXN1bHQoKXtjb25zdCB0PXRoaXMuXztyZXR1cm4gdGhpcy5fPSIiLHQubGVuZ3RoP3Q6bnVsbH19ZnVuY3Rpb24gcmQodCl7bGV0IG49MTt0aGlzLl8rPXRbMF07Zm9yKGNvbnN0IGU9dC5sZW5ndGg7bjxlOysrbil0aGlzLl8rPWFyZ3VtZW50c1tuXSt0W25dfWZ1bmN0aW9uIGlkKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uZXcgb2Q7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdO3JldHVybiBlLnN0cmVhbT1uLGV9fWZ1bmN0aW9uIG9kKCl7fWZ1bmN0aW9uIGFkKHQsbixlKXt2YXIgcj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQobnVsbCksTGYoZSx0LnN0cmVhbShtaCkpLG4obWgucmVzdWx0KCkpLG51bGwhPXImJnQuY2xpcEV4dGVudChyKSx0fWZ1bmN0aW9uIHVkKHQsbixlKXtyZXR1cm4gYWQodCwoZnVuY3Rpb24oZSl7dmFyIHI9blsxXVswXS1uWzBdWzBdLGk9blsxXVsxXS1uWzBdWzFdLG89TWF0aC5taW4oci8oZVsxXVswXS1lWzBdWzBdKSxpLyhlWzFdWzFdLWVbMF1bMV0pKSxhPStuWzBdWzBdKyhyLW8qKGVbMV1bMF0rZVswXVswXSkpLzIsdT0rblswXVsxXSsoaS1vKihlWzFdWzFdK2VbMF1bMV0pKS8yO3Quc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSx1XSl9KSxlKX1mdW5jdGlvbiBjZCh0LG4sZSl7cmV0dXJuIHVkKHQsW1swLDBdLG5dLGUpfWZ1bmN0aW9uIGZkKHQsbixlKXtyZXR1cm4gYWQodCwoZnVuY3Rpb24oZSl7dmFyIHI9K24saT1yLyhlWzFdWzBdLWVbMF1bMF0pLG89KHItaSooZVsxXVswXStlWzBdWzBdKSkvMixhPS1pKmVbMF1bMV07dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFtvLGFdKX0pLGUpfWZ1bmN0aW9uIHNkKHQsbixlKXtyZXR1cm4gYWQodCwoZnVuY3Rpb24oZSl7dmFyIHI9K24saT1yLyhlWzFdWzFdLWVbMF1bMV0pLG89LWkqZVswXVswXSxhPShyLWkqKGVbMV1bMV0rZVswXVsxXSkpLzI7dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFtvLGFdKX0pLGUpfW9kLnByb3RvdHlwZT17Y29uc3RydWN0b3I6b2QscG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0LG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIGxkPTE2LGhkPVRmKDMwKm1mKTtmdW5jdGlvbiBkZCh0LG4pe3JldHVybituP2Z1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZShyLGksbyxhLHUsYyxmLHMsbCxoLGQscCxnLHkpe3ZhciB2PWYtcixfPXMtaSxiPXYqditfKl87aWYoYj40Km4mJmctLSl7dmFyIG09YStoLHg9dStkLHc9YytwLE09emYobSptK3gqeCt3KncpLFQ9UmYody89TSksQT14Zih4Zih3KS0xKTxkZnx8eGYoby1sKTxkZj8obytsKS8yOk1mKHgsbSksUz10KEEsVCksRT1TWzBdLE49U1sxXSxrPUUtcixDPU4taSxQPV8qay12KkM7KFAqUC9iPm58fHhmKCh2KmsrXypDKS9iLS41KT4uM3x8YSpoK3UqZCtjKnA8aGQpJiYoZShyLGksbyxhLHUsYyxFLE4sQSxtLz1NLHgvPU0sdyxnLHkpLHkucG9pbnQoRSxOKSxlKEUsTixBLG0seCx3LGYscyxsLGgsZCxwLGcseSkpfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIHIsaSxvLGEsdSxjLGYscyxsLGgsZCxwLGc9e3BvaW50OnksbGluZVN0YXJ0OnYsbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCksZy5saW5lU3RhcnQ9bX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpLGcubGluZVN0YXJ0PXZ9fTtmdW5jdGlvbiB5KGUscil7ZT10KGUsciksbi5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHYoKXtzPU5hTixnLnBvaW50PV8sbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKHIsaSl7dmFyIG89cHMoW3IsaV0pLGE9dChyLGkpO2UocyxsLGYsaCxkLHAscz1hWzBdLGw9YVsxXSxmPXIsaD1vWzBdLGQ9b1sxXSxwPW9bMl0sbGQsbiksbi5wb2ludChzLGwpfWZ1bmN0aW9uIGIoKXtnLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gbSgpe3YoKSxnLnBvaW50PXgsZy5saW5lRW5kPXd9ZnVuY3Rpb24geCh0LG4pe18ocj10LG4pLGk9cyxvPWwsYT1oLHU9ZCxjPXAsZy5wb2ludD1ffWZ1bmN0aW9uIHcoKXtlKHMsbCxmLGgsZCxwLGksbyxyLGEsdSxjLGxkLG4pLGcubGluZUVuZD1iLGIoKX1yZXR1cm4gZ319KHQsbik6ZnVuY3Rpb24odCl7cmV0dXJuIGlkKHtwb2ludDpmdW5jdGlvbihuLGUpe249dChuLGUpLHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9KHQpfXZhciBwZD1pZCh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0Km1mLG4qbWYpfX0pO2Z1bmN0aW9uIGdkKHQsbixlLHIsaSxvKXtpZighbylyZXR1cm4gZnVuY3Rpb24odCxuLGUscixpKXtmdW5jdGlvbiBvKG8sYSl7cmV0dXJuW24rdCoobyo9ciksZS10KihhKj1pKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuWyhvLW4pL3QqciwoZS1hKS90KmldfSxvfSh0LG4sZSxyLGkpO3ZhciBhPVRmKG8pLHU9Q2YobyksYz1hKnQsZj11KnQscz1hL3QsbD11L3QsaD0odSplLWEqbikvdCxkPSh1Km4rYSplKS90O2Z1bmN0aW9uIHAodCxvKXtyZXR1cm5bYyoodCo9ciktZioobyo9aSkrbixlLWYqdC1jKm9dfXJldHVybiBwLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVybltyKihzKnQtbCpuK2gpLGkqKGQtbCp0LXMqbildfSxwfWZ1bmN0aW9uIHlkKHQpe3JldHVybiB2ZCgoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIHZkKHQpe3ZhciBuLGUscixpLG8sYSx1LGMsZixzLGw9MTUwLGg9NDgwLGQ9MjUwLHA9MCxnPTAseT0wLHY9MCxfPTAsYj0wLG09MSx4PTEsdz1udWxsLE09VGwsVD1udWxsLEE9ZWgsUz0uNTtmdW5jdGlvbiBFKHQpe3JldHVybiBjKHRbMF0qbWYsdFsxXSptZil9ZnVuY3Rpb24gTih0KXtyZXR1cm4odD1jLmludmVydCh0WzBdLHRbMV0pKSYmW3RbMF0qYmYsdFsxXSpiZl19ZnVuY3Rpb24gaygpe3ZhciB0PWdkKGwsMCwwLG0seCxiKS5hcHBseShudWxsLG4ocCxnKSkscj1nZChsLGgtdFswXSxkLXRbMV0sbSx4LGIpO3JldHVybiBlPXVsKHksdixfKSx1PW9sKG4sciksYz1vbChlLHUpLGE9ZGQodSxTKSxDKCl9ZnVuY3Rpb24gQygpe3JldHVybiBmPXM9bnVsbCxFfXJldHVybiBFLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gZiYmcz09PXQ/ZjpmPXBkKGZ1bmN0aW9uKHQpe3JldHVybiBpZCh7cG9pbnQ6ZnVuY3Rpb24obixlKXt2YXIgcj10KG4sZSk7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KGUpKE0oYShBKHM9dCkpKSkpfSxFLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09dCx3PXZvaWQgMCxDKCkpOk19LEUucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9dCxUPXI9aT1vPW51bGwsQygpKTpBfSxFLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0rdD9BbCh3PXQqbWYpOih3PW51bGwsVGwpLEMoKSk6dypiZn0sRS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPW51bGw9PXQ/KFQ9cj1pPW89bnVsbCxlaCk6emwoVD0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sbz0rdFsxXVsxXSksQygpKTpudWxsPT1UP251bGw6W1tULHJdLFtpLG9dXX0sRS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rdCxrKCkpOmx9LEUudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0WzBdLGQ9K3RbMV0saygpKTpbaCxkXX0sRS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqbWYsZz10WzFdJTM2MCptZixrKCkpOltwKmJmLGcqYmZdfSxFLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10WzBdJTM2MCptZix2PXRbMV0lMzYwKm1mLF89dC5sZW5ndGg+Mj90WzJdJTM2MCptZjowLGsoKSk6W3kqYmYsdipiZixfKmJmXX0sRS5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCptZixrKCkpOmIqYmZ9LEUucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dD8tMToxLGsoKSk6bTwwfSxFLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PXQ/LTE6MSxrKCkpOng8MH0sRS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZGQodSxTPXQqdCksQygpKTp6ZihTKX0sRS5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdWQoRSx0LG4pfSxFLmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY2QoRSx0LG4pfSxFLmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZkKEUsdCxuKX0sRS5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gc2QoRSx0LG4pfSxmdW5jdGlvbigpe3JldHVybiBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEUuaW52ZXJ0PW4uaW52ZXJ0JiZOLGsoKX19ZnVuY3Rpb24gX2QodCl7dmFyIG49MCxlPWdmLzMscj12ZCh0KSxpPXIobixlKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihuPXRbMF0qbWYsZT10WzFdKm1mKTpbbipiZixlKmJmXX0saX1mdW5jdGlvbiBiZCh0LG4pe3ZhciBlPUNmKHQpLHI9KGUrQ2YobikpLzI7aWYoeGYocik8ZGYpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPVRmKHQpO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm5bdCpuLENmKGUpL25dfXJldHVybiBlLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L24sUmYoZSpuKV19LGV9KHQpO3ZhciBpPTErZSooMipyLWUpLG89emYoaSkvcjtmdW5jdGlvbiBhKHQsbil7dmFyIGU9emYoaS0yKnIqQ2YobikpL3I7cmV0dXJuW2UqQ2YodCo9ciksby1lKlRmKHQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1vLW4sYT1NZih0LHhmKGUpKSpQZihlKTtyZXR1cm4gZSpyPDAmJihhLT1nZipQZih0KSpQZihlKSksW2EvcixSZigoaS0odCp0K2UqZSkqcipyKS8oMipyKSldfSxhfWZ1bmN0aW9uIG1kKCl7cmV0dXJuIF9kKGJkKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIHhkKCl7cmV0dXJuIG1kKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gd2QodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9VGYobiksaT1UZihlKSxvPXQocippKTtyZXR1cm4gbz09PTEvMD9bMiwwXTpbbyppKkNmKG4pLG8qQ2YoZSldfX1mdW5jdGlvbiBNZCh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj16ZihuKm4rZSplKSxpPXQociksbz1DZihpKSxhPVRmKGkpO3JldHVybltNZihuKm8sciphKSxSZihyJiZlKm8vcildfX12YXIgVGQ9d2QoKGZ1bmN0aW9uKHQpe3JldHVybiB6ZigyLygxK3QpKX0pKTtUZC5pbnZlcnQ9TWQoKGZ1bmN0aW9uKHQpe3JldHVybiAyKlJmKHQvMil9KSk7dmFyIEFkPXdkKChmdW5jdGlvbih0KXtyZXR1cm4odD1EZih0KSkmJnQvQ2YodCl9KSk7ZnVuY3Rpb24gU2QodCxuKXtyZXR1cm5bdCxOZigkZigoeWYrbikvMikpXX1mdW5jdGlvbiBFZCh0KXt2YXIgbixlLHIsaT15ZCh0KSxvPWkuY2VudGVyLGE9aS5zY2FsZSx1PWkudHJhbnNsYXRlLGM9aS5jbGlwRXh0ZW50LGY9bnVsbDtmdW5jdGlvbiBzKCl7dmFyIG89Z2YqYSgpLHU9aShsbChpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT1mP1tbdVswXS1vLHVbMV0tb10sW3VbMF0rbyx1WzFdK29dXTp0PT09U2Q/W1tNYXRoLm1heCh1WzBdLW8sZiksbl0sW01hdGgubWluKHVbMF0rbyxlKSxyXV06W1tmLE1hdGgubWF4KHVbMV0tbyxuKV0sW2UsTWF0aC5taW4odVsxXStvLHIpXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLHMoKSk6YSgpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odSh0KSxzKCkpOnUoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCkscygpKTpvKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9mPW49ZT1yPW51bGw6KGY9K3RbMF1bMF0sbj0rdFswXVsxXSxlPSt0WzFdWzBdLHI9K3RbMV1bMV0pLHMoKSk6bnVsbD09Zj9udWxsOltbZixuXSxbZSxyXV19LHMoKX1mdW5jdGlvbiBOZCh0KXtyZXR1cm4gJGYoKHlmK3QpLzIpfWZ1bmN0aW9uIGtkKHQsbil7dmFyIGU9VGYodCkscj10PT09bj9DZih0KTpOZihlL1RmKG4pKS9OZihOZChuKS9OZCh0KSksaT1lKmtmKE5kKHQpLHIpL3I7aWYoIXIpcmV0dXJuIFNkO2Z1bmN0aW9uIG8odCxuKXtpPjA/bjwteWYrZGYmJihuPS15ZitkZik6bj55Zi1kZiYmKG49eWYtZGYpO3ZhciBlPWkva2YoTmQobikscik7cmV0dXJuW2UqQ2Yocip0KSxpLWUqVGYocip0KV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9aS1uLG89UGYocikqemYodCp0K2UqZSksYT1NZih0LHhmKGUpKSpQZihlKTtyZXR1cm4gZSpyPDAmJihhLT1nZipQZih0KSpQZihlKSksW2EvciwyKndmKGtmKGkvbywxL3IpKS15Zl19LG99ZnVuY3Rpb24gQ2QodCxuKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiBQZCh0LG4pe3ZhciBlPVRmKHQpLHI9dD09PW4/Q2YodCk6KGUtVGYobikpLyhuLXQpLGk9ZS9yK3Q7aWYoeGYocik8ZGYpcmV0dXJuIENkO2Z1bmN0aW9uIG8odCxuKXt2YXIgZT1pLW4sbz1yKnQ7cmV0dXJuW2UqQ2YobyksaS1lKlRmKG8pXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1pLW4sbz1NZih0LHhmKGUpKSpQZihlKTtyZXR1cm4gZSpyPDAmJihvLT1nZipQZih0KSpQZihlKSksW28vcixpLVBmKHIpKnpmKHQqdCtlKmUpXX0sb31BZC5pbnZlcnQ9TWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLFNkLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0LDIqd2YoU2YobikpLXlmXX0sQ2QuaW52ZXJ0PUNkO3ZhciB6ZD0xLjM0MDI2NCwkZD0tLjA4MTEwNixEZD04OTNlLTYsUmQ9LjAwMzc5NixGZD16ZigzKS8yO2Z1bmN0aW9uIHFkKHQsbil7dmFyIGU9UmYoRmQqQ2YobikpLHI9ZSplLGk9cipyKnI7cmV0dXJuW3QqVGYoZSkvKEZkKih6ZCszKiRkKnIraSooNypEZCs5KlJkKnIpKSksZSooemQrJGQqcitpKihEZCtSZCpyKSldfWZ1bmN0aW9uIFVkKHQsbil7dmFyIGU9VGYobikscj1UZih0KSplO3JldHVybltlKkNmKHQpL3IsQ2Yobikvcl19ZnVuY3Rpb24gSWQodCxuKXt2YXIgZT1uKm4scj1lKmU7cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqZStyKihyKiguMDAzOTcxKmUtLjAwMTUyOSpyKS0uMDEzNzkxKSksbiooMS4wMDcyMjYrZSooLjAxNTA4NStyKiguMDI4ODc0KmUtLjA0NDQ3NS0uMDA1OTE2KnIpKSldfWZ1bmN0aW9uIE9kKHQsbil7cmV0dXJuW1RmKG4pKkNmKHQpLENmKG4pXX1mdW5jdGlvbiBCZCh0LG4pe3ZhciBlPVRmKG4pLHI9MStUZih0KSplO3JldHVybltlKkNmKHQpL3IsQ2Yobikvcl19ZnVuY3Rpb24gWWQodCxuKXtyZXR1cm5bTmYoJGYoKHlmK24pLzIpKSwtdF19ZnVuY3Rpb24gTGQodCxuKXtyZXR1cm4gdC5wYXJlbnQ9PT1uLnBhcmVudD8xOjJ9ZnVuY3Rpb24gamQodCxuKXtyZXR1cm4gdCtuLnh9ZnVuY3Rpb24gSGQodCxuKXtyZXR1cm4gTWF0aC5tYXgodCxuLnkpfWZ1bmN0aW9uIFhkKHQpe3ZhciBuPTAsZT10LmNoaWxkcmVuLHI9ZSYmZS5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspbis9ZVtyXS52YWx1ZTtlbHNlIG49MTt0LnZhbHVlPW59ZnVuY3Rpb24gR2QodCxuKXt0IGluc3RhbmNlb2YgTWFwPyh0PVt2b2lkIDAsdF0sdm9pZCAwPT09biYmKG49V2QpKTp2b2lkIDA9PT1uJiYobj1WZCk7Zm9yKHZhciBlLHIsaSxvLGEsdT1uZXcgUWQodCksYz1bdV07ZT1jLnBvcCgpOylpZigoaT1uKGUuZGF0YSkpJiYoYT0oaT1BcnJheS5mcm9tKGkpKS5sZW5ndGgpKWZvcihlLmNoaWxkcmVuPWksbz1hLTE7bz49MDstLW8pYy5wdXNoKHI9aVtvXT1uZXcgUWQoaVtvXSkpLHIucGFyZW50PWUsci5kZXB0aD1lLmRlcHRoKzE7cmV0dXJuIHUuZWFjaEJlZm9yZShLZCl9ZnVuY3Rpb24gVmQodCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gV2QodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dFsxXTpudWxsfWZ1bmN0aW9uIFpkKHQpe3ZvaWQgMCE9PXQuZGF0YS52YWx1ZSYmKHQudmFsdWU9dC5kYXRhLnZhbHVlKSx0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gS2QodCl7dmFyIG49MDtkb3t0LmhlaWdodD1ufXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytuKX1mdW5jdGlvbiBRZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBKZCh0KXtyZXR1cm4gbnVsbD09dD9udWxsOnRwKHQpfWZ1bmN0aW9uIHRwKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBucCgpe3JldHVybiAwfWZ1bmN0aW9uIGVwKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1xZC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUscj1uLGk9cipyLG89aSppKmksYT0wO2E8MTImJihvPShpPShyLT1lPShyKih6ZCskZCppK28qKERkK1JkKmkpKS1uKS8oemQrMyokZCppK28qKDcqRGQrOSpSZCppKSkpKnIpKmkqaSwhKHhmKGUpPHBmKSk7KythKTtyZXR1cm5bRmQqdCooemQrMyokZCppK28qKDcqRGQrOSpSZCppKSkvVGYociksUmYoQ2YocikvRmQpXX0sVWQuaW52ZXJ0PU1kKHdmKSxJZC5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZSxyPW4saT0yNTtkb3t2YXIgbz1yKnIsYT1vKm87ci09ZT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKiguMDI4ODc0Km8tLjA0NDQ3NS0uMDA1OTE2KmEpKSktbikvKDEuMDA3MjI2K28qKC4wNDUyNTUrYSooLjI1OTg2NipvLS4zMTEzMjUtLjAwNTkxNioxMSphKSkpfXdoaWxlKHhmKGUpPmRmJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhvPXIqcikqKG8qKG8qbypvKiguMDAzOTcxLS4wMDE1MjkqbyktLjAxMzc5MSktLjEzMTk3OSkpLHJdfSxPZC5pbnZlcnQ9TWQoUmYpLEJkLmludmVydD1NZCgoZnVuY3Rpb24odCl7cmV0dXJuIDIqd2YodCl9KSksWWQuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuWy1uLDIqd2YoU2YodCkpLXlmXX0sUWQucHJvdG90eXBlPUdkLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UWQsY291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoWGQpfSxlYWNoOmZ1bmN0aW9uKHQsbil7bGV0IGU9LTE7Zm9yKGNvbnN0IHIgb2YgdGhpcyl0LmNhbGwobixyLCsrZSx0aGlzKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHIsaSxvPXRoaXMsYT1bb10sdT1bXSxjPS0xO289YS5wb3AoKTspaWYodS5wdXNoKG8pLGU9by5jaGlsZHJlbilmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpOysrcilhLnB1c2goZVtyXSk7Zm9yKDtvPXUucG9wKCk7KXQuY2FsbChuLG8sKytjLHRoaXMpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHIsaT10aGlzLG89W2ldLGE9LTE7aT1vLnBvcCgpOylpZih0LmNhbGwobixpLCsrYSx0aGlzKSxlPWkuY2hpbGRyZW4pZm9yKHI9ZS5sZW5ndGgtMTtyPj0wOy0tcilvLnB1c2goZVtyXSk7cmV0dXJuIHRoaXN9LGZpbmQ6ZnVuY3Rpb24odCxuKXtsZXQgZT0tMTtmb3IoY29uc3QgciBvZiB0aGlzKWlmKHQuY2FsbChuLHIsKytlLHRoaXMpKXJldHVybiByfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihuKXtmb3IodmFyIGU9K3Qobi5kYXRhKXx8MCxyPW4uY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KWUrPXJbaV0udmFsdWU7bi52YWx1ZT1lfSkpfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJm4uY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcyxlPWZ1bmN0aW9uKHQsbil7aWYodD09PW4pcmV0dXJuIHQ7dmFyIGU9dC5hbmNlc3RvcnMoKSxyPW4uYW5jZXN0b3JzKCksaT1udWxsO3Q9ZS5wb3AoKSxuPXIucG9wKCk7Zm9yKDt0PT09bjspaT10LHQ9ZS5wb3AoKSxuPXIucG9wKCk7cmV0dXJuIGl9KG4sdCkscj1bbl07biE9PWU7KW49bi5wYXJlbnQsci5wdXNoKG4pO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09ZTspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLG49W3RdO3Q9dC5wYXJlbnQ7KW4ucHVzaCh0KTtyZXR1cm4gbn0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8dC5wdXNoKG4pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKGUpe2UhPT10JiZuLnB1c2goe3NvdXJjZTplLnBhcmVudCx0YXJnZXQ6ZX0pfSkpLG59LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gR2QodGhpcykuZWFjaEJlZm9yZShaZCl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKigpe3ZhciB0LG4sZSxyLGk9dGhpcyxvPVtpXTtkb3tmb3IodD1vLnJldmVyc2UoKSxvPVtdO2k9dC5wb3AoKTspaWYoeWllbGQgaSxuPWkuY2hpbGRyZW4pZm9yKGU9MCxyPW4ubGVuZ3RoO2U8cjsrK2Upby5wdXNoKG5bZV0pfXdoaWxlKG8ubGVuZ3RoKX19O2NvbnN0IHJwPTE2NjQ1MjUsaXA9MTAxMzkwNDIyMyxvcD00Mjk0OTY3Mjk2O2Z1bmN0aW9uIGFwKCl7bGV0IHQ9MTtyZXR1cm4oKT0+KHQ9KHJwKnQraXApJW9wKS9vcH1mdW5jdGlvbiB1cCh0LG4pe2Zvcih2YXIgZSxyLGk9MCxvPSh0PWZ1bmN0aW9uKHQsbil7bGV0IGUscixpPXQubGVuZ3RoO2Zvcig7aTspcj1uKCkqaS0tfDAsZT10W2ldLHRbaV09dFtyXSx0W3JdPWU7cmV0dXJuIHR9KEFycmF5LmZyb20odCksbikpLmxlbmd0aCxhPVtdO2k8bzspZT10W2ldLHImJnNwKHIsZSk/KytpOihyPWhwKGE9Y3AoYSxlKSksaT0wKTtyZXR1cm4gcn1mdW5jdGlvbiBjcCh0LG4pe3ZhciBlLHI7aWYobHAobix0KSlyZXR1cm5bbl07Zm9yKGU9MDtlPHQubGVuZ3RoOysrZSlpZihmcChuLHRbZV0pJiZscChkcCh0W2VdLG4pLHQpKXJldHVyblt0W2VdLG5dO2ZvcihlPTA7ZTx0Lmxlbmd0aC0xOysrZSlmb3Iocj1lKzE7cjx0Lmxlbmd0aDsrK3IpaWYoZnAoZHAodFtlXSx0W3JdKSxuKSYmZnAoZHAodFtlXSxuKSx0W3JdKSYmZnAoZHAodFtyXSxuKSx0W2VdKSYmbHAocHAodFtlXSx0W3JdLG4pLHQpKXJldHVyblt0W2VdLHRbcl0sbl07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIGZwKHQsbil7dmFyIGU9dC5yLW4ucixyPW4ueC10LngsaT1uLnktdC55O3JldHVybiBlPDB8fGUqZTxyKnIraSppfWZ1bmN0aW9uIHNwKHQsbil7dmFyIGU9dC5yLW4ucisxZS05Kk1hdGgubWF4KHQucixuLnIsMSkscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZT4wJiZlKmU+cipyK2kqaX1mdW5jdGlvbiBscCh0LG4pe2Zvcih2YXIgZT0wO2U8bi5sZW5ndGg7KytlKWlmKCFzcCh0LG5bZV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGhwKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm57eDp0LngseTp0Lnkscjp0LnJ9fSh0WzBdKTtjYXNlIDI6cmV0dXJuIGRwKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBwcCh0WzBdLHRbMV0sdFsyXSl9fWZ1bmN0aW9uIGRwKHQsbil7dmFyIGU9dC54LHI9dC55LGk9dC5yLG89bi54LGE9bi55LHU9bi5yLGM9by1lLGY9YS1yLHM9dS1pLGw9TWF0aC5zcXJ0KGMqYytmKmYpO3JldHVybnt4OihlK28rYy9sKnMpLzIseToocithK2YvbCpzKS8yLHI6KGwraSt1KS8yfX1mdW5jdGlvbiBwcCh0LG4sZSl7dmFyIHI9dC54LGk9dC55LG89dC5yLGE9bi54LHU9bi55LGM9bi5yLGY9ZS54LHM9ZS55LGw9ZS5yLGg9ci1hLGQ9ci1mLHA9aS11LGc9aS1zLHk9Yy1vLHY9bC1vLF89cipyK2kqaS1vKm8sYj1fLWEqYS11KnUrYypjLG09Xy1mKmYtcypzK2wqbCx4PWQqcC1oKmcsdz0ocCptLWcqYikvKDIqeCktcixNPShnKnktcCp2KS94LFQ9KGQqYi1oKm0pLygyKngpLWksQT0oaCp2LWQqeSkveCxTPU0qTStBKkEtMSxFPTIqKG8rdypNK1QqQSksTj13KncrVCpULW8qbyxrPS0oTWF0aC5hYnMoUyk+MWUtNj8oRStNYXRoLnNxcnQoRSpFLTQqUypOKSkvKDIqUyk6Ti9FKTtyZXR1cm57eDpyK3crTSprLHk6aStUK0EqayxyOmt9fWZ1bmN0aW9uIGdwKHQsbixlKXt2YXIgcixpLG8sYSx1PXQueC1uLngsYz10Lnktbi55LGY9dSp1K2MqYztmPyhpPW4ucitlLnIsaSo9aSxhPXQucitlLnIsaT4oYSo9YSk/KHI9KGYrYS1pKS8oMipmKSxvPU1hdGguc3FydChNYXRoLm1heCgwLGEvZi1yKnIpKSxlLng9dC54LXIqdS1vKmMsZS55PXQueS1yKmMrbyp1KToocj0oZitpLWEpLygyKmYpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9mLXIqcikpLGUueD1uLngrcip1LW8qYyxlLnk9bi55K3IqYytvKnUpKTooZS54PW4ueCtlLnIsZS55PW4ueSl9ZnVuY3Rpb24geXAodCxuKXt2YXIgZT10LnIrbi5yLTFlLTYscj1uLngtdC54LGk9bi55LXQueTtyZXR1cm4gZT4wJiZlKmU+cipyK2kqaX1mdW5jdGlvbiB2cCh0KXt2YXIgbj10Ll8sZT10Lm5leHQuXyxyPW4ucitlLnIsaT0obi54KmUucitlLngqbi5yKS9yLG89KG4ueSplLnIrZS55Km4ucikvcjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBfcCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gYnAodCxuKXtpZighKG89KHQ9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfSh0KSkubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxyLGksbyxhLHUsYyxmLHMsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKG8+MSkpcmV0dXJuIGUucjtpZihyPXRbMV0sZS54PS1yLnIsci54PWUucixyLnk9MCwhKG8+MikpcmV0dXJuIGUucityLnI7Z3AocixlLGk9dFsyXSksZT1uZXcgX3AoZSkscj1uZXcgX3AociksaT1uZXcgX3AoaSksZS5uZXh0PWkucHJldmlvdXM9cixyLm5leHQ9ZS5wcmV2aW91cz1pLGkubmV4dD1yLnByZXZpb3VzPWU7dDpmb3IoYz0zO2M8bzsrK2Mpe2dwKGUuXyxyLl8saT10W2NdKSxpPW5ldyBfcChpKSxmPXIubmV4dCxzPWUucHJldmlvdXMsbD1yLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKHlwKGYuXyxpLl8pKXtyPWYsZS5uZXh0PXIsci5wcmV2aW91cz1lLC0tYztjb250aW51ZSB0fWwrPWYuXy5yLGY9Zi5uZXh0fWVsc2V7aWYoeXAocy5fLGkuXykpeyhlPXMpLm5leHQ9cixyLnByZXZpb3VzPWUsLS1jO2NvbnRpbnVlIHR9aCs9cy5fLnIscz1zLnByZXZpb3VzfX13aGlsZShmIT09cy5uZXh0KTtmb3IoaS5wcmV2aW91cz1lLGkubmV4dD1yLGUubmV4dD1yLnByZXZpb3VzPXI9aSxhPXZwKGUpOyhpPWkubmV4dCkhPT1yOykodT12cChpKSk8YSYmKGU9aSxhPXUpO3I9ZS5uZXh0fWZvcihlPVtyLl9dLGk9cjsoaT1pLm5leHQpIT09cjspZS5wdXNoKGkuXyk7Zm9yKGk9dXAoZSxuKSxjPTA7YzxvOysrYykoZT10W2NdKS54LT1pLngsZS55LT1pLnk7cmV0dXJuIGkucn1mdW5jdGlvbiBtcCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHQudmFsdWUpfWZ1bmN0aW9uIHhwKHQpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVufHwobi5yPU1hdGgubWF4KDAsK3Qobil8fDApKX19ZnVuY3Rpb24gd3AodCxuLGUpe3JldHVybiBmdW5jdGlvbihyKXtpZihpPXIuY2hpbGRyZW4pe3ZhciBpLG8sYSx1PWkubGVuZ3RoLGM9dChyKSpufHwwO2lmKGMpZm9yKG89MDtvPHU7KytvKWlbb10ucis9YztpZihhPWJwKGksZSksYylmb3Iobz0wO288dTsrK28paVtvXS5yLT1jO3Iucj1hK2N9fX1mdW5jdGlvbiBNcCh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9bi5wYXJlbnQ7bi5yKj10LGUmJihuLng9ZS54K3Qqbi54LG4ueT1lLnkrdCpuLnkpfX1mdW5jdGlvbiBUcCh0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9ZnVuY3Rpb24gQXAodCxuLGUscixpKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHU9LTEsYz1hLmxlbmd0aCxmPXQudmFsdWUmJihyLW4pL3QudmFsdWU7Kyt1PGM7KShvPWFbdV0pLnkwPWUsby55MT1pLG8ueDA9bixvLngxPW4rPW8udmFsdWUqZn12YXIgU3A9e2RlcHRoOi0xfSxFcD17fSxOcD17fTtmdW5jdGlvbiBrcCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBDcCh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBQcCh0KXtsZXQgbj10Lmxlbmd0aDtpZihuPDIpcmV0dXJuIiI7Zm9yKDstLW4+MSYmIXpwKHQsbik7KTtyZXR1cm4gdC5zbGljZSgwLG4pfWZ1bmN0aW9uIHpwKHQsbil7aWYoIi8iPT09dFtuXSl7bGV0IGU9MDtmb3IoO24+MCYmIlxcIj09PXRbLS1uXTspKytlO2lmKCEoMSZlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiAkcCh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiBEcCh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bMF06dC50fWZ1bmN0aW9uIFJwKHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/bltuLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gRnAodCxuLGUpe3ZhciByPWUvKG4uaS10LmkpO24uYy09cixuLnMrPWUsdC5jKz1yLG4ueis9ZSxuLm0rPWV9ZnVuY3Rpb24gcXAodCxuLGUpe3JldHVybiB0LmEucGFyZW50PT09bi5wYXJlbnQ/dC5hOmV9ZnVuY3Rpb24gVXAodCxuKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9bn1mdW5jdGlvbiBJcCh0LG4sZSxyLGkpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4sdT0tMSxjPWEubGVuZ3RoLGY9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3U8YzspKG89YVt1XSkueDA9bixvLngxPXIsby55MD1lLG8ueTE9ZSs9by52YWx1ZSpmfVVwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFFkLnByb3RvdHlwZSk7dmFyIE9wPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBCcCh0LG4sZSxyLGksbyl7Zm9yKHZhciBhLHUsYyxmLHMsbCxoLGQscCxnLHksdj1bXSxfPW4uY2hpbGRyZW4sYj0wLG09MCx4PV8ubGVuZ3RoLHc9bi52YWx1ZTtiPHg7KXtjPWktZSxmPW8tcjtkb3tzPV9bbSsrXS52YWx1ZX13aGlsZSghcyYmbTx4KTtmb3IobD1oPXMseT1zKnMqKGc9TWF0aC5tYXgoZi9jLGMvZikvKHcqdCkpLHA9TWF0aC5tYXgoaC95LHkvbCk7bTx4OysrbSl7aWYocys9dT1fW21dLnZhbHVlLHU8bCYmKGw9dSksdT5oJiYoaD11KSx5PXMqcypnLChkPU1hdGgubWF4KGgveSx5L2wpKT5wKXtzLT11O2JyZWFrfXA9ZH12LnB1c2goYT17dmFsdWU6cyxkaWNlOmM8ZixjaGlsZHJlbjpfLnNsaWNlKGIsbSl9KSxhLmRpY2U/QXAoYSxlLHIsaSx3P3IrPWYqcy93Om8pOklwKGEsZSxyLHc/ZSs9YypzL3c6aSxvKSx3LT1zLGI9bX1yZXR1cm4gdn12YXIgWXA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7QnAobix0LGUscixpLG8pfXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KE9wKTt2YXIgTHA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09bilmb3IodmFyIGEsdSxjLGYscyxsPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrbDxoOyl7Zm9yKGM9KHU9YVtsXSkuY2hpbGRyZW4sZj11LnZhbHVlPTAscz1jLmxlbmd0aDtmPHM7KytmKXUudmFsdWUrPWNbZl0udmFsdWU7dS5kaWNlP0FwKHUsZSxyLGksZD9yKz0oby1yKSp1LnZhbHVlL2Q6byk6SXAodSxlLHIsZD9lKz0oaS1lKSp1LnZhbHVlL2Q6aSxvKSxkLT11LnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1CcChuLHQsZSxyLGksbyksYS5yYXRpbz1ufXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KE9wKTtmdW5jdGlvbiBqcCh0LG4sZSl7cmV0dXJuKG5bMF0tdFswXSkqKGVbMV0tdFsxXSktKG5bMV0tdFsxXSkqKGVbMF0tdFswXSl9ZnVuY3Rpb24gSHAodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gWHAodCl7Y29uc3Qgbj10Lmxlbmd0aCxlPVswLDFdO2xldCByLGk9Mjtmb3Iocj0yO3I8bjsrK3Ipe2Zvcig7aT4xJiZqcCh0W2VbaS0yXV0sdFtlW2ktMV1dLHRbcl0pPD0wOyktLWk7ZVtpKytdPXJ9cmV0dXJuIGUuc2xpY2UoMCxpKX12YXIgR3A9TWF0aC5yYW5kb20sVnA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQ9bnVsbD09dD8wOit0LGU9bnVsbD09ZT8xOitlLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhlPXQsdD0wKTplLT10LGZ1bmN0aW9uKCl7cmV0dXJuIG4oKSplK3R9fXJldHVybiBlLnNvdXJjZT10LGV9KEdwKSxXcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCksdD1NYXRoLmZsb29yKHQpLGU9TWF0aC5mbG9vcihlKS10LGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IobigpKmUrdCl9fXJldHVybiBlLnNvdXJjZT10LGV9KEdwKSxacD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlKXt2YXIgcixpO3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSxmdW5jdGlvbigpe3ZhciBvO2lmKG51bGwhPXIpbz1yLHI9bnVsbDtlbHNlIGRve3I9MipuKCktMSxvPTIqbigpLTEsaT1yKnIrbypvfXdoaWxlKCFpfHxpPjEpO3JldHVybiB0K2UqbypNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fXJldHVybiBlLnNvdXJjZT10LGV9KEdwKSxLcD1mdW5jdGlvbiB0KG4pe3ZhciBlPVpwLnNvdXJjZShuKTtmdW5jdGlvbiByKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiByLnNvdXJjZT10LHJ9KEdwKSxRcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKHQ9K3QpPD0wPygpPT4wOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj10O3I+MTstLXIpZSs9bigpO3JldHVybiBlK3IqbigpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfShHcCksSnA9ZnVuY3Rpb24gdChuKXt2YXIgZT1RcC5zb3VyY2Uobik7ZnVuY3Rpb24gcih0KXtpZigwPT0odD0rdCkpcmV0dXJuIG47dmFyIHI9ZSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL3R9fXJldHVybiByLnNvdXJjZT10LHJ9KEdwKSx0Zz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nMXAoLW4oKSkvdH19cmV0dXJuIGUuc291cmNlPXQsZX0oR3ApLG5nPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtpZigodD0rdCk8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCBhbHBoYSIpO3JldHVybiB0PTEvLXQsZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMS1uKCksdCl9fXJldHVybiBlLnNvdXJjZT10LGV9KEdwKSxlZz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7aWYoKHQ9K3QpPDB8fHQ+MSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCBwIik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IobigpK3QpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfShHcCkscmc9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe2lmKCh0PSt0KTwwfHx0PjEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImludmFsaWQgcCIpO3JldHVybiAwPT09dD8oKT0+MS8wOjE9PT10PygpPT4xOih0PU1hdGgubG9nMXAoLXQpLGZ1bmN0aW9uKCl7cmV0dXJuIDErTWF0aC5mbG9vcihNYXRoLmxvZzFwKC1uKCkpL3QpfSl9cmV0dXJuIGUuc291cmNlPXQsZX0oR3ApLGlnPWZ1bmN0aW9uIHQobil7dmFyIGU9WnAuc291cmNlKG4pKCk7ZnVuY3Rpb24gcih0LHIpe2lmKCh0PSt0KTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJpbnZhbGlkIGsiKTtpZigwPT09dClyZXR1cm4oKT0+MDtpZihyPW51bGw9PXI/MTorciwxPT09dClyZXR1cm4oKT0+LU1hdGgubG9nMXAoLW4oKSkqcjt2YXIgaT0odDwxP3QrMTp0KS0xLzMsbz0xLygzKk1hdGguc3FydChpKSksYT10PDE/KCk9Pk1hdGgucG93KG4oKSwxL3QpOigpPT4xO3JldHVybiBmdW5jdGlvbigpe2Rve2Rve3ZhciB0PWUoKSx1PTErbyp0fXdoaWxlKHU8PTApO3UqPXUqdTt2YXIgYz0xLW4oKX13aGlsZShjPj0xLS4wMzMxKnQqdCp0KnQmJk1hdGgubG9nKGMpPj0uNSp0KnQraSooMS11K01hdGgubG9nKHUpKSk7cmV0dXJuIGkqdSphKCkqcn19cmV0dXJuIHIuc291cmNlPXQscn0oR3ApLG9nPWZ1bmN0aW9uIHQobil7dmFyIGU9aWcuc291cmNlKG4pO2Z1bmN0aW9uIHIodCxuKXt2YXIgcj1lKHQpLGk9ZShuKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1yKCk7cmV0dXJuIDA9PT10PzA6dC8odCtpKCkpfX1yZXR1cm4gci5zb3VyY2U9dCxyfShHcCksYWc9ZnVuY3Rpb24gdChuKXt2YXIgZT1yZy5zb3VyY2Uobikscj1vZy5zb3VyY2Uobik7ZnVuY3Rpb24gaSh0LG4pe3JldHVybiB0PSt0LChuPStuKT49MT8oKT0+dDpuPD0wPygpPT4wOmZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz10LGE9bjtvKmE+MTYmJm8qKDEtYSk+MTY7KXt2YXIgdT1NYXRoLmZsb29yKChvKzEpKmEpLGM9cih1LG8tdSsxKSgpO2M8PWE/KGkrPXUsby09dSxhPShhLWMpLygxLWMpKToobz11LTEsYS89Yyl9Zm9yKHZhciBmPWE8LjUscz1lKGY/YToxLWEpLGw9cygpLGg9MDtsPD1vOysraClsKz1zKCk7cmV0dXJuIGkrKGY/aDpvLWgpfX1yZXR1cm4gaS5zb3VyY2U9dCxpfShHcCksdWc9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyKXt2YXIgaTtyZXR1cm4gMD09KHQ9K3QpP2k9dD0+LU1hdGgubG9nKHQpOih0PTEvdCxpPW49Pk1hdGgucG93KG4sdCkpLGU9bnVsbD09ZT8wOitlLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7cmV0dXJuIGUrcippKC1NYXRoLmxvZzFwKC1uKCkpKX19cmV0dXJuIGUuc291cmNlPXQsZX0oR3ApLGNnPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PW51bGw9PXQ/MDordCxlPW51bGw9PWU/MTorZSxmdW5jdGlvbigpe3JldHVybiB0K2UqTWF0aC50YW4oTWF0aC5QSSpuKCkpfX1yZXR1cm4gZS5zb3VyY2U9dCxlfShHcCksZmc9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQ9bnVsbD09dD8wOit0LGU9bnVsbD09ZT8xOitlLGZ1bmN0aW9uKCl7dmFyIHI9bigpO3JldHVybiB0K2UqTWF0aC5sb2coci8oMS1yKSl9fXJldHVybiBlLnNvdXJjZT10LGV9KEdwKSxzZz1mdW5jdGlvbiB0KG4pe3ZhciBlPWlnLnNvdXJjZShuKSxyPWFnLnNvdXJjZShuKTtmdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT0wLG89dDtvPjE2Oyl7dmFyIGE9TWF0aC5mbG9vciguODc1Km8pLHU9ZShhKSgpO2lmKHU+bylyZXR1cm4gaStyKGEtMSxvL3UpKCk7aSs9YSxvLT11fWZvcih2YXIgYz0tTWF0aC5sb2cxcCgtbigpKSxmPTA7Yzw9bzsrK2YpYy09TWF0aC5sb2cxcCgtbigpKTtyZXR1cm4gaStmfX1yZXR1cm4gaS5zb3VyY2U9dCxpfShHcCk7Y29uc3QgbGc9MS80Mjk0OTY3Mjk2O2Z1bmN0aW9uIGhnKHQsbil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UobikuZG9tYWluKHQpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGRnKHQsbil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5pbnRlcnBvbGF0b3IodCk6dGhpcy5yYW5nZSh0KTticmVhaztkZWZhdWx0OnRoaXMuZG9tYWluKHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBuP3RoaXMuaW50ZXJwb2xhdG9yKG4pOnRoaXMucmFuZ2Uobil9cmV0dXJuIHRoaXN9Y29uc3QgcGc9U3ltYm9sKCJpbXBsaWNpdCIpO2Z1bmN0aW9uIGdnKCl7dmFyIHQ9bmV3IEludGVybk1hcCxuPVtdLGU9W10scj1wZztmdW5jdGlvbiBpKGkpe2xldCBvPXQuZ2V0KGkpO2lmKHZvaWQgMD09PW8pe2lmKHIhPT1wZylyZXR1cm4gcjt0LnNldChpLG89bi5wdXNoKGkpLTEpfXJldHVybiBlW28lZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5zbGljZSgpO249W10sdD1uZXcgSW50ZXJuTWFwO2Zvcihjb25zdCByIG9mIGUpdC5oYXMocil8fHQuc2V0KHIsbi5wdXNoKHIpLTEpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUFycmF5LmZyb20odCksaSk6ZS5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZ2cobixlKS51bmtub3duKHIpfSxoZy5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiB5Zygpe3ZhciB0LG4sZT1nZygpLnVua25vd24odm9pZCAwKSxyPWUuZG9tYWluLGk9ZS5yYW5nZSxvPTAsYT0xLHU9ITEsYz0wLGY9MCxzPS41O2Z1bmN0aW9uIGwoKXt2YXIgZT1yKCkubGVuZ3RoLGw9YTxvLGg9bD9hOm8sZD1sP286YTt0PShkLWgpL01hdGgubWF4KDEsZS1jKzIqZiksdSYmKHQ9TWF0aC5mbG9vcih0KSksaCs9KGQtaC10KihlLWMpKSpzLG49dCooMS1jKSx1JiYoaD1NYXRoLnJvdW5kKGgpLG49TWF0aC5yb3VuZChuKSk7dmFyIHA9bHQoZSkubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gaCt0Km59KSk7cmV0dXJuIGkobD9wLnJldmVyc2UoKTpwKX1yZXR1cm4gZGVsZXRlIGUudW5rbm93bixlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW28sYV09dCxvPStvLGE9K2EsbCgpKTpbbyxhXX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybltvLGFdPXQsbz0rbyxhPSthLHU9ITAsbCgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBufSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXQsbCgpKTp1fSxlLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9TWF0aC5taW4oMSxmPSt0KSxsKCkpOmN9LGUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWluKDEsdCksbCgpKTpjfSxlLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxsKCkpOmZ9LGUuYWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxsKCkpOnN9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiB5ZyhyKCksW28sYV0pLnJvdW5kKHUpLnBhZGRpbmdJbm5lcihjKS5wYWRkaW5nT3V0ZXIoZikuYWxpZ24ocyl9LGhnLmFwcGx5KGwoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIHZnKHQpe3ZhciBuPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHZnKG4oKSl9LHR9ZnVuY3Rpb24gX2codCl7cmV0dXJuK3R9dmFyIGJnPVswLDFdO2Z1bmN0aW9uIG1nKHQpe3JldHVybiB0fWZ1bmN0aW9uIHhnKHQsbil7cmV0dXJuKG4tPXQ9K3QpP2Z1bmN0aW9uKGUpe3JldHVybihlLXQpL259OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oaXNOYU4obik/TmFOOi41KX1mdW5jdGlvbiB3Zyh0LG4sZSl7dmFyIHI9dFswXSxpPXRbMV0sbz1uWzBdLGE9blsxXTtyZXR1cm4gaTxyPyhyPXhnKGksciksbz1lKGEsbykpOihyPXhnKHIsaSksbz1lKG8sYSkpLGZ1bmN0aW9uKHQpe3JldHVybiBvKHIodCkpfX1mdW5jdGlvbiBNZyh0LG4sZSl7dmFyIHI9TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpLTEsaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT0tMTtmb3IodFtyXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLG49bi5zbGljZSgpLnJldmVyc2UoKSk7KythPHI7KWlbYV09eGcodFthXSx0W2ErMV0pLG9bYV09ZShuW2FdLG5bYSsxXSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPXModCxuLDEsciktMTtyZXR1cm4gb1tlXShpW2VdKG4pKX19ZnVuY3Rpb24gVGcodCxuKXtyZXR1cm4gbi5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24gQWcoKXt2YXIgdCxuLGUscixpLG8sYT1iZyx1PWJnLGM9R3IsZj1tZztmdW5jdGlvbiBzKCl7dmFyIHQ9TWF0aC5taW4oYS5sZW5ndGgsdS5sZW5ndGgpO3JldHVybiBmIT09bWcmJihmPWZ1bmN0aW9uKHQsbil7dmFyIGU7cmV0dXJuIHQ+biYmKGU9dCx0PW4sbj1lKSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihuLGUpKX19KGFbMF0sYVt0LTFdKSkscj10PjI/TWc6d2csaT1vPW51bGwsbH1mdW5jdGlvbiBsKG4pe3JldHVybiBudWxsPT1ufHxpc05hTihuPStuKT9lOihpfHwoaT1yKGEubWFwKHQpLHUsYykpKSh0KGYobikpKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGYobigob3x8KG89cih1LGEubWFwKHQpLFlyKSkpKGUpKSl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUFycmF5LmZyb20odCxfZykscygpKTphLnNsaWNlKCl9LGwucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9QXJyYXkuZnJvbSh0KSxzKCkpOnUuc2xpY2UoKX0sbC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiB1PUFycmF5LmZyb20odCksYz1WcixzKCl9LGwuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ISF0fHxtZyxzKCkpOmYhPT1tZ30sbC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHMoKSk6Y30sbC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbCk6ZX0sZnVuY3Rpb24oZSxyKXtyZXR1cm4gdD1lLG49cixzKCl9fWZ1bmN0aW9uIFNnKCl7cmV0dXJuIEFnKCkobWcsbWcpfWZ1bmN0aW9uIEVnKG4sZSxyLGkpe3ZhciBvLGE9VyhuLGUscik7c3dpdGNoKChpPUpjKG51bGw9PWk/IixmIjppKSkudHlwZSl7Y2FzZSJzIjp2YXIgdT1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhlKSk7cmV0dXJuIG51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPWxmKGEsdSkpfHwoaS5wcmVjaXNpb249byksdC5mb3JtYXRQcmVmaXgoaSx1KTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1pLnByZWNpc2lvbnx8aXNOYU4obz1oZihhLE1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKGUpKSkpfHwoaS5wcmVjaXNpb249by0oImUiPT09aS50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPXNmKGEpKXx8KGkucHJlY2lzaW9uPW8tMiooIiUiPT09aS50eXBlKSl9cmV0dXJuIHQuZm9ybWF0KGkpfWZ1bmN0aW9uIE5nKHQpe3ZhciBuPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPW4oKTtyZXR1cm4gRyhlWzBdLGVbZS5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bigpO3JldHVybiBFZyhyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LGUpfSx0Lm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciByLGksbz1uKCksYT0wLHU9by5sZW5ndGgtMSxjPW9bYV0sZj1vW3VdLHM9MTA7Zm9yKGY8YyYmKGk9YyxjPWYsZj1pLGk9YSxhPXUsdT1pKTtzLS0gPjA7KXtpZigoaT1WKGMsZixlKSk9PT1yKXJldHVybiBvW2FdPWMsb1t1XT1mLG4obyk7aWYoaT4wKWM9TWF0aC5mbG9vcihjL2kpKmksZj1NYXRoLmNlaWwoZi9pKSppO2Vsc2V7aWYoIShpPDApKWJyZWFrO2M9TWF0aC5jZWlsKGMqaSkvaSxmPU1hdGguZmxvb3IoZippKS9pfXI9aX1yZXR1cm4gdH0sdH1mdW5jdGlvbiBrZyh0LG4pe3ZhciBlLHI9MCxpPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsbz10W3JdLGE9dFtpXTtyZXR1cm4gYTxvJiYoZT1yLHI9aSxpPWUsZT1vLG89YSxhPWUpLHRbcl09bi5mbG9vcihvKSx0W2ldPW4uY2VpbChhKSx0fWZ1bmN0aW9uIENnKHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBQZyh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gemcodCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiAkZyh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIERnKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBSZyh0KXtyZXR1cm4obixlKT0+LXQoLW4sZSl9ZnVuY3Rpb24gRmcobil7Y29uc3QgZT1uKENnLFBnKSxyPWUuZG9tYWluO2xldCBpLG8sYT0xMDtmdW5jdGlvbiB1KCl7cmV0dXJuIGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxuPT5NYXRoLmxvZyhuKS90KX0oYSksbz1mdW5jdGlvbih0KXtyZXR1cm4gMTA9PT10P0RnOnQ9PT1NYXRoLkU/TWF0aC5leHA6bj0+TWF0aC5wb3codCxuKX0oYSkscigpWzBdPDA/KGk9UmcoaSksbz1SZyhvKSxuKHpnLCRnKSk6bihDZyxQZyksZX1yZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHUoKSk6YX0sZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksdSgpKTpyKCl9LGUudGlja3M9dD0+e2NvbnN0IG49cigpO2xldCBlPW5bMF0sdT1uW24ubGVuZ3RoLTFdO2NvbnN0IGM9dTxlO2MmJihbZSx1XT1bdSxlXSk7bGV0IGYscyxsPWkoZSksaD1pKHUpO2NvbnN0IGQ9bnVsbD09dD8xMDordDtsZXQgcD1bXTtpZighKGElMSkmJmgtbDxkKXtpZihsPU1hdGguZmxvb3IobCksaD1NYXRoLmNlaWwoaCksZT4wKXtmb3IoO2w8PWg7KytsKWZvcihmPTE7ZjxhOysrZilpZihzPWw8MD9mL28oLWwpOmYqbyhsKSwhKHM8ZSkpe2lmKHM+dSlicmVhaztwLnB1c2gocyl9fWVsc2UgZm9yKDtsPD1oOysrbClmb3IoZj1hLTE7Zj49MTstLWYpaWYocz1sPjA/Zi9vKC1sKTpmKm8obCksIShzPGUpKXtpZihzPnUpYnJlYWs7cC5wdXNoKHMpfTIqcC5sZW5ndGg8ZCYmKHA9RyhlLHUsZCkpfWVsc2UgcD1HKGwsaCxNYXRoLm1pbihoLWwsZCkpLm1hcChvKTtyZXR1cm4gYz9wLnJldmVyc2UoKTpwfSxlLnRpY2tGb3JtYXQ9KG4scik9PntpZihudWxsPT1uJiYobj0xMCksbnVsbD09ciYmKHI9MTA9PT1hPyJzIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYoYSUxfHxudWxsIT0ocj1KYyhyKSkucHJlY2lzaW9ufHwoci50cmltPSEwKSxyPXQuZm9ybWF0KHIpKSxuPT09MS8wKXJldHVybiByO2NvbnN0IHU9TWF0aC5tYXgoMSxhKm4vZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIHQ9PntsZXQgbj10L28oTWF0aC5yb3VuZChpKHQpKSk7cmV0dXJuIG4qYTxhLS41JiYobio9YSksbjw9dT9yKHQpOiIifX0sZS5uaWNlPSgpPT5yKGtnKHIoKSx7Zmxvb3I6dD0+byhNYXRoLmZsb29yKGkodCkpKSxjZWlsOnQ9Pm8oTWF0aC5jZWlsKGkodCkpKX0pKSxlfWZ1bmN0aW9uIHFnKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5zaWduKG4pKk1hdGgubG9nMXAoTWF0aC5hYnMobi90KSl9fWZ1bmN0aW9uIFVnKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5zaWduKG4pKk1hdGguZXhwbTEoTWF0aC5hYnMobikpKnR9fWZ1bmN0aW9uIElnKHQpe3ZhciBuPTEsZT10KHFnKG4pLFVnKG4pKTtyZXR1cm4gZS5jb25zdGFudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KHFnKG49K2UpLFVnKG4pKTpufSxOZyhlKX1mdW5jdGlvbiBPZyh0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG48MD8tTWF0aC5wb3coLW4sdCk6TWF0aC5wb3cobix0KX19ZnVuY3Rpb24gQmcodCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gWWcodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBMZyh0KXt2YXIgbj10KG1nLG1nKSxlPTE7cmV0dXJuIG4uZXhwb25lbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/MT09PShlPStuKT90KG1nLG1nKTouNT09PWU/dChCZyxZZyk6dChPZyhlKSxPZygxL2UpKTplfSxOZyhuKX1mdW5jdGlvbiBqZygpe3ZhciB0PUxnKEFnKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVGcodCxqZygpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxoZy5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBIZyh0KXtyZXR1cm4gTWF0aC5zaWduKHQpKnQqdH1jb25zdCBYZz1uZXcgRGF0ZSxHZz1uZXcgRGF0ZTtmdW5jdGlvbiBWZyh0LG4sZSxyKXtmdW5jdGlvbiBpKG4pe3JldHVybiB0KG49MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK24pKSxufXJldHVybiBpLmZsb29yPW49Pih0KG49bmV3IERhdGUoK24pKSxuKSxpLmNlaWw9ZT0+KHQoZT1uZXcgRGF0ZShlLTEpKSxuKGUsMSksdChlKSxlKSxpLnJvdW5kPXQ9Pntjb25zdCBuPWkodCksZT1pLmNlaWwodCk7cmV0dXJuIHQtbjxlLXQ/bjplfSxpLm9mZnNldD0odCxlKT0+KG4odD1uZXcgRGF0ZSgrdCksbnVsbD09ZT8xOk1hdGguZmxvb3IoZSkpLHQpLGkucmFuZ2U9KGUscixvKT0+e2NvbnN0IGE9W107aWYoZT1pLmNlaWwoZSksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKGU8ciYmbz4wKSlyZXR1cm4gYTtsZXQgdTtkb3thLnB1c2godT1uZXcgRGF0ZSgrZSkpLG4oZSxvKSx0KGUpfXdoaWxlKHU8ZSYmZTxyKTtyZXR1cm4gYX0saS5maWx0ZXI9ZT0+VmcoKG49PntpZihuPj1uKWZvcig7dChuKSwhZShuKTspbi5zZXRUaW1lKG4tMSl9KSwoKHQscik9PntpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtuKHQsLTEpLCFlKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtuKHQsMSksIWUodCk7KTt9KSksZSYmKGkuY291bnQ9KG4scik9PihYZy5zZXRUaW1lKCtuKSxHZy5zZXRUaW1lKCtyKSx0KFhnKSx0KEdnKSxNYXRoLmZsb29yKGUoWGcsR2cpKSksaS5ldmVyeT10PT4odD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/bj0+cihuKSV0PT0wOm49PmkuY291bnQoMCxuKSV0PT0wKTppOm51bGwpKSxpfWNvbnN0IFdnPVZnKCgoKT0+e30pLCgodCxuKT0+e3Quc2V0VGltZSgrdCtuKX0pLCgodCxuKT0+bi10KSk7V2cuZXZlcnk9dD0+KHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9WZygobj0+e24uc2V0VGltZShNYXRoLmZsb29yKG4vdCkqdCl9KSwoKG4sZSk9PntuLnNldFRpbWUoK24rZSp0KX0pLCgobixlKT0+KGUtbikvdCkpOldnOm51bGwpO2NvbnN0IFpnPVdnLnJhbmdlLEtnPTFlMyxRZz02ZTQsSmc9MzZlNSx0eT04NjRlNSxueT02MDQ4ZTUsZXk9MjU5MmU2LHJ5PTMxNTM2ZTYsaXk9VmcoKHQ9Pnt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLCgodCxuKT0+e3Quc2V0VGltZSgrdCtuKktnKX0pLCgodCxuKT0+KG4tdCkvS2cpLCh0PT50LmdldFVUQ1NlY29uZHMoKSkpLG95PWl5LnJhbmdlLGF5PVZnKCh0PT57dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS10LmdldFNlY29uZHMoKSpLZyl9KSwoKHQsbik9Pnt0LnNldFRpbWUoK3QrbipRZyl9KSwoKHQsbik9PihuLXQpL1FnKSwodD0+dC5nZXRNaW51dGVzKCkpKSx1eT1heS5yYW5nZSxjeT1WZygodD0+e3Quc2V0VVRDU2Vjb25kcygwLDApfSksKCh0LG4pPT57dC5zZXRUaW1lKCt0K24qUWcpfSksKCh0LG4pPT4obi10KS9RZyksKHQ9PnQuZ2V0VVRDTWludXRlcygpKSksZnk9Y3kucmFuZ2Usc3k9VmcoKHQ9Pnt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLXQuZ2V0U2Vjb25kcygpKktnLXQuZ2V0TWludXRlcygpKlFnKX0pLCgodCxuKT0+e3Quc2V0VGltZSgrdCtuKkpnKX0pLCgodCxuKT0+KG4tdCkvSmcpLCh0PT50LmdldEhvdXJzKCkpKSxseT1zeS5yYW5nZSxoeT1WZygodD0+e3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoKHQsbik9Pnt0LnNldFRpbWUoK3QrbipKZyl9KSwoKHQsbik9PihuLXQpL0pnKSwodD0+dC5nZXRVVENIb3VycygpKSksZHk9aHkucmFuZ2UscHk9VmcoKHQ9PnQuc2V0SG91cnMoMCwwLDAsMCkpLCgodCxuKT0+dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK24pKSwoKHQsbik9PihuLXQtKG4uZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlFnKS90eSksKHQ9PnQuZ2V0RGF0ZSgpLTEpKSxneT1weS5yYW5nZSx5eT1WZygodD0+e3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoKHQsbik9Pnt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrbil9KSwoKHQsbik9PihuLXQpL3R5KSwodD0+dC5nZXRVVENEYXRlKCktMSkpLHZ5PXl5LnJhbmdlLF95PVZnKCh0PT57dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLCgodCxuKT0+e3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStuKX0pLCgodCxuKT0+KG4tdCkvdHkpLCh0PT5NYXRoLmZsb29yKHQvdHkpKSksYnk9X3kucmFuZ2U7ZnVuY3Rpb24gbXkodCl7cmV0dXJuIFZnKChuPT57bi5zZXREYXRlKG4uZ2V0RGF0ZSgpLShuLmdldERheSgpKzctdCklNyksbi5zZXRIb3VycygwLDAsMCwwKX0pLCgodCxuKT0+e3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Km4pfSksKCh0LG4pPT4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpRZykvbnkpKX1jb25zdCB4eT1teSgwKSx3eT1teSgxKSxNeT1teSgyKSxUeT1teSgzKSxBeT1teSg0KSxTeT1teSg1KSxFeT1teSg2KSxOeT14eS5yYW5nZSxreT13eS5yYW5nZSxDeT1NeS5yYW5nZSxQeT1UeS5yYW5nZSx6eT1BeS5yYW5nZSwkeT1TeS5yYW5nZSxEeT1FeS5yYW5nZTtmdW5jdGlvbiBSeSh0KXtyZXR1cm4gVmcoKG49PntuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktKG4uZ2V0VVRDRGF5KCkrNy10KSU3KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKCh0LG4pPT57dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqbil9KSwoKHQsbik9PihuLXQpL255KSl9Y29uc3QgRnk9UnkoMCkscXk9UnkoMSksVXk9UnkoMiksSXk9UnkoMyksT3k9UnkoNCksQnk9UnkoNSksWXk9UnkoNiksTHk9RnkucmFuZ2Usank9cXkucmFuZ2UsSHk9VXkucmFuZ2UsWHk9SXkucmFuZ2UsR3k9T3kucmFuZ2UsVnk9QnkucmFuZ2UsV3k9WXkucmFuZ2UsWnk9VmcoKHQ9Pnt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLCgodCxuKT0+e3Quc2V0TW9udGgodC5nZXRNb250aCgpK24pfSksKCh0LG4pPT5uLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihuLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKSksKHQ9PnQuZ2V0TW9udGgoKSkpLEt5PVp5LnJhbmdlLFF5PVZnKCh0PT57dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoKHQsbik9Pnt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStuKX0pLCgodCxuKT0+bi5nZXRVVENNb250aCgpLXQuZ2V0VVRDTW9udGgoKSsxMioobi5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSkpLCh0PT50LmdldFVUQ01vbnRoKCkpKSxKeT1ReS5yYW5nZSx0dj1WZygodD0+e3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKCh0LG4pPT57dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbil9KSwoKHQsbik9Pm4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpLCh0PT50LmdldEZ1bGxZZWFyKCkpKTt0di5ldmVyeT10PT5pc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/VmcoKG49PntuLnNldEZ1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRGdWxsWWVhcigpL3QpKnQpLG4uc2V0TW9udGgoMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApfSksKChuLGUpPT57bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrZSp0KX0pKTpudWxsO2NvbnN0IG52PXR2LnJhbmdlLGV2PVZnKCh0PT57dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoKHQsbik9Pnt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStuKX0pLCgodCxuKT0+bi5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKSksKHQ9PnQuZ2V0VVRDRnVsbFllYXIoKSkpO2V2LmV2ZXJ5PXQ9PmlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9WZygobj0+e24uc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihuLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksbi5zZXRVVENNb250aCgwLDEpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoKG4sZSk9PntuLnNldFVUQ0Z1bGxZZWFyKG4uZ2V0VVRDRnVsbFllYXIoKStlKnQpfSkpOm51bGw7Y29uc3QgcnY9ZXYucmFuZ2U7ZnVuY3Rpb24gaXYodCxuLGUsaSxvLGEpe2NvbnN0IHU9W1tpeSwxLEtnXSxbaXksNSw1ZTNdLFtpeSwxNSwxNWUzXSxbaXksMzAsM2U0XSxbYSwxLFFnXSxbYSw1LDNlNV0sW2EsMTUsOWU1XSxbYSwzMCwxOGU1XSxbbywxLEpnXSxbbywzLDEwOGU1XSxbbyw2LDIxNmU1XSxbbywxMiw0MzJlNV0sW2ksMSx0eV0sW2ksMiwxNzI4ZTVdLFtlLDEsbnldLFtuLDEsZXldLFtuLDMsNzc3NmU2XSxbdCwxLHJ5XV07ZnVuY3Rpb24gYyhuLGUsaSl7Y29uc3Qgbz1NYXRoLmFicyhlLW4pL2ksYT1yKCgoWywsdF0pPT50KSkucmlnaHQodSxvKTtpZihhPT09dS5sZW5ndGgpcmV0dXJuIHQuZXZlcnkoVyhuL3J5LGUvcnksaSkpO2lmKDA9PT1hKXJldHVybiBXZy5ldmVyeShNYXRoLm1heChXKG4sZSxpKSwxKSk7Y29uc3RbYyxmXT11W28vdVthLTFdWzJdPHVbYV1bMl0vbz9hLTE6YV07cmV0dXJuIGMuZXZlcnkoZil9cmV0dXJuW2Z1bmN0aW9uKHQsbixlKXtjb25zdCByPW48dDtyJiYoW3Qsbl09W24sdF0pO2NvbnN0IGk9ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUucmFuZ2U/ZTpjKHQsbixlKSxvPWk/aS5yYW5nZSh0LCtuKzEpOltdO3JldHVybiByP28ucmV2ZXJzZSgpOm99LGNdfWNvbnN0W292LGF2XT1pdihldixReSxGeSxfeSxoeSxjeSksW3V2LGN2XT1pdih0dixaeSx4eSxweSxzeSxheSk7ZnVuY3Rpb24gZnYodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIG4uc2V0RnVsbFllYXIodC55KSxufXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIHN2KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gbi5zZXRVVENGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGx2KHQsbixlKXtyZXR1cm57eTp0LG06bixkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBodih0KXt2YXIgbj10LmRhdGVUaW1lLGU9dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLG89dC5kYXlzLGE9dC5zaG9ydERheXMsdT10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsZj1tdihpKSxzPXh2KGkpLGw9bXYobyksaD14dihvKSxkPW12KGEpLHA9eHYoYSksZz1tdih1KSx5PXh2KHUpLHY9bXYoYyksXz14dihjKSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6WXYsZTpZdixmOkd2LGc6aV8sRzphXyxIOkx2LEk6anYsajpIdixMOlh2LG06VnYsTTpXdixwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0TW9udGgoKS8zKX0sUTprXyxzOkNfLFM6WnYsdTpLdixVOlF2LFY6dF8sdzpuXyxXOmVfLHg6bnVsbCxYOm51bGwseTpyXyxZOm9fLFo6dV8sIiUiOk5ffSxtPXthOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6Y18sZTpjXyxmOmRfLGc6VF8sRzpTXyxIOmZfLEk6c18sajpsXyxMOmhfLG06cF8sTTpnXyxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRVVENIb3VycygpPj0xMildfSxxOmZ1bmN0aW9uKHQpe3JldHVybiAxK35+KHQuZ2V0VVRDTW9udGgoKS8zKX0sUTprXyxzOkNfLFM6eV8sdTp2XyxVOl9fLFY6bV8sdzp4XyxXOndfLHg6bnVsbCxYOm51bGwseTpNXyxZOkFfLFo6RV8sIiUiOk5ffSx4PXthOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1kLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1wLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1sLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1oLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj12LmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQubT1fLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsbixlKXt2YXIgcj1nLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQubT15LmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gVCh0LG4sZSxyKX0sZDp6dixlOnp2LGY6VXYsZzpOdixHOkV2LEg6RHYsSTpEdixqOiR2LEw6cXYsbTpQdixNOlJ2LHA6ZnVuY3Rpb24odCxuLGUpe3ZhciByPWYuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5wPXMuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9LHE6Q3YsUTpPdixzOkJ2LFM6RnYsdTpNdixVOlR2LFY6QXYsdzp3dixXOlN2LHg6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBUKHQsZSxuLHIpfSxYOmZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gVCh0LHIsbixlKX0seTpOdixZOkV2LFo6a3YsIiUiOkl2fTtmdW5jdGlvbiB3KHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksbyxhPVtdLHU9LTEsYz0wLGY9dC5sZW5ndGg7Zm9yKGUgaW5zdGFuY2VvZiBEYXRlfHwoZT1uZXcgRGF0ZSgrZSkpOysrdTxmOykzNz09PXQuY2hhckNvZGVBdCh1KSYmKGEucHVzaCh0LnNsaWNlKGMsdSkpLG51bGwhPShpPXB2W3I9dC5jaGFyQXQoKyt1KV0pP3I9dC5jaGFyQXQoKyt1KTppPSJlIj09PXI/IiAiOiIwIiwobz1uW3JdKSYmKHI9byhlLGkpKSxhLnB1c2gociksYz11KzEpO3JldHVybiBhLnB1c2godC5zbGljZShjLHUpKSxhLmpvaW4oIiIpfX1mdW5jdGlvbiBNKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksbz1sdigxOTAwLHZvaWQgMCwxKTtpZihUKG8sdCxlKz0iIiwwKSE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gbylyZXR1cm4gbmV3IERhdGUoby5RKTtpZigicyJpbiBvKXJldHVybiBuZXcgRGF0ZSgxZTMqby5zKygiTCJpbiBvP28uTDowKSk7aWYobiYmISgiWiJpbiBvKSYmKG8uWj0wKSwicCJpbiBvJiYoby5IPW8uSCUxMisxMipvLnApLHZvaWQgMD09PW8ubSYmKG8ubT0icSJpbiBvP28ucTowKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8oaT0ocj1zdihsdihvLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9xeS5jZWlsKHIpOnF5KHIpLHI9eXkub2Zmc2V0KHIsNyooby5WLTEpKSxvLnk9ci5nZXRVVENGdWxsWWVhcigpLG8ubT1yLmdldFVUQ01vbnRoKCksby5kPXIuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KGk9KHI9ZnYobHYoby55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/d3kuY2VpbChyKTp3eShyKSxyPXB5Lm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0RnVsbFllYXIoKSxvLm09ci5nZXRNb250aCgpLG8uZD1yLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLGk9IloiaW4gbz9zdihsdihvLnksMCwxKSkuZ2V0VVRDRGF5KCk6ZnYobHYoby55LDAsMSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0oaSs1KSU3Om8udys3Km8uVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAsc3YobykpOmZ2KG8pfX1mdW5jdGlvbiBUKHQsbixlLHIpe2Zvcih2YXIgaSxvLGE9MCx1PW4ubGVuZ3RoLGM9ZS5sZW5ndGg7YTx1Oyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPW4uY2hhckNvZGVBdChhKyspKSl7aWYoaT1uLmNoYXJBdChhKyspLCEobz14W2kgaW4gcHY/bi5jaGFyQXQoYSsrKTppXSl8fChyPW8odCxlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD13KGUsYiksYi5YPXcocixiKSxiLmM9dyhuLGIpLG0ueD13KGUsbSksbS5YPXcocixtKSxtLmM9dyhuLG0pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixiKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQrPSIiLCExKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIG49dyh0Kz0iIixtKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgbj1NKHQrPSIiLCEwKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufX19dmFyIGR2LHB2PXsiLSI6IiIsXzoiICIsMDoiMCJ9LGd2PS9eXHMqXGQrLyx5dj0vXiUvLHZ2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBfdih0LG4sZSl7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLG89aS5sZW5ndGg7cmV0dXJuIHIrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4obikraTppKX1mdW5jdGlvbiBidih0KXtyZXR1cm4gdC5yZXBsYWNlKHZ2LCJcXCQmIil9ZnVuY3Rpb24gbXYodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKGJ2KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24geHYodCl7cmV0dXJuIG5ldyBNYXAodC5tYXAoKCh0LG4pPT5bdC50b0xvd2VyQ2FzZSgpLG5dKSkpfWZ1bmN0aW9uIHd2KHQsbixlKXt2YXIgcj1ndi5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE12KHQsbixlKXt2YXIgcj1ndi5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj8odC51PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR2KHQsbixlKXt2YXIgcj1ndi5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5VPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEF2KHQsbixlKXt2YXIgcj1ndi5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5WPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFN2KHQsbixlKXt2YXIgcj1ndi5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV2KHQsbixlKXt2YXIgcj1ndi5leGVjKG4uc2xpY2UoZSxlKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE52KHQsbixlKXt2YXIgcj1ndi5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga3YodCxuLGUpe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDdih0LG4sZSl7dmFyIHI9Z3YuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQucT0zKnJbMF0tMyxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQdih0LG4sZSl7dmFyIHI9Z3YuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gJHYodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlLGUrMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRHYodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUnYodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRnYodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXYodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlLGUrMykpO3JldHVybiByPyh0Lkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlLGUrNikpO3JldHVybiByPyh0Lkw9TWF0aC5mbG9vcihyWzBdLzFlMyksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSXYodCxuLGUpe3ZhciByPXl2LmV4ZWMobi5zbGljZShlLGUrMSkpO3JldHVybiByP2UrclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gT3YodCxuLGUpe3ZhciByPWd2LmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuUT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCdih0LG4sZSl7dmFyIHI9Z3YuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5zPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFl2KHQsbil7cmV0dXJuIF92KHQuZ2V0RGF0ZSgpLG4sMil9ZnVuY3Rpb24gTHYodCxuKXtyZXR1cm4gX3YodC5nZXRIb3VycygpLG4sMil9ZnVuY3Rpb24ganYodCxuKXtyZXR1cm4gX3YodC5nZXRIb3VycygpJTEyfHwxMixuLDIpfWZ1bmN0aW9uIEh2KHQsbil7cmV0dXJuIF92KDErcHkuY291bnQodHYodCksdCksbiwzKX1mdW5jdGlvbiBYdih0LG4pe3JldHVybiBfdih0LmdldE1pbGxpc2Vjb25kcygpLG4sMyl9ZnVuY3Rpb24gR3YodCxuKXtyZXR1cm4gWHYodCxuKSsiMDAwIn1mdW5jdGlvbiBWdih0LG4pe3JldHVybiBfdih0LmdldE1vbnRoKCkrMSxuLDIpfWZ1bmN0aW9uIFd2KHQsbil7cmV0dXJuIF92KHQuZ2V0TWludXRlcygpLG4sMil9ZnVuY3Rpb24gWnYodCxuKXtyZXR1cm4gX3YodC5nZXRTZWNvbmRzKCksbiwyKX1mdW5jdGlvbiBLdih0KXt2YXIgbj10LmdldERheSgpO3JldHVybiAwPT09bj83Om59ZnVuY3Rpb24gUXYodCxuKXtyZXR1cm4gX3YoeHkuY291bnQodHYodCktMSx0KSxuLDIpfWZ1bmN0aW9uIEp2KHQpe3ZhciBuPXQuZ2V0RGF5KCk7cmV0dXJuIG4+PTR8fDA9PT1uP0F5KHQpOkF5LmNlaWwodCl9ZnVuY3Rpb24gdF8odCxuKXtyZXR1cm4gdD1Kdih0KSxfdihBeS5jb3VudCh0dih0KSx0KSsoND09PXR2KHQpLmdldERheSgpKSxuLDIpfWZ1bmN0aW9uIG5fKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIGVfKHQsbil7cmV0dXJuIF92KHd5LmNvdW50KHR2KHQpLTEsdCksbiwyKX1mdW5jdGlvbiByXyh0LG4pe3JldHVybiBfdih0LmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gaV8odCxuKXtyZXR1cm4gX3YoKHQ9SnYodCkpLmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gb18odCxuKXtyZXR1cm4gX3YodC5nZXRGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIGFfKHQsbil7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gX3YoKHQ9ZT49NHx8MD09PWU/QXkodCk6QXkuY2VpbCh0KSkuZ2V0RnVsbFllYXIoKSUxZTQsbiw0KX1mdW5jdGlvbiB1Xyh0KXt2YXIgbj10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKG4+MD8iLSI6KG4qPS0xLCIrIikpK192KG4vNjB8MCwiMCIsMikrX3YobiU2MCwiMCIsMil9ZnVuY3Rpb24gY18odCxuKXtyZXR1cm4gX3YodC5nZXRVVENEYXRlKCksbiwyKX1mdW5jdGlvbiBmXyh0LG4pe3JldHVybiBfdih0LmdldFVUQ0hvdXJzKCksbiwyKX1mdW5jdGlvbiBzXyh0LG4pe3JldHVybiBfdih0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLG4sMil9ZnVuY3Rpb24gbF8odCxuKXtyZXR1cm4gX3YoMSt5eS5jb3VudChldih0KSx0KSxuLDMpfWZ1bmN0aW9uIGhfKHQsbil7cmV0dXJuIF92KHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksbiwzKX1mdW5jdGlvbiBkXyh0LG4pe3JldHVybiBoXyh0LG4pKyIwMDAifWZ1bmN0aW9uIHBfKHQsbil7cmV0dXJuIF92KHQuZ2V0VVRDTW9udGgoKSsxLG4sMil9ZnVuY3Rpb24gZ18odCxuKXtyZXR1cm4gX3YodC5nZXRVVENNaW51dGVzKCksbiwyKX1mdW5jdGlvbiB5Xyh0LG4pe3JldHVybiBfdih0LmdldFVUQ1NlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIHZfKHQpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1uPzc6bn1mdW5jdGlvbiBfXyh0LG4pe3JldHVybiBfdihGeS5jb3VudChldih0KS0xLHQpLG4sMil9ZnVuY3Rpb24gYl8odCl7dmFyIG49dC5nZXRVVENEYXkoKTtyZXR1cm4gbj49NHx8MD09PW4/T3kodCk6T3kuY2VpbCh0KX1mdW5jdGlvbiBtXyh0LG4pe3JldHVybiB0PWJfKHQpLF92KE95LmNvdW50KGV2KHQpLHQpKyg0PT09ZXYodCkuZ2V0VVRDRGF5KCkpLG4sMil9ZnVuY3Rpb24geF8odCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gd18odCxuKXtyZXR1cm4gX3YocXkuY291bnQoZXYodCktMSx0KSxuLDIpfWZ1bmN0aW9uIE1fKHQsbil7cmV0dXJuIF92KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBUXyh0LG4pe3JldHVybiBfdigodD1iXyh0KSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsbiwyKX1mdW5jdGlvbiBBXyh0LG4pe3JldHVybiBfdih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LG4sNCl9ZnVuY3Rpb24gU18odCxuKXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBfdigodD1lPj00fHwwPT09ZT9PeSh0KTpPeS5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIEVfKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBOXygpe3JldHVybiIlIn1mdW5jdGlvbiBrXyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBDXyh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWZ1bmN0aW9uIFBfKG4pe3JldHVybiBkdj1odihuKSx0LnRpbWVGb3JtYXQ9ZHYuZm9ybWF0LHQudGltZVBhcnNlPWR2LnBhcnNlLHQudXRjRm9ybWF0PWR2LnV0Y0Zvcm1hdCx0LnV0Y1BhcnNlPWR2LnV0Y1BhcnNlLGR2fXQudGltZUZvcm1hdD12b2lkIDAsdC50aW1lUGFyc2U9dm9pZCAwLHQudXRjRm9ybWF0PXZvaWQgMCx0LnV0Y1BhcnNlPXZvaWQgMCxQXyh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciB6Xz0iJVktJW0tJWRUJUg6JU06JVMuJUxaIjt2YXIgJF89RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoel8pLERfPSRfO3ZhciBSXz0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBuPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihuKT9udWxsOm59OnQudXRjUGFyc2Uoel8pLEZfPVJfO2Z1bmN0aW9uIHFfKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBVXyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBJXyh0LG4sZSxyLGksbyxhLHUsYyxmKXt2YXIgcz1TZygpLGw9cy5pbnZlcnQsaD1zLmRvbWFpbixkPWYoIi4lTCIpLHA9ZigiOiVTIiksZz1mKCIlSTolTSIpLHk9ZigiJUkgJXAiKSx2PWYoIiVhICVkIiksXz1mKCIlYiAlZCIpLGI9ZigiJUIiKSxtPWYoIiVZIik7ZnVuY3Rpb24geCh0KXtyZXR1cm4oYyh0KTx0P2Q6dSh0KTx0P3A6YSh0KTx0P2c6byh0KTx0P3k6cih0KTx0P2kodCk8dD92Ol86ZSh0KTx0P2I6bSkodCl9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShsKHQpKX0scy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChBcnJheS5mcm9tKHQsVV8pKTpoKCkubWFwKHFfKX0scy50aWNrcz1mdW5jdGlvbihuKXt2YXIgZT1oKCk7cmV0dXJuIHQoZVswXSxlW2UubGVuZ3RoLTFdLG51bGw9PW4/MTA6bil9LHMudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uP3g6ZihuKX0scy5uaWNlPWZ1bmN0aW9uKHQpe3ZhciBlPWgoKTtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmFuZ2V8fCh0PW4oZVswXSxlW2UubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCkpLHQ/aChrZyhlLHQpKTpzfSxzLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVGcocyxJXyh0LG4sZSxyLGksbyxhLHUsYyxmKSl9LHN9ZnVuY3Rpb24gT18oKXt2YXIgdCxuLGUscixpLG89MCxhPTEsdT1tZyxjPSExO2Z1bmN0aW9uIGYobil7cmV0dXJuIG51bGw9PW58fGlzTmFOKG49K24pP2k6dSgwPT09ZT8uNToobj0ocihuKS10KSplLGM/TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKTpuKSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGUscjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW2Uscl09bix1PXQoZSxyKSxmKTpbdSgwKSx1KDEpXX19cmV0dXJuIGYuZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhbbyxhXT1pLHQ9cihvPStvKSxuPXIoYT0rYSksZT10PT09bj8wOjEvKG4tdCksZik6W28sYV19LGYuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ISF0LGYpOmN9LGYuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsZik6dX0sZi5yYW5nZT1zKEdyKSxmLnJhbmdlUm91bmQ9cyhWciksZi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZnVuY3Rpb24oaSl7cmV0dXJuIHI9aSx0PWkobyksbj1pKGEpLGU9dD09PW4/MDoxLyhuLXQpLGZ9fWZ1bmN0aW9uIEJfKHQsbil7cmV0dXJuIG4uZG9tYWluKHQuZG9tYWluKCkpLmludGVycG9sYXRvcih0LmludGVycG9sYXRvcigpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIFlfKCl7dmFyIHQ9TGcoT18oKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBCXyh0LFlfKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LGRnLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBMXygpe3ZhciB0LG4sZSxyLGksbyxhLHU9MCxjPS41LGY9MSxzPTEsbD1tZyxoPSExO2Z1bmN0aW9uIGQodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2E6KHQ9LjUrKCh0PStvKHQpKS1uKSoocyp0PHMqbj9yOmkpLGwoaD9NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpOnQpKX1mdW5jdGlvbiBwKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZSxyLGk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFtlLHIsaV09bixsPWRpKHQsW2UscixpXSksZCk6W2woMCksbCguNSksbCgxKV19fXJldHVybiBkLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oW3UsYyxmXT1hLHQ9byh1PSt1KSxuPW8oYz0rYyksZT1vKGY9K2YpLHI9dD09PW4/MDouNS8obi10KSxpPW49PT1lPzA6LjUvKGUtbikscz1uPHQ/LTE6MSxkKTpbdSxjLGZdfSxkLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxkKTpofSxkLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LGQpOmx9LGQucmFuZ2U9cChHciksZC5yYW5nZVJvdW5kPXAoVnIpLGQudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LGQpOmF9LGZ1bmN0aW9uKGEpe3JldHVybiBvPWEsdD1hKHUpLG49YShjKSxlPWEoZikscj10PT09bj8wOi41LyhuLXQpLGk9bj09PWU/MDouNS8oZS1uKSxzPW48dD8tMToxLGR9fWZ1bmN0aW9uIGpfKCl7dmFyIHQ9TGcoTF8oKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBCXyh0LGpfKCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LGRnLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBIXyh0KXtmb3IodmFyIG49dC5sZW5ndGgvNnwwLGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KWVbcl09IiMiK3Quc2xpY2UoNipyLDYqKytyKTtyZXR1cm4gZX12YXIgWF89SF8oIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLEdfPUhfKCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKSxWXz1IXygiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2IiksV189SF8oIjQyNjlkMGVmYjExOGZmNzI1YzZjYzViMDNjYTk1MWZmOGFiN2E0NjNmMjk3YmJmNTljNmI0ZTk0OThhMCIpLFpfPUhfKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxLXz1IXygiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksUV89SF8oImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLEpfPUhfKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSx0Yj1IXygiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksbmI9SF8oIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLGViPUhfKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKSxyYj10PT5Gcih0W3QubGVuZ3RoLTFdKSxpYj1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoSF8pLG9iPXJiKGliKSxhYj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoSF8pLHViPXJiKGFiKSxjYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoSF8pLGZiPXJiKGNiKSxzYj1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoSF8pLGxiPXJiKHNiKSxoYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoSF8pLGRiPXJiKGhiKSxwYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoSF8pLGdiPXJiKHBiKSx5Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoSF8pLHZiPXJiKHliKSxfYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoSF8pLGJiPXJiKF9iKSxtYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoSF8pLHhiPXJiKG1iKSx3Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoSF8pLE1iPXJiKHdiKSxUYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoSF8pLEFiPXJiKFRiKSxTYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoSF8pLEViPXJiKFNiKSxOYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoSF8pLGtiPXJiKE5iKSxDYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoSF8pLFBiPXJiKENiKSx6Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoSF8pLCRiPXJiKHpiKSxEYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoSF8pLFJiPXJiKERiKSxGYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoSF8pLHFiPXJiKEZiKSxVYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoSF8pLEliPXJiKFViKSxPYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoSF8pLEJiPXJiKE9iKSxZYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoSF8pLExiPXJiKFliKSxqYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoSF8pLEhiPXJiKGpiKSxYYj1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoSF8pLEdiPXJiKFhiKSxWYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoSF8pLFdiPXJiKFZiKSxaYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoSF8pLEtiPXJiKFpiKSxRYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoSF8pLEpiPXJiKFFiKSx0bT1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoSF8pLG5tPXJiKHRtKSxlbT1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoSF8pLHJtPXJiKGVtKTt2YXIgaW09aGkoVHIoMzAwLC41LDApLFRyKC0yNDAsLjUsMSkpLG9tPWhpKFRyKC0xMDAsLjc1LC4zNSksVHIoODAsMS41LC44KSksYW09aGkoVHIoMjYwLC43NSwuMzUpLFRyKDgwLDEuNSwuOCkpLHVtPVRyKCk7dmFyIGNtPUZlKCksZm09TWF0aC5QSS8zLHNtPTIqTWF0aC5QSS8zO2Z1bmN0aW9uIGxtKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGUqbikpKV19fXZhciBobT1sbShIXygiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLGRtPWxtKEhfKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSkscG09bG0oSF8oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxnbT1sbShIXygiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpO2Z1bmN0aW9uIHltKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1jb25zdCB2bT1NYXRoLmFicyxfbT1NYXRoLmF0YW4yLGJtPU1hdGguY29zLG1tPU1hdGgubWF4LHhtPU1hdGgubWluLHdtPU1hdGguc2luLE1tPU1hdGguc3FydCxUbT0xZS0xMixBbT1NYXRoLlBJLFNtPUFtLzIsRW09MipBbTtmdW5jdGlvbiBObSh0KXtyZXR1cm4gdD49MT9TbTp0PD0tMT8tU206TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGttKHQpe2xldCBuPTM7cmV0dXJuIHQuZGlnaXRzPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO2lmKG51bGw9PWUpbj1udWxsO2Vsc2V7Y29uc3QgdD1NYXRoLmZsb29yKGUpO2lmKCEodD49MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2V9YCk7bj10fXJldHVybiB0fSwoKT0+bmV3IFVhKG4pfWZ1bmN0aW9uIENtKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIFBtKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIHptKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gJG0odCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gRG0odCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gUm0odCxuLGUscixpLG8sYSl7dmFyIHU9dC1lLGM9bi1yLGY9KGE/bzotbykvTW0odSp1K2MqYykscz1mKmMsbD0tZip1LGg9dCtzLGQ9bitsLHA9ZStzLGc9citsLHk9KGgrcCkvMix2PShkK2cpLzIsXz1wLWgsYj1nLWQsbT1fKl8rYipiLHg9aS1vLHc9aCpnLXAqZCxNPShiPDA/LTE6MSkqTW0obW0oMCx4KngqbS13KncpKSxUPSh3KmItXypNKS9tLEE9KC13Kl8tYipNKS9tLFM9KHcqYitfKk0pL20sRT0oLXcqXytiKk0pL20sTj1ULXksaz1BLXYsQz1TLXksUD1FLXY7cmV0dXJuIE4qTitrKms+QypDK1AqUCYmKFQ9UyxBPUUpLHtjeDpULGN5OkEseDAxOi1zLHkwMTotbCx4MTE6VCooaS94LTEpLHkxMTpBKihpL3gtMSl9fXZhciBGbT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gcW0odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYibGVuZ3RoImluIHQ/dDpBcnJheS5mcm9tKHQpfWZ1bmN0aW9uIFVtKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBJbSh0KXtyZXR1cm4gbmV3IFVtKHQpfWZ1bmN0aW9uIE9tKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEJtKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFltKHQsbil7dmFyIGU9eW0oITApLHI9bnVsbCxpPUltLG89bnVsbCxhPWttKHUpO2Z1bmN0aW9uIHUodSl7dmFyIGMsZixzLGw9KHU9cW0odSkpLmxlbmd0aCxoPSExO2ZvcihudWxsPT1yJiYobz1pKHM9YSgpKSksYz0wO2M8PWw7KytjKSEoYzxsJiZlKGY9dVtjXSxjLHUpKT09PWgmJigoaD0haCk/by5saW5lU3RhcnQoKTpvLmxpbmVFbmQoKSksaCYmby5wb2ludCgrdChmLGMsdSksK24oZixjLHUpKTtpZihzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gdD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnZvaWQgMD09PXQ/T206eW0odCksbj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnZvaWQgMD09PW4/Qm06eW0obiksdS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eW0oK24pLHUpOnR9LHUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKCt0KSx1KTpufSx1LmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5bSghIXQpLHUpOmV9LHUuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYobz1pKHIpKSx1KTppfSx1LmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1vPW51bGw6bz1pKHI9dCksdSk6cn0sdX1mdW5jdGlvbiBMbSh0LG4sZSl7dmFyIHI9bnVsbCxpPXltKCEwKSxvPW51bGwsYT1JbSx1PW51bGwsYz1rbShmKTtmdW5jdGlvbiBmKGYpe3ZhciBzLGwsaCxkLHAsZz0oZj1xbShmKSkubGVuZ3RoLHk9ITEsdj1uZXcgQXJyYXkoZyksXz1uZXcgQXJyYXkoZyk7Zm9yKG51bGw9PW8mJih1PWEocD1jKCkpKSxzPTA7czw9ZzsrK3Mpe2lmKCEoczxnJiZpKGQ9ZltzXSxzLGYpKT09PXkpaWYoeT0heSlsPXMsdS5hcmVhU3RhcnQoKSx1LmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHUubGluZUVuZCgpLHUubGluZVN0YXJ0KCksaD1zLTE7aD49bDstLWgpdS5wb2ludCh2W2hdLF9baF0pO3UubGluZUVuZCgpLHUuYXJlYUVuZCgpfXkmJih2W3NdPSt0KGQscyxmKSxfW3NdPStuKGQscyxmKSx1LnBvaW50KHI/K3IoZCxzLGYpOnZbc10sZT8rZShkLHMsZik6X1tzXSkpfWlmKHApcmV0dXJuIHU9bnVsbCxwKyIifHxudWxsfWZ1bmN0aW9uIHMoKXtyZXR1cm4gWW0oKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2b2lkIDA9PT10P09tOnltKCt0KSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eW0odm9pZCAwPT09bj8wOituKSxlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dm9pZCAwPT09ZT9CbTp5bSgrZSksZi54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eW0oK24pLHI9bnVsbCxmKTp0fSxmLngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eW0oK24pLGYpOnR9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eW0oK3QpLGYpOnJ9LGYueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKCt0KSxlPW51bGwsZik6bn0sZi55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKCt0KSxmKTpufSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKCt0KSxmKTplfSxmLmxpbmVYMD1mLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBzKCkueCh0KS55KG4pfSxmLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBzKCkueCh0KS55KGUpfSxmLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBzKCkueChyKS55KG4pfSxmLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5bSghIXQpLGYpOml9LGYuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxudWxsIT1vJiYodT1hKG8pKSxmKTphfSxmLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bz11PW51bGw6dT1hKG89dCksZik6b30sZn1mdW5jdGlvbiBqbSh0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiBIbSh0KXtyZXR1cm4gdH1VbS5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKX19fTt2YXIgWG09Vm0oSW0pO2Z1bmN0aW9uIEdtKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gVm0odCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbmV3IEdtKHQobikpfXJldHVybiBuLl9jdXJ2ZT10LG59ZnVuY3Rpb24gV20odCl7dmFyIG49dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oVm0odCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gWm0oKXtyZXR1cm4gV20oWW0oKS5jdXJ2ZShYbSkpfWZ1bmN0aW9uIEttKCl7dmFyIHQ9TG0oKS5jdXJ2ZShYbSksbj10LmN1cnZlLGU9dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBXbShlKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gV20ocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFdtKGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBXbShvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFZtKHQpKTpuKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIFFtKHQsbil7cmV0dXJuWyhuPStuKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLG4qTWF0aC5zaW4odCldfUdtLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX2N1cnZlLnBvaW50KG4qTWF0aC5zaW4odCksbiotTWF0aC5jb3ModCkpfX07Y2xhc3MgSm17Y29uc3RydWN0b3IodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5feD1ufWFyZWFTdGFydCgpe3RoaXMuX2xpbmU9MH1hcmVhRW5kKCl7dGhpcy5fbGluZT1OYU59bGluZVN0YXJ0KCl7dGhpcy5fcG9pbnQ9MH1saW5lRW5kKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfXBvaW50KHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl94P3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0aGlzLl94MD0odGhpcy5feDArdCkvMix0aGlzLl95MCx0aGlzLl94MCxuLHQsbik6dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHRoaXMuX3gwLHRoaXMuX3kwPSh0aGlzLl95MCtuKS8yLHQsdGhpcy5feTAsdCxuKX10aGlzLl94MD10LHRoaXMuX3kwPW59fWNsYXNzIHR4e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NvbnRleHQ9dH1saW5lU3RhcnQoKXt0aGlzLl9wb2ludD0wfWxpbmVFbmQoKXt9cG9pbnQodCxuKXtpZih0PSt0LG49K24sMD09PXRoaXMuX3BvaW50KXRoaXMuX3BvaW50PTE7ZWxzZXtjb25zdCBlPVFtKHRoaXMuX3gwLHRoaXMuX3kwKSxyPVFtKHRoaXMuX3gwLHRoaXMuX3kwPSh0aGlzLl95MCtuKS8yKSxpPVFtKHQsdGhpcy5feTApLG89UW0odCxuKTt0aGlzLl9jb250ZXh0Lm1vdmVUbyguLi5lKSx0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oLi4uciwuLi5pLC4uLm8pfXRoaXMuX3gwPXQsdGhpcy5feTA9bn19ZnVuY3Rpb24gbngodCl7cmV0dXJuIG5ldyBKbSh0LCEwKX1mdW5jdGlvbiBleCh0KXtyZXR1cm4gbmV3IEptKHQsITEpfWZ1bmN0aW9uIHJ4KHQpe3JldHVybiBuZXcgdHgodCl9ZnVuY3Rpb24gaXgodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIG94KHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBheCh0KXtsZXQgbj1peCxlPW94LHI9T20saT1CbSxvPW51bGwsYT1udWxsLHU9a20oYyk7ZnVuY3Rpb24gYygpe2xldCBjO2NvbnN0IGY9Rm0uY2FsbChhcmd1bWVudHMpLHM9bi5hcHBseSh0aGlzLGYpLGw9ZS5hcHBseSh0aGlzLGYpO2lmKG51bGw9PW8mJihhPXQoYz11KCkpKSxhLmxpbmVTdGFydCgpLGZbMF09cyxhLnBvaW50KCtyLmFwcGx5KHRoaXMsZiksK2kuYXBwbHkodGhpcyxmKSksZlswXT1sLGEucG9pbnQoK3IuYXBwbHkodGhpcyxmKSwraS5hcHBseSh0aGlzLGYpKSxhLmxpbmVFbmQoKSxjKXJldHVybiBhPW51bGwsYysiInx8bnVsbH1yZXR1cm4gYy5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxjKTpufSxjLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGMpOmV9LGMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKCt0KSxjKTpyfSxjLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5bSgrdCksYyk6aX0sYy5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP289YT1udWxsOmE9dChvPW4pLGMpOm99LGN9Y29uc3QgdXg9TW0oMyk7dmFyIGN4PXtkcmF3KHQsbil7Y29uc3QgZT0uNTk0MzYqTW0obit4bShuLzI4LC43NSkpLHI9ZS8yLGk9cip1eDt0Lm1vdmVUbygwLGUpLHQubGluZVRvKDAsLWUpLHQubW92ZVRvKC1pLC1yKSx0LmxpbmVUbyhpLHIpLHQubW92ZVRvKC1pLHIpLHQubGluZVRvKGksLXIpfX0sZng9e2RyYXcodCxuKXtjb25zdCBlPU1tKG4vQW0pO3QubW92ZVRvKGUsMCksdC5hcmMoMCwwLGUsMCxFbSl9fSxzeD17ZHJhdyh0LG4pe2NvbnN0IGU9TW0obi81KS8yO3QubW92ZVRvKC0zKmUsLWUpLHQubGluZVRvKC1lLC1lKSx0LmxpbmVUbygtZSwtMyplKSx0LmxpbmVUbyhlLC0zKmUpLHQubGluZVRvKGUsLWUpLHQubGluZVRvKDMqZSwtZSksdC5saW5lVG8oMyplLGUpLHQubGluZVRvKGUsZSksdC5saW5lVG8oZSwzKmUpLHQubGluZVRvKC1lLDMqZSksdC5saW5lVG8oLWUsZSksdC5saW5lVG8oLTMqZSxlKSx0LmNsb3NlUGF0aCgpfX07Y29uc3QgbHg9TW0oMS8zKSxoeD0yKmx4O3ZhciBkeD17ZHJhdyh0LG4pe2NvbnN0IGU9TW0obi9oeCkscj1lKmx4O3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsMCksdC5saW5lVG8oMCxlKSx0LmxpbmVUbygtciwwKSx0LmNsb3NlUGF0aCgpfX0scHg9e2RyYXcodCxuKXtjb25zdCBlPS42MjYyNSpNbShuKTt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhlLDApLHQubGluZVRvKDAsZSksdC5saW5lVG8oLWUsMCksdC5jbG9zZVBhdGgoKX19LGd4PXtkcmF3KHQsbil7Y29uc3QgZT0uODc1NTkqTW0obi14bShuLzcsMikpO3QubW92ZVRvKC1lLDApLHQubGluZVRvKGUsMCksdC5tb3ZlVG8oMCxlKSx0LmxpbmVUbygwLC1lKX19LHl4PXtkcmF3KHQsbil7Y29uc3QgZT1NbShuKSxyPS1lLzI7dC5yZWN0KHIscixlLGUpfX0sdng9e2RyYXcodCxuKXtjb25zdCBlPS40NDMxKk1tKG4pO3QubW92ZVRvKGUsZSksdC5saW5lVG8oZSwtZSksdC5saW5lVG8oLWUsLWUpLHQubGluZVRvKC1lLGUpLHQuY2xvc2VQYXRoKCl9fTtjb25zdCBfeD13bShBbS8xMCkvd20oNypBbS8xMCksYng9d20oRW0vMTApKl94LG14PS1ibShFbS8xMCkqX3g7dmFyIHh4PXtkcmF3KHQsbil7Y29uc3QgZT1NbSguODkwODEzMDkxNTI5Mjg1MipuKSxyPWJ4KmUsaT1teCplO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsaSk7Zm9yKGxldCBuPTE7bjw1Oysrbil7Y29uc3Qgbz1FbSpuLzUsYT1ibShvKSx1PXdtKG8pO3QubGluZVRvKHUqZSwtYSplKSx0LmxpbmVUbyhhKnItdSppLHUqcithKmkpfXQuY2xvc2VQYXRoKCl9fTtjb25zdCB3eD1NbSgzKTt2YXIgTXg9e2RyYXcodCxuKXtjb25zdCBlPS1NbShuLygzKnd4KSk7dC5tb3ZlVG8oMCwyKmUpLHQubGluZVRvKC13eCplLC1lKSx0LmxpbmVUbyh3eCplLC1lKSx0LmNsb3NlUGF0aCgpfX07Y29uc3QgVHg9TW0oMyk7dmFyIEF4PXtkcmF3KHQsbil7Y29uc3QgZT0uNjgyNCpNbShuKSxyPWUvMixpPWUqVHgvMjt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhpLHIpLHQubGluZVRvKC1pLHIpLHQuY2xvc2VQYXRoKCl9fTtjb25zdCBTeD0tLjUsRXg9TW0oMykvMixOeD0xL01tKDEyKSxreD0zKihOeC8yKzEpO3ZhciBDeD17ZHJhdyh0LG4pe2NvbnN0IGU9TW0obi9reCkscj1lLzIsaT1lKk54LG89cixhPWUqTngrZSx1PS1vLGM9YTt0Lm1vdmVUbyhyLGkpLHQubGluZVRvKG8sYSksdC5saW5lVG8odSxjKSx0LmxpbmVUbyhTeCpyLUV4KmksRXgqcitTeCppKSx0LmxpbmVUbyhTeCpvLUV4KmEsRXgqbytTeCphKSx0LmxpbmVUbyhTeCp1LUV4KmMsRXgqdStTeCpjKSx0LmxpbmVUbyhTeCpyK0V4KmksU3gqaS1FeCpyKSx0LmxpbmVUbyhTeCpvK0V4KmEsU3gqYS1FeCpvKSx0LmxpbmVUbyhTeCp1K0V4KmMsU3gqYy1FeCp1KSx0LmNsb3NlUGF0aCgpfX0sUHg9e2RyYXcodCxuKXtjb25zdCBlPS42MTg5Kk1tKG4teG0obi82LDEuNykpO3QubW92ZVRvKC1lLC1lKSx0LmxpbmVUbyhlLGUpLHQubW92ZVRvKC1lLGUpLHQubGluZVRvKGUsLWUpfX07Y29uc3Qgeng9W2Z4LHN4LGR4LHl4LHh4LE14LEN4XSwkeD1bZngsZ3gsUHgsQXgsY3gsdngscHhdO2Z1bmN0aW9uIER4KCl7fWZ1bmN0aW9uIFJ4KHQsbixlKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErbikvNiwodC5feTArNCp0Ll95MStlKS82KX1mdW5jdGlvbiBGeCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gcXgodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFV4KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBJeCh0LG4pe3RoaXMuX2Jhc2lzPW5ldyBGeCh0KSx0aGlzLl9iZXRhPW59RngucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpSeCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpSeCh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX0scXgucHJvdG90eXBlPXthcmVhU3RhcnQ6RHgsYXJlYUVuZDpEeCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9bix0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK24pLzYpO2JyZWFrO2RlZmF1bHQ6UngodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19LFV4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBlPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStuKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6UngodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19LEl4LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aC0xO2lmKGU+MClmb3IodmFyIHIsaT10WzBdLG89blswXSxhPXRbZV0taSx1PW5bZV0tbyxjPS0xOysrYzw9ZTspcj1jL2UsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W2NdKygxLXRoaXMuX2JldGEpKihpK3IqYSksdGhpcy5fYmV0YSpuW2NdKygxLXRoaXMuX2JldGEpKihvK3IqdSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrbil9fTt2YXIgT3g9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiAxPT09bj9uZXcgRngodCk6bmV3IEl4KHQsbil9cmV0dXJuIGUuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC44NSk7ZnVuY3Rpb24gQngodCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLW4pLHQuX3kyK3QuX2sqKHQuX3kxLWUpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBZeCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9WXgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOkJ4KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpCeCh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIEx4PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IFl4KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO2Z1bmN0aW9uIGp4KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1qeC5wcm90b3R5cGU9e2FyZWFTdGFydDpEeCxhcmVhRW5kOkR4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6QngodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBIeD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBqeCh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtmdW5jdGlvbiBYeCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9WHgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6QngodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBHeD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBYeCh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtmdW5jdGlvbiBWeCh0LG4sZSl7dmFyIHI9dC5feDEsaT10Ll95MSxvPXQuX3gyLGE9dC5feTI7aWYodC5fbDAxX2E+VG0pe3ZhciB1PTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqdS10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9jLGk9KGkqdS10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9jfWlmKHQuX2wyM19hPlRtKXt2YXIgZj0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxzPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtvPShvKmYrdC5feDEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9zLGE9KGEqZit0Ll95MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL3N9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxvLGEsdC5feDIsdC5feTIpfWZ1bmN0aW9uIFd4KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59V3gucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpWeCh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBaeD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IFd4KHQsbik6bmV3IFl4KHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7ZnVuY3Rpb24gS3godCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1LeC5wcm90b3R5cGU9e2FyZWFTdGFydDpEeCxhcmVhRW5kOkR4LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PW4pO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9bjticmVhaztkZWZhdWx0OlZ4KHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFF4PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgS3godCxuKTpuZXcgangodCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtmdW5jdGlvbiBKeCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufUp4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpWeCh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciB0dz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IEp4KHQsbik6bmV3IFh4KHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7ZnVuY3Rpb24gbncodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGV3KHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBydyh0LG4sZSl7dmFyIHI9dC5feDEtdC5feDAsaT1uLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksYT0oZS10Ll95MSkvKGl8fHI8MCYmLTApLHU9KG8qaSthKnIpLyhyK2kpO3JldHVybihldyhvKStldyhhKSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnMoYSksLjUqTWF0aC5hYnModSkpfHwwfWZ1bmN0aW9uIGl3KHQsbil7dmFyIGU9dC5feDEtdC5feDA7cmV0dXJuIGU/KDMqKHQuX3kxLXQuX3kwKS9lLW4pLzI6bn1mdW5jdGlvbiBvdyh0LG4sZSl7dmFyIHI9dC5feDAsaT10Ll95MCxvPXQuX3gxLGE9dC5feTEsdT0oby1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK3UsaSt1Km4sby11LGEtdSplLG8sYSl9ZnVuY3Rpb24gYXcodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHV3KHQpe3RoaXMuX2NvbnRleHQ9bmV3IGN3KHQpfWZ1bmN0aW9uIGN3KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc3codCl7dmFyIG4sZSxyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxuPTE7bjxyLTE7KytuKWlbbl09MSxvW25dPTQsYVtuXT00KnRbbl0rMip0W24rMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KnRbci0xXSt0W3JdLG49MTtuPHI7KytuKWU9aVtuXS9vW24tMV0sb1tuXS09ZSxhW25dLT1lKmFbbi0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sbj1yLTI7bj49MDstLW4paVtuXT0oYVtuXS1pW24rMV0pL29bbl07Zm9yKG9bci0xXT0odFtyXStpW3ItMV0pLzIsbj0wO248ci0xOysrbilvW25dPTIqdFtuKzFdLWlbbisxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBsdyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PW59ZnVuY3Rpb24gaHcodCxuKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIGUscixpLG89MSxhPXRbblswXV0sdT1hLmxlbmd0aDtvPGk7KytvKWZvcihyPWEsYT10W25bb11dLGU9MDtlPHU7KytlKWFbZV1bMV0rPWFbZV1bMF09aXNOYU4ocltlXVsxXSk/cltlXVswXTpyW2VdWzFdfWZ1bmN0aW9uIGR3KHQpe2Zvcih2YXIgbj10Lmxlbmd0aCxlPW5ldyBBcnJheShuKTstLW4+PTA7KWVbbl09bjtyZXR1cm4gZX1mdW5jdGlvbiBwdyh0LG4pe3JldHVybiB0W25dfWZ1bmN0aW9uIGd3KHQpe2NvbnN0IG49W107cmV0dXJuIG4ua2V5PXQsbn1mdW5jdGlvbiB5dyh0KXt2YXIgbj10Lm1hcCh2dyk7cmV0dXJuIGR3KHQpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXX0pKX1mdW5jdGlvbiB2dyh0KXtmb3IodmFyIG4sZT0tMSxyPTAsaT10Lmxlbmd0aCxvPS0xLzA7KytlPGk7KShuPSt0W2VdWzFdKT5vJiYobz1uLHI9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gX3codCl7dmFyIG49dC5tYXAoYncpO3JldHVybiBkdyh0KS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuW3RdLW5bZV19KSl9ZnVuY3Rpb24gYncodCl7Zm9yKHZhciBuLGU9MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShuPSt0W3JdWzFdKSYmKGUrPW4pO3JldHVybiBlfW53LnByb3RvdHlwZT17YXJlYVN0YXJ0OkR4LGFyZWFFbmQ6RHgsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3Q9K3Qsbj0rbix0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsbikpfX0sYXcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOm93KHRoaXMsdGhpcy5fdDAsaXcodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1OYU47aWYobj0rbiwodD0rdCkhPT10aGlzLl94MXx8biE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLG93KHRoaXMsaXcodGhpcyxlPXJ3KHRoaXMsdCxuKSksZSk7YnJlYWs7ZGVmYXVsdDpvdyh0aGlzLHRoaXMuX3QwLGU9cncodGhpcyx0LG4pKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW4sdGhpcy5fdDA9ZX19fSwodXcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYXcucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxuKXthdy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLG4sdCl9LGN3LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGV4dC5tb3ZlVG8obix0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGV4dC5saW5lVG8obix0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4sdCxyLGUsbyxpKX19LGZ3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsbj10aGlzLl95LGU9dC5sZW5ndGg7aWYoZSlpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sblswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxuWzBdKSwyPT09ZSl0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLG5bMV0pO2Vsc2UgZm9yKHZhciByPXN3KHQpLGk9c3cobiksbz0wLGE9MTthPGU7KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oclswXVtvXSxpWzBdW29dLHJbMV1bb10saVsxXVtvXSx0W2FdLG5bYV0pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PWUpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtuKX19LGx3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsbiksdGhpcy5fY29udGV4dC5saW5lVG8odCxuKTtlbHNle3ZhciBlPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKGUsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8oZSxuKX19dGhpcy5feD10LHRoaXMuX3k9bn19O3ZhciBtdz10PT4oKT0+dDtmdW5jdGlvbiB4dyh0LHtzb3VyY2VFdmVudDpuLHRhcmdldDplLHRyYW5zZm9ybTpyLGRpc3BhdGNoOml9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOml9fSl9ZnVuY3Rpb24gd3codCxuLGUpe3RoaXMuaz10LHRoaXMueD1uLHRoaXMueT1lfXd3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6d3csc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IHd3KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gMD09PXQmMD09PW4/dGhpczpuZXcgd3codGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKm4pfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgTXc9bmV3IHd3KDEsMCwwKTtmdW5jdGlvbiBUdyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIE13O3JldHVybiB0Ll9fem9vbX1mdW5jdGlvbiBBdyh0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFN3KHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIEV3KHQpe3JldHVybiEodC5jdHJsS2V5JiYid2hlZWwiIT09dC50eXBlfHx0LmJ1dHRvbil9ZnVuY3Rpb24gTncoKXt2YXIgdD10aGlzO3JldHVybiB0IGluc3RhbmNlb2YgU1ZHRWxlbWVudD8odD10Lm93bmVyU1ZHRWxlbWVudHx8dCkuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFt0LmNsaWVudFdpZHRoLHQuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24ga3coKXtyZXR1cm4gdGhpcy5fX3pvb218fE13fWZ1bmN0aW9uIEN3KHQpe3JldHVybi10LmRlbHRhWSooMT09PXQuZGVsdGFNb2RlPy4wNTp0LmRlbHRhTW9kZT8xOi4wMDIpKih0LmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24gUHcoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gencodCxuLGUpe3ZhciByPXQuaW52ZXJ0WChuWzBdWzBdKS1lWzBdWzBdLGk9dC5pbnZlcnRYKG5bMV1bMF0pLWVbMV1bMF0sbz10LmludmVydFkoblswXVsxXSktZVswXVsxXSxhPXQuaW52ZXJ0WShuWzFdWzFdKS1lWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfVR3LnByb3RvdHlwZT13dy5wcm90b3R5cGUsdC5BZGRlcj1ULHQuRGVsYXVuYXk9THUsdC5Gb3JtYXRTcGVjaWZpZXI9dGYsdC5JbnRlcm5NYXA9SW50ZXJuTWFwLHQuSW50ZXJuU2V0PUludGVyblNldCx0Lk5vZGU9UWQsdC5QYXRoPVVhLHQuVm9yb25vaT1xdSx0Llpvb21UcmFuc2Zvcm09d3csdC5hY3RpdmU9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dC5fX3RyYW5zaXRpb247aWYoaSlmb3IociBpbiBuPW51bGw9PW4/bnVsbDpuKyIiLGkpaWYoKGU9aVtyXSkuc3RhdGU+cWkmJmUubmFtZT09PW4pcmV0dXJuIG5ldyBwbyhbW3RdXSxabyxuLCtyKTtyZXR1cm4gbnVsbH0sdC5hcmM9ZnVuY3Rpb24oKXt2YXIgdD1DbSxuPVBtLGU9eW0oMCkscj1udWxsLGk9em0sbz0kbSxhPURtLHU9bnVsbCxjPWttKGYpO2Z1bmN0aW9uIGYoKXt2YXIgZixzLGw9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktU20scD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1TbSxnPXZtKHAtZCkseT1wPmQ7aWYodXx8KHU9Zj1jKCkpLGg8bCYmKHM9aCxoPWwsbD1zKSxoPlRtKWlmKGc+RW0tVG0pdS5tb3ZlVG8oaCpibShkKSxoKndtKGQpKSx1LmFyYygwLDAsaCxkLHAsIXkpLGw+VG0mJih1Lm1vdmVUbyhsKmJtKHApLGwqd20ocCkpLHUuYXJjKDAsMCxsLHAsZCx5KSk7ZWxzZXt2YXIgdixfLGI9ZCxtPXAseD1kLHc9cCxNPWcsVD1nLEE9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixTPUE+VG0mJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpNbShsKmwraCpoKSksRT14bSh2bShoLWwpLzIsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxOPUUsaz1FO2lmKFM+VG0pe3ZhciBDPU5tKFMvbCp3bShBKSksUD1ObShTL2gqd20oQSkpOyhNLT0yKkMpPlRtPyh4Kz1DKj15PzE6LTEsdy09Qyk6KE09MCx4PXc9KGQrcCkvMiksKFQtPTIqUCk+VG0/KGIrPVAqPXk/MTotMSxtLT1QKTooVD0wLGI9bT0oZCtwKS8yKX12YXIgej1oKmJtKGIpLCQ9aCp3bShiKSxEPWwqYm0odyksUj1sKndtKHcpO2lmKEU+VG0pe3ZhciBGLHE9aCpibShtKSxVPWgqd20obSksST1sKmJtKHgpLE89bCp3bSh4KTtpZihnPEFtKWlmKEY9ZnVuY3Rpb24odCxuLGUscixpLG8sYSx1KXt2YXIgYz1lLXQsZj1yLW4scz1hLWksbD11LW8saD1sKmMtcypmO2lmKCEoaCpoPFRtKSlyZXR1cm5bdCsoaD0ocyoobi1vKS1sKih0LWkpKS9oKSpjLG4raCpmXX0oeiwkLEksTyxxLFUsRCxSKSl7dmFyIEI9ei1GWzBdLFk9JC1GWzFdLEw9cS1GWzBdLGo9VS1GWzFdLEg9MS93bShmdW5jdGlvbih0KXtyZXR1cm4gdD4xPzA6dDwtMT9BbTpNYXRoLmFjb3ModCl9KChCKkwrWSpqKS8oTW0oQipCK1kqWSkqTW0oTCpMK2oqaikpKS8yKSxYPU1tKEZbMF0qRlswXStGWzFdKkZbMV0pO049eG0oRSwobC1YKS8oSC0xKSksaz14bShFLChoLVgpLyhIKzEpKX1lbHNlIE49az0wfVQ+VG0/az5UbT8odj1SbShJLE8seiwkLGgsayx5KSxfPVJtKHEsVSxELFIsaCxrLHkpLHUubW92ZVRvKHYuY3grdi54MDEsdi5jeSt2LnkwMSksazxFP3UuYXJjKHYuY3gsdi5jeSxrLF9tKHYueTAxLHYueDAxKSxfbShfLnkwMSxfLngwMSksIXkpOih1LmFyYyh2LmN4LHYuY3ksayxfbSh2LnkwMSx2LngwMSksX20odi55MTEsdi54MTEpLCF5KSx1LmFyYygwLDAsaCxfbSh2LmN5K3YueTExLHYuY3grdi54MTEpLF9tKF8uY3krXy55MTEsXy5jeCtfLngxMSksIXkpLHUuYXJjKF8uY3gsXy5jeSxrLF9tKF8ueTExLF8ueDExKSxfbShfLnkwMSxfLngwMSksIXkpKSk6KHUubW92ZVRvKHosJCksdS5hcmMoMCwwLGgsYixtLCF5KSk6dS5tb3ZlVG8oeiwkKSxsPlRtJiZNPlRtP04+VG0/KHY9Um0oRCxSLHEsVSxsLC1OLHkpLF89Um0oeiwkLEksTyxsLC1OLHkpLHUubGluZVRvKHYuY3grdi54MDEsdi5jeSt2LnkwMSksTjxFP3UuYXJjKHYuY3gsdi5jeSxOLF9tKHYueTAxLHYueDAxKSxfbShfLnkwMSxfLngwMSksIXkpOih1LmFyYyh2LmN4LHYuY3ksTixfbSh2LnkwMSx2LngwMSksX20odi55MTEsdi54MTEpLCF5KSx1LmFyYygwLDAsbCxfbSh2LmN5K3YueTExLHYuY3grdi54MTEpLF9tKF8uY3krXy55MTEsXy5jeCtfLngxMSkseSksdS5hcmMoXy5jeCxfLmN5LE4sX20oXy55MTEsXy54MTEpLF9tKF8ueTAxLF8ueDAxKSwheSkpKTp1LmFyYygwLDAsbCx3LHgseSk6dS5saW5lVG8oRCxSKX1lbHNlIHUubW92ZVRvKDAsMCk7aWYodS5jbG9zZVBhdGgoKSxmKXJldHVybiB1PW51bGwsZisiInx8bnVsbH1yZXR1cm4gZi5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBlPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1BbS8yO3JldHVybltibShyKSplLHdtKHIpKmVdfSxmLmlubmVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eW0oK24pLGYpOnR9LGYub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5bSgrdCksZik6bn0sZi5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5bSgrdCksZik6ZX0sZi5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eW0oK3QpLGYpOnJ9LGYuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKCt0KSxmKTppfSxmLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eW0oK3QpLGYpOm99LGYucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5bSgrdCksZik6YX0sZi5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PXQ/bnVsbDp0LGYpOnV9LGZ9LHQuYXJlYT1MbSx0LmFyZWFSYWRpYWw9S20sdC5hc2NlbmRpbmc9bix0LmF1dG9UeXBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0KXt2YXIgZSxyLGk9dFtuXS50cmltKCk7aWYoaSlpZigidHJ1ZSI9PT1pKWk9ITA7ZWxzZSBpZigiZmFsc2UiPT09aSlpPSExO2Vsc2UgaWYoIk5hTiI9PT1pKWk9TmFOO2Vsc2UgaWYoaXNOYU4oZT0raSkpe2lmKCEocj1pLm1hdGNoKC9eKFstK11cZHsyfSk/XGR7NH0oLVxkezJ9KC1cZHsyfSk/KT8oVFxkezJ9OlxkezJ9KDpcZHsyfShcLlxkezN9KT8pPyhafFstK11cZHsyfTpcZHsyfSk/KT8kLykpKWNvbnRpbnVlO3ljJiZyWzRdJiYhcls3XSYmKGk9aS5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxpPW5ldyBEYXRlKGkpfWVsc2UgaT1lO2Vsc2UgaT1udWxsO3Rbbl09aX1yZXR1cm4gdH0sdC5heGlzQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBQdChNdCx0KX0sdC5heGlzTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gUHQoVHQsdCl9LHQuYXhpc1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBQdCh3dCx0KX0sdC5heGlzVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBQdCh4dCx0KX0sdC5iaW49USx0LmJpc2VjdD1zLHQuYmlzZWN0Q2VudGVyPWYsdC5iaXNlY3RMZWZ0PWMsdC5iaXNlY3RSaWdodD11LHQuYmlzZWN0b3I9cix0LmJsb2I9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZmV0Y2godCxuKS50aGVuKHZjKX0sdC5ibHVyPWZ1bmN0aW9uKHQsbil7aWYoISgobj0rbik+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKCJpbnZhbGlkIHIiKTtsZXQgZT10Lmxlbmd0aDtpZighKChlPU1hdGguZmxvb3IoZSkpPj0wKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiaW52YWxpZCBsZW5ndGgiKTtpZighZXx8IW4pcmV0dXJuIHQ7Y29uc3Qgcj15KG4pLGk9dC5zbGljZSgpO3JldHVybiByKHQsaSwwLGUsMSkscihpLHQsMCxlLDEpLHIodCxpLDAsZSwxKSx0fSx0LmJsdXIyPWwsdC5ibHVySW1hZ2U9aCx0LmJydXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHdhKGxhKX0sdC5icnVzaFNlbGVjdGlvbj1mdW5jdGlvbih0KXt2YXIgbj10Ll9fYnJ1c2g7cmV0dXJuIG4/bi5kaW0ub3V0cHV0KG4uc2VsZWN0aW9uKTpudWxsfSx0LmJydXNoWD1mdW5jdGlvbigpe3JldHVybiB3YShmYSl9LHQuYnJ1c2hZPWZ1bmN0aW9uKCl7cmV0dXJuIHdhKHNhKX0sdC5idWZmZXI9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZmV0Y2godCxuKS50aGVuKF9jKX0sdC5jaG9yZD1mdW5jdGlvbigpe3JldHVybiB6YSghMSwhMSl9LHQuY2hvcmREaXJlY3RlZD1mdW5jdGlvbigpe3JldHVybiB6YSghMCwhMSl9LHQuY2hvcmRUcmFuc3Bvc2U9ZnVuY3Rpb24oKXtyZXR1cm4gemEoITEsITApfSx0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgdD1MZCxuPTEsZT0xLHI9ITE7ZnVuY3Rpb24gaShpKXt2YXIgbyxhPTA7aS5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKG4pe3ZhciBlPW4uY2hpbGRyZW47ZT8obi54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShqZCwwKS90Lmxlbmd0aH0oZSksbi55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKEhkLDApfShlKSk6KG4ueD1vP2ErPXQobixvKTowLG4ueT0wLG89bil9KSk7dmFyIHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uWzBdO3JldHVybiB0fShpKSxjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbjtuPXQuY2hpbGRyZW47KXQ9bltuLmxlbmd0aC0xXTtyZXR1cm4gdH0oaSksZj11LngtdCh1LGMpLzIscz1jLngrdChjLHUpLzI7cmV0dXJuIGkuZWFjaEFmdGVyKHI/ZnVuY3Rpb24odCl7dC54PSh0LngtaS54KSpuLHQueT0oaS55LXQueSkqZX06ZnVuY3Rpb24odCl7dC54PSh0LngtZikvKHMtZikqbix0Lnk9KDEtKGkueT90LnkvaS55OjEpKSplfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxuPSt0WzBdLGU9K3RbMV0saSk6cj9udWxsOltuLGVdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLG49K3RbMF0sZT0rdFsxXSxpKTpyP1tuLGVdOm51bGx9LGl9LHQuY29sb3I9emUsdC5jb250b3VyRGVuc2l0eT1mdW5jdGlvbigpe3ZhciB0PWZ1LG49c3UsZT1sdSxyPTk2MCxpPTUwMCxvPTIwLGE9Mix1PTMqbyxjPXIrMip1Pj5hLGY9aSsyKnU+PmEscz1RYSgyMCk7ZnVuY3Rpb24gaChyKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KGMqZikscz1NYXRoLnBvdygyLC1hKSxoPS0xO2Zvcihjb25zdCBvIG9mIHIpe3ZhciBkPSh0KG8sKytoLHIpK3UpKnMscD0obihvLGgscikrdSkqcyxnPStlKG8saCxyKTtpZihnJiZkPj0wJiZkPGMmJnA+PTAmJnA8Zil7dmFyIHk9TWF0aC5mbG9vcihkKSx2PU1hdGguZmxvb3IocCksXz1kLXktLjUsYj1wLXYtLjU7aVt5K3YqY10rPSgxLV8pKigxLWIpKmcsaVt5KzErdipjXSs9XyooMS1iKSpnLGlbeSsxKyh2KzEpKmNdKz1fKmIqZyxpW3krKHYrMSkqY10rPSgxLV8pKmIqZ319cmV0dXJuIGwoe2RhdGE6aSx3aWR0aDpjLGhlaWdodDpmfSxvKnMpLGl9ZnVuY3Rpb24gZCh0KXt2YXIgbj1oKHQpLGU9cyhuKSxyPU1hdGgucG93KDIsMiphKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8KGU9RyhOdW1iZXIuTUlOX1ZBTFVFLEoobikvcixlKSksaXUoKS5zaXplKFtjLGZdKS50aHJlc2hvbGRzKGUubWFwKCh0PT50KnIpKSkobikubWFwKCgodCxuKT0+KHQudmFsdWU9K2Vbbl0scCh0KSkpKX1mdW5jdGlvbiBwKHQpe3JldHVybiB0LmNvb3JkaW5hdGVzLmZvckVhY2goZyksdH1mdW5jdGlvbiBnKHQpe3QuZm9yRWFjaCh5KX1mdW5jdGlvbiB5KHQpe3QuZm9yRWFjaCh2KX1mdW5jdGlvbiB2KHQpe3RbMF09dFswXSpNYXRoLnBvdygyLGEpLXUsdFsxXT10WzFdKk1hdGgucG93KDIsYSktdX1mdW5jdGlvbiBfKCl7cmV0dXJuIGM9cisyKih1PTMqbyk+PmEsZj1pKzIqdT4+YSxkfXJldHVybiBkLmNvbnRvdXJzPWZ1bmN0aW9uKHQpe3ZhciBuPWgodCksZT1pdSgpLnNpemUoW2MsZl0pLHI9TWF0aC5wb3coMiwyKmEpLGk9dD0+e3Q9K3Q7dmFyIGk9cChlLmNvbnRvdXIobix0KnIpKTtyZXR1cm4gaS52YWx1ZT10LGl9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibWF4Iix7Z2V0OigpPT5KKG4pL3J9KSxpfSxkLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpRYSgrbiksZCk6dH0sZC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UWEoK3QpLGQpOm59LGQud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UWEoK3QpLGQpOmV9LGQuc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bcixpXTt2YXIgbj0rdFswXSxlPSt0WzFdO2lmKCEobj49MCYmZT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1uLGk9ZSxfKCl9LGQuY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PGE7aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSxfKCl9LGQudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/UWEoWmEuY2FsbCh0KSk6UWEodCksZCk6c30sZC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChvKihvKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBvPShNYXRoLnNxcnQoNCp0KnQrMSktMSkvMixfKCl9LGR9LHQuY29udG91cnM9aXUsdC5jb3VudD12LHQuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBabihZdCh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSx0LmNyZWF0b3I9WXQsdC5jcm9zcz1mdW5jdGlvbiguLi50KXtjb25zdCBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiZmdW5jdGlvbih0KXtyZXR1cm4gbj0+dCguLi5uKX0odC5wb3AoKSksZT0odD10Lm1hcChtKSkubWFwKF8pLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKzEpLmZpbGwoMCksbz1bXTtpZihyPDB8fGUuc29tZShiKSlyZXR1cm4gbztmb3IoOzspe28ucHVzaChpLm1hcCgoKG4sZSk9PnRbZV1bbl0pKSk7bGV0IGE9cjtmb3IoOysraVthXT09PWVbYV07KXtpZigwPT09YSlyZXR1cm4gbj9vLm1hcChuKTpvO2lbYS0tXT0wfX19LHQuY3N2PXdjLHQuY3N2Rm9ybWF0PXJjLHQuY3N2Rm9ybWF0Qm9keT1pYyx0LmNzdkZvcm1hdFJvdz1hYyx0LmNzdkZvcm1hdFJvd3M9b2MsdC5jc3ZGb3JtYXRWYWx1ZT11Yyx0LmNzdlBhcnNlPW5jLHQuY3N2UGFyc2VSb3dzPWVjLHQuY3ViZWhlbGl4PVRyLHQuY3Vtc3VtPWZ1bmN0aW9uKHQsbil7dmFyIGU9MCxyPTA7cmV0dXJuIEZsb2F0NjRBcnJheS5mcm9tKHQsdm9pZCAwPT09bj90PT5lKz0rdHx8MDppPT5lKz0rbihpLHIrKyx0KXx8MCl9LHQuY3VydmVCYXNpcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEZ4KHQpfSx0LmN1cnZlQmFzaXNDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxeCh0KX0sdC5jdXJ2ZUJhc2lzT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFV4KHQpfSx0LmN1cnZlQnVtcFg9bngsdC5jdXJ2ZUJ1bXBZPWV4LHQuY3VydmVCdW5kbGU9T3gsdC5jdXJ2ZUNhcmRpbmFsPUx4LHQuY3VydmVDYXJkaW5hbENsb3NlZD1IeCx0LmN1cnZlQ2FyZGluYWxPcGVuPUd4LHQuY3VydmVDYXRtdWxsUm9tPVp4LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPVF4LHQuY3VydmVDYXRtdWxsUm9tT3Blbj10dyx0LmN1cnZlTGluZWFyPUltLHQuY3VydmVMaW5lYXJDbG9zZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBudyh0KX0sdC5jdXJ2ZU1vbm90b25lWD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGF3KHQpfSx0LmN1cnZlTW9ub3RvbmVZPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdXcodCl9LHQuY3VydmVOYXR1cmFsPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZncodCl9LHQuY3VydmVTdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbHcodCwuNSl9LHQuY3VydmVTdGVwQWZ0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBsdyh0LDEpfSx0LmN1cnZlU3RlcEJlZm9yZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGx3KHQsMCl9LHQuZGVzY2VuZGluZz1lLHQuZGV2aWF0aW9uPXcsdC5kaWZmZXJlbmNlPWZ1bmN0aW9uKHQsLi4ubil7dD1uZXcgSW50ZXJuU2V0KHQpO2Zvcihjb25zdCBlIG9mIG4pZm9yKGNvbnN0IG4gb2YgZSl0LmRlbGV0ZShuKTtyZXR1cm4gdH0sdC5kaXNqb2ludD1mdW5jdGlvbih0LG4pe2NvbnN0IGU9bltTeW1ib2wuaXRlcmF0b3JdKCkscj1uZXcgSW50ZXJuU2V0O2Zvcihjb25zdCBuIG9mIHQpe2lmKHIuaGFzKG4pKXJldHVybiExO2xldCB0LGk7Zm9yKDsoe3ZhbHVlOnQsZG9uZTppfT1lLm5leHQoKSkmJiFpOyl7aWYoT2JqZWN0LmlzKG4sdCkpcmV0dXJuITE7ci5hZGQodCl9fXJldHVybiEwfSx0LmRpc3BhdGNoPSR0LHQuZHJhZz1mdW5jdGlvbigpe3ZhciB0LG4sZSxyLGk9c2Usbz1sZSxhPWhlLHU9ZGUsYz17fSxmPSR0KCJzdGFydCIsImRyYWciLCJlbmQiKSxzPTAsbD0wO2Z1bmN0aW9uIGgodCl7dC5vbigibW91c2Vkb3duLmRyYWciLGQpLmZpbHRlcih1KS5vbigidG91Y2hzdGFydC5kcmFnIix5KS5vbigidG91Y2htb3ZlLmRyYWciLHYsZWUpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLF8pLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkKGEsdSl7aWYoIXImJmkuY2FsbCh0aGlzLGEsdSkpe3ZhciBjPWIodGhpcyxvLmNhbGwodGhpcyxhLHUpLGEsdSwibW91c2UiKTtjJiYoWm4oYS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHAscmUpLm9uKCJtb3VzZXVwLmRyYWciLGcscmUpLGFlKGEudmlldyksaWUoYSksZT0hMSx0PWEuY2xpZW50WCxuPWEuY2xpZW50WSxjKCJzdGFydCIsYSkpfX1mdW5jdGlvbiBwKHIpe2lmKG9lKHIpLCFlKXt2YXIgaT1yLmNsaWVudFgtdCxvPXIuY2xpZW50WS1uO2U9aSppK28qbz5sfWMubW91c2UoImRyYWciLHIpfWZ1bmN0aW9uIGcodCl7Wm4odC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSx1ZSh0LnZpZXcsZSksb2UodCksYy5tb3VzZSgiZW5kIix0KX1mdW5jdGlvbiB5KHQsbil7aWYoaS5jYWxsKHRoaXMsdCxuKSl7dmFyIGUscixhPXQuY2hhbmdlZFRvdWNoZXMsdT1vLmNhbGwodGhpcyx0LG4pLGM9YS5sZW5ndGg7Zm9yKGU9MDtlPGM7KytlKShyPWIodGhpcyx1LHQsbixhW2VdLmlkZW50aWZpZXIsYVtlXSkpJiYoaWUodCkscigic3RhcnQiLHQsYVtlXSkpfX1mdW5jdGlvbiB2KHQpe3ZhciBuLGUscj10LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKG49MDtuPGk7KytuKShlPWNbcltuXS5pZGVudGlmaWVyXSkmJihvZSh0KSxlKCJkcmFnIix0LHJbbl0pKX1mdW5jdGlvbiBfKHQpe3ZhciBuLGUsaT10LmNoYW5nZWRUb3VjaGVzLG89aS5sZW5ndGg7Zm9yKHImJmNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cj1udWxsfSksNTAwKSxuPTA7bjxvOysrbikoZT1jW2lbbl0uaWRlbnRpZmllcl0pJiYoaWUodCksZSgiZW5kIix0LGlbbl0pKX1mdW5jdGlvbiBiKHQsbixlLHIsaSxvKXt2YXIgdSxsLGQscD1mLmNvcHkoKSxnPW5lKG98fGUsbik7aWYobnVsbCE9KGQ9YS5jYWxsKHQsbmV3IGZlKCJiZWZvcmVzdGFydCIse3NvdXJjZUV2ZW50OmUsdGFyZ2V0OmgsaWRlbnRpZmllcjppLGFjdGl2ZTpzLHg6Z1swXSx5OmdbMV0sZHg6MCxkeTowLGRpc3BhdGNoOnB9KSxyKSkpcmV0dXJuIHU9ZC54LWdbMF18fDAsbD1kLnktZ1sxXXx8MCxmdW5jdGlvbiBlKG8sYSxmKXt2YXIgeSx2PWc7c3dpdGNoKG8pe2Nhc2Uic3RhcnQiOmNbaV09ZSx5PXMrKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGNbaV0sLS1zO2Nhc2UiZHJhZyI6Zz1uZShmfHxhLG4pLHk9c31wLmNhbGwobyx0LG5ldyBmZShvLHtzb3VyY2VFdmVudDphLHN1YmplY3Q6ZCx0YXJnZXQ6aCxpZGVudGlmaWVyOmksYWN0aXZlOnkseDpnWzBdK3UseTpnWzFdK2wsZHg6Z1swXS12WzBdLGR5OmdbMV0tdlsxXSxkaXNwYXRjaDpwfSkscil9fXJldHVybiBoLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNlKCEhdCksaCk6aX0saC5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjZSh0KSxoKTpvfSxoLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjZSh0KSxoKTphfSxoLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmNlKCEhdCksaCk6dX0saC5vbj1mdW5jdGlvbigpe3ZhciB0PWYub24uYXBwbHkoZixhcmd1bWVudHMpO3JldHVybiB0PT09Zj9oOnR9LGguY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0odD0rdCkqdCxoKTpNYXRoLnNxcnQobCl9LGh9LHQuZHJhZ0Rpc2FibGU9YWUsdC5kcmFnRW5hYmxlPXVlLHQuZHN2PWZ1bmN0aW9uKHQsbixlLHIpezM9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPXZvaWQgMCk7dmFyIGk9SnUodCk7cmV0dXJuIG1jKG4sZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pKX0sdC5kc3ZGb3JtYXQ9SnUsdC5lYXNlQmFjaz1Mbyx0LmVhc2VCYWNrSW49Qm8sdC5lYXNlQmFja0luT3V0PUxvLHQuZWFzZUJhY2tPdXQ9WW8sdC5lYXNlQm91bmNlPUlvLHQuZWFzZUJvdW5jZUluPWZ1bmN0aW9uKHQpe3JldHVybiAxLUlvKDEtdCl9LHQuZWFzZUJvdW5jZUluT3V0PWZ1bmN0aW9uKHQpe3JldHVybigodCo9Mik8PTE/MS1JbygxLXQpOklvKHQtMSkrMSkvMn0sdC5lYXNlQm91bmNlT3V0PUlvLHQuZWFzZUNpcmNsZT1Obyx0LmVhc2VDaXJjbGVJbj1mdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfSx0LmVhc2VDaXJjbGVJbk91dD1Obyx0LmVhc2VDaXJjbGVPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9LHQuZWFzZUN1YmljPWJvLHQuZWFzZUN1YmljSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCp0fSx0LmVhc2VDdWJpY0luT3V0PWJvLHQuZWFzZUN1YmljT3V0PWZ1bmN0aW9uKHQpe3JldHVybi0tdCp0KnQrMX0sdC5lYXNlRWxhc3RpYz1Ybyx0LmVhc2VFbGFzdGljSW49SG8sdC5lYXNlRWxhc3RpY0luT3V0PUdvLHQuZWFzZUVsYXN0aWNPdXQ9WG8sdC5lYXNlRXhwPUVvLHQuZWFzZUV4cEluPWZ1bmN0aW9uKHQpe3JldHVybiBTbygxLSt0KX0sdC5lYXNlRXhwSW5PdXQ9RW8sdC5lYXNlRXhwT3V0PWZ1bmN0aW9uKHQpe3JldHVybiAxLVNvKHQpfSx0LmVhc2VMaW5lYXI9dD0+K3QsdC5lYXNlUG9seT13byx0LmVhc2VQb2x5SW49bW8sdC5lYXNlUG9seUluT3V0PXdvLHQuZWFzZVBvbHlPdXQ9eG8sdC5lYXNlUXVhZD1fbyx0LmVhc2VRdWFkSW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqdH0sdC5lYXNlUXVhZEluT3V0PV9vLHQuZWFzZVF1YWRPdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQqKDItdCl9LHQuZWFzZVNpbj1Bbyx0LmVhc2VTaW5Jbj1mdW5jdGlvbih0KXtyZXR1cm4gMT09K3Q/MToxLU1hdGguY29zKHQqVG8pfSx0LmVhc2VTaW5Jbk91dD1Bbyx0LmVhc2VTaW5PdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2luKHQqVG8pfSx0LmV2ZXJ5PWZ1bmN0aW9uKHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigidGVzdCBpcyBub3QgYSBmdW5jdGlvbiIpO2xldCBlPS0xO2Zvcihjb25zdCByIG9mIHQpaWYoIW4ociwrK2UsdCkpcmV0dXJuITE7cmV0dXJuITB9LHQuZXh0ZW50PU0sdC5mY3Vtc3VtPWZ1bmN0aW9uKHQsbil7Y29uc3QgZT1uZXcgVDtsZXQgcj0tMTtyZXR1cm4gRmxvYXQ2NEFycmF5LmZyb20odCx2b2lkIDA9PT1uP3Q9PmUuYWRkKCt0fHwwKTppPT5lLmFkZCgrbihpLCsrcix0KXx8MCkpfSx0LmZpbHRlcj1mdW5jdGlvbih0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoInRlc3QgaXMgbm90IGEgZnVuY3Rpb24iKTtjb25zdCBlPVtdO2xldCByPS0xO2Zvcihjb25zdCBpIG9mIHQpbihpLCsrcix0KSYmZS5wdXNoKGkpO3JldHVybiBlfSx0LmZsYXRHcm91cD1mdW5jdGlvbih0LC4uLm4pe3JldHVybiB6KFAodCwuLi5uKSxuKX0sdC5mbGF0Um9sbHVwPWZ1bmN0aW9uKHQsbiwuLi5lKXtyZXR1cm4geihEKHQsbiwuLi5lKSxlKX0sdC5mb3JjZUNlbnRlcj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9MTtmdW5jdGlvbiBpKCl7dmFyIGksbyxhPWUubGVuZ3RoLHU9MCxjPTA7Zm9yKGk9MDtpPGE7KytpKXUrPShvPWVbaV0pLngsYys9by55O2Zvcih1PSh1L2EtdCkqcixjPShjL2EtbikqcixpPTA7aTxhOysraSkobz1lW2ldKS54LT11LG8ueS09Y31yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09biYmKG49MCksaS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dH0saS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuLGkpOnR9LGkueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxpKTpufSxpLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGkpOnJ9LGl9LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpPTEsbz0xO2Z1bmN0aW9uIGEoKXtmb3IodmFyIHQsYSxjLGYscyxsLGgsZD1uLmxlbmd0aCxwPTA7cDxvOysrcClmb3IoYT0kYyhuLEljLE9jKS52aXNpdEFmdGVyKHUpLHQ9MDt0PGQ7Kyt0KWM9blt0XSxsPWVbYy5pbmRleF0saD1sKmwsZj1jLngrYy52eCxzPWMueStjLnZ5LGEudmlzaXQoZyk7ZnVuY3Rpb24gZyh0LG4sZSxvLGEpe3ZhciB1PXQuZGF0YSxkPXQucixwPWwrZDtpZighdSlyZXR1cm4gbj5mK3B8fG88Zi1wfHxlPnMrcHx8YTxzLXA7aWYodS5pbmRleD5jLmluZGV4KXt2YXIgZz1mLXUueC11LnZ4LHk9cy11LnktdS52eSx2PWcqZyt5Knk7djxwKnAmJigwPT09ZyYmKHYrPShnPVVjKHIpKSpnKSwwPT09eSYmKHYrPSh5PVVjKHIpKSp5KSx2PShwLSh2PU1hdGguc3FydCh2KSkpL3YqaSxjLnZ4Kz0oZyo9dikqKHA9KGQqPWQpLyhoK2QpKSxjLnZ5Kz0oeSo9dikqcCx1LnZ4LT1nKihwPTEtcCksdS52eS09eSpwKX19fWZ1bmN0aW9uIHUodCl7aWYodC5kYXRhKXJldHVybiB0LnI9ZVt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgbj10LnI9MDtuPDQ7KytuKXRbbl0mJnRbbl0ucj50LnImJih0LnI9dFtuXS5yKX1mdW5jdGlvbiBjKCl7aWYobil7dmFyIHIsaSxvPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShvKSxyPTA7cjxvOysrcilpPW5bcl0sZVtpLmluZGV4XT0rdChpLHIsbil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1xYyhudWxsPT10PzE6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCxlKXtuPXQscj1lLGMoKX0sYS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGEpOm99LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsYSk6aX0sYS5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpxYygrbiksYygpLGEpOnR9LGF9LHQuZm9yY2VMaW5rPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYSx1PUJjLGM9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oaVt0LnNvdXJjZS5pbmRleF0saVt0LnRhcmdldC5pbmRleF0pfSxmPXFjKDMwKSxzPTE7ZnVuY3Rpb24gbChyKXtmb3IodmFyIGk9MCx1PXQubGVuZ3RoO2k8czsrK2kpZm9yKHZhciBjLGYsbCxoLGQscCxnLHk9MDt5PHU7Kyt5KWY9KGM9dFt5XSkuc291cmNlLGg9KGw9Yy50YXJnZXQpLngrbC52eC1mLngtZi52eHx8VWMoYSksZD1sLnkrbC52eS1mLnktZi52eXx8VWMoYSksaCo9cD0oKHA9TWF0aC5zcXJ0KGgqaCtkKmQpKS1lW3ldKS9wKnIqblt5XSxkKj1wLGwudngtPWgqKGc9b1t5XSksbC52eS09ZCpnLGYudngrPWgqKGc9MS1nKSxmLnZ5Kz1kKmd9ZnVuY3Rpb24gaCgpe2lmKHIpe3ZhciBhLGMsZj1yLmxlbmd0aCxzPXQubGVuZ3RoLGw9bmV3IE1hcChyLm1hcCgoKHQsbik9Plt1KHQsbixyKSx0XSkpKTtmb3IoYT0wLGk9bmV3IEFycmF5KGYpO2E8czsrK2EpKGM9dFthXSkuaW5kZXg9YSwib2JqZWN0IiE9dHlwZW9mIGMuc291cmNlJiYoYy5zb3VyY2U9WWMobCxjLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgYy50YXJnZXQmJihjLnRhcmdldD1ZYyhsLGMudGFyZ2V0KSksaVtjLnNvdXJjZS5pbmRleF09KGlbYy5zb3VyY2UuaW5kZXhdfHwwKSsxLGlbYy50YXJnZXQuaW5kZXhdPShpW2MudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoYT0wLG89bmV3IEFycmF5KHMpO2E8czsrK2EpYz10W2FdLG9bYV09aVtjLnNvdXJjZS5pbmRleF0vKGlbYy5zb3VyY2UuaW5kZXhdK2lbYy50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheShzKSxkKCksZT1uZXcgQXJyYXkocykscCgpfX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpbltlXT0rYyh0W2VdLGUsdCl9ZnVuY3Rpb24gcCgpe2lmKHIpZm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWVbbl09K2YodFtuXSxuLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQsbil7cj10LGE9bixoKCl9LGwubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixoKCksbCk6dH0sbC5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LGwpOnV9LGwuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxsKTpzfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cWMoK3QpLGQoKSxsKTpjfSxsLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cWMoK3QpLHAoKSxsKTpmfSxsfSx0LmZvcmNlTWFueUJvZHk9ZnVuY3Rpb24oKXt2YXIgdCxuLGUscixpLG89cWMoLTMwKSxhPTEsdT0xLzAsYz0uODE7ZnVuY3Rpb24gZihlKXt2YXIgaSxvPXQubGVuZ3RoLGE9JGModCxYYyxHYykudmlzaXRBZnRlcihsKTtmb3Iocj1lLGk9MDtpPG87KytpKW49dFtpXSxhLnZpc2l0KGgpfWZ1bmN0aW9uIHMoKXtpZih0KXt2YXIgbixlLHI9dC5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLG49MDtuPHI7KytuKWU9dFtuXSxpW2UuaW5kZXhdPStvKGUsbix0KX19ZnVuY3Rpb24gbCh0KXt2YXIgbixlLHIsbyxhLHU9MCxjPTA7aWYodC5sZW5ndGgpe2ZvcihyPW89YT0wO2E8NDsrK2EpKG49dFthXSkmJihlPU1hdGguYWJzKG4udmFsdWUpKSYmKHUrPW4udmFsdWUsYys9ZSxyKz1lKm4ueCxvKz1lKm4ueSk7dC54PXIvYyx0Lnk9by9jfWVsc2V7KG49dCkueD1uLmRhdGEueCxuLnk9bi5kYXRhLnk7ZG97dSs9aVtuLmRhdGEuaW5kZXhdfXdoaWxlKG49bi5uZXh0KX10LnZhbHVlPXV9ZnVuY3Rpb24gaCh0LG8sZixzKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgbD10Lngtbi54LGg9dC55LW4ueSxkPXMtbyxwPWwqbCtoKmg7aWYoZCpkL2M8cClyZXR1cm4gcDx1JiYoMD09PWwmJihwKz0obD1VYyhlKSkqbCksMD09PWgmJihwKz0oaD1VYyhlKSkqaCkscDxhJiYocD1NYXRoLnNxcnQoYSpwKSksbi52eCs9bCp0LnZhbHVlKnIvcCxuLnZ5Kz1oKnQudmFsdWUqci9wKSwhMDtpZighKHQubGVuZ3RofHxwPj11KSl7KHQuZGF0YSE9PW58fHQubmV4dCkmJigwPT09bCYmKHArPShsPVVjKGUpKSpsKSwwPT09aCYmKHArPShoPVVjKGUpKSpoKSxwPGEmJihwPU1hdGguc3FydChhKnApKSk7ZG97dC5kYXRhIT09biYmKGQ9aVt0LmRhdGEuaW5kZXhdKnIvcCxuLnZ4Kz1sKmQsbi52eSs9aCpkKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBmLmluaXRpYWxpemU9ZnVuY3Rpb24obixyKXt0PW4sZT1yLHMoKX0sZi5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnFjKCt0KSxzKCksZik6b30sZi5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10KnQsZik6TWF0aC5zcXJ0KGEpfSxmLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxmKTpNYXRoLnNxcnQodSl9LGYudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCp0LGYpOk1hdGguc3FydChjKX0sZn0sdC5mb3JjZVJhZGlhbD1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvLGE9cWMoLjEpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBhPTAsdT1yLmxlbmd0aDthPHU7KythKXt2YXIgYz1yW2FdLGY9Yy54LW58fDFlLTYscz1jLnktZXx8MWUtNixsPU1hdGguc3FydChmKmYrcypzKSxoPShvW2FdLWwpKmlbYV0qdC9sO2MudngrPWYqaCxjLnZ5Kz1zKmh9fWZ1bmN0aW9uIGMoKXtpZihyKXt2YXIgbixlPXIubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilvW25dPSt0KHJbbl0sbixyKSxpW25dPWlzTmFOKG9bbl0pPzA6K2EocltuXSxuLHIpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cWMoK3QpKSxudWxsPT1uJiYobj0wKSxudWxsPT1lJiYoZT0wKSx1LmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGMoKX0sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnFjKCt0KSxjKCksdSk6YX0sdS5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpxYygrbiksYygpLHUpOnR9LHUueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCx1KTpufSx1Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3QsdSk6ZX0sdX0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7dmFyIG4sZT0xLHI9LjAwMSxpPTEtTWF0aC5wb3cociwxLzMwMCksbz0wLGE9LjYsdT1uZXcgTWFwLGM9TmkobCksZj0kdCgidGljayIsImVuZCIpLHM9ZnVuY3Rpb24oKXtsZXQgdD0xO3JldHVybigpPT4odD0oTGMqdCtqYyklSGMpL0hjfSgpO2Z1bmN0aW9uIGwoKXtoKCksZi5jYWxsKCJ0aWNrIixuKSxlPHImJihjLnN0b3AoKSxmLmNhbGwoImVuZCIsbikpfWZ1bmN0aW9uIGgocil7dmFyIGMsZixzPXQubGVuZ3RoO3ZvaWQgMD09PXImJihyPTEpO2Zvcih2YXIgbD0wO2w8cjsrK2wpZm9yKGUrPShvLWUpKmksdS5mb3JFYWNoKChmdW5jdGlvbih0KXt0KGUpfSkpLGM9MDtjPHM7KytjKW51bGw9PShmPXRbY10pLmZ4P2YueCs9Zi52eCo9YTooZi54PWYuZngsZi52eD0wKSxudWxsPT1mLmZ5P2YueSs9Zi52eSo9YTooZi55PWYuZnksZi52eT0wKTtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7Zm9yKHZhciBuLGU9MCxyPXQubGVuZ3RoO2U8cjsrK2Upe2lmKChuPXRbZV0pLmluZGV4PWUsbnVsbCE9bi5meCYmKG4ueD1uLmZ4KSxudWxsIT1uLmZ5JiYobi55PW4uZnkpLGlzTmFOKG4ueCl8fGlzTmFOKG4ueSkpe3ZhciBpPTEwKk1hdGguc3FydCguNStlKSxvPWUqVmM7bi54PWkqTWF0aC5jb3Mobyksbi55PWkqTWF0aC5zaW4obyl9KGlzTmFOKG4udngpfHxpc05hTihuLnZ5KSkmJihuLnZ4PW4udnk9MCl9fWZ1bmN0aW9uIHAobil7cmV0dXJuIG4uaW5pdGlhbGl6ZSYmbi5pbml0aWFsaXplKHQscyksbn1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGQoKSxuPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBjLnJlc3RhcnQobCksbn0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBjLnN0b3AoKSxufSxub2RlczpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGQoKSx1LmZvckVhY2gocCksbik6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qsbik6ZX0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3Qsbik6cn0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxuKToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLXQsbik6MS1hfSxyYW5kb21Tb3VyY2U6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx1LmZvckVhY2gocCksbik6c30sZm9yY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1lP3UuZGVsZXRlKHQpOnUuc2V0KHQscChlKSksbik6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24obixlLHIpe3ZhciBpLG8sYSx1LGMsZj0wLHM9dC5sZW5ndGg7Zm9yKG51bGw9PXI/cj0xLzA6cio9cixmPTA7ZjxzOysrZikoYT0oaT1uLSh1PXRbZl0pLngpKmkrKG89ZS11LnkpKm8pPHImJihjPXUscj1hKTtyZXR1cm4gY30sb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhmLm9uKHQsZSksbik6Zi5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgbixlLHIsaT1xYyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGksbz0wLGE9bi5sZW5ndGg7bzxhOysrbykoaT1uW29dKS52eCs9KHJbb10taS54KSplW29dKnR9ZnVuY3Rpb24gYSgpe2lmKG4pe3ZhciBvLGE9bi5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KGEpLHI9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKWVbb109aXNOYU4ocltvXT0rdChuW29dLG8sbikpPzA6K2kobltvXSxvLG4pfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cWMobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpxYygrdCksYSgpLG8pOml9LG8ueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnFjKCtuKSxhKCksbyk6dH0sb30sdC5mb3JjZVk9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGk9cWMoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLG89MCxhPW4ubGVuZ3RoO288YTsrK28pKGk9bltvXSkudnkrPShyW29dLWkueSkqZVtvXSp0fWZ1bmN0aW9uIGEoKXtpZihuKXt2YXIgbyxhPW4ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShhKSxyPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyllW29dPWlzTmFOKHJbb109K3QobltvXSxvLG4pKT8wOitpKG5bb10sbyxuKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXFjKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cWMoK3QpLGEoKSxvKTppfSxvLnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpxYygrbiksYSgpLG8pOnR9LG99LHQuZm9ybWF0RGVmYXVsdExvY2FsZT1mZix0LmZvcm1hdExvY2FsZT1jZix0LmZvcm1hdFNwZWNpZmllcj1KYyx0LmZzdW09ZnVuY3Rpb24odCxuKXtjb25zdCBlPW5ldyBUO2lmKHZvaWQgMD09PW4pZm9yKGxldCBuIG9mIHQpKG49K24pJiZlLmFkZChuKTtlbHNle2xldCByPS0xO2ZvcihsZXQgaSBvZiB0KShpPStuKGksKytyLHQpKSYmZS5hZGQoaSl9cmV0dXJuK2V9LHQuZ2VvQWxiZXJzPXhkLHQuZ2VvQWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIHQsbixlLHIsaSxvLGE9eGQoKSx1PW1kKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxjPW1kKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGY9e3BvaW50OmZ1bmN0aW9uKHQsbil7bz1bdCxuXX19O2Z1bmN0aW9uIHModCl7dmFyIG49dFswXSxhPXRbMV07cmV0dXJuIG89bnVsbCxlLnBvaW50KG4sYSksb3x8KHIucG9pbnQobixhKSxvKXx8KGkucG9pbnQobixhKSxvKX1mdW5jdGlvbiBsKCl7cmV0dXJuIHQ9bj1udWxsLHN9cmV0dXJuIHMuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBuPWEuc2NhbGUoKSxlPWEudHJhbnNsYXRlKCkscj0odFswXS1lWzBdKS9uLGk9KHRbMV0tZVsxXSkvbjtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJnI+PS0uNDI1JiZyPC0uMjE0P3U6aT49LjE2NiYmaTwuMjM0JiZyPj0tLjIxNCYmcjwtLjExNT9jOmEpLmludmVydCh0KX0scy5zdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6KHI9W2Euc3RyZWFtKG49ZSksdS5zdHJlYW0oZSksYy5zdHJlYW0oZSldLGk9ci5sZW5ndGgsdD17cG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9LTE7KytlPGk7KXJbZV0ucG9pbnQodCxuKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0ucG9seWdvbkVuZCgpfX0pO3ZhciByLGl9LHMucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnByZWNpc2lvbih0KSx1LnByZWNpc2lvbih0KSxjLnByZWNpc2lvbih0KSxsKCkpOmEucHJlY2lzaW9uKCl9LHMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUodCksdS5zY2FsZSguMzUqdCksYy5zY2FsZSh0KSxzLnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSxzLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgbj1hLnNjYWxlKCksbz0rdFswXSxzPSt0WzFdO3JldHVybiBlPWEudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tvLS40NTUqbixzLS4yMzgqbl0sW28rLjQ1NSpuLHMrLjIzOCpuXV0pLnN0cmVhbShmKSxyPXUudHJhbnNsYXRlKFtvLS4zMDcqbixzKy4yMDEqbl0pLmNsaXBFeHRlbnQoW1tvLS40MjUqbitkZixzKy4xMipuK2RmXSxbby0uMjE0Km4tZGYscysuMjM0Km4tZGZdXSkuc3RyZWFtKGYpLGk9Yy50cmFuc2xhdGUoW28tLjIwNSpuLHMrLjIxMipuXSkuY2xpcEV4dGVudChbW28tLjIxNCpuK2RmLHMrLjE2NipuK2RmXSxbby0uMTE1Km4tZGYscysuMjM0Km4tZGZdXSkuc3RyZWFtKGYpLGwoKX0scy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdWQocyx0LG4pfSxzLmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY2Qocyx0LG4pfSxzLmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZkKHMsdCxuKX0scy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gc2Qocyx0LG4pfSxzLnNjYWxlKDEwNzApfSx0Lmdlb0FyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIHVzPW5ldyBULExmKHQsY3MpLDIqdXN9LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIHlkKFRkKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXc9VGQsdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiB5ZChBZCkuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3PUFkLHQuZ2VvQm91bmRzPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sYSx1O2lmKFFmPUtmPS0oV2Y9WmY9MS8wKSxpcz1bXSxMZih0LEZzKSxlPWlzLmxlbmd0aCl7Zm9yKGlzLnNvcnQoSHMpLG49MSxvPVtyPWlzWzBdXTtuPGU7KytuKVhzKHIsKGk9aXNbbl0pWzBdKXx8WHMocixpWzFdKT8oanMoclswXSxpWzFdKT5qcyhyWzBdLHJbMV0pJiYoclsxXT1pWzFdKSxqcyhpWzBdLHJbMV0pPmpzKHJbMF0sclsxXSkmJihyWzBdPWlbMF0pKTpvLnB1c2gocj1pKTtmb3IoYT0tMS8wLG49MCxyPW9bZT1vLmxlbmd0aC0xXTtuPD1lO3I9aSwrK24paT1vW25dLCh1PWpzKHJbMV0saVswXSkpPmEmJihhPXUsV2Y9aVswXSxLZj1yWzFdKX1yZXR1cm4gaXM9b3M9bnVsbCxXZj09PTEvMHx8WmY9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbV2YsWmZdLFtLZixRZl1dfSx0Lmdlb0NlbnRyb2lkPWZ1bmN0aW9uKHQpe21zPXhzPXdzPU1zPVRzPUFzPVNzPUVzPTAsTnM9bmV3IFQsa3M9bmV3IFQsQ3M9bmV3IFQsTGYodCxHcyk7dmFyIG49K05zLGU9K2tzLHI9K0NzLGk9RWYobixlLHIpO3JldHVybiBpPHBmJiYobj1BcyxlPVNzLHI9RXMseHM8ZGYmJihuPXdzLGU9TXMscj1UcyksKGk9RWYobixlLHIpKTxwZik/W05hTixOYU5dOltNZihlLG4pKmJmLFJmKHIvaSkqYmZdfSx0Lmdlb0NpcmNsZT1mdW5jdGlvbigpe3ZhciB0LG4sZT1pbChbMCwwXSkscj1pbCg5MCksaT1pbCgyKSxvPXtwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChlPW4oZSxyKSksZVswXSo9YmYsZVsxXSo9YmZ9fTtmdW5jdGlvbiBhKCl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSptZixjPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKm1mO3JldHVybiB0PVtdLG49dWwoLWFbMF0qbWYsLWFbMV0qbWYsMCkuaW52ZXJ0LGhsKG8sdSxjLDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1uPW51bGwsYX1yZXR1cm4gYS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDppbChbK3RbMF0sK3RbMV1dKSxhKTplfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlsKCt0KSxhKTpyfSxhLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlsKCt0KSxhKTppfSxhfSx0Lmdlb0NsaXBBbnRpbWVyaWRpYW49VGwsdC5nZW9DbGlwQ2lyY2xlPUFsLHQuZ2VvQ2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPTAsaT0wLG89OTYwLGE9NTAwO3JldHVybiBlPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6dD16bChyLGksbyxhKShuPWUpfSxleHRlbnQ6ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3VbMF1bMF0saT0rdVswXVsxXSxvPSt1WzFdWzBdLGE9K3VbMV1bMV0sdD1uPW51bGwsZSk6W1tyLGldLFtvLGFdXX19fSx0Lmdlb0NsaXBSZWN0YW5nbGU9emwsdC5nZW9Db25pY0NvbmZvcm1hbD1mdW5jdGlvbigpe3JldHVybiBfZChrZCkuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX0sdC5nZW9Db25pY0NvbmZvcm1hbFJhdz1rZCx0Lmdlb0NvbmljRXF1YWxBcmVhPW1kLHQuZ2VvQ29uaWNFcXVhbEFyZWFSYXc9YmQsdC5nZW9Db25pY0VxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIF9kKFBkKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSx0Lmdlb0NvbmljRXF1aWRpc3RhbnRSYXc9UGQsdC5nZW9Db250YWlucz1mdW5jdGlvbih0LG4pe3JldHVybih0JiZCbC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0JsW3QudHlwZV06TGwpKHQsbil9LHQuZ2VvRGlzdGFuY2U9T2wsdC5nZW9FcXVhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHlkKHFkKS5zY2FsZSgxNzcuMTU4KX0sdC5nZW9FcXVhbEVhcnRoUmF3PXFkLHQuZ2VvRXF1aXJlY3Rhbmd1bGFyPWZ1bmN0aW9uKCl7cmV0dXJuIHlkKENkKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0VxdWlyZWN0YW5ndWxhclJhdz1DZCx0Lmdlb0dub21vbmljPWZ1bmN0aW9uKCl7cmV0dXJuIHlkKFVkKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSx0Lmdlb0dub21vbmljUmF3PVVkLHQuZ2VvR3JhdGljdWxlPUtsLHQuZ2VvR3JhdGljdWxlMTA9ZnVuY3Rpb24oKXtyZXR1cm4gS2woKSgpfSx0Lmdlb0lkZW50aXR5PWZ1bmN0aW9uKCl7dmFyIHQsbixlLHIsaSxvLGEsdT0xLGM9MCxmPTAscz0xLGw9MSxoPTAsZD1udWxsLHA9MSxnPTEseT1pZCh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1iKFt0LG5dKTt0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pLHY9ZWg7ZnVuY3Rpb24gXygpe3JldHVybiBwPXUqcyxnPXUqbCxvPWE9bnVsbCxifWZ1bmN0aW9uIGIoZSl7dmFyIHI9ZVswXSpwLGk9ZVsxXSpnO2lmKGgpe3ZhciBvPWkqdC1yKm47cj1yKnQraSpuLGk9b31yZXR1cm5bcitjLGkrZl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKGUpe3ZhciByPWVbMF0tYyxpPWVbMV0tZjtpZihoKXt2YXIgbz1pKnQrcipuO3I9cip0LWkqbixpPW99cmV0dXJuW3IvcCxpL2ddfSxiLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gbyYmYT09PXQ/bzpvPXkodihhPXQpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10LGQ9ZT1yPWk9bnVsbCxfKCkpOnZ9LGIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1udWxsPT10PyhkPWU9cj1pPW51bGwsZWgpOnpsKGQ9K3RbMF1bMF0sZT0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLF8oKSk6bnVsbD09ZD9udWxsOltbZCxlXSxbcixpXV19LGIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsXygpKTp1fSxiLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSxmPSt0WzFdLF8oKSk6W2MsZl19LGIuYW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Q2YoaD1lJTM2MCptZiksdD1UZihoKSxfKCkpOmgqYmZ9LGIucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dD8tMToxLF8oKSk6czwwfSxiLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQ/LTE6MSxfKCkpOmw8MH0sYi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdWQoYix0LG4pfSxiLmZpdFNpemU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gY2QoYix0LG4pfSxiLmZpdFdpZHRoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZkKGIsdCxuKX0sYi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gc2QoYix0LG4pfSxifSx0Lmdlb0ludGVycG9sYXRlPWZ1bmN0aW9uKHQsbil7dmFyIGU9dFswXSptZixyPXRbMV0qbWYsaT1uWzBdKm1mLG89blsxXSptZixhPVRmKHIpLHU9Q2YociksYz1UZihvKSxmPUNmKG8pLHM9YSpUZihlKSxsPWEqQ2YoZSksaD1jKlRmKGkpLGQ9YypDZihpKSxwPTIqUmYoemYoRmYoby1yKSthKmMqRmYoaS1lKSkpLGc9Q2YocCkseT1wP2Z1bmN0aW9uKHQpe3ZhciBuPUNmKHQqPXApL2csZT1DZihwLXQpL2cscj1lKnMrbipoLGk9ZSpsK24qZCxvPWUqdStuKmY7cmV0dXJuW01mKGkscikqYmYsTWYobyx6ZihyKnIraSppKSkqYmZdfTpmdW5jdGlvbigpe3JldHVybltlKmJmLHIqYmZdfTtyZXR1cm4geS5kaXN0YW5jZT1wLHl9LHQuZ2VvTGVuZ3RoPXFsLHQuZ2VvTWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gRWQoU2QpLnNjYWxlKDk2MS9fZil9LHQuZ2VvTWVyY2F0b3JSYXc9U2QsdC5nZW9OYXR1cmFsRWFydGgxPWZ1bmN0aW9uKCl7cmV0dXJuIHlkKElkKS5zY2FsZSgxNzUuMjk1KX0sdC5nZW9OYXR1cmFsRWFydGgxUmF3PUlkLHQuZ2VvT3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHlkKE9kKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2RmKX0sdC5nZW9PcnRob2dyYXBoaWNSYXc9T2QsdC5nZW9QYXRoPWZ1bmN0aW9uKHQsbil7bGV0IGUscixpPTMsbz00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBvJiZyLnBvaW50UmFkaXVzKCtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksTGYodCxlKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBMZih0LGUoc2gpKSxzaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBMZih0LGUoS2gpKSxLaC5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIExmKHQsZShtaCkpLG1oLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBMZih0LGUoT2gpKSxPaC5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PW4/KHQ9bnVsbCxlaCk6KHQ9bikuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhuPW51bGwsbmV3IGVkKGkpKTpuZXcgQmgobj10KSwiZnVuY3Rpb24iIT10eXBlb2YgbyYmci5wb2ludFJhZGl1cyhvKSxhKTpufSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTpvfSxhLmRpZ2l0cz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaTtpZihudWxsPT10KWk9bnVsbDtlbHNle2NvbnN0IG49TWF0aC5mbG9vcih0KTtpZighKG4+PTApKXRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHt0fWApO2k9bn1yZXR1cm4gbnVsbD09PW4mJihyPW5ldyBlZChpKSksYX0sYS5wcm9qZWN0aW9uKHQpLmRpZ2l0cyhpKS5jb250ZXh0KG4pfSx0Lmdlb1Byb2plY3Rpb249eWQsdC5nZW9Qcm9qZWN0aW9uTXV0YXRvcj12ZCx0Lmdlb1JvdGF0aW9uPWxsLHQuZ2VvU3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiB5ZChCZCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX0sdC5nZW9TdGVyZW9ncmFwaGljUmF3PUJkLHQuZ2VvU3RyZWFtPUxmLHQuZ2VvVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06aWQodCl9fSx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PUVkKFlkKSxuPXQuY2VudGVyLGU9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oWy10WzFdLHRbMF1dKTpbKHQ9bigpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9ZSgpKVswXSx0WzFdLHRbMl0tOTBdfSxlKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9WWQsdC5ncmF5PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyB1cih0LDAsMCxudWxsPT1uPzE6bil9LHQuZ3JlYXRlc3Q9b3QsdC5ncmVhdGVzdEluZGV4PWZ1bmN0aW9uKHQsZT1uKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHR0KHQsZSk7bGV0IHIsaT0tMSxvPS0xO2Zvcihjb25zdCBuIG9mIHQpKytvLChpPDA/MD09PWUobixuKTplKG4scik+MCkmJihyPW4saT1vKTtyZXR1cm4gaX0sdC5ncm91cD1DLHQuZ3JvdXBTb3J0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oMiE9PWUubGVuZ3RoP1UoJCh0LGUsciksKChbdCxlXSxbcixpXSk9Pm4oZSxpKXx8bih0LHIpKSk6VShDKHQsciksKChbdCxyXSxbaSxvXSk9PmUocixvKXx8bih0LGkpKSkpLm1hcCgoKFt0XSk9PnQpKX0sdC5ncm91cHM9UCx0LmhjbD1kcix0LmhpZXJhcmNoeT1HZCx0Lmhpc3RvZ3JhbT1RLHQuaHNsPUhlLHQuaHRtbD1FYyx0LmltYWdlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBpPW5ldyBJbWFnZTtmb3IodmFyIG8gaW4gbilpW29dPW5bb107aS5vbmVycm9yPXIsaS5vbmxvYWQ9ZnVuY3Rpb24oKXtlKGkpfSxpLnNyYz10fSkpfSx0LmluZGV4PWZ1bmN0aW9uKHQsLi4ubil7cmV0dXJuIEYodCxrLFIsbil9LHQuaW5kZXhlcz1mdW5jdGlvbih0LC4uLm4pe3JldHVybiBGKHQsQXJyYXkuZnJvbSxSLG4pfSx0LmludGVycG9sYXRlPUdyLHQuaW50ZXJwb2xhdGVBcnJheT1mdW5jdGlvbih0LG4pe3JldHVybihJcihuKT9VcjpPcikodCxuKX0sdC5pbnRlcnBvbGF0ZUJhc2lzPUVyLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1Ocix0LmludGVycG9sYXRlQmx1ZXM9R2IsdC5pbnRlcnBvbGF0ZUJyQkc9b2IsdC5pbnRlcnBvbGF0ZUJ1R249TWIsdC5pbnRlcnBvbGF0ZUJ1UHU9QWIsdC5pbnRlcnBvbGF0ZUNpdmlkaXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgtNC41NC10KigzNS4zNC10KigyMzgxLjczLXQqKDY0MDIuNy10Kig3MDI0LjcyLTI3MTAuNTcqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDMyLjQ5K3QqKDE3MC43Myt0Kig1Mi44Mi10KigxMzEuNDYtdCooMTc2LjU4LTY3LjM3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCg4MS4yNCt0Kig0NDIuMzYtdCooMjQ4Mi40My10Kig2MTY3LjI0LXQqKDY2MTQuOTQtMjQ3NS42Nyp0KSkpKSkpKSsiKSJ9LHQuaW50ZXJwb2xhdGVDb29sPWFtLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXg9bGksdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ9aW0sdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc9aGksdC5pbnRlcnBvbGF0ZURhdGU9QnIsdC5pbnRlcnBvbGF0ZURpc2NyZXRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGUqbikpKV19fSx0LmludGVycG9sYXRlR25CdT1FYix0LmludGVycG9sYXRlR3JlZW5zPVdiLHQuaW50ZXJwb2xhdGVHcmV5cz1LYix0LmludGVycG9sYXRlSGNsPWNpLHQuaW50ZXJwb2xhdGVIY2xMb25nPWZpLHQuaW50ZXJwb2xhdGVIc2w9b2ksdC5pbnRlcnBvbGF0ZUhzbExvbmc9YWksdC5pbnRlcnBvbGF0ZUh1ZT1mdW5jdGlvbih0LG4pe3ZhciBlPVByKCt0LCtuKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49ZSh0KTtyZXR1cm4gbi0zNjAqTWF0aC5mbG9vcihuLzM2MCl9fSx0LmludGVycG9sYXRlSW5mZXJubz1wbSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQsbil7dmFyIGU9JHIoKHQ9YXIodCkpLmwsKG49YXIobikpLmwpLHI9JHIodC5hLG4uYSksaT0kcih0LmIsbi5iKSxvPSRyKHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5sPWUobiksdC5hPXIobiksdC5iPWkobiksdC5vcGFjaXR5PW8obiksdCsiIn19LHQuaW50ZXJwb2xhdGVNYWdtYT1kbSx0LmludGVycG9sYXRlTnVtYmVyPVlyLHQuaW50ZXJwb2xhdGVOdW1iZXJBcnJheT1Vcix0LmludGVycG9sYXRlT2JqZWN0PUxyLHQuaW50ZXJwb2xhdGVPclJkPWtiLHQuaW50ZXJwb2xhdGVPcmFuZ2VzPXJtLHQuaW50ZXJwb2xhdGVQUkduPXViLHQuaW50ZXJwb2xhdGVQaVlHPWZiLHQuaW50ZXJwb2xhdGVQbGFzbWE9Z20sdC5pbnRlcnBvbGF0ZVB1QnU9JGIsdC5pbnRlcnBvbGF0ZVB1QnVHbj1QYix0LmludGVycG9sYXRlUHVPcj1sYix0LmludGVycG9sYXRlUHVSZD1SYix0LmludGVycG9sYXRlUHVycGxlcz1KYix0LmludGVycG9sYXRlUmFpbmJvdz1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIG49TWF0aC5hYnModC0uNSk7cmV0dXJuIHVtLmg9MzYwKnQtMTAwLHVtLnM9MS41LTEuNSpuLHVtLmw9LjgtLjkqbix1bSsiIn0sdC5pbnRlcnBvbGF0ZVJkQnU9ZGIsdC5pbnRlcnBvbGF0ZVJkR3k9Z2IsdC5pbnRlcnBvbGF0ZVJkUHU9cWIsdC5pbnRlcnBvbGF0ZVJkWWxCdT12Yix0LmludGVycG9sYXRlUmRZbEduPWJiLHQuaW50ZXJwb2xhdGVSZWRzPW5tLHQuaW50ZXJwb2xhdGVSZ2I9RHIsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPUZyLHQuaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZD1xcix0LmludGVycG9sYXRlUm91bmQ9VnIsdC5pbnRlcnBvbGF0ZVNpbmVib3c9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIHQ9KC41LXQpKk1hdGguUEksY20ucj0yNTUqKG49TWF0aC5zaW4odCkpKm4sY20uZz0yNTUqKG49TWF0aC5zaW4odCtmbSkpKm4sY20uYj0yNTUqKG49TWF0aC5zaW4odCtzbSkpKm4sY20rIiJ9LHQuaW50ZXJwb2xhdGVTcGVjdHJhbD14Yix0LmludGVycG9sYXRlU3RyaW5nPVhyLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9dGksdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz1uaSx0LmludGVycG9sYXRlVHVyYm89ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MSt0KigxMTcyLjMzLXQqKDEwNzkzLjU2LXQqKDMzMzAwLjEyLXQqKDM4Mzk0LjQ5LTE0ODI1LjA1KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMSt0Kig1NTcuMzMrdCooMTIyNS4zMy10KigzNTc0Ljk2LXQqKDEwNzMuNzcrNzA3LjU2KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK3QqKDMyMTEuMS10KigxNTMyNy45Ny10KigyNzgxNC10KigyMjU2OS4xOC02ODM4LjY2KnQpKSkpKSkpKyIpIn0sdC5pbnRlcnBvbGF0ZVZpcmlkaXM9aG0sdC5pbnRlcnBvbGF0ZVdhcm09b20sdC5pbnRlcnBvbGF0ZVlsR249QmIsdC5pbnRlcnBvbGF0ZVlsR25CdT1JYix0LmludGVycG9sYXRlWWxPckJyPUxiLHQuaW50ZXJwb2xhdGVZbE9yUmQ9SGIsdC5pbnRlcnBvbGF0ZVpvb209cmksdC5pbnRlcnJ1cHQ9R2ksdC5pbnRlcnNlY3Rpb249ZnVuY3Rpb24odCwuLi5uKXt0PW5ldyBJbnRlcm5TZXQodCksbj1uLm1hcCh2dCk7dDpmb3IoY29uc3QgZSBvZiB0KWZvcihjb25zdCByIG9mIG4paWYoIXIuaGFzKGUpKXt0LmRlbGV0ZShlKTtjb250aW51ZSB0fXJldHVybiB0fSx0LmludGVydmFsPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj1uZXcgRWksaT1uO3JldHVybiBudWxsPT1uPyhyLnJlc3RhcnQodCxuLGUpLHIpOihyLl9yZXN0YXJ0PXIucmVzdGFydCxyLnJlc3RhcnQ9ZnVuY3Rpb24odCxuLGUpe249K24sZT1udWxsPT1lP0FpKCk6K2Usci5fcmVzdGFydCgoZnVuY3Rpb24gbyhhKXthKz1pLHIuX3Jlc3RhcnQobyxpKz1uLGUpLHQoYSl9KSxuLGUpfSxyLnJlc3RhcnQodCxuLGUpLHIpfSx0Lmlzb0Zvcm1hdD1EXyx0Lmlzb1BhcnNlPUZfLHQuanNvbj1mdW5jdGlvbih0LG4pe3JldHVybiBmZXRjaCh0LG4pLnRoZW4oVGMpfSx0LmxhYj1hcix0LmxjaD1mdW5jdGlvbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/aHIodCk6bmV3IHByKGUsbix0LG51bGw9PXI/MTpyKX0sdC5sZWFzdD1mdW5jdGlvbih0LGU9bil7bGV0IHIsaT0hMTtpZigxPT09ZS5sZW5ndGgpe2xldCBvO2Zvcihjb25zdCBhIG9mIHQpe2NvbnN0IHQ9ZShhKTsoaT9uKHQsbyk8MDowPT09bih0LHQpKSYmKHI9YSxvPXQsaT0hMCl9fWVsc2UgZm9yKGNvbnN0IG4gb2YgdCkoaT9lKG4scik8MDowPT09ZShuLG4pKSYmKHI9bixpPSEwKTtyZXR1cm4gcn0sdC5sZWFzdEluZGV4PWh0LHQubGluZT1ZbSx0LmxpbmVSYWRpYWw9Wm0sdC5saW5rPWF4LHQubGlua0hvcml6b250YWw9ZnVuY3Rpb24oKXtyZXR1cm4gYXgobngpfSx0LmxpbmtSYWRpYWw9ZnVuY3Rpb24oKXtjb25zdCB0PWF4KHJ4KTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fSx0LmxpbmtWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiBheChleCl9LHQubG9jYWw9UW4sdC5tYXA9ZnVuY3Rpb24odCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdFtTeW1ib2wuaXRlcmF0b3JdKXRocm93IG5ldyBUeXBlRXJyb3IoInZhbHVlcyBpcyBub3QgaXRlcmFibGUiKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJtYXBwZXIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gQXJyYXkuZnJvbSh0LCgoZSxyKT0+bihlLHIsdCkpKX0sdC5tYXRjaGVyPVZ0LHQubWF4PUosdC5tYXhJbmRleD10dCx0Lm1lYW49ZnVuY3Rpb24odCxuKXtsZXQgZT0wLHI9MDtpZih2b2lkIDA9PT1uKWZvcihsZXQgbiBvZiB0KW51bGwhPW4mJihuPStuKT49biYmKCsrZSxyKz1uKTtlbHNle2xldCBpPS0xO2ZvcihsZXQgbyBvZiB0KW51bGwhPShvPW4obywrK2ksdCkpJiYobz0rbyk+PW8mJigrK2Uscis9byl9aWYoZSlyZXR1cm4gci9lfSx0Lm1lZGlhbj1mdW5jdGlvbih0LG4pe3JldHVybiBhdCh0LC41LG4pfSx0Lm1lZGlhbkluZGV4PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGN0KHQsLjUsbil9LHQubWVyZ2U9ZnQsdC5taW49bnQsdC5taW5JbmRleD1ldCx0Lm1vZGU9ZnVuY3Rpb24odCxuKXtjb25zdCBlPW5ldyBJbnRlcm5NYXA7aWYodm9pZCAwPT09bilmb3IobGV0IG4gb2YgdCludWxsIT1uJiZuPj1uJiZlLnNldChuLChlLmdldChuKXx8MCkrMSk7ZWxzZXtsZXQgcj0tMTtmb3IobGV0IGkgb2YgdCludWxsIT0oaT1uKGksKytyLHQpKSYmaT49aSYmZS5zZXQoaSwoZS5nZXQoaSl8fDApKzEpfWxldCByLGk9MDtmb3IoY29uc3RbdCxuXW9mIGUpbj5pJiYoaT1uLHI9dCk7cmV0dXJuIHJ9LHQubmFtZXNwYWNlPUl0LHQubmFtZXNwYWNlcz1VdCx0Lm5pY2U9Wix0Lm5vdz1BaSx0LnBhY2s9ZnVuY3Rpb24oKXt2YXIgdD1udWxsLG49MSxlPTEscj1ucDtmdW5jdGlvbiBpKGkpe2NvbnN0IG89YXAoKTtyZXR1cm4gaS54PW4vMixpLnk9ZS8yLHQ/aS5lYWNoQmVmb3JlKHhwKHQpKS5lYWNoQWZ0ZXIod3AociwuNSxvKSkuZWFjaEJlZm9yZShNcCgxKSk6aS5lYWNoQmVmb3JlKHhwKG1wKSkuZWFjaEFmdGVyKHdwKG5wLDEsbykpLmVhY2hBZnRlcih3cChyLGkuci9NYXRoLm1pbihuLGUpLG8pKS5lYWNoQmVmb3JlKE1wKE1hdGgubWluKG4sZSkvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUpkKG4pLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxlPSt0WzFdLGkpOltuLGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplcCgrdCksaSk6cn0saX0sdC5wYWNrRW5jbG9zZT1mdW5jdGlvbih0KXtyZXR1cm4gdXAodCxhcCgpKX0sdC5wYWNrU2libGluZ3M9ZnVuY3Rpb24odCl7cmV0dXJuIGJwKHQsYXAoKSksdH0sdC5wYWlycz1mdW5jdGlvbih0LG49c3Qpe2NvbnN0IGU9W107bGV0IHIsaT0hMTtmb3IoY29uc3QgbyBvZiB0KWkmJmUucHVzaChuKHIsbykpLHI9byxpPSEwO3JldHVybiBlfSx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsbj0xLGU9MCxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIG89aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPWUsaS54MT10LGkueTE9bi9vLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihyKXtyLmNoaWxkcmVuJiZBcChyLHIueDAsdCooci5kZXB0aCsxKS9uLHIueDEsdCooci5kZXB0aCsyKS9uKTt2YXIgaT1yLngwLG89ci55MCxhPXIueDEtZSx1PXIueTEtZTthPGkmJihpPWE9KGkrYSkvMiksdTxvJiYobz11PShvK3UpLzIpLHIueDA9aSxyLnkwPW8sci54MT1hLHIueTE9dX19KG4sbykpLHImJmkuZWFjaEJlZm9yZShUcCksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsaSk6cn0saS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlWzBdLG49K2VbMV0saSk6W3Qsbl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxpKTplfSxpfSx0LnBhdGg9SWEsdC5wYXRoUm91bmQ9ZnVuY3Rpb24odD0zKXtyZXR1cm4gbmV3IFVhKCt0KX0sdC5wZXJtdXRlPXEsdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1IbSxuPWptLGU9bnVsbCxyPXltKDApLGk9eW0oRW0pLG89eW0oMCk7ZnVuY3Rpb24gYShhKXt2YXIgdSxjLGYscyxsLGg9KGE9cW0oYSkpLmxlbmd0aCxkPTAscD1uZXcgQXJyYXkoaCksZz1uZXcgQXJyYXkoaCkseT0rci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdj1NYXRoLm1pbihFbSxNYXRoLm1heCgtRW0saS5hcHBseSh0aGlzLGFyZ3VtZW50cykteSkpLF89TWF0aC5taW4oTWF0aC5hYnModikvaCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj1fKih2PDA/LTE6MSk7Zm9yKHU9MDt1PGg7Kyt1KShsPWdbcFt1XT11XT0rdChhW3VdLHUsYSkpPjAmJihkKz1sKTtmb3IobnVsbCE9bj9wLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oZ1t0XSxnW2VdKX0pKTpudWxsIT1lJiZwLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoYVt0XSxhW25dKX0pKSx1PTAsZj1kPyh2LWgqYikvZDowO3U8aDsrK3UseT1zKWM9cFt1XSxzPXkrKChsPWdbY10pPjA/bCpmOjApK2IsZ1tjXT17ZGF0YTphW2NdLGluZGV4OnUsdmFsdWU6bCxzdGFydEFuZ2xlOnksZW5kQW5nbGU6cyxwYWRBbmdsZTpffTtyZXR1cm4gZ31yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnltKCtuKSxhKTp0fSxhLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsYSk6bn0sYS5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eW0oK3QpLGEpOml9LGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5bSgrdCksYSk6b30sYX0sdC5waWVjZXdpc2U9ZGksdC5wb2ludFJhZGlhbD1RbSx0LnBvaW50ZXI9bmUsdC5wb2ludGVycz1mdW5jdGlvbih0LG4pe3JldHVybiB0LnRhcmdldCYmKHQ9dGUodCksdm9pZCAwPT09biYmKG49dC5jdXJyZW50VGFyZ2V0KSx0PXQudG91Y2hlc3x8W3RdKSxBcnJheS5mcm9tKHQsKHQ9Pm5lKHQsbikpKX0sdC5wb2x5Z29uQXJlYT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxyPXQubGVuZ3RoLGk9dFtyLTFdLG89MDsrK2U8cjspbj1pLGk9dFtlXSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9LHQucG9seWdvbkNlbnRyb2lkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9LTEsaT10Lmxlbmd0aCxvPTAsYT0wLHU9dFtpLTFdLGM9MDsrK3I8aTspbj11LHU9dFtyXSxjKz1lPW5bMF0qdVsxXS11WzBdKm5bMV0sbys9KG5bMF0rdVswXSkqZSxhKz0oblsxXSt1WzFdKSplO3JldHVybltvLyhjKj0zKSxhL2NdfSx0LnBvbHlnb25Db250YWlucz1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1uWzBdLHU9blsxXSxjPW9bMF0sZj1vWzFdLHM9ITEsbD0wO2w8aTsrK2wpZT0obz10W2xdKVswXSwocj1vWzFdKT51IT1mPnUmJmE8KGMtZSkqKHUtcikvKGYtcikrZSYmKHM9IXMpLGM9ZSxmPXI7cmV0dXJuIHN9LHQucG9seWdvbkh1bGw9ZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIG4sZSxyPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKTtmb3Iobj0wO248ZTsrK24pcltuXT1bK3Rbbl1bMF0sK3Rbbl1bMV0sbl07Zm9yKHIuc29ydChIcCksbj0wO248ZTsrK24paVtuXT1bcltuXVswXSwtcltuXVsxXV07dmFyIG89WHAociksYT1YcChpKSx1PWFbMF09PT1vWzBdLGM9YVthLmxlbmd0aC0xXT09PW9bby5sZW5ndGgtMV0sZj1bXTtmb3Iobj1vLmxlbmd0aC0xO24+PTA7LS1uKWYucHVzaCh0W3Jbb1tuXV1bMl1dKTtmb3Iobj0rdTtuPGEubGVuZ3RoLWM7KytuKWYucHVzaCh0W3JbYVtuXV1bMl1dKTtyZXR1cm4gZn0sdC5wb2x5Z29uTGVuZ3RoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9LTEsaT10Lmxlbmd0aCxvPXRbaS0xXSxhPW9bMF0sdT1vWzFdLGM9MDsrK3I8aTspbj1hLGU9dSxuLT1hPShvPXRbcl0pWzBdLGUtPXU9b1sxXSxjKz1NYXRoLmh5cG90KG4sZSk7cmV0dXJuIGN9LHQucHJlY2lzaW9uRml4ZWQ9c2YsdC5wcmVjaXNpb25QcmVmaXg9bGYsdC5wcmVjaXNpb25Sb3VuZD1oZix0LnF1YWR0cmVlPSRjLHQucXVhbnRpbGU9YXQsdC5xdWFudGlsZUluZGV4PWN0LHQucXVhbnRpbGVTb3J0ZWQ9dXQsdC5xdWFudGl6ZT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZVtyXT10KHIvKG4tMSkpO3JldHVybiBlfSx0LnF1aWNrc2VsZWN0PXJ0LHQucmFkaWFsQXJlYT1LbSx0LnJhZGlhbExpbmU9Wm0sdC5yYW5kb21CYXRlcz1KcCx0LnJhbmRvbUJlcm5vdWxsaT1lZyx0LnJhbmRvbUJldGE9b2csdC5yYW5kb21CaW5vbWlhbD1hZyx0LnJhbmRvbUNhdWNoeT1jZyx0LnJhbmRvbUV4cG9uZW50aWFsPXRnLHQucmFuZG9tR2FtbWE9aWcsdC5yYW5kb21HZW9tZXRyaWM9cmcsdC5yYW5kb21JbnQ9V3AsdC5yYW5kb21JcndpbkhhbGw9UXAsdC5yYW5kb21MY2c9ZnVuY3Rpb24odD1NYXRoLnJhbmRvbSgpKXtsZXQgbj0wfCgwPD10JiZ0PDE/dC9sZzpNYXRoLmFicyh0KSk7cmV0dXJuKCk9PihuPTE2NjQ1MjUqbisxMDEzOTA0MjIzfDAsbGcqKG4+Pj4wKSl9LHQucmFuZG9tTG9nTm9ybWFsPUtwLHQucmFuZG9tTG9naXN0aWM9ZmcsdC5yYW5kb21Ob3JtYWw9WnAsdC5yYW5kb21QYXJldG89bmcsdC5yYW5kb21Qb2lzc29uPXNnLHQucmFuZG9tVW5pZm9ybT1WcCx0LnJhbmRvbVdlaWJ1bGw9dWcsdC5yYW5nZT1sdCx0LnJhbms9ZnVuY3Rpb24odCxlPW4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W1N5bWJvbC5pdGVyYXRvcl0pdGhyb3cgbmV3IFR5cGVFcnJvcigidmFsdWVzIGlzIG5vdCBpdGVyYWJsZSIpO2xldCByPUFycmF5LmZyb20odCk7Y29uc3QgaT1uZXcgRmxvYXQ2NEFycmF5KHIubGVuZ3RoKTsyIT09ZS5sZW5ndGgmJihyPXIubWFwKGUpLGU9bik7Y29uc3Qgbz0odCxuKT0+ZShyW3RdLHJbbl0pO2xldCBhLHU7cmV0dXJuKHQ9VWludDMyQXJyYXkuZnJvbShyLCgodCxuKT0+bikpKS5zb3J0KGU9PT1uPyh0LG4pPT5PKHJbdF0scltuXSk6SShvKSksdC5mb3JFYWNoKCgodCxuKT0+e2NvbnN0IGU9byh0LHZvaWQgMD09PWE/dDphKTtlPj0wPygodm9pZCAwPT09YXx8ZT4wKSYmKGE9dCx1PW4pLGlbdF09dSk6aVt0XT1OYU59KSksaX0sdC5yZWR1Y2U9ZnVuY3Rpb24odCxuLGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZXIgaXMgbm90IGEgZnVuY3Rpb24iKTtjb25zdCByPXRbU3ltYm9sLml0ZXJhdG9yXSgpO2xldCBpLG8sYT0tMTtpZihhcmd1bWVudHMubGVuZ3RoPDMpe2lmKCh7ZG9uZTppLHZhbHVlOmV9PXIubmV4dCgpKSxpKXJldHVybjsrK2F9Zm9yKDsoe2RvbmU6aSx2YWx1ZTpvfT1yLm5leHQoKSksIWk7KWU9bihlLG8sKythLHQpO3JldHVybiBlfSx0LnJldmVyc2U9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbU3ltYm9sLml0ZXJhdG9yXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWx1ZXMgaXMgbm90IGl0ZXJhYmxlIik7cmV0dXJuIEFycmF5LmZyb20odCkucmV2ZXJzZSgpfSx0LnJnYj1GZSx0LnJpYmJvbj1mdW5jdGlvbigpe3JldHVybiBXYSgpfSx0LnJpYmJvbkFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIFdhKFZhKX0sdC5yb2xsdXA9JCx0LnJvbGx1cHM9RCx0LnNjYWxlQmFuZD15Zyx0LnNjYWxlRGl2ZXJnaW5nPWZ1bmN0aW9uIHQoKXt2YXIgbj1OZyhMXygpKG1nKSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBCXyhuLHQoKSl9LGRnLmFwcGx5KG4sYXJndW1lbnRzKX0sdC5zY2FsZURpdmVyZ2luZ0xvZz1mdW5jdGlvbiB0KCl7dmFyIG49RmcoTF8oKSkuZG9tYWluKFsuMSwxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBCXyhuLHQoKSkuYmFzZShuLmJhc2UoKSl9LGRnLmFwcGx5KG4sYXJndW1lbnRzKX0sdC5zY2FsZURpdmVyZ2luZ1Bvdz1qXyx0LnNjYWxlRGl2ZXJnaW5nU3FydD1mdW5jdGlvbigpe3JldHVybiBqXy5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfSx0LnNjYWxlRGl2ZXJnaW5nU3ltbG9nPWZ1bmN0aW9uIHQoKXt2YXIgbj1JZyhMXygpKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJfKG4sdCgpKS5jb25zdGFudChuLmNvbnN0YW50KCkpfSxkZy5hcHBseShuLGFyZ3VtZW50cyl9LHQuc2NhbGVJZGVudGl0eT1mdW5jdGlvbiB0KG4pe3ZhciBlO2Z1bmN0aW9uIHIodCl7cmV0dXJuIG51bGw9PXR8fGlzTmFOKHQ9K3QpP2U6dH1yZXR1cm4gci5pbnZlcnQ9cixyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUFycmF5LmZyb20odCxfZykscik6bi5zbGljZSgpfSxyLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxyKTplfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChuKS51bmtub3duKGUpfSxuPWFyZ3VtZW50cy5sZW5ndGg/QXJyYXkuZnJvbShuLF9nKTpbMCwxXSxOZyhyKX0sdC5zY2FsZUltcGxpY2l0PXBnLHQuc2NhbGVMaW5lYXI9ZnVuY3Rpb24gdCgpe3ZhciBuPVNnKCk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBUZyhuLHQoKSl9LGhnLmFwcGx5KG4sYXJndW1lbnRzKSxOZyhuKX0sdC5zY2FsZUxvZz1mdW5jdGlvbiB0KCl7Y29uc3Qgbj1GZyhBZygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gbi5jb3B5PSgpPT5UZyhuLHQoKSkuYmFzZShuLmJhc2UoKSksaGcuYXBwbHkobixhcmd1bWVudHMpLG59LHQuc2NhbGVPcmRpbmFsPWdnLHQuc2NhbGVQb2ludD1mdW5jdGlvbigpe3JldHVybiB2Zyh5Zy5hcHBseShudWxsLGFyZ3VtZW50cykucGFkZGluZ0lubmVyKDEpKX0sdC5zY2FsZVBvdz1qZyx0LnNjYWxlUXVhbnRpbGU9ZnVuY3Rpb24gdCgpe3ZhciBlLHI9W10saT1bXSxvPVtdO2Z1bmN0aW9uIGEoKXt2YXIgdD0wLG49TWF0aC5tYXgoMSxpLmxlbmd0aCk7Zm9yKG89bmV3IEFycmF5KG4tMSk7Kyt0PG47KW9bdC0xXT11dChyLHQvbik7cmV0dXJuIHV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbD09dHx8aXNOYU4odD0rdCk/ZTppW3Mobyx0KV19cmV0dXJuIHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPWkuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP29bbi0xXTpyWzBdLG48by5sZW5ndGg/b1tuXTpyW3IubGVuZ3RoLTFdXX0sdS5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIuc2xpY2UoKTtyPVtdO2ZvcihsZXQgbiBvZiB0KW51bGw9PW58fGlzTmFOKG49K24pfHxyLnB1c2gobik7cmV0dXJuIHIuc29ydChuKSxhKCl9LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9QXJyYXkuZnJvbSh0KSxhKCkpOmkuc2xpY2UoKX0sdS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsdSk6ZX0sdS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gby5zbGljZSgpfSx1LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLmRvbWFpbihyKS5yYW5nZShpKS51bmtub3duKGUpfSxoZy5hcHBseSh1LGFyZ3VtZW50cyl9LHQuc2NhbGVRdWFudGl6ZT1mdW5jdGlvbiB0KCl7dmFyIG4sZT0wLHI9MSxpPTEsbz1bLjVdLGE9WzAsMV07ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbnVsbCE9dCYmdDw9dD9hW3Mobyx0LDAsaSldOm59ZnVuY3Rpb24gYygpe3ZhciB0PS0xO2ZvcihvPW5ldyBBcnJheShpKTsrK3Q8aTspb1t0XT0oKHQrMSkqci0odC1pKSplKS8oaSsxKTtyZXR1cm4gdX1yZXR1cm4gdS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFtlLHJdPXQsZT0rZSxyPStyLGMoKSk6W2Uscl19LHUucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KGE9QXJyYXkuZnJvbSh0KSkubGVuZ3RoLTEsYygpKTphLnNsaWNlKCl9LHUuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPWEuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpuPDE/W2Usb1swXV06bj49aT9bb1tpLTFdLHJdOltvW24tMV0sb1tuXV19LHUudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHUpOnV9LHUudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBvLnNsaWNlKCl9LHUuY29weT1mdW5jdGlvbigpe3JldHVybiB0KCkuZG9tYWluKFtlLHJdKS5yYW5nZShhKS51bmtub3duKG4pfSxoZy5hcHBseShOZyh1KSxhcmd1bWVudHMpfSx0LnNjYWxlUmFkaWFsPWZ1bmN0aW9uIHQoKXt2YXIgbixlPVNnKCkscj1bMCwxXSxpPSExO2Z1bmN0aW9uIG8odCl7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLnNxcnQoTWF0aC5hYnModCkpfShlKHQpKTtyZXR1cm4gaXNOYU4ocik/bjppP01hdGgucm91bmQocik6cn1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGUuaW52ZXJ0KEhnKHQpKX0sby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUuZG9tYWluKHQpLG8pOmUuZG9tYWluKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUucmFuZ2UoKHI9QXJyYXkuZnJvbSh0LF9nKSkubWFwKEhnKSksbyk6ci5zbGljZSgpfSxvLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucmFuZ2UodCkucm91bmQoITApfSxvLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhdCxvKTppfSxvLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmNsYW1wKHQpLG8pOmUuY2xhbXAoKX0sby51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5kb21haW4oKSxyKS5yb3VuZChpKS5jbGFtcChlLmNsYW1wKCkpLnVua25vd24obil9LGhnLmFwcGx5KG8sYXJndW1lbnRzKSxOZyhvKX0sdC5zY2FsZVNlcXVlbnRpYWw9ZnVuY3Rpb24gdCgpe3ZhciBuPU5nKE9fKCkobWcpKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJfKG4sdCgpKX0sZGcuYXBwbHkobixhcmd1bWVudHMpfSx0LnNjYWxlU2VxdWVudGlhbExvZz1mdW5jdGlvbiB0KCl7dmFyIG49RmcoT18oKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBCXyhuLHQoKSkuYmFzZShuLmJhc2UoKSl9LGRnLmFwcGx5KG4sYXJndW1lbnRzKX0sdC5zY2FsZVNlcXVlbnRpYWxQb3c9WV8sdC5zY2FsZVNlcXVlbnRpYWxRdWFudGlsZT1mdW5jdGlvbiB0KCl7dmFyIGU9W10scj1tZztmdW5jdGlvbiBpKHQpe2lmKG51bGwhPXQmJiFpc05hTih0PSt0KSlyZXR1cm4gcigocyhlLHQsMSktMSkvKGUubGVuZ3RoLTEpKX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2ZvcihsZXQgbiBvZiB0KW51bGw9PW58fGlzTmFOKG49K24pfHxlLnB1c2gobik7cmV0dXJuIGUuc29ydChuKSxpfSxpLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkucmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5tYXAoKCh0LG4pPT5yKG4vKGUubGVuZ3RoLTEpKSkpfSxpLnF1YW50aWxlcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOnQrMX0sKChuLHIpPT5hdChlLHIvdCkpKX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQocikuZG9tYWluKGUpfSxkZy5hcHBseShpLGFyZ3VtZW50cyl9LHQuc2NhbGVTZXF1ZW50aWFsU3FydD1mdW5jdGlvbigpe3JldHVybiBZXy5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfSx0LnNjYWxlU2VxdWVudGlhbFN5bWxvZz1mdW5jdGlvbiB0KCl7dmFyIG49SWcoT18oKSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBCXyhuLHQoKSkuY29uc3RhbnQobi5jb25zdGFudCgpKX0sZGcuYXBwbHkobixhcmd1bWVudHMpfSx0LnNjYWxlU3FydD1mdW5jdGlvbigpe3JldHVybiBqZy5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfSx0LnNjYWxlU3ltbG9nPWZ1bmN0aW9uIHQoKXt2YXIgbj1JZyhBZygpKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFRnKG4sdCgpKS5jb25zdGFudChuLmNvbnN0YW50KCkpfSxoZy5hcHBseShuLGFyZ3VtZW50cyl9LHQuc2NhbGVUaHJlc2hvbGQ9ZnVuY3Rpb24gdCgpe3ZhciBuLGU9Wy41XSxyPVswLDFdLGk9MTtmdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10JiZ0PD10P3JbcyhlLHQsMCxpKV06bn1yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9QXJyYXkuZnJvbSh0KSxpPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoLTEpLG8pOmUuc2xpY2UoKX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1BcnJheS5mcm9tKHQpLGk9TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgtMSksbyk6ci5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgbj1yLmluZGV4T2YodCk7cmV0dXJuW2Vbbi0xXSxlW25dXX0sby51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsbyk6bn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoKS5kb21haW4oZSkucmFuZ2UocikudW5rbm93bihuKX0saGcuYXBwbHkobyxhcmd1bWVudHMpfSx0LnNjYWxlVGltZT1mdW5jdGlvbigpe3JldHVybiBoZy5hcHBseShJXyh1dixjdix0dixaeSx4eSxweSxzeSxheSxpeSx0LnRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfSx0LnNjYWxlVXRjPWZ1bmN0aW9uKCl7cmV0dXJuIGhnLmFwcGx5KElfKG92LGF2LGV2LFF5LEZ5LHl5LGh5LGN5LGl5LHQudXRjRm9ybWF0KS5kb21haW4oW0RhdGUuVVRDKDJlMywwLDEpLERhdGUuVVRDKDJlMywwLDIpXSksYXJndW1lbnRzKX0sdC5zY2FuPWZ1bmN0aW9uKHQsbil7Y29uc3QgZT1odCh0LG4pO3JldHVybiBlPDA/dm9pZCAwOmV9LHQuc2NoZW1lQWNjZW50PUdfLHQuc2NoZW1lQmx1ZXM9WGIsdC5zY2hlbWVCckJHPWliLHQuc2NoZW1lQnVHbj13Yix0LnNjaGVtZUJ1UHU9VGIsdC5zY2hlbWVDYXRlZ29yeTEwPVhfLHQuc2NoZW1lRGFyazI9Vl8sdC5zY2hlbWVHbkJ1PVNiLHQuc2NoZW1lR3JlZW5zPVZiLHQuc2NoZW1lR3JleXM9WmIsdC5zY2hlbWVPYnNlcnZhYmxlMTA9V18sdC5zY2hlbWVPclJkPU5iLHQuc2NoZW1lT3Jhbmdlcz1lbSx0LnNjaGVtZVBSR249YWIsdC5zY2hlbWVQYWlyZWQ9Wl8sdC5zY2hlbWVQYXN0ZWwxPUtfLHQuc2NoZW1lUGFzdGVsMj1RXyx0LnNjaGVtZVBpWUc9Y2IsdC5zY2hlbWVQdUJ1PXpiLHQuc2NoZW1lUHVCdUduPUNiLHQuc2NoZW1lUHVPcj1zYix0LnNjaGVtZVB1UmQ9RGIsdC5zY2hlbWVQdXJwbGVzPVFiLHQuc2NoZW1lUmRCdT1oYix0LnNjaGVtZVJkR3k9cGIsdC5zY2hlbWVSZFB1PUZiLHQuc2NoZW1lUmRZbEJ1PXliLHQuc2NoZW1lUmRZbEduPV9iLHQuc2NoZW1lUmVkcz10bSx0LnNjaGVtZVNldDE9Sl8sdC5zY2hlbWVTZXQyPXRiLHQuc2NoZW1lU2V0Mz1uYix0LnNjaGVtZVNwZWN0cmFsPW1iLHQuc2NoZW1lVGFibGVhdTEwPWViLHQuc2NoZW1lWWxHbj1PYix0LnNjaGVtZVlsR25CdT1VYix0LnNjaGVtZVlsT3JCcj1ZYix0LnNjaGVtZVlsT3JSZD1qYix0LnNlbGVjdD1abix0LnNlbGVjdEFsbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IFZuKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFZuKFtIdCh0KV0sR24pfSx0LnNlbGVjdGlvbj1Xbix0LnNlbGVjdG9yPWp0LHQuc2VsZWN0b3JBbGw9R3QsdC5zaHVmZmxlPWR0LHQuc2h1ZmZsZXI9cHQsdC5zb21lPWZ1bmN0aW9uKHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcigidGVzdCBpcyBub3QgYSBmdW5jdGlvbiIpO2xldCBlPS0xO2Zvcihjb25zdCByIG9mIHQpaWYobihyLCsrZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5zb3J0PVUsdC5zdGFjaz1mdW5jdGlvbigpe3ZhciB0PXltKFtdKSxuPWR3LGU9aHcscj1wdztmdW5jdGlvbiBpKGkpe3ZhciBvLGEsdT1BcnJheS5mcm9tKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGd3KSxjPXUubGVuZ3RoLGY9LTE7Zm9yKGNvbnN0IHQgb2YgaSlmb3Iobz0wLCsrZjtvPGM7KytvKSh1W29dW2ZdPVswLCtyKHQsdVtvXS5rZXksZixpKV0pLmRhdGE9dDtmb3Iobz0wLGE9cW0obih1KSk7bzxjOysrbyl1W2Fbb11dLmluZGV4PW87cmV0dXJuIGUodSxhKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bShBcnJheS5mcm9tKG4pKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eW0oK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9kdzoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKEFycmF5LmZyb20odCkpLGkpOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/aHc6dCxpKTplfSxpfSx0LnN0YWNrT2Zmc2V0RGl2ZXJnaW5nPWZ1bmN0aW9uKHQsbil7aWYoKHU9dC5sZW5ndGgpPjApZm9yKHZhciBlLHIsaSxvLGEsdSxjPTAsZj10W25bMF1dLmxlbmd0aDtjPGY7KytjKWZvcihvPWE9MCxlPTA7ZTx1OysrZSkoaT0ocj10W25bZV1dW2NdKVsxXS1yWzBdKT4wPyhyWzBdPW8sclsxXT1vKz1pKTppPDA/KHJbMV09YSxyWzBdPWErPWkpOihyWzBdPTAsclsxXT1pKX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LG4pe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscixpLG89MCxhPXRbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihpPWU9MDtlPHI7KytlKWkrPXRbZV1bb11bMV18fDA7aWYoaSlmb3IoZT0wO2U8cjsrK2UpdFtlXVtvXVsxXS89aX1odyh0LG4pfX0sdC5zdGFja09mZnNldE5vbmU9aHcsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxuKXtpZigoZT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHI9MCxpPXRbblswXV0sbz1pLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCx1PTA7YTxlOysrYSl1Kz10W2FdW3JdWzFdfHwwO2lbcl1bMV0rPWlbcl1bMF09LXUvMn1odyh0LG4pfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LG4pe2lmKChpPXQubGVuZ3RoKT4wJiYocj0oZT10W25bMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgZSxyLGksbz0wLGE9MTthPHI7KythKXtmb3IodmFyIHU9MCxjPTAsZj0wO3U8aTsrK3Upe2Zvcih2YXIgcz10W25bdV1dLGw9c1thXVsxXXx8MCxoPShsLShzW2EtMV1bMV18fDApKS8yLGQ9MDtkPHU7KytkKXt2YXIgcD10W25bZF1dO2grPShwW2FdWzFdfHwwKS0ocFthLTFdWzFdfHwwKX1jKz1sLGYrPWgqbH1lW2EtMV1bMV0rPWVbYS0xXVswXT1vLGMmJihvLT1mL2MpfWVbYS0xXVsxXSs9ZVthLTFdWzBdPW8saHcodCxuKX19LHQuc3RhY2tPcmRlckFwcGVhcmFuY2U9eXcsdC5zdGFja09yZGVyQXNjZW5kaW5nPV93LHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIF93KHQpLnJldmVyc2UoKX0sdC5zdGFja09yZGVySW5zaWRlT3V0PWZ1bmN0aW9uKHQpe3ZhciBuLGUscj10Lmxlbmd0aCxpPXQubWFwKGJ3KSxvPXl3KHQpLGE9MCx1PTAsYz1bXSxmPVtdO2ZvcihuPTA7bjxyOysrbillPW9bbl0sYTx1PyhhKz1pW2VdLGMucHVzaChlKSk6KHUrPWlbZV0sZi5wdXNoKGUpKTtyZXR1cm4gZi5yZXZlcnNlKCkuY29uY2F0KGMpfSx0LnN0YWNrT3JkZXJOb25lPWR3LHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGR3KHQpLnJldmVyc2UoKX0sdC5zdHJhdGlmeT1mdW5jdGlvbigpe3ZhciB0LG49a3AsZT1DcDtmdW5jdGlvbiByKHIpe3ZhciBpLG8sYSx1LGMsZixzLGwsaD1BcnJheS5mcm9tKHIpLGQ9bixwPWUsZz1uZXcgTWFwO2lmKG51bGwhPXQpe2NvbnN0IG49aC5tYXAoKChuLGUpPT5mdW5jdGlvbih0KXt0PWAke3R9YDtsZXQgbj10Lmxlbmd0aDt6cCh0LG4tMSkmJiF6cCh0LG4tMikmJih0PXQuc2xpY2UoMCwtMSkpO3JldHVybiIvIj09PXRbMF0/dDpgLyR7dH1gfSh0KG4sZSxyKSkpKSxlPW4ubWFwKFBwKSxpPW5ldyBTZXQobikuYWRkKCIiKTtmb3IoY29uc3QgdCBvZiBlKWkuaGFzKHQpfHwoaS5hZGQodCksbi5wdXNoKHQpLGUucHVzaChQcCh0KSksaC5wdXNoKE5wKSk7ZD0odCxlKT0+bltlXSxwPSh0LG4pPT5lW25dfWZvcihhPTAsaT1oLmxlbmd0aDthPGk7KythKW89aFthXSxmPWhbYV09bmV3IFFkKG8pLG51bGwhPShzPWQobyxhLHIpKSYmKHMrPSIiKSYmKGw9Zi5pZD1zLGcuc2V0KGwsZy5oYXMobCk/RXA6ZikpLG51bGwhPShzPXAobyxhLHIpKSYmKHMrPSIiKSYmKGYucGFyZW50PXMpO2ZvcihhPTA7YTxpOysrYSlpZihzPShmPWhbYV0pLnBhcmVudCl7aWYoIShjPWcuZ2V0KHMpKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrcyk7aWYoYz09PUVwKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK3MpO2MuY2hpbGRyZW4/Yy5jaGlsZHJlbi5wdXNoKGYpOmMuY2hpbGRyZW49W2ZdLGYucGFyZW50PWN9ZWxzZXtpZih1KXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTt1PWZ9aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYobnVsbCE9dCl7Zm9yKDt1LmRhdGE9PT1OcCYmMT09PXUuY2hpbGRyZW4ubGVuZ3RoOyl1PXUuY2hpbGRyZW5bMF0sLS1pO2ZvcihsZXQgdD1oLmxlbmd0aC0xO3Q+PTAmJihmPWhbdF0pLmRhdGE9PT1OcDstLXQpZi5kYXRhPW51bGx9aWYodS5wYXJlbnQ9U3AsdS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1pfSkpLmVhY2hCZWZvcmUoS2QpLHUucGFyZW50PW51bGwsaT4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gdX1yZXR1cm4gci5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1KZCh0KSxyKTpufSxyLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUpkKHQpLHIpOmV9LHIucGF0aD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1KZChuKSxyKTp0fSxyfSx0LnN0eWxlPV9uLHQuc3Vic2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIF90KG4sdCl9LHQuc3VtPWZ1bmN0aW9uKHQsbil7bGV0IGU9MDtpZih2b2lkIDA9PT1uKWZvcihsZXQgbiBvZiB0KShuPStuKSYmKGUrPW4pO2Vsc2V7bGV0IHI9LTE7Zm9yKGxldCBpIG9mIHQpKGk9K24oaSwrK3IsdCkpJiYoZSs9aSl9cmV0dXJuIGV9LHQuc3VwZXJzZXQ9X3QsdC5zdmc9TmMsdC5zeW1ib2w9ZnVuY3Rpb24odCxuKXtsZXQgZT1udWxsLHI9a20oaSk7ZnVuY3Rpb24gaSgpe2xldCBpO2lmKGV8fChlPWk9cigpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGUsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiBlPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gdD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnltKHR8fGZ4KSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eW0odm9pZCAwPT09bj82NDorbiksaS50eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eW0obiksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eW0oK3QpLGkpOm59LGkuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6dCxpKTplfSxpfSx0LnN5bWJvbEFzdGVyaXNrPWN4LHQuc3ltYm9sQ2lyY2xlPWZ4LHQuc3ltYm9sQ3Jvc3M9c3gsdC5zeW1ib2xEaWFtb25kPWR4LHQuc3ltYm9sRGlhbW9uZDI9cHgsdC5zeW1ib2xQbHVzPWd4LHQuc3ltYm9sU3F1YXJlPXl4LHQuc3ltYm9sU3F1YXJlMj12eCx0LnN5bWJvbFN0YXI9eHgsdC5zeW1ib2xUaW1lcz1QeCx0LnN5bWJvbFRyaWFuZ2xlPU14LHQuc3ltYm9sVHJpYW5nbGUyPUF4LHQuc3ltYm9sV3llPUN4LHQuc3ltYm9sWD1QeCx0LnN5bWJvbHM9engsdC5zeW1ib2xzRmlsbD16eCx0LnN5bWJvbHNTdHJva2U9JHgsdC50ZXh0PW1jLHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz1mdW5jdGlvbih0LG4sZSl7Y29uc3Qgcj12KHQpLGk9YXQodCwuNzUpLWF0KHQsLjI1KTtyZXR1cm4gciYmaT9NYXRoLmNlaWwoKGUtbikvKDIqaSpNYXRoLnBvdyhyLC0xLzMpKSk6MX0sdC50aHJlc2hvbGRTY290dD1mdW5jdGlvbih0LG4sZSl7Y29uc3Qgcj12KHQpLGk9dyh0KTtyZXR1cm4gciYmaT9NYXRoLmNlaWwoKGUtbikqTWF0aC5jYnJ0KHIpLygzLjQ5KmkpKToxfSx0LnRocmVzaG9sZFN0dXJnZXM9Syx0LnRpY2tGb3JtYXQ9RWcsdC50aWNrSW5jcmVtZW50PVYsdC50aWNrU3RlcD1XLHQudGlja3M9Ryx0LnRpbWVEYXk9cHksdC50aW1lRGF5cz1neSx0LnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPVBfLHQudGltZUZvcm1hdExvY2FsZT1odix0LnRpbWVGcmlkYXk9U3ksdC50aW1lRnJpZGF5cz0keSx0LnRpbWVIb3VyPXN5LHQudGltZUhvdXJzPWx5LHQudGltZUludGVydmFsPVZnLHQudGltZU1pbGxpc2Vjb25kPVdnLHQudGltZU1pbGxpc2Vjb25kcz1aZyx0LnRpbWVNaW51dGU9YXksdC50aW1lTWludXRlcz11eSx0LnRpbWVNb25kYXk9d3ksdC50aW1lTW9uZGF5cz1reSx0LnRpbWVNb250aD1aeSx0LnRpbWVNb250aHM9S3ksdC50aW1lU2F0dXJkYXk9RXksdC50aW1lU2F0dXJkYXlzPUR5LHQudGltZVNlY29uZD1peSx0LnRpbWVTZWNvbmRzPW95LHQudGltZVN1bmRheT14eSx0LnRpbWVTdW5kYXlzPU55LHQudGltZVRodXJzZGF5PUF5LHQudGltZVRodXJzZGF5cz16eSx0LnRpbWVUaWNrSW50ZXJ2YWw9Y3YsdC50aW1lVGlja3M9dXYsdC50aW1lVHVlc2RheT1NeSx0LnRpbWVUdWVzZGF5cz1DeSx0LnRpbWVXZWRuZXNkYXk9VHksdC50aW1lV2VkbmVzZGF5cz1QeSx0LnRpbWVXZWVrPXh5LHQudGltZVdlZWtzPU55LHQudGltZVllYXI9dHYsdC50aW1lWWVhcnM9bnYsdC50aW1lb3V0PSRpLHQudGltZXI9TmksdC50aW1lckZsdXNoPWtpLHQudHJhbnNpdGlvbj1nbyx0LnRyYW5zcG9zZT1ndCx0LnRyZWU9ZnVuY3Rpb24oKXt2YXIgdD0kcCxuPTEsZT0xLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHIsaSxvLGE9bmV3IFVwKHQsMCksdT1bYV07bj11LnBvcCgpOylpZihyPW4uXy5jaGlsZHJlbilmb3Iobi5jaGlsZHJlbj1uZXcgQXJyYXkobz1yLmxlbmd0aCksaT1vLTE7aT49MDstLWkpdS5wdXNoKGU9bi5jaGlsZHJlbltpXT1uZXcgVXAocltpXSxpKSksZS5wYXJlbnQ9bjtyZXR1cm4oYS5wYXJlbnQ9bmV3IFVwKG51bGwsMCkpLmNoaWxkcmVuPVthXSxhfShpKTtpZihjLmVhY2hBZnRlcihvKSxjLnBhcmVudC5tPS1jLnosYy5lYWNoQmVmb3JlKGEpLHIpaS5lYWNoQmVmb3JlKHUpO2Vsc2V7dmFyIGY9aSxzPWksbD1pO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PGYueCYmKGY9dCksdC54PnMueCYmKHM9dCksdC5kZXB0aD5sLmRlcHRoJiYobD10KX0pKTt2YXIgaD1mPT09cz8xOnQoZixzKS8yLGQ9aC1mLngscD1uLyhzLngraCtkKSxnPWUvKGwuZGVwdGh8fDEpO2kuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC54PSh0LngrZCkqcCx0Lnk9dC5kZXB0aCpnfSkpfXJldHVybiBpfWZ1bmN0aW9uIG8obil7dmFyIGU9bi5jaGlsZHJlbixyPW4ucGFyZW50LmNoaWxkcmVuLGk9bi5pP3Jbbi5pLTFdOm51bGw7aWYoZSl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPTAscj0wLGk9dC5jaGlsZHJlbixvPWkubGVuZ3RoOy0tbz49MDspKG49aVtvXSkueis9ZSxuLm0rPWUsZSs9bi5zKyhyKz1uLmMpfShuKTt2YXIgbz0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyhuLno9aS56K3Qobi5fLGkuXyksbi5tPW4uei1vKTpuLno9b31lbHNlIGkmJihuLno9aS56K3Qobi5fLGkuXykpO24ucGFyZW50LkE9ZnVuY3Rpb24obixlLHIpe2lmKGUpe2Zvcih2YXIgaSxvPW4sYT1uLHU9ZSxjPW8ucGFyZW50LmNoaWxkcmVuWzBdLGY9by5tLHM9YS5tLGw9dS5tLGg9Yy5tO3U9UnAodSksbz1EcChvKSx1JiZvOyljPURwKGMpLChhPVJwKGEpKS5hPW4sKGk9dS56K2wtby56LWYrdCh1Ll8sby5fKSk+MCYmKEZwKHFwKHUsbixyKSxuLGkpLGYrPWkscys9aSksbCs9dS5tLGYrPW8ubSxoKz1jLm0scys9YS5tO3UmJiFScChhKSYmKGEudD11LGEubSs9bC1zKSxvJiYhRHAoYykmJihjLnQ9byxjLm0rPWYtaCxyPW4pfXJldHVybiByfShuLGksbi5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gYSh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gdSh0KXt0LngqPW4sdC55PXQuZGVwdGgqZX1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4saSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLG49K3RbMF0sZT0rdFsxXSxpKTpyP251bGw6W24sZV19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsbj0rdFswXSxlPSt0WzFdLGkpOnI/W24sZV06bnVsbH0saX0sdC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIHQ9WXAsbj0hMSxlPTEscj0xLGk9WzBdLG89bnAsYT1ucCx1PW5wLGM9bnAsZj1ucDtmdW5jdGlvbiBzKHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPWUsdC55MT1yLHQuZWFjaEJlZm9yZShsKSxpPVswXSxuJiZ0LmVhY2hCZWZvcmUoVHApLHR9ZnVuY3Rpb24gbChuKXt2YXIgZT1pW24uZGVwdGhdLHI9bi54MCtlLHM9bi55MCtlLGw9bi54MS1lLGg9bi55MS1lO2w8ciYmKHI9bD0ocitsKS8yKSxoPHMmJihzPWg9KHMraCkvMiksbi54MD1yLG4ueTA9cyxuLngxPWwsbi55MT1oLG4uY2hpbGRyZW4mJihlPWlbbi5kZXB0aCsxXT1vKG4pLzIscis9ZihuKS1lLHMrPWEobiktZSwobC09dShuKS1lKTxyJiYocj1sPShyK2wpLzIpLChoLT1jKG4pLWUpPHMmJihzPWg9KHMraCkvMiksdChuLHIscyxsLGgpKX1yZXR1cm4gcy5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIXQscyk6bn0scy5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0scyk6W2Uscl19LHMudGlsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10cChuKSxzKTp0fSxzLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cy5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnMucGFkZGluZ0lubmVyKCl9LHMucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZXAoK3QpLHMpOm99LHMucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3MucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTpzLnBhZGRpbmdUb3AoKX0scy5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZXAoK3QpLHMpOmF9LHMucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZXAoK3QpLHMpOnV9LHMucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVwKCt0KSxzKTpjfSxzLnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZXAoK3QpLHMpOmZ9LHN9LHQudHJlZW1hcEJpbmFyeT1mdW5jdGlvbih0LG4sZSxyLGkpe3ZhciBvLGEsdT10LmNoaWxkcmVuLGM9dS5sZW5ndGgsZj1uZXcgQXJyYXkoYysxKTtmb3IoZlswXT1hPW89MDtvPGM7KytvKWZbbysxXT1hKz11W29dLnZhbHVlOyFmdW5jdGlvbiB0KG4sZSxyLGksbyxhLGMpe2lmKG4+PWUtMSl7dmFyIHM9dVtuXTtyZXR1cm4gcy54MD1pLHMueTA9byxzLngxPWEsdm9pZChzLnkxPWMpfXZhciBsPWZbbl0saD1yLzIrbCxkPW4rMSxwPWUtMTtmb3IoO2Q8cDspe3ZhciBnPWQrcD4+PjE7ZltnXTxoP2Q9ZysxOnA9Z31oLWZbZC0xXTxmW2RdLWgmJm4rMTxkJiYtLWQ7dmFyIHk9ZltkXS1sLHY9ci15O2lmKGEtaT5jLW8pe3ZhciBfPXI/KGkqdithKnkpL3I6YTt0KG4sZCx5LGksbyxfLGMpLHQoZCxlLHYsXyxvLGEsYyl9ZWxzZXt2YXIgYj1yPyhvKnYrYyp5KS9yOmM7dChuLGQseSxpLG8sYSxiKSx0KGQsZSx2LGksYixhLGMpfX0oMCxjLHQudmFsdWUsbixlLHIsaSl9LHQudHJlZW1hcERpY2U9QXAsdC50cmVlbWFwUmVzcXVhcmlmeT1McCx0LnRyZWVtYXBTbGljZT1JcCx0LnRyZWVtYXBTbGljZURpY2U9ZnVuY3Rpb24odCxuLGUscixpKXsoMSZ0LmRlcHRoP0lwOkFwKSh0LG4sZSxyLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1ZcCx0LnRzdj1NYyx0LnRzdkZvcm1hdD1sYyx0LnRzdkZvcm1hdEJvZHk9aGMsdC50c3ZGb3JtYXRSb3c9cGMsdC50c3ZGb3JtYXRSb3dzPWRjLHQudHN2Rm9ybWF0VmFsdWU9Z2MsdC50c3ZQYXJzZT1mYyx0LnRzdlBhcnNlUm93cz1zYyx0LnVuaW9uPWZ1bmN0aW9uKC4uLnQpe2NvbnN0IG49bmV3IEludGVyblNldDtmb3IoY29uc3QgZSBvZiB0KWZvcihjb25zdCB0IG9mIGUpbi5hZGQodCk7cmV0dXJuIG59LHQudW5peERheT1feSx0LnVuaXhEYXlzPWJ5LHQudXRjRGF5PXl5LHQudXRjRGF5cz12eSx0LnV0Y0ZyaWRheT1CeSx0LnV0Y0ZyaWRheXM9VnksdC51dGNIb3VyPWh5LHQudXRjSG91cnM9ZHksdC51dGNNaWxsaXNlY29uZD1XZyx0LnV0Y01pbGxpc2Vjb25kcz1aZyx0LnV0Y01pbnV0ZT1jeSx0LnV0Y01pbnV0ZXM9ZnksdC51dGNNb25kYXk9cXksdC51dGNNb25kYXlzPWp5LHQudXRjTW9udGg9UXksdC51dGNNb250aHM9SnksdC51dGNTYXR1cmRheT1ZeSx0LnV0Y1NhdHVyZGF5cz1XeSx0LnV0Y1NlY29uZD1peSx0LnV0Y1NlY29uZHM9b3ksdC51dGNTdW5kYXk9RnksdC51dGNTdW5kYXlzPUx5LHQudXRjVGh1cnNkYXk9T3ksdC51dGNUaHVyc2RheXM9R3ksdC51dGNUaWNrSW50ZXJ2YWw9YXYsdC51dGNUaWNrcz1vdix0LnV0Y1R1ZXNkYXk9VXksdC51dGNUdWVzZGF5cz1IeSx0LnV0Y1dlZG5lc2RheT1JeSx0LnV0Y1dlZG5lc2RheXM9WHksdC51dGNXZWVrPUZ5LHQudXRjV2Vla3M9THksdC51dGNZZWFyPWV2LHQudXRjWWVhcnM9cnYsdC52YXJpYW5jZT14LHQudmVyc2lvbj0iNy45LjAiLHQud2luZG93PXBuLHQueG1sPVNjLHQuemlwPWZ1bmN0aW9uKCl7cmV0dXJuIGd0KGFyZ3VtZW50cyl9LHQuem9vbT1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPUV3LGk9Tncsbz16dyxhPUN3LHU9UHcsYz1bMCwxLzBdLGY9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD1yaSxoPSR0KCJzdGFydCIsInpvb20iLCJlbmQiKSxkPTUwMCxwPTE1MCxnPTAseT0xMDtmdW5jdGlvbiB2KHQpe3QucHJvcGVydHkoIl9fem9vbSIsa3cpLm9uKCJ3aGVlbC56b29tIixULHtwYXNzaXZlOiExfSkub24oIm1vdXNlZG93bi56b29tIixBKS5vbigiZGJsY2xpY2suem9vbSIsUykuZmlsdGVyKHUpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEUpLm9uKCJ0b3VjaG1vdmUuem9vbSIsTikub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsaykuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBfKHQsbil7cmV0dXJuKG49TWF0aC5tYXgoY1swXSxNYXRoLm1pbihjWzFdLG4pKSk9PT10Lms/dDpuZXcgd3cobix0LngsdC55KX1mdW5jdGlvbiBiKHQsbixlKXt2YXIgcj1uWzBdLWVbMF0qdC5rLGk9blsxXS1lWzFdKnQuaztyZXR1cm4gcj09PXQueCYmaT09PXQueT90Om5ldyB3dyh0LmsscixpKX1mdW5jdGlvbiBtKHQpe3JldHVyblsoK3RbMF1bMF0rICt0WzFdWzBdKS8yLCgrdFswXVsxXSsgK3RbMV1bMV0pLzJdfWZ1bmN0aW9uIHgodCxuLGUscil7dC5vbigic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7dyh0aGlzLGFyZ3VtZW50cykuZXZlbnQocikuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLChmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLmV2ZW50KHIpLmVuZCgpfSkpLnR3ZWVuKCJ6b29tIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLG89YXJndW1lbnRzLGE9dyh0LG8pLmV2ZW50KHIpLHU9aS5hcHBseSh0LG8pLGM9bnVsbD09ZT9tKHUpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxvKTplLGY9TWF0aC5tYXgodVsxXVswXS11WzBdWzBdLHVbMV1bMV0tdVswXVsxXSkscz10Ll9fem9vbSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxvKTpuLGQ9bChzLmludmVydChjKS5jb25jYXQoZi9zLmspLGguaW52ZXJ0KGMpLmNvbmNhdChmL2guaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWg7ZWxzZXt2YXIgbj1kKHQpLGU9Zi9uWzJdO3Q9bmV3IHd3KGUsY1swXS1uWzBdKmUsY1sxXS1uWzFdKmUpfWEuem9vbShudWxsLHQpfX0pKX1mdW5jdGlvbiB3KHQsbixlKXtyZXR1cm4hZSYmdC5fX3pvb21pbmd8fG5ldyBNKHQsbil9ZnVuY3Rpb24gTSh0LG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1uLHRoaXMuYWN0aXZlPTAsdGhpcy5zb3VyY2VFdmVudD1udWxsLHRoaXMuZXh0ZW50PWkuYXBwbHkodCxuKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBUKHQsLi4ubil7aWYoci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlPXcodGhpcyxuKS5ldmVudCh0KSxpPXRoaXMuX196b29tLHU9TWF0aC5tYXgoY1swXSxNYXRoLm1pbihjWzFdLGkuaypNYXRoLnBvdygyLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHM9bmUodCk7aWYoZS53aGVlbCllLm1vdXNlWzBdWzBdPT09c1swXSYmZS5tb3VzZVswXVsxXT09PXNbMV18fChlLm1vdXNlWzFdPWkuaW52ZXJ0KGUubW91c2VbMF09cykpLGNsZWFyVGltZW91dChlLndoZWVsKTtlbHNle2lmKGkuaz09PXUpcmV0dXJuO2UubW91c2U9W3MsaS5pbnZlcnQocyldLEdpKHRoaXMpLGUuc3RhcnQoKX1Tdyh0KSxlLndoZWVsPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS53aGVlbD1udWxsLGUuZW5kKCl9KSxwKSxlLnpvb20oIm1vdXNlIixvKGIoXyhpLHUpLGUubW91c2VbMF0sZS5tb3VzZVsxXSksZS5leHRlbnQsZikpfX1mdW5jdGlvbiBBKHQsLi4ubil7aWYoIWUmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgaT10LmN1cnJlbnRUYXJnZXQsYT13KHRoaXMsbiwhMCkuZXZlbnQodCksdT1abih0LnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsKGZ1bmN0aW9uKHQpe2lmKFN3KHQpLCFhLm1vdmVkKXt2YXIgbj10LmNsaWVudFgtcyxlPXQuY2xpZW50WS1sO2EubW92ZWQ9bipuK2UqZT5nfWEuZXZlbnQodCkuem9vbSgibW91c2UiLG8oYihhLnRoYXQuX196b29tLGEubW91c2VbMF09bmUodCxpKSxhLm1vdXNlWzFdKSxhLmV4dGVudCxmKSl9KSwhMCkub24oIm1vdXNldXAuem9vbSIsKGZ1bmN0aW9uKHQpe3Uub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksdWUodC52aWV3LGEubW92ZWQpLFN3KHQpLGEuZXZlbnQodCkuZW5kKCl9KSwhMCksYz1uZSh0LGkpLHM9dC5jbGllbnRYLGw9dC5jbGllbnRZO2FlKHQudmlldyksQXcodCksYS5tb3VzZT1bYyx0aGlzLl9fem9vbS5pbnZlcnQoYyldLEdpKHRoaXMpLGEuc3RhcnQoKX19ZnVuY3Rpb24gUyh0LC4uLm4pe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZT10aGlzLl9fem9vbSxhPW5lKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LHRoaXMpLHU9ZS5pbnZlcnQoYSksYz1lLmsqKHQuc2hpZnRLZXk/LjU6MiksbD1vKGIoXyhlLGMpLGEsdSksaS5hcHBseSh0aGlzLG4pLGYpO1N3KHQpLHM+MD9abih0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocykuY2FsbCh4LGwsYSx0KTpabih0aGlzKS5jYWxsKHYudHJhbnNmb3JtLGwsYSx0KX19ZnVuY3Rpb24gRShlLC4uLmkpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbyxhLHUsYyxmPWUudG91Y2hlcyxzPWYubGVuZ3RoLGw9dyh0aGlzLGksZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1zKS5ldmVudChlKTtmb3IoQXcoZSksYT0wO2E8czsrK2EpYz1bYz1uZSh1PWZbYV0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KGMpLHUuaWRlbnRpZmllcl0sbC50b3VjaDA/bC50b3VjaDF8fGwudG91Y2gwWzJdPT09Y1syXXx8KGwudG91Y2gxPWMsbC50YXBzPTApOihsLnRvdWNoMD1jLG89ITAsbC50YXBzPTErISF0KTt0JiYodD1jbGVhclRpbWVvdXQodCkpLG8mJihsLnRhcHM8MiYmKG49Y1swXSx0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dD1udWxsfSksZCkpLEdpKHRoaXMpLGwuc3RhcnQoKSl9fWZ1bmN0aW9uIE4odCwuLi5uKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIGUscixpLGEsdT13KHRoaXMsbikuZXZlbnQodCksYz10LmNoYW5nZWRUb3VjaGVzLHM9Yy5sZW5ndGg7Zm9yKFN3KHQpLGU9MDtlPHM7KytlKWk9bmUocj1jW2VdLHRoaXMpLHUudG91Y2gwJiZ1LnRvdWNoMFsyXT09PXIuaWRlbnRpZmllcj91LnRvdWNoMFswXT1pOnUudG91Y2gxJiZ1LnRvdWNoMVsyXT09PXIuaWRlbnRpZmllciYmKHUudG91Y2gxWzBdPWkpO2lmKHI9dS50aGF0Ll9fem9vbSx1LnRvdWNoMSl7dmFyIGw9dS50b3VjaDBbMF0saD11LnRvdWNoMFsxXSxkPXUudG91Y2gxWzBdLHA9dS50b3VjaDFbMV0sZz0oZz1kWzBdLWxbMF0pKmcrKGc9ZFsxXS1sWzFdKSpnLHk9KHk9cFswXS1oWzBdKSp5Kyh5PXBbMV0taFsxXSkqeTtyPV8ocixNYXRoLnNxcnQoZy95KSksaT1bKGxbMF0rZFswXSkvMiwobFsxXStkWzFdKS8yXSxhPVsoaFswXStwWzBdKS8yLChoWzFdK3BbMV0pLzJdfWVsc2V7aWYoIXUudG91Y2gwKXJldHVybjtpPXUudG91Y2gwWzBdLGE9dS50b3VjaDBbMV19dS56b29tKCJ0b3VjaCIsbyhiKHIsaSxhKSx1LmV4dGVudCxmKSl9fWZ1bmN0aW9uIGsodCwuLi5yKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIGksbyxhPXcodGhpcyxyKS5ldmVudCh0KSx1PXQuY2hhbmdlZFRvdWNoZXMsYz11Lmxlbmd0aDtmb3IoQXcodCksZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSxkKSxpPTA7aTxjOysraSlvPXVbaV0sYS50b3VjaDAmJmEudG91Y2gwWzJdPT09by5pZGVudGlmaWVyP2RlbGV0ZSBhLnRvdWNoMDphLnRvdWNoMSYmYS50b3VjaDFbMl09PT1vLmlkZW50aWZpZXImJmRlbGV0ZSBhLnRvdWNoMTtpZihhLnRvdWNoMSYmIWEudG91Y2gwJiYoYS50b3VjaDA9YS50b3VjaDEsZGVsZXRlIGEudG91Y2gxKSxhLnRvdWNoMClhLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoYS50b3VjaDBbMF0pO2Vsc2UgaWYoYS5lbmQoKSwyPT09YS50YXBzJiYobz1uZShvLHRoaXMpLE1hdGguaHlwb3QoblswXS1vWzBdLG5bMV0tb1sxXSk8eSkpe3ZhciBmPVpuKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7ZiYmZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gdi50cmFuc2Zvcm09ZnVuY3Rpb24odCxuLGUscil7dmFyIGk9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2kucHJvcGVydHkoIl9fem9vbSIsa3cpLHQhPT1pP3godCxuLGUscik6aS5pbnRlcnJ1cHQoKS5lYWNoKChmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLmV2ZW50KHIpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLmVuZCgpfSkpfSx2LnNjYWxlQnk9ZnVuY3Rpb24odCxuLGUscil7di5zY2FsZVRvKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pfSksZSxyKX0sdi5zY2FsZVRvPWZ1bmN0aW9uKHQsbixlLHIpe3YudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj10aGlzLl9fem9vbSxhPW51bGw9PWU/bSh0KToiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLHU9ci5pbnZlcnQoYSksYz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuO3JldHVybiBvKGIoXyhyLGMpLGEsdSksdCxmKX0pLGUscil9LHYudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxuLGUscil7di50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmKX0pLG51bGwscil9LHYudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxuLGUscixhKXt2LnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9dGhpcy5fX3pvb20sdT1udWxsPT1yP20odCk6ImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cjtyZXR1cm4gbyhNdy50cmFuc2xhdGUodVswXSx1WzFdKS5zY2FsZShhLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2Ygbj8tbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LW4sImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lKSx0LGYpfSkscixhKX0sTS5wcm90b3R5cGU9e2V2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYodGhpcy5zb3VyY2VFdmVudD10KSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09bi5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPW4uaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09bi5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPW4sdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe3ZhciBuPVpuKHRoaXMudGhhdCkuZGF0dW0oKTtoLmNhbGwodCx0aGlzLnRoYXQsbmV3IHh3KHQse3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0OnYsdHlwZTp0LHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOmh9KSxuKX19LHYud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om13KCt0KSx2KTphfSx2LmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om13KCEhdCksdik6cn0sdi50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptdyghIXQpLHYpOnV9LHYuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXcoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLHYpOml9LHYuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF09K3RbMF0sY1sxXT0rdFsxXSx2KTpbY1swXSxjWzFdXX0sdi50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF1bMF09K3RbMF1bMF0sZlsxXVswXT0rdFsxXVswXSxmWzBdWzFdPSt0WzBdWzFdLGZbMV1bMV09K3RbMV1bMV0sdik6W1tmWzBdWzBdLGZbMF1bMV1dLFtmWzFdWzBdLGZbMV1bMV1dXX0sdi5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCx2KTpvfSx2LmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHYpOnN9LHYuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCx2KTpsfSx2Lm9uPWZ1bmN0aW9uKCl7dmFyIHQ9aC5vbi5hcHBseShoLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1oP3Y6dH0sdi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSh0PSt0KSp0LHYpOk1hdGguc3FydChnKX0sdi50YXBEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rdCx2KTp5fSx2fSx0Lnpvb21JZGVudGl0eT1Ndyx0Lnpvb21UcmFuc2Zvcm09VHd9KSk7Cg==",mtime:1771801102686}},functions:{toggleAtlas:{path:"atlas.ts:toggleAtlas",command:{name:"Atlas: Toggle Graph View"}},updateGraph:{path:"atlas.ts:updateGraph",events:["editor:pageLoaded","editor:pageReloaded"]},handleNavigate:{path:"atlas.ts:handleNavigate",events:["atlas:navigateTo"]},setOption:{path:"atlas.ts:setOption"}}},bZ={manifest:e,functionMapping:Q};R(Q,e,self.postMessage);export{bZ as plug};
//# sourceMappingURL=atlas.plug.js.map