/*! For license information please see player-5.5eee08c4.js.LICENSE.txt */ "use strict";!function(l,d){"object"==typeof module&&"object"==typeof module.exports?d():"function"==typeof define&&define.amd?define([],d):(l="undefined"!=typeof globalThis?globalThis:l||self)&&d()}(this,function(){"use strict";"object"==typeof window&&(window.openRedirect={version:"1.2.20",webpackPluginVersion:"3.4.22",reportOnly:!1})}),!function(l,d){"object"==typeof exports&&"undefined"!=typeof module?d(exports):"function"==typeof define&&define.amd?define(["exports"],d):d((l="undefined"!=typeof globalThis?globalThis:l||self).xss={})}(this,function(l){"use strict";var d=function(){return(d=Object.assign||function(l){for(var d,Z=1,m=arguments.length;Z/g,i=/&#([a-zA-Z0-9]*);?/gim,t=/"/g,W=/:?/gim,n=/&newline;?/gim,p=/((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a):/gi,e=/u\s*r\s*l\s*\(.*/gi,a=/e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi,V=/"/g,X=function(l){return l.replace(b,"<").replace(c,">")},s={indexOf:function(l,d){var Z,m;for(Z=0,m=l.length;Z127&&m<2048?d+=String.fromCharCode(m>>6|192)+String.fromCharCode(63&m|128):d+=String.fromCharCode(m>>12|224)+String.fromCharCode(m>>6&63|128)+String.fromCharCode(63&m|128)}return d}(l);p>2,c=(3&d)<<4|(Z=l.charCodeAt(p++))>>4,i=(15&Z)<<2|(m=l.charCodeAt(p++))>>6,t=63&m,isNaN(Z)?i=t=64:isNaN(m)&&(t=64),n=n+W.charAt(b)+W.charAt(c)+W.charAt(i)+W.charAt(t);return n}function G(l){var d,Z,m,b,c,i,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",W="",n=0;for(l=l.replace(/[^A-Za-z0-9+/=]/g,"");n>4,Z=(15&b)<<4|(c=t.indexOf(l.charAt(n++)))>>2,m=(3&c)<<6|(i=t.indexOf(l.charAt(n++))),W+=String.fromCharCode(d),64!==c&&(W+=String.fromCharCode(Z)),64!==i&&(W+=String.fromCharCode(m));return function(l){for(var d="",Z=0,m=0,b=0,c=0;Z191&&m<224?(d+=String.fromCharCode((31&m)<<6|63&(c=l.charCodeAt(Z+1))),Z+=2):(c=l.charCodeAt(Z+1),d+=String.fromCharCode((15&m)<<12|(63&c)<<6|63&(b=l.charCodeAt(Z+2))),Z+=3);return d}(W)}function Y(l,d,Z){var m="",b=0,c=!1,i=!1,t=0,W=l.length,n="",p="";l:for(t=0;t"===e||t===W-1){m+=Z(l.slice(b,c)),n=function(l){var d,Z=s.spaceIndex(l);return d=-1===Z?l.slice(1,-1):l.slice(1,Z+1),"/"===(d=s.trim(d).toLowerCase()).slice(0,1)&&(d=d.slice(1)),"/"===d.slice(-1)&&(d=d.slice(0,-1)),d}(p=l.slice(c,t+1)),m+=d(c,m.length,n,p,"0;d--){var Z=l[d];if(" "!==Z)return"="===Z?d:-1}return -1}(l,n-1))){W(i,o(s.trim(l.slice(Z,n)))),i=!1,Z=n+1;continue}}}else{if(-1===(e=l.indexOf(p,n+1)))break;W(i,s.trim(l.slice(b+1,e))),i=!1,Z=(n=e)+1}}else i=l.slice(Z,n),Z=n+1,b='"'===l.charAt(Z)||"'"===l.charAt(Z)?Z:function(l,d){for(;dl.charCodeAt(Z)?" ":l.charAt(Z);return s.trim(d)}(l=(l=(l=l.replace(t,'"')).replace(i,function(l,d){return"x"===d[0]||"X"===d[0]?String.fromCharCode(parseInt(d.substr(1),16)):String.fromCharCode(parseInt(d,10))})).replace(W,":").replace(n," "))}(Z),"href"===d||"src"===d){if("#"===(Z=s.trim(Z)))return"#";if("http://"!==Z.substr(0,7)&&"https://"!==Z.substr(0,8)&&"mailto:"!==Z.substr(0,7)&&"tel:"!==Z.substr(0,4)&&"data:image/"!==Z.substr(0,11)&&"ftp://"!==Z.substr(0,6)&&"./"!==Z.substr(0,2)&&"../"!==Z.substr(0,3)&&"#"!==Z[0]&&"/"!==Z[0])return""}else if("background"===d){if(p.lastIndex=0,p.test(Z))return""}else if("style"===d&&(a.lastIndex=0,a.test(Z)||(e.lastIndex=0,e.test(Z)&&(p.lastIndex=0,p.test(Z)))))return"";return Z=function(l){return l=X(l=l.replace(V,"""))}(Z)}var S=function(l){return"string"==typeof l?l.replace(/'/g,'"').replace('=""',"").replace(/\s+/g,"").toLowerCase():""},x=function(){function l(l){var d=function(l){var d={};for(var Z in l)d[Z]=l[Z];return d}(l||{});d.stripIgnoreTag&&(d.onIgnoreTag,d.onIgnoreTag=function(){return""}),d.whiteList={},d.onTag=function(){},d.onTagAttr=function(){},d.onIgnoreTag=function(){},d.onIgnoreTagAttr=function(){},d.safeAttrValue=R,d.escapeHtml=X,this.options=Object.assign(d,l)}return l.prototype.process=function(l){if(!(l=(l=l||"").toString()))return"";var d,Z,m,b,c,i,t=this.options,W=t.whiteList,n=t.onTag,p=t.onIgnoreTag,e=t.onTagAttr,a=t.onIgnoreTagAttr,V=t.safeAttrValue,X=t.escapeHtml;t.stripBlankChar&&(l=(d=(d=l.split("")).filter(function(l){var d=l.charCodeAt(0);return!(127===d||d<=31&&10!==d&&13!==d)})).join("")),t.allowCommentTag||(l=function(l){for(var d="",Z=0;Z");var t=function(l){var d=s.spaceIndex(l);if(-1===d)return{html:"",closing:"/"===l[l.length-2]};var Z="/"===(l=s.trim(l.slice(d+1,-1)))[l.length-1];return Z&&(l=s.trim(l.slice(0,-1))),{html:l,closing:Z}}(m),h=W[Z],o=y(t.html,function(l,d){var m=-1!==s.indexOf(h,l),b=e(Z,l,d,m);return null==b?m?(d=V(Z,l,d,null))?"".concat(l,'="').concat(d,'"'):l:null==(b=a(Z,l,d,m))?void 0:b:b});return m="<".concat(Z),o&&(m+=" ".concat(o)),t.closing&&(m+=" /"),m+=">"}return null==(i=p(Z,m,c))?X(m):i},X);return h&&(o=h.remove(o)),o},l}(),r=Function("\nvar _checkXSS = function (it) {\n return it && it.Math == Math && it;\n};\nreturn _checkXSS(typeof globalThis === 'object' && globalThis) ||\n_checkXSS(typeof window === 'object' && window) ||\n_checkXSS(typeof self === 'object' && self) ||\n_checkXSS(typeof global === 'object' && global) ||\nFunction('return this')();\n")(),K=new(function(){function l(){var l=this;this.batchData=[],this.uniqKeys=new Set,this.timeout=2e3,this.lock=!1,this.getSlardarBid=function(){var d,Z,m="douyin_web";if(!s.includes(m,"bid"))return m;if(l.config&&l.config.bid)return l.config.bid;if(r&&r._xssBid)return r._xssBid;if(r&&r.slardar&&"function"==typeof r.slardar.config){var b=(r.slardar.config()||{}).bid;if(b)return b}if(r&&r.Slardar&&"function"==typeof r.Slardar.config){var c=(r.Slardar.config()||{}).bid;if(c)return c}return(null===(Z=null===(d=null==r?void 0:r.Slardar)||void 0===d?void 0:d._baseParams)||void 0===Z?void 0:Z.bid)||"argus"},this.getConfigRegion=function(){var d;return s.includes("cn","region")?l.config&&l.config.region?l.config.region:((null===(d=null==r?void 0:r.gfdatav1)||void 0===d?void 0:d.region)||"cn").toLowerCase():"cn"},this.gerReportUrl=function(){var d={cn:G("aHR0cHM6Ly9tb24uemlqaWVhcGkuY29tL21vbml0b3JfYnJvd3Nlci9jb2xsZWN0L2JhdGNoL3NlY3VyaXR5Lz9iaWQ9"),boe:G("aHR0cHM6Ly9tb24uemlqaWVhcGkuY29tL21vbml0b3JfYnJvd3Nlci9jb2xsZWN0L2JhdGNoL3NlY3VyaXR5Lz9iaWQ9"),ttp:G("aHR0cHM6Ly9tb24udXMudGlrdG9rdi5jb20vbW9uaXRvcl9icm93c2VyL2NvbGxlY3QvYmF0Y2gvc2VjdXJpdHkvP2JpZD0="),va:G("aHR0cHM6Ly9tb24tdmEuYnl0ZW92ZXJzZWEuY29tL21vbml0b3JfYnJvd3Nlci9jb2xsZWN0L2JhdGNoL3NlY3VyaXR5Lz9iaWQ9"),maliva:G("aHR0cHM6Ly9tb24tdmEuYnl0ZW92ZXJzZWEuY29tL21vbml0b3JfYnJvd3Nlci9jb2xsZWN0L2JhdGNoL3NlY3VyaXR5Lz9iaWQ9"),sg:G("aHR0cHM6Ly9tb24tdmEuYnl0ZW92ZXJzZWEuY29tL21vbml0b3JfYnJvd3Nlci9jb2xsZWN0L2JhdGNoL3NlY3VyaXR5Lz9iaWQ9"),boei18n:G("aHR0cHM6Ly9tb24tdmEuYnl0ZW92ZXJzZWEuY29tL21vbml0b3JfYnJvd3Nlci9jb2xsZWN0L2JhdGNoL3NlY3VyaXR5Lz9iaWQ9")}[l.getConfigRegion()];if(d)return d+l.getSlardarBid()}}return l.prototype.setConfig=function(l){this.config=l},l.prototype.upload=function(){var l=this,d=this.gerReportUrl();!this.lock&&d&&0!==this.batchData.length&&(this.lock=!0,setTimeout(function(){var Z=l.batchData.slice(0,100);l.batchData=l.batchData.slice(100),r.fetch(d,{method:"post",body:JSON.stringify(Z),headers:{"Content-Type":"application/json"}}).catch(function(l){}),l.lock=!1,l.upload()},this.timeout))},l.prototype.generateKey=function(l){return l.collectKey?[l.collectMode,l.collectKey].join("___"):""},l.prototype.push=function(l){this.batchData.push(l),this.upload()},l.prototype.report=function(l){var d=this.generateKey(l);if(r.fetch&&l.collectKey){var Z="object"==typeof window?window.location.href:"SSR";l.documentUrl=Z;var m={age:Math.floor(Date.now()),type:"xss",url:Z,body:l,"user-agent":""};"enforce"===l.disposition&&"SSR"!==Z||(m.url=d),"SSR"===Z&&(m.url="SSR___".concat(m.url),m.body.ssr=!0),this.push(m)}},l}()),H=function(l){for(var d=0,Z=function(Z){Array.isArray(l[Z])?0===l[Z].length?delete l[Z]:(l[Z]=s.from(s.uniq(l[Z])),d+=l[Z].length):0===s.keys(l[Z]).length?delete l[Z]:s.keys(l[Z]).forEach(function(m){l[Z][m]=s.from(s.uniq(l[Z][m])),d+=l[Z][m].length})},m=0,b=s.keys(l);m0)return d&&d("javascript:"),!1;if(/^javascript:/i.test(l)){var b=l.slice(11).replace(/\s/g,"").trim();return!!s.some(["void","void(0)","void0","false","undefined",";"],function(l){return l===b})||(d&&d("javascript:"),!1)}return!0}var T=function(l,d){var Z,m,b="<%= isSaveValidUrl =>";if("string"!=typeof l||(m=Number("<%= urlLimit =>"),void 0!==Z&&(m=Z),"NaN"!==l.toString()&&-1!==m&&l.length>=m)||k(l,d))return l;try{if(!0===(b=JSON.parse(b))||"true"===b){var c=new URL(l);return c.origin+c.pathname}}catch(l){}return"#"};function N(l,d,m){if(void 0===l&&(l=""),void 0===d&&(d=[]),"string"!=typeof l)return!0;if(!k(l=I(l)))return!1;var b,c={url:(b=l.match(/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/)||[])[0],scheme:b[1],slash:b[2],host:b[3],port:b[4],path:b[5],query:b[6],hash:b[7]},i=c.scheme,t=c.host;return m?!!m(l):!(!i||!t)&&(!s.includes(["http","https","file"],i)||("object"==typeof window&&window&&(d=Z(Z([],d,!0),[location.host],!1)),s.some(d,function(l){return!!(l instanceof RegExp&&l.test(t))||l===t})))}var F={a:["target","title","spellcheck","rel"],canvas:[],abbr:["title"],address:[],area:["shape","coords","alt"],article:[],aside:[],audio:["autoplay","controls","loop","preload"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:["dir"],dl:[],dt:[],em:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["alt","title","width","height","decoding"],ins:["datetime"],li:[],mark:[],nav:[],ol:["start"],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],sup:[],delete:[],form:[],strong:[],mask:["maskunits","x","y","width","height","fill"],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],wbr:[],video:["autoplay","controls","loop","preload","height","width"],svg:["viewBox","version","xmlns","fill","width","height","stroke","stroke-width","style"],path:["d","fill","opacity","stroke","p-id","fill-rule","clip-rule","stroke-width","stroke-linecap","stroke-linejoin","fill-opacity","mask"],rect:["x","y","width","height","fill","stroke","rx"],g:[]},U={collect:null,initCollect:function(){this.collect={whiteList:{},filterProtocol:[]}},removeCollect:function(){var l=H(this.collect),d=l.count,Z=l.ret;return this.collect=null,{collectKey:0===d?null:JSON.stringify(Z),collectMode:"white"}},onIgnoreTagAttr:function(l,d,m){return l&&s.indexOf(["href","src"],d)>-1?U.domainWhiteList&&Array.isArray(U.domainWhiteList)&&U.domainWhiteList.length>0&&!N(m,Z([],U.domainWhiteList,!0))?"":"".concat(d,'="').concat(T(m,function(l){var d;null===(d=U.collect)||void 0===d||d.filterProtocol.push(l)}),'"'):l&&(s.indexOf(["style","class","id"],d)>-1||d.indexOf("data-")>-1)?"".concat(d,'="').concat(m,'"'):(U.collect.whiteList[l]=U.collect.whiteList[l]||[],void U.collect.whiteList[l].push(d))},onIgnoreTag:function(l,d){if("style"===l)return d;Y(d,function(l,d,Z,m){y(J(m).html.replace("/",""),function(l){U.collect.whiteList[Z]=U.collect.whiteList[Z]||[],U.collect.whiteList[Z].push(l)})},X)},whiteList:F,mergeWhiteList:function(l){for(var d,Z={},m=0,b=s.keys(F);m");var c=J(m),i=y(c.html,function(l,d){var m,b=0;if(v.blackList[Z]&&s.includes(v.blackList[Z],l)&&(g.collect.blackList[Z]=g.collect.blackList[Z]||[],g.collect.blackList[Z].push(l),b++),v.blackAttrRegExps.length&&v.blackAttrRegExps.some(function(d){return d.test(l)})&&s.forEach(v.blackAttrRegExps,function(d){d.test(l)&&(g.collect.blackAttrRegExps.push("".concat(d.toString(),"->").concat(l)),b++)}),v.blackAttrs.length&&s.includes(v.blackAttrs,l)&&(v.blackAttrs.push(l),b++),!b){if(v.filterList&&v.filterList[Z]&&s.includes(v.filterList[Z],l)){var c=T(d,function(l){var d;null===(d=g.collect)||void 0===d||d.filterProtocol.push(l)});return c!==d&&(g.collect.filterList[Z]=g.collect.filterList[Z]||[],g.collect.filterList[Z].push(l)),d?"".concat(l,"='").concat(c,"'"):l}return v.filterAttrs&&s.includes(v.filterAttrs,l)?((c=T(d,function(l){var d;null===(d=g.collect)||void 0===d||d.filterProtocol.push(l)}))!==d&&(null===(m=g.collect)||void 0===m||m.filterAttrs.push(l)),d?"".concat(l,"='").concat(c,"'"):l):d?"".concat(l,"='").concat(d,"'"):l}});return m="<".concat(Z),i&&(m+=" ".concat(i)),c.closing&&(m+=" /"),m+=">"},X);null===(Z=g.collect)||void 0===Z||Z.blackTags.push(l)}},f=function(l){var d=l.reportOnly,Z=void 0===d||d,m=l.block;return Z&&"all"===Z?"report":("string"==typeof Z&&("true"===Z&&(Z=!0),"false"===Z&&(Z=!1)),m?"enforce":Z?"report":"enforce")},z=function(l){return function(Z,m,b){if(!Z||"string"!=typeof Z)return Z;var c=m;l===L&&(c=U).initCollect();var i=l(Z,c);if(S(i)===S(Z))return Z;if(!b)return i;var t=b.logType,W=f(b),n=c.removeCollect();return K.report(d(d({type:t,disposition:W},n),{sourceText:u(Z),filterText:u(i)})),"enforce"===W?i:Z}},Q=z(function(l,d){return void 0===d&&(d={}),d&&d.whiteList||(d.whiteList={a:["target","href","title"],abbr:["title"],address:[],area:["shape","coords","href","alt"],article:[],aside:[],audio:["autoplay","controls","crossorigin","loop","muted","preload","src"],b:[],bdi:["dir"],bdo:["dir"],big:[],blockquote:["cite"],br:[],caption:[],center:[],cite:[],code:[],col:["align","valign","span","width"],colgroup:["align","valign","span","width"],dd:[],del:["datetime"],details:["open"],div:[],dl:[],dt:[],em:[],figcaption:[],figure:[],font:["color","size","face"],footer:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],hr:[],i:[],img:["src","alt","title","width","height"],ins:["datetime"],li:[],mark:[],nav:[],ol:[],p:[],pre:[],s:[],section:[],small:[],span:[],sub:[],summary:[],sup:[],strong:[],strike:[],table:["width","border","align","valign"],tbody:["align","valign"],td:["width","rowspan","colspan","align","valign"],tfoot:["align","valign"],th:["width","rowspan","colspan","align","valign"],thead:["align","valign"],tr:["rowspan","align","valign"],tt:[],u:[],ul:[],video:["autoplay","controls","crossorigin","loop","muted","playsinline","poster","preload","src","height","width"]}),new x(d).process(l)}),E=z(L),B=function(l,d,Z){var m=[],b=T(l,function(l){m.push(l)});if(b===l)return l;m=s.from(s.uniq(m));var c=d||Z||{};if(!c)return b;var i=c.logType,t=f(Z);return K.report({type:i,disposition:t,collectKey:m.join("___"),collectData:JSON.stringify(m),collectMode:"black",sourceText:u(l),filterText:u(b)}),"enforce"===t?b:l},D=r._xssProject||{},O=r.xssNamespace||{},A="3.0.26",_={FilterXSS:x,version:A,webpackPluginVersion:"<%= webpackPluginVersion =>",reportOnly:"<%= reportOnly =>",filterXSS:Q,_filterXSS:E,filterUrl:B,Config:U,BlackConfig:g,project:D,setProjectName:function(l){D[l]=this,r._xssProjectName=l}};O.douyin_web=_,r.xssNamespace=O,r.Math&&!r.Math.xssNamespace&&(r.Math.xssNamespace=O),D[A]=_,r.globalThis=r,r.getFilterXss=function(){return void 0!==this._xssProjectName?this._xssProject[this._xssProjectName]:_},r.xss=_,r.isSafeUrl=N,r.isSafeDomain=N,r.isSafeProtocol=k,r._xssProject=D,r._xssProjectName&&(D[r._xssProjectName]=_);var q=_.setProjectName.bind(_);l.BlackConfig=g,l.Config=U,l.FilterXSS=x,l._filterXSS=E,l.filterUrl=B,l.filterXSS=Q,l.isSafeDomain=N,l.isSafeProtocol=k,l.isSafeUrl=N,l.project=D,l.setProjectName=q,l.setXssNamespace=function(l){var d=l.appId,Z=l.bid,m=l.region;O[d]=_;U.bid=Z,U.region=m,U.enabled=!0},l.xssNamespace=O,Object.defineProperty(l,"__esModule",{value:!0})}),(self.webpackChunkdouyin_web=self.webpackChunkdouyin_web||[]).push([["1494"],{975346:function(l,d,Z){Z.d(d,{Cy:function(){return a},G9:function(){return n},ZP:function(){return W},_M:function(){return p}}),Z(936553),Z(313036),Z(346984),Z(802824),Z(162093),Z(497397),Z(248385),Z(679308),Z(759943);var m=Z(757309),b=[{key:"Wexin",reg:/(micromessenger)\/([\d.]+)/},{key:"Openlanguage",reg:/(openlanguage)\/([\d.]+)/},{key:"NewsArticle",reg:/(newsarticle)\/([\d.]+)/},{key:"VideoArticle",reg:/(videoarticle)\/([\d.]+)/},{key:"Hotsoon",reg:/(live_stream)_([\d.]+)/},{key:"Aweme",reg:/(aweme)_([\d.]+)/},{key:"Lark",reg:/(lark)\/([\d.]+)/},{key:"PlayStation",reg:/(playstation)/},{key:"BingPreview",reg:/(bingpreview)\/([\d.]+)/}],c=["avc1.42E01E, mp4a.40.2","avc1.58A01E, mp4a.40.2","avc1.4D401E, mp4a.40.2","avc1.64001E, mp4a.40.2","avc1.42E01E","mp4v.20.8","avc1.42E01E, mp4a.40.2","avc1.58A01E, mp4a.40.2","avc1.4D401E, mp4a.40.2","avc1.64001E, mp4a.40.2","mp4v.20.8, mp4a.40.2","mp4v.20.240, mp4a.40.2"],i=["Baiduspider","YandexBot"],t=["Baiduspider","googlebot","360Spider","haosouspider","YoudaoBot","Sogou News Spider","Yisouspider","Googlebot","Headless","Applebot","Bingbot","PetalBot"],W="undefined"!=typeof navigator&&function(){var l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",d={},Z=l.toLowerCase();try{var W,n,p=new m.UAParser(l).getResult();d.browser=p.browser,d.os=p.os,d.device=p.device,d.isIOS="iOS"===p.os.name,d.isAndroid="Android"===p.os.name,d.isWP="Windows Phone"===p.os.name,d.isPad="tablet"===p.device.type,d.isMobile="mobile"===p.device.type||"tablet"===p.device.type||d.isIOS||d.isAndroid||d.isWP,d.isPC=!d.isMobile;var e=function(){var l={isSupport:!1,mime:""};if("undefined"==typeof document)return l;var d=document.createElement("video");return"function"==typeof d.canPlayType?(c.map(function(Z){"probably"===d.canPlayType('video/mp4; codecs="'.concat(Z,'"'))&&(l.isSupport=!0,l.mime+="||".concat(Z))}),l):(d=null,l)}();d.isSupportMP4=e.isSupport,d.mime=e.mime;for(var a=(null===(W=p.browser)||void 0===W?void 0:W.name)||"",V=(null===(n=p.browser)||void 0===n?void 0:n.version)||"",X=null,s=0;s2?X[2]:"";break}!X&&function(){if("undefined"==typeof navigator)return!1;var l=navigator.mimeTypes;if(l){for(var d=0;d-1||l[d].type&&l[d].type.indexOf("application/vnd.chromium.remoting-viewer")>-1||l[d].description&&l[d].description.indexOf("360")>-1)return!0;return!1}}()&&(a="360EE"),("IE"===p.browser.name||"IEMobile"===p.browser.name)&&(a="Trident"),a&&(d["is".concat(a)]=!0,d.name=a,d.appVersion=V),d.name&&"Trident"!==d.name&&/(trident)/.exec(Z)&&(d.name=d.name?"".concat(d.name,"_Trident"):"Trident"),d.isSpider=function(l,d){var Z=!1;i.forEach(function(d){d===l&&(Z=!0)});for(var m=0;m0&&void 0!==arguments[0]?arguments[0]:{};(0,m.PA)(this,l),Object.keys(c).map(function(l){(void 0===d[l]||null===d[l])&&(d[l]=c[l])}),this.options=d,this._headers={},this.intervalId=null,this.ishangUp=!1,this._data={contentLength:0,statusText:"",status:-1,speed:0,costTime:0,connectTime:0,contentType:""},this.url=[]},[{key:"setData",value:function(l){var d=this;if(Object.keys(l).map(function(Z){"headers"!==Z&&(d._data[Z]=l[Z])}),l.headers&&Object.keys(l.headers).length>0){this._headers=(0,b.xV)(l.headers),l.headers["content-type"]&&(this._data.contentType=l.headers["content-type"]);var Z=(l.headers["content-range"]||"").split("/");Z&&Z.length>1&&(this._data.contentLength=parseInt(Z[1]))}}},{key:"contentLength",get:function(){return this._data.length||0}},{key:"trigger",value:function(l){var d=this,Z=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"start",m=this.options;this.url=l,!this.url||"start"!==Z&&(this.ishangUp||this.intervalId)?(0,b.cM)("task>>cant`t trigger url",this.ishangUp,this.intervalId):((0,b.cM)("task>>trigger url ",l),this.ishangUp=!0,this.intervalId&&this.clear(),this.intervalId=setTimeout(function(){d.clear()},"start"===Z?500:m.timer),(0,b.vR)(this.url,{range:"start"===Z?"0-1024":m.range,timeout:m.timeout}).then(function(l){(0,b.cM)("getXhr>>check result ",l),d.setData(l||{}),d.ishangUp=!1}).catch(function(l){(0,b.cM)("getXhr>>error ",l),d.ishangUp=!1,d._data.status=-1}))}},{key:"url",get:function(){return this.options.url},set:function(l){l&&(this.options.url=l)}},{key:"serverIp",get:function(){return this._headers.x_response_sinfo||""}},{key:"headers",get:function(){return this._headers||{}}},{key:"status",get:function(){return this._data.status||-1}},{key:"speed",get:function(){return this._data.speed}},{key:"clear",value:function(){clearTimeout(this.intervalId),this.intervalId=null}}])},616322:function(l,d,Z){Z.d(d,{Z:function(){return c}}),Z(124300),Z(248385),Z(591111),Z(490629),Z(656562),Z(520995),Z(992871);var m="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPUFycmF5KGUpO3I8ZTtyKyspbltyXT10W3JdO3JldHVybiBufWZ1bmN0aW9uIGUodCxlLHIsbixpLG8sYSl7dHJ5e3ZhciBjPXRbb10oYSksdT1jLnZhbHVlfWNhdGNoKGwpe3JldHVybiB2b2lkIHIobCl9Yy5kb25lP2UodSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4obixpKX1mdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMsbj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihpLG8pe3ZhciBhPXQuYXBwbHkocixuKTtmdW5jdGlvbiBjKHQpe2UoYSxpLG8sYyx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe2UoYSxpLG8sYyx1LCJ0aHJvdyIsdCl9Yyh2b2lkIDApfSkpfX1mdW5jdGlvbiBuKHQsZSl7dmFyIHI9InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXXx8dFsiQEBpdGVyYXRvciJdO2lmKCFyKXtpZihBcnJheS5pc0FycmF5KHQpfHwocj1hKHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7ciYmKHQ9cik7dmFyIG49MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gbj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbbisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIG8sYz0hMCx1PSExO3JldHVybntzOmZ1bmN0aW9uKCl7cj1yLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1yLm5leHQoKTtyZXR1cm4gYz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXt1PSEwLG89dH0sZjpmdW5jdGlvbigpe3RyeXtjfHxudWxsPT1yLnJldHVybnx8ci5yZXR1cm4oKX1maW5hbGx5e2lmKHUpdGhyb3cgb319fX1mdW5jdGlvbiBpKCl7aT1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgdCxlPXt9LHI9T2JqZWN0LnByb3RvdHlwZSxuPXIuaGFzT3duUHJvcGVydHksbz1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sYz1hLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsdT1hLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGw9YS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHModCxlLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7cyh7fSwiIil9Y2F0Y2goQyl7cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGI/ZTpiLGE9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksYz1uZXcgSShufHxbXSk7cmV0dXJuIG8oYSwiX2ludm9rZSIse3ZhbHVlOngodCxyLGMpfSksYX1mdW5jdGlvbiBmKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaChuKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzpufX19ZS53cmFwPWQ7dmFyIGg9InN1c3BlbmRlZFN0YXJ0IixwPSJzdXNwZW5kZWRZaWVsZCIseT0iZXhlY3V0aW5nIix2PSJjb21wbGV0ZWQiLG09e307ZnVuY3Rpb24gYigpe31mdW5jdGlvbiBaKCl7fWZ1bmN0aW9uIGcoKXt9dmFyIEc9e307cyhHLGMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHc9T2JqZWN0LmdldFByb3RvdHlwZU9mLFY9dyYmdyh3KEwoW10pKSk7ViYmViE9PXImJm4uY2FsbChWLGMpJiYoRz1WKTt2YXIgWD1nLnByb3RvdHlwZT1iLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEcpO2Z1bmN0aW9uIFcodCl7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKChmdW5jdGlvbihlKXtzKHQsZSwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfSkpfSkpfWZ1bmN0aW9uIGsodCxlKXtmdW5jdGlvbiByKGksbyxhLGMpe3ZhciB1PWYodFtpXSx0LG8pO2lmKCJ0aHJvdyIhPT11LnR5cGUpe3ZhciBsPXUuYXJnLHM9bC52YWx1ZTtyZXR1cm4gcyYmIm9iamVjdCI9PXR5cGVvZiBzJiZuLmNhbGwocywiX19hd2FpdCIpP2UucmVzb2x2ZShzLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKHQpe3IoIm5leHQiLHQsYSxjKX0pLChmdW5jdGlvbih0KXtyKCJ0aHJvdyIsdCxhLGMpfSkpOmUucmVzb2x2ZShzKS50aGVuKChmdW5jdGlvbih0KXtsLnZhbHVlPXQsYShsKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gcigidGhyb3ciLHQsYSxjKX0pKX1jKHUuYXJnKX12YXIgaTtvKHRoaXMsIl9pbnZva2UiLHt2YWx1ZTpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIG8oKXtyZXR1cm4gbmV3IGUoKGZ1bmN0aW9uKGUsaSl7cih0LG4sZSxpKX0pKX1yZXR1cm4gaT1pP2kudGhlbihvLG8pOm8oKX19KX1mdW5jdGlvbiB4KGUscixuKXt2YXIgaT1oO3JldHVybiBmdW5jdGlvbihvLGEpe2lmKGk9PT15KXRocm93IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoaT09PXYpe2lmKCJ0aHJvdyI9PT1vKXRocm93IGE7cmV0dXJue3ZhbHVlOnQsZG9uZTohMH19Zm9yKG4ubWV0aG9kPW8sbi5hcmc9YTs7KXt2YXIgYz1uLmRlbGVnYXRlO2lmKGMpe3ZhciB1PVIoYyxuKTtpZih1KXtpZih1PT09bSljb250aW51ZTtyZXR1cm4gdX19aWYoIm5leHQiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZigidGhyb3ciPT09bi5tZXRob2Qpe2lmKGk9PT1oKXRocm93IGk9dixuLmFyZztuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5hYnJ1cHQoInJldHVybiIsbi5hcmcpO2k9eTt2YXIgbD1mKGUscixuKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYoaT1uLmRvbmU/djpwLGwuYXJnPT09bSljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpuLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihpPXYsbi5tZXRob2Q9InRocm93IixuLmFyZz1sLmFyZyl9fX1mdW5jdGlvbiBSKGUscil7dmFyIG49ci5tZXRob2QsaT1lLml0ZXJhdG9yW25dO2lmKGk9PT10KXJldHVybiByLmRlbGVnYXRlPW51bGwsInRocm93Ij09PW4mJmUuaXRlcmF0b3IucmV0dXJuJiYoci5tZXRob2Q9InJldHVybiIsci5hcmc9dCxSKGUsciksInRocm93Ij09PXIubWV0aG9kKXx8InJldHVybiIhPT1uJiYoci5tZXRob2Q9InRocm93IixyLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK24rIicgbWV0aG9kIikpLG07dmFyIG89ZihpLGUuaXRlcmF0b3Isci5hcmcpO2lmKCJ0aHJvdyI9PT1vLnR5cGUpcmV0dXJuIHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9by5hcmcsci5kZWxlZ2F0ZT1udWxsLG07dmFyIGE9by5hcmc7cmV0dXJuIGE/YS5kb25lPyhyW2UucmVzdWx0TmFtZV09YS52YWx1ZSxyLm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09ci5tZXRob2QmJihyLm1ldGhvZD0ibmV4dCIsci5hcmc9dCksci5kZWxlZ2F0ZT1udWxsLG0pOmE6KHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxyLmRlbGVnYXRlPW51bGwsbSl9ZnVuY3Rpb24gUyh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBZKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPSJub3JtYWwiLGRlbGV0ZSBlLmFyZyx0LmNvbXBsZXRpb249ZX1mdW5jdGlvbiBJKHQpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSx0LmZvckVhY2goUyx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBMKGUpe2lmKGV8fCIiPT09ZSl7dmFyIHI9ZVtjXTtpZihyKXJldHVybiByLmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgaT0tMSxvPWZ1bmN0aW9uIHIoKXtmb3IoOysraTxlLmxlbmd0aDspaWYobi5jYWxsKGUsaSkpcmV0dXJuIHIudmFsdWU9ZVtpXSxyLmRvbmU9ITEscjtyZXR1cm4gci52YWx1ZT10LHIuZG9uZT0hMCxyfTtyZXR1cm4gby5uZXh0PW99fXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIGUrIiBpcyBub3QgaXRlcmFibGUiKX1yZXR1cm4gWi5wcm90b3R5cGU9ZyxvKFgsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxvKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6Wixjb25maWd1cmFibGU6ITB9KSxaLmRpc3BsYXlOYW1lPXMoZyxsLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIWUmJihlPT09Wnx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZyk6KHQuX19wcm90b19fPWcscyh0LGwsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWCksdH0sZS5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sVyhrLnByb3RvdHlwZSkscyhrLnByb3RvdHlwZSx1LChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuQXN5bmNJdGVyYXRvcj1rLGUuYXN5bmM9ZnVuY3Rpb24odCxyLG4saSxvKXt2b2lkIDA9PT1vJiYobz1Qcm9taXNlKTt2YXIgYT1uZXcgayhkKHQscixuLGkpLG8pO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/YTphLm5leHQoKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6YS5uZXh0KCl9KSl9LFcoWCkscyhYLGwsIkdlbmVyYXRvciIpLHMoWCxjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHMoWCwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLGUua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodCkscj1bXTtmb3IodmFyIG4gaW4gZSlyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIHQoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHQudmFsdWU9bix0LmRvbmU9ITEsdH1yZXR1cm4gdC5kb25lPSEwLHR9fSxlLnZhbHVlcz1MLEkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXQsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChZKSwhZSlmb3IodmFyIHIgaW4gdGhpcykidCI9PT1yLmNoYXJBdCgwKSYmbi5jYWxsKHRoaXMscikmJiFpc05hTigrci5zbGljZSgxKSkmJih0aGlzW3JdPXQpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHI9dGhpcztmdW5jdGlvbiBpKG4saSl7cmV0dXJuIGMudHlwZT0idGhyb3ciLGMuYXJnPWUsci5uZXh0PW4saSYmKHIubWV0aG9kPSJuZXh0IixyLmFyZz10KSwhIWl9Zm9yKHZhciBvPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtvPj0wOy0tbyl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW29dLGM9YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBpKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgdT1uLmNhbGwoYSwiY2F0Y2hMb2MiKSxsPW4uY2FsbChhLCJmaW5hbGx5TG9jIik7aWYodSYmbCl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIGkoYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gaShhLmZpbmFsbHlMb2MpfWVsc2UgaWYodSl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIGkoYS5jYXRjaExvYywhMCl9ZWxzZXtpZighbCl0aHJvdyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBpKGEuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBpPXRoaXMudHJ5RW50cmllc1tyXTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2JiZuLmNhbGwoaSwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgbz1pO2JyZWFrfX1vJiYoImJyZWFrIj09PXR8fCJjb250aW51ZSI9PT10KSYmby50cnlMb2M8PWUmJmU8PW8uZmluYWxseUxvYyYmKG89bnVsbCk7dmFyIGE9bz9vLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT10LGEuYXJnPWUsbz8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1vLmZpbmFsbHlMb2MsbSk6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24odCxlKXtpZigidGhyb3ciPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVybiJicmVhayI9PT10LnR5cGV8fCJjb250aW51ZSI9PT10LnR5cGU/dGhpcy5uZXh0PXQuYXJnOiJyZXR1cm4iPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PXQudHlwZSYmZSYmKHRoaXMubmV4dD1lKSxtfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLFkociksbX19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgaT1uLmFyZztZKHIpfXJldHVybiBpfX10aHJvdyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpMKGUpLHJlc3VsdE5hbWU6cixuZXh0TG9jOm59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dCksbX19LGV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdChlKX0oZSl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0oZSl8fGEoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYShlLHIpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gdChlLHIpO3ZhciBuPXt9LnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZlLmNvbnN0cnVjdG9yJiYobj1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20oZSk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT90KGUscik6dm9pZCAwfX12YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnt9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuTWF0aD09TWF0aCYmdH0sbD11KCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHUoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHUoIm9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8dSgib2JqZWN0Ij09dHlwZW9mIGMmJmMpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHM9e30sZD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2goZSl7cmV0dXJuITB9fSxmPSFkKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksaD17fSxwPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLHk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix2PXkmJiFwLmNhbGwoezE6Mn0sMSk7aC5mPXY/ZnVuY3Rpb24odCl7dmFyIGU9eSh0aGlzLHQpO3JldHVybiEhZSYmZS5lbnVtZXJhYmxlfTpwO3ZhciBtPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fSxiPXt9LnRvU3RyaW5nLFo9ZnVuY3Rpb24odCl7cmV0dXJuIGIuY2FsbCh0KS5zbGljZSg4LC0xKX0sZz1aLEc9IiIuc3BsaXQsdz1kKChmdW5jdGlvbigpe3JldHVybiFPYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09Zyh0KT9HLmNhbGwodCwiIik6T2JqZWN0KHQpfTpPYmplY3QsVj1mdW5jdGlvbih0KXtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIit0KTtyZXR1cm4gdH0sWD13LFc9VixrPWZ1bmN0aW9uKHQpe3JldHVybiBYKFcodCkpfSx4PWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdD9udWxsIT09dDoiZnVuY3Rpb24iPT10eXBlb2YgdH0sUj14LFM9ZnVuY3Rpb24odCxlKXtpZighUih0KSlyZXR1cm4gdDt2YXIgcixuO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhUihuPXIuY2FsbCh0KSkpcmV0dXJuIG47aWYoImZ1bmN0aW9uIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIVIobj1yLmNhbGwodCkpKXJldHVybiBuO2lmKCFlJiYiZnVuY3Rpb24iPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIVIobj1yLmNhbGwodCkpKXJldHVybiBuO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9LFk9VixJPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoWSh0KSl9LEw9SSxDPXt9Lmhhc093blByb3BlcnR5LE49ZnVuY3Rpb24odCxlKXtyZXR1cm4gQy5jYWxsKEwodCksZSl9LFQ9eCx6PWwuZG9jdW1lbnQsaj1UKHopJiZUKHouY3JlYXRlRWxlbWVudCksQj1mdW5jdGlvbih0KXtyZXR1cm4gaj96LmNyZWF0ZUVsZW1lbnQodCk6e319LEo9QixIPSFmJiYhZCgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KEooImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKSxBPWYsVT1oLE09bSxGPWssRT1TLFA9TixfPUgsSz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3MuZj1BP0s6ZnVuY3Rpb24odCxlKXtpZih0PUYodCksZT1FKGUsITApLF8pdHJ5e3JldHVybiBLKHQsZSl9Y2F0Y2gocil7fWlmKFAodCxlKSlyZXR1cm4gTSghVS5mLmNhbGwodCxlKSx0W2VdKX07dmFyIE89e30sRD14LFE9ZnVuY3Rpb24odCl7aWYoIUQodCkpdGhyb3cgVHlwZUVycm9yKFN0cmluZyh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gdH0scT1mLCQ9SCx0dD1RLGV0PVMscnQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O08uZj1xP3J0OmZ1bmN0aW9uKHQsZSxyKXtpZih0dCh0KSxlPWV0KGUsITApLHR0KHIpLCQpdHJ5e3JldHVybiBydCh0LGUscil9Y2F0Y2gobil7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKHRbZV09ci52YWx1ZSksdH07dmFyIG50PU8saXQ9bSxvdD1mP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbnQuZih0LGUsaXQoMSxyKSl9OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9LGF0PXtleHBvcnRzOnt9fSxjdD1sLHV0PW90LGx0PWZ1bmN0aW9uKHQsZSl7dHJ5e3V0KGN0LHQsZSl9Y2F0Y2gocil7Y3RbdF09ZX1yZXR1cm4gZX0sc3Q9bHQsZHQ9Il9fY29yZS1qc19zaGFyZWRfXyIsZnQ9bFtkdF18fHN0KGR0LHt9KSxodD1mdCxwdD1GdW5jdGlvbi50b1N0cmluZzsiZnVuY3Rpb24iIT10eXBlb2YgaHQuaW5zcGVjdFNvdXJjZSYmKGh0Lmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHB0LmNhbGwodCl9KTt2YXIgeXQ9aHQuaW5zcGVjdFNvdXJjZSx2dD15dCxtdD1sLldlYWtNYXAsYnQ9ImZ1bmN0aW9uIj09dHlwZW9mIG10JiYvbmF0aXZlIGNvZGUvLnRlc3QodnQobXQpKSxadD17ZXhwb3J0czp7fX0sZ3Q9ZnQ7KFp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZ3RbdF18fChndFt0XT12b2lkIDAhPT1lP2U6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4xMi4xIixtb2RlOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KTt2YXIgR3Qsd3QsVnQsWHQ9WnQuZXhwb3J0cyxXdD0wLGt0PU1hdGgucmFuZG9tKCkseHQ9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiK1N0cmluZyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrKCsrV3Qra3QpLnRvU3RyaW5nKDM2KX0sUnQ9eHQsU3Q9WHQoImtleXMiKSxZdD1mdW5jdGlvbih0KXtyZXR1cm4gU3RbdF18fChTdFt0XT1SdCh0KSl9LEl0PXt9LEx0PWJ0LEN0PXgsTnQ9b3QsVHQ9Tix6dD1mdCxqdD1ZdCxCdD1JdCxKdD0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLEh0PWwuV2Vha01hcDtpZihMdHx8enQuc3RhdGUpe3ZhciBBdD16dC5zdGF0ZXx8KHp0LnN0YXRlPW5ldyBIdCksVXQ9QXQuZ2V0LE10PUF0LmhhcyxGdD1BdC5zZXQ7R3Q9ZnVuY3Rpb24odCxlKXtpZihNdC5jYWxsKEF0LHQpKXRocm93IG5ldyBUeXBlRXJyb3IoSnQpO3JldHVybiBlLmZhY2FkZT10LEZ0LmNhbGwoQXQsdCxlKSxlfSx3dD1mdW5jdGlvbih0KXtyZXR1cm4gVXQuY2FsbChBdCx0KXx8e319LFZ0PWZ1bmN0aW9uKHQpe3JldHVybiBNdC5jYWxsKEF0LHQpfX1lbHNle3ZhciBFdD1qdCgic3RhdGUiKTtCdFtFdF09ITAsR3Q9ZnVuY3Rpb24odCxlKXtpZihUdCh0LEV0KSl0aHJvdyBuZXcgVHlwZUVycm9yKEp0KTtyZXR1cm4gZS5mYWNhZGU9dCxOdCh0LEV0LGUpLGV9LHd0PWZ1bmN0aW9uKHQpe3JldHVybiBUdCh0LEV0KT90W0V0XTp7fX0sVnQ9ZnVuY3Rpb24odCl7cmV0dXJuIFR0KHQsRXQpfX12YXIgUHQ9e3NldDpHdCxnZXQ6d3QsaGFzOlZ0LGVuZm9yY2U6ZnVuY3Rpb24odCl7cmV0dXJuIFZ0KHQpP3d0KHQpOkd0KHQse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByO2lmKCFDdChlKXx8KHI9d3QoZSkpLnR5cGUhPT10KXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3QrIiByZXF1aXJlZCIpO3JldHVybiByfX19LF90PWwsS3Q9b3QsT3Q9TixEdD1sdCxRdD15dCxxdD1QdC5nZXQsJHQ9UHQuZW5mb3JjZSx0ZT1TdHJpbmcoU3RyaW5nKS5zcGxpdCgiU3RyaW5nIik7KGF0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksbz0hIW4mJiEhbi51bnNhZmUsYT0hIW4mJiEhbi5lbnVtZXJhYmxlLGM9ISFuJiYhIW4ubm9UYXJnZXRHZXQ7ImZ1bmN0aW9uIj09dHlwZW9mIHImJigic3RyaW5nIiE9dHlwZW9mIGV8fE90KHIsIm5hbWUiKXx8S3QociwibmFtZSIsZSksKGk9JHQocikpLnNvdXJjZXx8KGkuc291cmNlPXRlLmpvaW4oInN0cmluZyI9PXR5cGVvZiBlP2U6IiIpKSksdCE9PV90PyhvPyFjJiZ0W2VdJiYoYT0hMCk6ZGVsZXRlIHRbZV0sYT90W2VdPXI6S3QodCxlLHIpKTphP3RbZV09cjpEdChlLHIpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnF0KHRoaXMpLnNvdXJjZXx8UXQodGhpcyl9KSk7dmFyIGVlPWF0LmV4cG9ydHMscmU9bCxuZT1yZSxpZT1sLG9lPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dm9pZCAwfSxhZT1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/b2UobmVbdF0pfHxvZShpZVt0XSk6bmVbdF0mJm5lW3RdW2VdfHxpZVt0XSYmaWVbdF1bZV19LGNlPXt9LHVlPU1hdGguY2VpbCxsZT1NYXRoLmZsb29yLHNlPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/bGU6dWUpKHQpfSxkZT1zZSxmZT1NYXRoLm1pbixoZT1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2ZlKGRlKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LHBlPXNlLHllPU1hdGgubWF4LHZlPU1hdGgubWluLG1lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9cGUodCk7cmV0dXJuIHI8MD95ZShyK2UsMCk6dmUocixlKX0sYmU9ayxaZT1oZSxnZT1tZSxHZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3ZhciBpLG89YmUoZSksYT1aZShvLmxlbmd0aCksYz1nZShuLGEpO2lmKHQmJnIhPXIpe2Zvcig7YT5jOylpZigoaT1vW2MrK10pIT1pKXJldHVybiEwfWVsc2UgZm9yKDthPmM7YysrKWlmKCh0fHxjIGluIG8pJiZvW2NdPT09cilyZXR1cm4gdHx8Y3x8MDtyZXR1cm4hdCYmLTF9fSx3ZT17aW5jbHVkZXM6R2UoITApLGluZGV4T2Y6R2UoITEpfSxWZT1OLFhlPWssV2U9d2UuaW5kZXhPZixrZT1JdCx4ZT1mdW5jdGlvbih0LGUpe3ZhciByLG49WGUodCksaT0wLG89W107Zm9yKHIgaW4gbikhVmUoa2UscikmJlZlKG4scikmJm8ucHVzaChyKTtmb3IoO2UubGVuZ3RoPmk7KVZlKG4scj1lW2krK10pJiYofldlKG8scil8fG8ucHVzaChyKSk7cmV0dXJuIG99LFJlPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0sU2U9eGUsWWU9UmUuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtjZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gU2UodCxZZSl9O3ZhciBJZT17fTtJZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIExlLENlLE5lPWNlLFRlPUllLHplPVEsamU9YWUoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPU5lLmYoemUodCkpLHI9VGUuZjtyZXR1cm4gcj9lLmNvbmNhdChyKHQpKTplfSxCZT1OLEplPWplLEhlPXMsQWU9TyxVZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1KZShlKSxuPUFlLmYsaT1IZS5mLG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGE9cltvXTtCZSh0LGEpfHxuKHQsYSxpKGUsYSkpfX0sTWU9ZCxGZT0vI3xcLnByb3RvdHlwZVwuLyxFZT1mdW5jdGlvbih0LGUpe3ZhciByPV9lW1BlKHQpXTtyZXR1cm4gcj09T2V8fHIhPUtlJiYoImZ1bmN0aW9uIj09dHlwZW9mIGU/TWUoZSk6ISFlKX0sUGU9RWUubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShGZSwiLiIpLnRvTG93ZXJDYXNlKCl9LF9lPUVlLmRhdGE9e30sS2U9RWUuTkFUSVZFPSJOIixPZT1FZS5QT0xZRklMTD0iUCIsRGU9RWUsUWU9bCxxZT1zLmYsJGU9b3QsdHI9ZWUsZXI9bHQscnI9VWUsbnI9RGUsaXI9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksbyxhLGM9dC50YXJnZXQsdT10Lmdsb2JhbCxsPXQuc3RhdDtpZihyPXU/UWU6bD9RZVtjXXx8ZXIoYyx7fSk6KFFlW2NdfHx7fSkucHJvdG90eXBlKWZvcihuIGluIGUpe2lmKG89ZVtuXSxpPXQubm9UYXJnZXRHZXQ/KGE9cWUocixuKSkmJmEudmFsdWU6cltuXSwhbnIodT9uOmMrKGw/Ii4iOiIjIikrbix0LmZvcmNlZCkmJnZvaWQgMCE9PWkpe2lmKHR5cGVvZiBvPT10eXBlb2YgaSljb250aW51ZTtycihvLGkpfSh0LnNoYW18fGkmJmkuc2hhbSkmJiRlKG8sInNoYW0iLCEwKSx0cihyLG4sbyx0KX19LG9yPWFlKCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiKXx8IiIsYXI9b3IsY3I9bC5wcm9jZXNzLHVyPWNyJiZjci52ZXJzaW9ucyxscj11ciYmdXIudjg7bHI/Q2U9KExlPWxyLnNwbGl0KCIuIikpWzBdPDQ/MTpMZVswXStMZVsxXTphciYmKCEoTGU9YXIubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxMZVsxXT49NzQpJiYoTGU9YXIubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihDZT1MZVsxXSk7dmFyIHNyLGRyPUNlJiYrQ2UsZnI9ZHIsaHI9ZCxwcj0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFocigoZnVuY3Rpb24oKXtyZXR1cm4hU3RyaW5nKFN5bWJvbCgpKXx8IVN5bWJvbC5zaGFtJiZmciYmZnI8NDF9KSkseXI9cHImJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsdnI9Wixtcj1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iQXJyYXkiPT12cih0KX0sYnI9eGUsWnI9UmUsZ3I9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBicih0LFpyKX0sR3I9Tyx3cj1RLFZyPWdyLFhyPWY/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXt3cih0KTtmb3IodmFyIHIsbj1WcihlKSxpPW4ubGVuZ3RoLG89MDtpPm87KUdyLmYodCxyPW5bbysrXSxlW3JdKTtyZXR1cm4gdH0sV3I9YWUoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiksa3I9USx4cj1YcixScj1SZSxTcj1JdCxZcj1XcixJcj1CLExyPSJwcm90b3R5cGUiLENyPSJzY3JpcHQiLE5yPVl0KCJJRV9QUk9UTyIpLFRyPWZ1bmN0aW9uKCl7fSx6cj1mdW5jdGlvbih0KXtyZXR1cm4iPCIrQ3IrIj4iK3QrIjwvIitDcisiPiJ9LGpyPWZ1bmN0aW9uKCl7dHJ5e3NyPWRvY3VtZW50LmRvbWFpbiYmbmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2goaSl7fXZhciB0LGUscjtqcj1zcj9mdW5jdGlvbih0KXt0LndyaXRlKHpyKCIiKSksdC5jbG9zZSgpO3ZhciBlPXQucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gdD1udWxsLGV9KHNyKTooZT1JcigiaWZyYW1lIikscj0iamF2YSIrQ3IrIjoiLGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsWXIuYXBwZW5kQ2hpbGQoZSksZS5zcmM9U3RyaW5nKHIpLCh0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHQud3JpdGUoenIoImRvY3VtZW50LkY9T2JqZWN0IikpLHQuY2xvc2UoKSx0LkYpO2Zvcih2YXIgbj1Sci5sZW5ndGg7bi0tOylkZWxldGUganJbTHJdW1JyW25dXTtyZXR1cm4ganIoKX07U3JbTnJdPSEwO3ZhciBCcj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8oVHJbTHJdPWtyKHQpLHI9bmV3IFRyLFRyW0xyXT1udWxsLHJbTnJdPXQpOnI9anIoKSx2b2lkIDA9PT1lP3I6eHIocixlKX0sSnI9e30sSHI9ayxBcj1jZS5mLFVyPXt9LnRvU3RyaW5nLE1yPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107SnIuZj1mdW5jdGlvbih0KXtyZXR1cm4gTXImJiJbb2JqZWN0IFdpbmRvd10iPT1Vci5jYWxsKHQpP2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gQXIodCl9Y2F0Y2goZSl7cmV0dXJuIE1yLnNsaWNlKCl9fSh0KTpBcihIcih0KSl9O3ZhciBGcj1sLEVyPU4sUHI9eHQsX3I9cHIsS3I9eXIsT3I9WHQoIndrcyIpLERyPUZyLlN5bWJvbCxRcj1Lcj9EcjpEciYmRHIud2l0aG91dFNldHRlcnx8UHIscXI9ZnVuY3Rpb24odCl7cmV0dXJuIEVyKE9yLHQpJiYoX3J8fCJzdHJpbmciPT10eXBlb2YgT3JbdF0pfHwoX3ImJkVyKERyLHQpP09yW3RdPURyW3RdOk9yW3RdPVFyKCJTeW1ib2wuIit0KSksT3JbdF19LCRyPXt9LHRuPXFyOyRyLmY9dG47dmFyIGVuPXJlLHJuPU4sbm49JHIsb249Ty5mLGFuPU8uZixjbj1OLHVuPXFyKCJ0b1N0cmluZ1RhZyIpLGxuPWZ1bmN0aW9uKHQsZSxyKXt0JiYhY24odD1yP3Q6dC5wcm90b3R5cGUsdW4pJiZhbih0LHVuLHtjb25maWd1cmFibGU6ITAsdmFsdWU6ZX0pfSxzbj1mdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gdH0sZG49c24sZm49ZnVuY3Rpb24odCxlLHIpe2lmKGRuKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5jYWxsKGUpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwoZSxyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiB0LmNhbGwoZSxyLG4pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gdC5jYWxsKGUscixuLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fSxobj14LHBuPW1yLHluPXFyKCJzcGVjaWVzIiksdm49ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gcG4odCkmJigiZnVuY3Rpb24iIT10eXBlb2Yocj10LmNvbnN0cnVjdG9yKXx8ciE9PUFycmF5JiYhcG4oci5wcm90b3R5cGUpP2huKHIpJiZudWxsPT09KHI9clt5bl0pJiYocj12b2lkIDApOnI9dm9pZCAwKSxuZXcodm9pZCAwPT09cj9BcnJheTpyKSgwPT09ZT8wOmUpfSxtbj1mbixibj13LFpuPUksZ249aGUsR249dm4sd249W10ucHVzaCxWbj1mdW5jdGlvbih0KXt2YXIgZT0xPT10LHI9Mj09dCxuPTM9PXQsaT00PT10LG89Nj09dCxhPTc9PXQsYz01PT10fHxvO3JldHVybiBmdW5jdGlvbih1LGwscyxkKXtmb3IodmFyIGYsaCxwPVpuKHUpLHk9Ym4ocCksdj1tbihsLHMsMyksbT1nbih5Lmxlbmd0aCksYj0wLFo9ZHx8R24sZz1lP1oodSxtKTpyfHxhP1oodSwwKTp2b2lkIDA7bT5iO2IrKylpZigoY3x8YiBpbiB5KSYmKGg9dihmPXlbYl0sYixwKSx0KSlpZihlKWdbYl09aDtlbHNlIGlmKGgpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGY7Y2FzZSA2OnJldHVybiBiO2Nhc2UgMjp3bi5jYWxsKGcsZil9ZWxzZSBzd2l0Y2godCl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzp3bi5jYWxsKGcsZil9cmV0dXJuIG8/LTE6bnx8aT9pOmd9fSxYbj17Zm9yRWFjaDpWbigwKSxtYXA6Vm4oMSksZmlsdGVyOlZuKDIpLHNvbWU6Vm4oMyksZXZlcnk6Vm4oNCksZmluZDpWbig1KSxmaW5kSW5kZXg6Vm4oNiksZmlsdGVyT3V0OlZuKDcpfSxXbj1pcixrbj1sLHhuPWFlLFJuPWYsU249cHIsWW49eXIsSW49ZCxMbj1OLENuPW1yLE5uPXgsVG49USx6bj1JLGpuPWssQm49UyxKbj1tLEhuPUJyLEFuPWdyLFVuPWNlLE1uPUpyLEZuPUllLEVuPXMsUG49Tyxfbj1oLEtuPW90LE9uPWVlLERuPVh0LFFuPUl0LHFuPXh0LCRuPXFyLHRpPSRyLGVpPWZ1bmN0aW9uKHQpe3ZhciBlPWVuLlN5bWJvbHx8KGVuLlN5bWJvbD17fSk7cm4oZSx0KXx8b24oZSx0LHt2YWx1ZTpubi5mKHQpfSl9LHJpPWxuLG5pPVB0LGlpPVhuLmZvckVhY2gsb2k9WXQoImhpZGRlbiIpLGFpPSJTeW1ib2wiLGNpPSJwcm90b3R5cGUiLHVpPSRuKCJ0b1ByaW1pdGl2ZSIpLGxpPW5pLnNldCxzaT1uaS5nZXR0ZXJGb3IoYWkpLGRpPU9iamVjdFtjaV0sZmk9a24uU3ltYm9sLGhpPXhuKCJKU09OIiwic3RyaW5naWZ5IikscGk9RW4uZix5aT1Qbi5mLHZpPU1uLmYsbWk9X24uZixiaT1Ebigic3ltYm9scyIpLFppPURuKCJvcC1zeW1ib2xzIiksZ2k9RG4oInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSxHaT1Ebigic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpLHdpPURuKCJ3a3MiKSxWaT1rbi5RT2JqZWN0LFhpPSFWaXx8IVZpW2NpXXx8IVZpW2NpXS5maW5kQ2hpbGQsV2k9Um4mJkluKChmdW5jdGlvbigpe3JldHVybiA3IT1Ibih5aSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiB5aSh0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KSk/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXBpKGRpLGUpO24mJmRlbGV0ZSBkaVtlXSx5aSh0LGUsciksbiYmdCE9PWRpJiZ5aShkaSxlLG4pfTp5aSxraT1mdW5jdGlvbih0LGUpe3ZhciByPWJpW3RdPUhuKGZpW2NpXSk7cmV0dXJuIGxpKHIse3R5cGU6YWksdGFnOnQsZGVzY3JpcHRpb246ZX0pLFJufHwoci5kZXNjcmlwdGlvbj1lKSxyfSx4aT1Zbj9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QodClpbnN0YW5jZW9mIGZpfSxSaT1mdW5jdGlvbih0LGUscil7dD09PWRpJiZSaShaaSxlLHIpLFRuKHQpO3ZhciBuPUJuKGUsITApO3JldHVybiBUbihyKSxMbihiaSxuKT8oci5lbnVtZXJhYmxlPyhMbih0LG9pKSYmdFtvaV1bbl0mJih0W29pXVtuXT0hMSkscj1IbihyLHtlbnVtZXJhYmxlOkpuKDAsITEpfSkpOihMbih0LG9pKXx8eWkodCxvaSxKbigxLHt9KSksdFtvaV1bbl09ITApLFdpKHQsbixyKSk6eWkodCxuLHIpfSxTaT1mdW5jdGlvbih0LGUpe1RuKHQpO3ZhciByPWpuKGUpLG49QW4ocikuY29uY2F0KENpKHIpKTtyZXR1cm4gaWkobiwoZnVuY3Rpb24oZSl7Um4mJiFZaS5jYWxsKHIsZSl8fFJpKHQsZSxyW2VdKX0pKSx0fSxZaT1mdW5jdGlvbih0KXt2YXIgZT1Cbih0LCEwKSxyPW1pLmNhbGwodGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1kaSYmTG4oYmksZSkmJiFMbihaaSxlKSkmJighKHJ8fCFMbih0aGlzLGUpfHwhTG4oYmksZSl8fExuKHRoaXMsb2kpJiZ0aGlzW29pXVtlXSl8fHIpfSxJaT1mdW5jdGlvbih0LGUpe3ZhciByPWpuKHQpLG49Qm4oZSwhMCk7aWYociE9PWRpfHwhTG4oYmksbil8fExuKFppLG4pKXt2YXIgaT1waShyLG4pO3JldHVybiFpfHwhTG4oYmksbil8fExuKHIsb2kpJiZyW29pXVtuXXx8KGkuZW51bWVyYWJsZT0hMCksaX19LExpPWZ1bmN0aW9uKHQpe3ZhciBlPXZpKGpuKHQpKSxyPVtdO3JldHVybiBpaShlLChmdW5jdGlvbih0KXtMbihiaSx0KXx8TG4oUW4sdCl8fHIucHVzaCh0KX0pKSxyfSxDaT1mdW5jdGlvbih0KXt2YXIgZT10PT09ZGkscj12aShlP1ppOmpuKHQpKSxuPVtdO3JldHVybiBpaShyLChmdW5jdGlvbih0KXshTG4oYmksdCl8fGUmJiFMbihkaSx0KXx8bi5wdXNoKGJpW3RdKX0pKSxufTsoU258fChmaT1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBmaSl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9TdHJpbmcoYXJndW1lbnRzWzBdKTp2b2lkIDAsZT1xbih0KSxyPWZ1bmN0aW9uKHQpe3RoaXM9PT1kaSYmci5jYWxsKFppLHQpLExuKHRoaXMsb2kpJiZMbih0aGlzW29pXSxlKSYmKHRoaXNbb2ldW2VdPSExKSxXaSh0aGlzLGUsSm4oMSx0KSl9O3JldHVybiBSbiYmWGkmJldpKGRpLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6cn0pLGtpKGUsdCl9LE9uKGZpW2NpXSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBzaSh0aGlzKS50YWd9KSksT24oZmksIndpdGhvdXRTZXR0ZXIiLChmdW5jdGlvbih0KXtyZXR1cm4ga2kocW4odCksdCl9KSksX24uZj1ZaSxQbi5mPVJpLEVuLmY9SWksVW4uZj1Nbi5mPUxpLEZuLmY9Q2ksdGkuZj1mdW5jdGlvbih0KXtyZXR1cm4ga2koJG4odCksdCl9LFJuJiYoeWkoZmlbY2ldLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc2kodGhpcykuZGVzY3JpcHRpb259fSksT24oZGksInByb3BlcnR5SXNFbnVtZXJhYmxlIixZaSx7dW5zYWZlOiEwfSkpKSxXbih7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOiFTbixzaGFtOiFTbn0se1N5bWJvbDpmaX0pLGlpKEFuKHdpKSwoZnVuY3Rpb24odCl7ZWkodCl9KSksV24oe3RhcmdldDphaSxzdGF0OiEwLGZvcmNlZDohU259LHtmb3I6ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKHQpO2lmKExuKGdpLGUpKXJldHVybiBnaVtlXTt2YXIgcj1maShlKTtyZXR1cm4gZ2lbZV09cixHaVtyXT1lLHJ9LGtleUZvcjpmdW5jdGlvbih0KXtpZigheGkodCkpdGhyb3cgVHlwZUVycm9yKHQrIiBpcyBub3QgYSBzeW1ib2wiKTtpZihMbihHaSx0KSlyZXR1cm4gR2lbdF19LHVzZVNldHRlcjpmdW5jdGlvbigpe1hpPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtYaT0hMX19KSxXbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFTbixzaGFtOiFSbn0se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP0huKHQpOlNpKEhuKHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpSaSxkZWZpbmVQcm9wZXJ0aWVzOlNpLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpJaX0pLFduKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IVNufSx7Z2V0T3duUHJvcGVydHlOYW1lczpMaSxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6Q2l9KSxXbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOkluKChmdW5jdGlvbigpe0ZuLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7cmV0dXJuIEZuLmYoem4odCkpfX0pLGhpKSYmV24oe3RhcmdldDoiSlNPTiIsc3RhdDohMCxmb3JjZWQ6IVNufHxJbigoZnVuY3Rpb24oKXt2YXIgdD1maSgpO3JldHVybiJbbnVsbF0iIT1oaShbdF0pfHwie30iIT1oaSh7YTp0fSl8fCJ7fSIhPWhpKE9iamVjdCh0KSl9KSl9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPVt0XSxvPTE7YXJndW1lbnRzLmxlbmd0aD5vOylpLnB1c2goYXJndW1lbnRzW28rK10pO2lmKG49ZSwoTm4oZSl8fHZvaWQgMCE9PXQpJiYheGkodCkpcmV0dXJuIENuKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoZT1uLmNhbGwodGhpcyx0LGUpKSwheGkoZSkpcmV0dXJuIGV9KSxpWzFdPWUsaGkuYXBwbHkobnVsbCxpKX19KTtmaVtjaV1bdWldfHxLbihmaVtjaV0sdWksZmlbY2ldLnZhbHVlT2YpLHJpKGZpLGFpKSxRbltvaV09ITA7dmFyIE5pPWlyLFRpPWYsemk9bCxqaT1OLEJpPXgsSmk9Ty5mLEhpPVVlLEFpPXppLlN5bWJvbDtpZihUaSYmImZ1bmN0aW9uIj09dHlwZW9mIEFpJiYoISgiZGVzY3JpcHRpb24iaW4gQWkucHJvdG90eXBlKXx8dm9pZCAwIT09QWkoKS5kZXNjcmlwdGlvbikpe3ZhciBVaT17fSxNaT1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8MXx8dm9pZCAwPT09YXJndW1lbnRzWzBdP3ZvaWQgMDpTdHJpbmcoYXJndW1lbnRzWzBdKSxlPXRoaXMgaW5zdGFuY2VvZiBNaT9uZXcgQWkodCk6dm9pZCAwPT09dD9BaSgpOkFpKHQpO3JldHVybiIiPT09dCYmKFVpW2VdPSEwKSxlfTtIaShNaSxBaSk7dmFyIEZpPU1pLnByb3RvdHlwZT1BaS5wcm90b3R5cGU7RmkuY29uc3RydWN0b3I9TWk7dmFyIEVpPUZpLnRvU3RyaW5nLFBpPSJTeW1ib2wodGVzdCkiPT1TdHJpbmcoQWkoInRlc3QiKSksX2k9L15TeW1ib2xcKCguKilcKVteKV0rJC87SmkoRmksImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PUJpKHRoaXMpP3RoaXMudmFsdWVPZigpOnRoaXMsZT1FaS5jYWxsKHQpO2lmKGppKFVpLHQpKXJldHVybiIiO3ZhciByPVBpP2Uuc2xpY2UoNywtMSk6ZS5yZXBsYWNlKF9pLCIkMSIpO3JldHVybiIiPT09cj92b2lkIDA6cn19KSxOaSh7Z2xvYmFsOiEwLGZvcmNlZDohMH0se1N5bWJvbDpNaX0pfXZhciBLaT1kLE9pPWRyLERpPXFyKCJzcGVjaWVzIiksUWk9ZnVuY3Rpb24odCl7cmV0dXJuIE9pPj01MXx8IUtpKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVtEaV09ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9LHFpPVhuLmZpbHRlcjtpcih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFRaSgiZmlsdGVyIil9LHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHFpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyICRpPUJyLHRvPU8sZW89cXIoInVuc2NvcGFibGVzIikscm89QXJyYXkucHJvdG90eXBlO251bGw9PXJvW2VvXSYmdG8uZihybyxlbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOiRpKG51bGwpfSk7dmFyIG5vPWZ1bmN0aW9uKHQpe3JvW2VvXVt0XT0hMH0saW89aXIsb289WG4uZmluZCxhbz1ubyxjbz0iZmluZCIsdW89ITA7Y28gaW5bXSYmQXJyYXkoMSlbY29dKChmdW5jdGlvbigpe3VvPSExfSkpLGlvKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6dW99LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBvbyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGFvKGNvKTt2YXIgbG8sc28sZm8saG89e30scG89IWQoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSkseW89Tix2bz1JLG1vPXBvLGJvPVl0KCJJRV9QUk9UTyIpLFpvPU9iamVjdC5wcm90b3R5cGUsZ289bW8/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0PXZvKHQpLHlvKHQsYm8pP3RbYm9dOiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P1pvOm51bGx9LEdvPWQsd289Z28sVm89b3QsWG89TixXbz1xcigiaXRlcmF0b3IiKSxrbz0hMTtbXS5rZXlzJiYoIm5leHQiaW4oZm89W10ua2V5cygpKT8oc289d28od28oZm8pKSkhPT1PYmplY3QucHJvdG90eXBlJiYobG89c28pOmtvPSEwKSwobnVsbD09bG98fEdvKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiBsb1tXb10uY2FsbCh0KSE9PXR9KSkpJiYobG89e30pLFhvKGxvLFdvKXx8Vm8obG8sV28sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIHhvPXtJdGVyYXRvclByb3RvdHlwZTpsbyxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmtvfSxSbz14by5JdGVyYXRvclByb3RvdHlwZSxTbz1CcixZbz1tLElvPWxuLExvPWhvLENvPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LE5vPXgsVG89USx6bz1mdW5jdGlvbih0KXtpZighTm8odCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3Qgc2V0ICIrU3RyaW5nKHQpKyIgYXMgYSBwcm90b3R5cGUiKTtyZXR1cm4gdH0sam89T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHQsZT0hMSxyPXt9O3RyeXsodD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkuY2FsbChyLFtdKSxlPXIgaW5zdGFuY2VvZiBBcnJheX1jYXRjaChuKXt9cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIFRvKHIpLHpvKG4pLGU/dC5jYWxsKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApLEJvPWlyLEpvPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lKyIgSXRlcmF0b3IiO3JldHVybiB0LnByb3RvdHlwZT1TbyhSbyx7bmV4dDpZbygxLHIpfSksSW8odCxuLCExKSxMb1tuXT1Dbyx0fSxIbz1nbyxBbz1qbyxVbz1sbixNbz1vdCxGbz1lZSxFbz1obyxQbz14by5JdGVyYXRvclByb3RvdHlwZSxfbz14by5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLEtvPXFyKCJpdGVyYXRvciIpLE9vPSJrZXlzIixEbz0idmFsdWVzIixRbz0iZW50cmllcyIscW89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sJG89ZnVuY3Rpb24odCxlLHIsbixpLG8sYSl7Sm8ocixlLG4pO3ZhciBjLHUsbCxzPWZ1bmN0aW9uKHQpe2lmKHQ9PT1pJiZ5KXJldHVybiB5O2lmKCFfbyYmdCBpbiBoKXJldHVybiBoW3RdO3N3aXRjaCh0KXtjYXNlIE9vOmNhc2UgRG86Y2FzZSBRbzpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMpfX0sZD1lKyIgSXRlcmF0b3IiLGY9ITEsaD10LnByb3RvdHlwZSxwPWhbS29dfHxoWyJAQGl0ZXJhdG9yIl18fGkmJmhbaV0seT0hX28mJnB8fHMoaSksdj0iQXJyYXkiPT1lJiZoLmVudHJpZXN8fHA7aWYodiYmKGM9SG8odi5jYWxsKG5ldyB0KSksUG8hPT1PYmplY3QucHJvdG90eXBlJiZjLm5leHQmJihIbyhjKSE9PVBvJiYoQW8/QW8oYyxQbyk6ImZ1bmN0aW9uIiE9dHlwZW9mIGNbS29dJiZNbyhjLEtvLHFvKSksVW8oYyxkLCEwKSkpLGk9PURvJiZwJiZwLm5hbWUhPT1EbyYmKGY9ITAseT1mdW5jdGlvbigpe3JldHVybiBwLmNhbGwodGhpcyl9KSxoW0tvXSE9PXkmJk1vKGgsS28seSksRW9bZV09eSxpKWlmKHU9e3ZhbHVlczpzKERvKSxrZXlzOm8/eTpzKE9vKSxlbnRyaWVzOnMoUW8pfSxhKWZvcihsIGluIHUpKF9vfHxmfHwhKGwgaW4gaCkpJiZGbyhoLGwsdVtsXSk7ZWxzZSBCbyh7dGFyZ2V0OmUscHJvdG86ITAsZm9yY2VkOl9vfHxmfSx1KTtyZXR1cm4gdX0sdGE9ayxlYT1ubyxyYT1obyxuYT1QdCxpYT0kbyxvYT0iQXJyYXkgSXRlcmF0b3IiLGFhPW5hLnNldCxjYT1uYS5nZXR0ZXJGb3Iob2EpLHVhPWlhKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7YWEodGhpcyx7dHlwZTpvYSx0YXJnZXQ6dGEodCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PWNhKHRoaXMpLGU9dC50YXJnZXQscj10LmtpbmQsbj10LmluZGV4Kys7cmV0dXJuIWV8fG4+PWUubGVuZ3RoPyh0LnRhcmdldD12b2lkIDAse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk6ImtleXMiPT1yP3t2YWx1ZTpuLGRvbmU6ITF9OiJ2YWx1ZXMiPT1yP3t2YWx1ZTplW25dLGRvbmU6ITF9Ont2YWx1ZTpbbixlW25dXSxkb25lOiExfX0pLCJ2YWx1ZXMiKTtyYS5Bcmd1bWVudHM9cmEuQXJyYXksZWEoImtleXMiKSxlYSgidmFsdWVzIiksZWEoImVudHJpZXMiKTt2YXIgbGE9WG4ubWFwO2lyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IVFpKCJtYXAiKX0se21hcDpmdW5jdGlvbih0KXtyZXR1cm4gbGEodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgc2E9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBEYXRhVmlldyxkYT1lZSxmYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIGUpZGEodCxuLGVbbl0scik7cmV0dXJuIHR9LGhhPWZ1bmN0aW9uKHQsZSxyKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBUeXBlRXJyb3IoIkluY29ycmVjdCAiKyhyP3IrIiAiOiIiKSsiaW52b2NhdGlvbiIpO3JldHVybiB0fSxwYT1zZSx5YT1oZSx2YT1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXJldHVybiAwO3ZhciBlPXBhKHQpLHI9eWEoZSk7aWYoZSE9PXIpdGhyb3cgUmFuZ2VFcnJvcigiV3JvbmcgbGVuZ3RoIG9yIGluZGV4Iik7cmV0dXJuIHJ9LG1hPU1hdGguYWJzLGJhPU1hdGgucG93LFphPU1hdGguZmxvb3IsZ2E9TWF0aC5sb2csR2E9TWF0aC5MTjIsd2E9SSxWYT1tZSxYYT1oZSxXYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9d2EodGhpcykscj1YYShlLmxlbmd0aCksbj1hcmd1bWVudHMubGVuZ3RoLGk9VmEobj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsciksbz1uPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxhPXZvaWQgMD09PW8/cjpWYShvLHIpO2E+aTspZVtpKytdPXQ7cmV0dXJuIGV9LGthPWwseGE9ZixSYT1zYSxTYT1vdCxZYT1mYSxJYT1kLExhPWhhLENhPXNlLE5hPWhlLFRhPXZhLHphPXtwYWNrOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT1uZXcgQXJyYXkociksYz04KnItZS0xLHU9KDE8PGMpLTEsbD11Pj4xLHM9MjM9PT1lP2JhKDIsLTI0KS1iYSgyLC03Nyk6MCxkPXQ8MHx8MD09PXQmJjEvdDwwPzE6MCxmPTA7Zm9yKCh0PW1hKHQpKSE9dHx8dD09PTEvMD8oaT10IT10PzE6MCxuPXUpOihuPVphKGdhKHQpL0dhKSx0KihvPWJhKDIsLW4pKTwxJiYobi0tLG8qPTIpLCh0Kz1uK2w+PTE/cy9vOnMqYmEoMiwxLWwpKSpvPj0yJiYobisrLG8vPTIpLG4rbD49dT8oaT0wLG49dSk6bitsPj0xPyhpPSh0Km8tMSkqYmEoMixlKSxuKz1sKTooaT10KmJhKDIsbC0xKSpiYSgyLGUpLG49MCkpO2U+PTg7YVtmKytdPTI1NSZpLGkvPTI1NixlLT04KTtmb3Iobj1uPDxlfGksYys9ZTtjPjA7YVtmKytdPTI1NSZuLG4vPTI1NixjLT04KTtyZXR1cm4gYVstLWZdfD0xMjgqZCxhfSx1bnBhY2s6ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9OCpuLWUtMSxvPSgxPDxpKS0xLGE9bz4+MSxjPWktNyx1PW4tMSxsPXRbdS0tXSxzPTEyNyZsO2ZvcihsPj49NztjPjA7cz0yNTYqcyt0W3VdLHUtLSxjLT04KTtmb3Iocj1zJigxPDwtYyktMSxzPj49LWMsYys9ZTtjPjA7cj0yNTYqcit0W3VdLHUtLSxjLT04KTtpZigwPT09cylzPTEtYTtlbHNle2lmKHM9PT1vKXJldHVybiByP05hTjpsPy0xLzA6MS8wO3IrPWJhKDIsZSkscy09YX1yZXR1cm4obD8tMToxKSpyKmJhKDIscy1lKX19LGphPWdvLEJhPWpvLEphPWNlLmYsSGE9Ty5mLEFhPVdhLFVhPWxuLE1hPVB0LmdldCxGYT1QdC5zZXQsRWE9IkFycmF5QnVmZmVyIixQYT0iRGF0YVZpZXciLF9hPSJwcm90b3R5cGUiLEthPSJXcm9uZyBpbmRleCIsT2E9a2FbRWFdLERhPU9hLFFhPWthW1BhXSxxYT1RYSYmUWFbX2FdLCRhPU9iamVjdC5wcm90b3R5cGUsdGM9a2EuUmFuZ2VFcnJvcixlYz16YS5wYWNrLHJjPXphLnVucGFjayxuYz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnRdfSxpYz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTVdfSxvYz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTUsdD4+MTYmMjU1LHQ+PjI0JjI1NV19LGFjPWZ1bmN0aW9uKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19LGNjPWZ1bmN0aW9uKHQpe3JldHVybiBlYyh0LDIzLDQpfSx1Yz1mdW5jdGlvbih0KXtyZXR1cm4gZWModCw1Miw4KX0sbGM9ZnVuY3Rpb24odCxlKXtIYSh0W19hXSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWEodGhpcylbZV19fSl9LHNjPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVRhKHIpLG89TWEodCk7aWYoaStlPm8uYnl0ZUxlbmd0aCl0aHJvdyB0YyhLYSk7dmFyIGE9TWEoby5idWZmZXIpLmJ5dGVzLGM9aStvLmJ5dGVPZmZzZXQsdT1hLnNsaWNlKGMsYytlKTtyZXR1cm4gbj91OnUucmV2ZXJzZSgpfSxkYz1mdW5jdGlvbih0LGUscixuLGksbyl7dmFyIGE9VGEociksYz1NYSh0KTtpZihhK2U+Yy5ieXRlTGVuZ3RoKXRocm93IHRjKEthKTtmb3IodmFyIHU9TWEoYy5idWZmZXIpLmJ5dGVzLGw9YStjLmJ5dGVPZmZzZXQscz1uKCtpKSxkPTA7ZDxlO2QrKyl1W2wrZF09c1tvP2Q6ZS1kLTFdfTtpZihSYSl7aWYoIUlhKChmdW5jdGlvbigpe09hKDEpfSkpfHwhSWEoKGZ1bmN0aW9uKCl7bmV3IE9hKC0xKX0pKXx8SWEoKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPYSxuZXcgT2EoMS41KSxuZXcgT2EoTmFOKSxPYS5uYW1lIT1FYX0pKSl7Zm9yKHZhciBmYyxoYz0oRGE9ZnVuY3Rpb24odCl7cmV0dXJuIExhKHRoaXMsRGEpLG5ldyBPYShUYSh0KSl9KVtfYV09T2FbX2FdLHBjPUphKE9hKSx5Yz0wO3BjLmxlbmd0aD55YzspKGZjPXBjW3ljKytdKWluIERhfHxTYShEYSxmYyxPYVtmY10pO2hjLmNvbnN0cnVjdG9yPURhfUJhJiZqYShxYSkhPT0kYSYmQmEocWEsJGEpO3ZhciB2Yz1uZXcgUWEobmV3IERhKDIpKSxtYz1xYS5zZXRJbnQ4O3ZjLnNldEludDgoMCwyMTQ3NDgzNjQ4KSx2Yy5zZXRJbnQ4KDEsMjE0NzQ4MzY0OSksIXZjLmdldEludDgoMCkmJnZjLmdldEludDgoMSl8fFlhKHFhLHtzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7bWMuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXttYy5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfX0se3Vuc2FmZTohMH0pfWVsc2UgRGE9ZnVuY3Rpb24odCl7TGEodGhpcyxEYSxFYSk7dmFyIGU9VGEodCk7RmEodGhpcyx7Ynl0ZXM6QWEuY2FsbChuZXcgQXJyYXkoZSksMCksYnl0ZUxlbmd0aDplfSkseGF8fCh0aGlzLmJ5dGVMZW5ndGg9ZSl9LFFhPWZ1bmN0aW9uKHQsZSxyKXtMYSh0aGlzLFFhLFBhKSxMYSh0LERhLFBhKTt2YXIgbj1NYSh0KS5ieXRlTGVuZ3RoLGk9Q2EoZSk7aWYoaTwwfHxpPm4pdGhyb3cgdGMoIldyb25nIG9mZnNldCIpO2lmKGkrKHI9dm9pZCAwPT09cj9uLWk6TmEocikpPm4pdGhyb3cgdGMoIldyb25nIGxlbmd0aCIpO0ZhKHRoaXMse2J1ZmZlcjp0LGJ5dGVMZW5ndGg6cixieXRlT2Zmc2V0Oml9KSx4YXx8KHRoaXMuYnVmZmVyPXQsdGhpcy5ieXRlTGVuZ3RoPXIsdGhpcy5ieXRlT2Zmc2V0PWkpfSx4YSYmKGxjKERhLCJieXRlTGVuZ3RoIiksbGMoUWEsImJ1ZmZlciIpLGxjKFFhLCJieXRlTGVuZ3RoIiksbGMoUWEsImJ5dGVPZmZzZXQiKSksWWEoUWFbX2FdLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBzYyh0aGlzLDEsdClbMF08PDI0Pj4yNH0sZ2V0VWludDg6ZnVuY3Rpb24odCl7cmV0dXJuIHNjKHRoaXMsMSx0KVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9c2ModGhpcywyLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO3JldHVybihlWzFdPDw4fGVbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1zYyh0aGlzLDIsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuIGVbMV08PDh8ZVswXX0sZ2V0SW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIGFjKHNjKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gYWMoc2ModGhpcyw0LHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKT4+PjB9LGdldEZsb2F0MzI6ZnVuY3Rpb24odCl7cmV0dXJuIHJjKHNjKHRoaXMsNCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSwyMyl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24odCl7cmV0dXJuIHJjKHNjKHRoaXMsOCx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSw1Mil9LHNldEludDg6ZnVuY3Rpb24odCxlKXtkYyh0aGlzLDEsdCxuYyxlKX0sc2V0VWludDg6ZnVuY3Rpb24odCxlKXtkYyh0aGlzLDEsdCxuYyxlKX0sc2V0SW50MTY6ZnVuY3Rpb24odCxlKXtkYyh0aGlzLDIsdCxpYyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sc2V0VWludDE2OmZ1bmN0aW9uKHQsZSl7ZGModGhpcywyLHQsaWMsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEludDMyOmZ1bmN0aW9uKHQsZSl7ZGModGhpcyw0LHQsb2MsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldFVpbnQzMjpmdW5jdGlvbih0LGUpe2RjKHRoaXMsNCx0LG9jLGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKHQsZSl7ZGModGhpcyw0LHQsY2MsZSxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24odCxlKXtkYyh0aGlzLDgsdCx1YyxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX19KTtVYShEYSxFYSksVWEoUWEsUGEpO3ZhciBiYz17QXJyYXlCdWZmZXI6RGEsRGF0YVZpZXc6UWF9LFpjPWFlLGdjPU8sR2M9Zix3Yz1xcigic3BlY2llcyIpLFZjPWZ1bmN0aW9uKHQpe3ZhciBlPVpjKHQpLHI9Z2MuZjtHYyYmZSYmIWVbd2NdJiZyKGUsd2Mse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX0sWGM9VmMsV2M9IkFycmF5QnVmZmVyIixrYz1iY1tXY107aXIoe2dsb2JhbDohMCxmb3JjZWQ6bFtXY10hPT1rY30se0FycmF5QnVmZmVyOmtjfSksWGMoV2MpO3ZhciB4Yz17fTt4Y1txcigidG9TdHJpbmdUYWciKV09InoiO3ZhciBSYz0iW29iamVjdCB6XSI9PT1TdHJpbmcoeGMpLFNjPVJjLFljPVosSWM9cXIoInRvU3RyaW5nVGFnIiksTGM9IkFyZ3VtZW50cyI9PVljKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksQ2M9U2M/WWM6ZnVuY3Rpb24odCl7dmFyIGUscixuO3JldHVybiB2b2lkIDA9PT10PyJVbmRlZmluZWQiOm51bGw9PT10PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24odCxlKXt0cnl7cmV0dXJuIHRbZV19Y2F0Y2gocil7fX0oZT1PYmplY3QodCksSWMpKT9yOkxjP1ljKGUpOiJPYmplY3QiPT0obj1ZYyhlKSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNhbGxlZT8iQXJndW1lbnRzIjpufSxOYz1DYyxUYz1SYz97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrTmModGhpcykrIl0ifTtSY3x8ZWUoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLFRjLHt1bnNhZmU6ITB9KTt2YXIgemM9bC5Qcm9taXNlLGpjPWhvLEJjPXFyKCJpdGVyYXRvciIpLEpjPUFycmF5LnByb3RvdHlwZSxIYz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKGpjLkFycmF5PT09dHx8SmNbQmNdPT09dCl9LEFjPUNjLFVjPWhvLE1jPXFyKCJpdGVyYXRvciIpLEZjPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpcmV0dXJuIHRbTWNdfHx0WyJAQGl0ZXJhdG9yIl18fFVjW0FjKHQpXX0sRWM9USxQYz1RLF9jPUhjLEtjPWhlLE9jPWZuLERjPUZjLFFjPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmV0dXJuO2lmKHZvaWQgMCE9PWUpcmV0dXJuIEVjKGUuY2FsbCh0KSkudmFsdWV9LHFjPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9wcGVkPXQsdGhpcy5yZXN1bHQ9ZX0sJGM9cXIoIml0ZXJhdG9yIiksdHU9ITE7dHJ5e3ZhciBldT0wLHJ1PXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFldSsrfX0scmV0dXJuOmZ1bmN0aW9uKCl7dHU9ITB9fTtydVskY109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbShydSwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKGV2KXt9dmFyIG51LGl1LG91LGF1PWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiF0dSlyZXR1cm4hMTt2YXIgcj0hMTt0cnl7dmFyIG49e307blskY109ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fX19LHQobil9Y2F0Y2goZXYpe31yZXR1cm4gcn0sY3U9USx1dT1zbixsdT1xcigic3BlY2llcyIpLHN1PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1jdSh0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09bnx8bnVsbD09KHI9Y3UobilbbHVdKT9lOnV1KHIpfSxkdT0vKD86aXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdChvciksZnU9InByb2Nlc3MiPT1aKGwucHJvY2VzcyksaHU9bCxwdT1kLHl1PWZuLHZ1PVdyLG11PUIsYnU9ZHUsWnU9ZnUsZ3U9aHUubG9jYXRpb24sR3U9aHUuc2V0SW1tZWRpYXRlLHd1PWh1LmNsZWFySW1tZWRpYXRlLFZ1PWh1LnByb2Nlc3MsWHU9aHUuTWVzc2FnZUNoYW5uZWwsV3U9aHUuRGlzcGF0Y2gsa3U9MCx4dT17fSxSdT0ib25yZWFkeXN0YXRlY2hhbmdlIixTdT1mdW5jdGlvbih0KXtpZih4dS5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGU9eHVbdF07ZGVsZXRlIHh1W3RdLGUoKX19LFl1PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe1N1KHQpfX0sSXU9ZnVuY3Rpb24odCl7U3UodC5kYXRhKX0sTHU9ZnVuY3Rpb24odCl7aHUucG9zdE1lc3NhZ2UodCsiIixndS5wcm90b2NvbCsiLy8iK2d1Lmhvc3QpfTtHdSYmd3V8fChHdT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0xO2FyZ3VtZW50cy5sZW5ndGg+cjspZS5wdXNoKGFyZ3VtZW50c1tyKytdKTtyZXR1cm4geHVbKytrdV09ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSkuYXBwbHkodm9pZCAwLGUpfSxudShrdSksa3V9LHd1PWZ1bmN0aW9uKHQpe2RlbGV0ZSB4dVt0XX0sWnU/bnU9ZnVuY3Rpb24odCl7VnUubmV4dFRpY2soWXUodCkpfTpXdSYmV3Uubm93P251PWZ1bmN0aW9uKHQpe1d1Lm5vdyhZdSh0KSl9Olh1JiYhYnU/KG91PShpdT1uZXcgWHUpLnBvcnQyLGl1LnBvcnQxLm9ubWVzc2FnZT1JdSxudT15dShvdS5wb3N0TWVzc2FnZSxvdSwxKSk6aHUuYWRkRXZlbnRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhaHUuaW1wb3J0U2NyaXB0cyYmZ3UmJiJmaWxlOiIhPT1ndS5wcm90b2NvbCYmIXB1KEx1KT8obnU9THUsaHUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsSXUsITEpKTpudT1SdSBpbiBtdSgic2NyaXB0Iik/ZnVuY3Rpb24odCl7dnUuYXBwZW5kQ2hpbGQobXUoInNjcmlwdCIpKVtSdV09ZnVuY3Rpb24oKXt2dS5yZW1vdmVDaGlsZCh0aGlzKSxTdSh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoWXUodCksMCl9KTt2YXIgQ3UsTnUsVHUsenUsanUsQnUsSnUsSHUsQXU9e3NldDpHdSxjbGVhcjp3dX0sVXU9L3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdChvciksTXU9bCxGdT1zLmYsRXU9QXUuc2V0LFB1PWR1LF91PVV1LEt1PWZ1LE91PU11Lk11dGF0aW9uT2JzZXJ2ZXJ8fE11LldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsRHU9TXUuZG9jdW1lbnQsUXU9TXUucHJvY2VzcyxxdT1NdS5Qcm9taXNlLCR1PUZ1KE11LCJxdWV1ZU1pY3JvdGFzayIpLHRsPSR1JiYkdS52YWx1ZTt0bHx8KEN1PWZ1bmN0aW9uKCl7dmFyIHQsZTtmb3IoS3UmJih0PVF1LmRvbWFpbikmJnQuZXhpdCgpO051Oyl7ZT1OdS5mbixOdT1OdS5uZXh0O3RyeXtlKCl9Y2F0Y2goZXYpe3Rocm93IE51P3p1KCk6VHU9dm9pZCAwLGV2fX1UdT12b2lkIDAsdCYmdC5lbnRlcigpfSxQdXx8S3V8fF91fHwhT3V8fCFEdT9xdSYmcXUucmVzb2x2ZT8oKEp1PXF1LnJlc29sdmUodm9pZCAwKSkuY29uc3RydWN0b3I9cXUsSHU9SnUudGhlbix6dT1mdW5jdGlvbigpe0h1LmNhbGwoSnUsQ3UpfSk6enU9S3U/ZnVuY3Rpb24oKXtRdS5uZXh0VGljayhDdSl9OmZ1bmN0aW9uKCl7RXUuY2FsbChNdSxDdSl9OihqdT0hMCxCdT1EdS5jcmVhdGVUZXh0Tm9kZSgiIiksbmV3IE91KEN1KS5vYnNlcnZlKEJ1LHtjaGFyYWN0ZXJEYXRhOiEwfSksenU9ZnVuY3Rpb24oKXtCdS5kYXRhPWp1PSFqdX0pKTt2YXIgZWw9dGx8fGZ1bmN0aW9uKHQpe3ZhciBlPXtmbjp0LG5leHQ6dm9pZCAwfTtUdSYmKFR1Lm5leHQ9ZSksTnV8fChOdT1lLHp1KCkpLFR1PWV9LHJsPXt9LG5sPXNuLGlsPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LG4pe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PXIpdGhyb3cgVHlwZUVycm9yKCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxyPW59KSksdGhpcy5yZXNvbHZlPW5sKGUpLHRoaXMucmVqZWN0PW5sKHIpfTtybC5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaWwodCl9O3ZhciBvbCxhbCxjbCx1bCxsbD1RLHNsPXgsZGw9cmwsZmw9bCxobD0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyxwbD1pcix5bD1sLHZsPWFlLG1sPXpjLGJsPWVlLFpsPWZhLGdsPWpvLEdsPWxuLHdsPVZjLFZsPXgsWGw9c24sV2w9aGEsa2w9eXQseGw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhLGMsdSxsLHM9ciYmci50aGF0LGQ9ISghcnx8IXIuQVNfRU5UUklFUyksZj0hKCFyfHwhci5JU19JVEVSQVRPUiksaD0hKCFyfHwhci5JTlRFUlJVUFRFRCkscD1PYyhlLHMsMStkK2gpLHk9ZnVuY3Rpb24odCl7cmV0dXJuIG4mJlFjKG4pLG5ldyBxYyghMCx0KX0sdj1mdW5jdGlvbih0KXtyZXR1cm4gZD8oUGModCksaD9wKHRbMF0sdFsxXSx5KTpwKHRbMF0sdFsxXSkpOmg/cCh0LHkpOnAodCl9O2lmKGYpbj10O2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKGk9RGModCkpKXRocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSIpO2lmKF9jKGkpKXtmb3Iobz0wLGE9S2ModC5sZW5ndGgpO2E+bztvKyspaWYoKGM9dih0W29dKSkmJmMgaW5zdGFuY2VvZiBxYylyZXR1cm4gYztyZXR1cm4gbmV3IHFjKCExKX1uPWkuY2FsbCh0KX1mb3IodT1uLm5leHQ7IShsPXUuY2FsbChuKSkuZG9uZTspe3RyeXtjPXYobC52YWx1ZSl9Y2F0Y2goZXYpe3Rocm93IFFjKG4pLGV2fWlmKCJvYmplY3QiPT10eXBlb2YgYyYmYyYmYyBpbnN0YW5jZW9mIHFjKXJldHVybiBjfXJldHVybiBuZXcgcWMoITEpfSxSbD1hdSxTbD1zdSxZbD1BdS5zZXQsSWw9ZWwsTGw9ZnVuY3Rpb24odCxlKXtpZihsbCh0KSxzbChlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIHI9ZGwuZih0KTtyZXR1cm4oMCxyLnJlc29sdmUpKGUpLHIucHJvbWlzZX0sQ2w9ZnVuY3Rpb24odCxlKXt2YXIgcj1mbC5jb25zb2xlO3ImJnIuZXJyb3ImJigxPT09YXJndW1lbnRzLmxlbmd0aD9yLmVycm9yKHQpOnIuZXJyb3IodCxlKSl9LE5sPXJsLFRsPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaChldil7cmV0dXJue2Vycm9yOiEwLHZhbHVlOmV2fX19LHpsPVB0LGpsPURlLEJsPWhsLEpsPWZ1LEhsPWRyLEFsPXFyKCJzcGVjaWVzIiksVWw9IlByb21pc2UiLE1sPXpsLmdldCxGbD16bC5zZXQsRWw9emwuZ2V0dGVyRm9yKFVsKSxQbD1tbCYmbWwucHJvdG90eXBlLF9sPW1sLEtsPVBsLE9sPXlsLlR5cGVFcnJvcixEbD15bC5kb2N1bWVudCxRbD15bC5wcm9jZXNzLHFsPU5sLmYsJGw9cWwsdHM9ISEoRGwmJkRsLmNyZWF0ZUV2ZW50JiZ5bC5kaXNwYXRjaEV2ZW50KSxlcz0iZnVuY3Rpb24iPT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50LHJzPSJ1bmhhbmRsZWRyZWplY3Rpb24iLG5zPSExLGlzPWpsKFVsLChmdW5jdGlvbigpe3ZhciB0PWtsKF9sKSE9PVN0cmluZyhfbCk7aWYoIXQmJjY2PT09SGwpcmV0dXJuITA7aWYoSGw+PTUxJiYvbmF0aXZlIGNvZGUvLnRlc3QoX2wpKXJldHVybiExO3ZhciBlPW5ldyBfbCgoZnVuY3Rpb24odCl7dCgxKX0pKSxyPWZ1bmN0aW9uKHQpe3QoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbQWxdPXIsIShucz1lLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiByKXx8IXQmJkJsJiYhZXN9KSksb3M9aXN8fCFSbCgoZnVuY3Rpb24odCl7X2wuYWxsKHQpLmNhdGNoKChmdW5jdGlvbigpe30pKX0pKSxhcz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFWbCh0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mKGU9dC50aGVuKSkmJmV9LGNzPWZ1bmN0aW9uKHQsZSl7aWYoIXQubm90aWZpZWQpe3Qubm90aWZpZWQ9ITA7dmFyIHI9dC5yZWFjdGlvbnM7SWwoKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQudmFsdWUsaT0xPT10LnN0YXRlLG89MDtyLmxlbmd0aD5vOyl7dmFyIGEsYyx1LGw9cltvKytdLHM9aT9sLm9rOmwuZmFpbCxkPWwucmVzb2x2ZSxmPWwucmVqZWN0LGg9bC5kb21haW47dHJ5e3M/KGl8fCgyPT09dC5yZWplY3Rpb24mJmRzKHQpLHQucmVqZWN0aW9uPTEpLCEwPT09cz9hPW46KGgmJmguZW50ZXIoKSxhPXMobiksaCYmKGguZXhpdCgpLHU9ITApKSxhPT09bC5wcm9taXNlP2YoT2woIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KGM9YXMoYSkpP2MuY2FsbChhLGQsZik6ZChhKSk6ZihuKX1jYXRjaChldil7aCYmIXUmJmguZXhpdCgpLGYoZXYpfX10LnJlYWN0aW9ucz1bXSx0Lm5vdGlmaWVkPSExLGUmJiF0LnJlamVjdGlvbiYmbHModCl9KSl9fSx1cz1mdW5jdGlvbih0LGUscil7dmFyIG4saTt0cz8oKG49RGwuY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxuLnJlYXNvbj1yLG4uaW5pdEV2ZW50KHQsITEsITApLHlsLmRpc3BhdGNoRXZlbnQobikpOm49e3Byb21pc2U6ZSxyZWFzb246cn0sIWVzJiYoaT15bFsib24iK3RdKT9pKG4pOnQ9PT1ycyYmQ2woIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIscil9LGxzPWZ1bmN0aW9uKHQpe1lsLmNhbGwoeWwsKGZ1bmN0aW9uKCl7dmFyIGUscj10LmZhY2FkZSxuPXQudmFsdWU7aWYoc3ModCkmJihlPVRsKChmdW5jdGlvbigpe0psP1FsLmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIsbixyKTp1cyhycyxyLG4pfSkpLHQucmVqZWN0aW9uPUpsfHxzcyh0KT8yOjEsZS5lcnJvcikpdGhyb3cgZS52YWx1ZX0pKX0sc3M9ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10LnJlamVjdGlvbiYmIXQucGFyZW50fSxkcz1mdW5jdGlvbih0KXtZbC5jYWxsKHlsLChmdW5jdGlvbigpe3ZhciBlPXQuZmFjYWRlO0psP1FsLmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLGUpOnVzKCJyZWplY3Rpb25oYW5kbGVkIixlLHQudmFsdWUpfSkpfSxmcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3QoZSxuLHIpfX0saHM9ZnVuY3Rpb24odCxlLHIpe3QuZG9uZXx8KHQuZG9uZT0hMCxyJiYodD1yKSx0LnZhbHVlPWUsdC5zdGF0ZT0yLGNzKHQsITApKX0scHM9ZnVuY3Rpb24odCxlLHIpe2lmKCF0LmRvbmUpe3QuZG9uZT0hMCxyJiYodD1yKTt0cnl7aWYodC5mYWNhZGU9PT1lKXRocm93IE9sKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBuPWFzKGUpO24/SWwoKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXtuLmNhbGwoZSxmcyhwcyxyLHQpLGZzKGhzLHIsdCkpfWNhdGNoKGV2KXtocyhyLGV2LHQpfX0pKToodC52YWx1ZT1lLHQuc3RhdGU9MSxjcyh0LCExKSl9Y2F0Y2goZXYpe2hzKHtkb25lOiExfSxldix0KX19fTtpZihpcyYmKEtsPShfbD1mdW5jdGlvbih0KXtXbCh0aGlzLF9sLFVsKSxYbCh0KSxvbC5jYWxsKHRoaXMpO3ZhciBlPU1sKHRoaXMpO3RyeXt0KGZzKHBzLGUpLGZzKGhzLGUpKX1jYXRjaChldil7aHMoZSxldil9fSkucHJvdG90eXBlLChvbD1mdW5jdGlvbih0KXtGbCh0aGlzLHt0eXBlOlVsLGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpbXSxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT1abChLbCx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciByPUVsKHRoaXMpLG49cWwoU2wodGhpcyxfbCkpO3JldHVybiBuLm9rPSJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0LG4uZmFpbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxuLmRvbWFpbj1KbD9RbC5kb21haW46dm9pZCAwLHIucGFyZW50PSEwLHIucmVhY3Rpb25zLnB1c2gobiksMCE9ci5zdGF0ZSYmY3MociwhMSksbi5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCx0KX19KSxhbD1mdW5jdGlvbigpe3ZhciB0PW5ldyBvbCxlPU1sKHQpO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1mcyhwcyxlKSx0aGlzLnJlamVjdD1mcyhocyxlKX0sTmwuZj1xbD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PV9sfHx0PT09Y2w/bmV3IGFsKHQpOiRsKHQpfSwiZnVuY3Rpb24iPT10eXBlb2YgbWwmJlBsIT09T2JqZWN0LnByb3RvdHlwZSkpe3VsPVBsLnRoZW4sbnN8fChibChQbCwidGhlbiIsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztyZXR1cm4gbmV3IF9sKChmdW5jdGlvbih0LGUpe3VsLmNhbGwocix0LGUpfSkpLnRoZW4odCxlKX0pLHt1bnNhZmU6ITB9KSxibChQbCwiY2F0Y2giLEtsLmNhdGNoLHt1bnNhZmU6ITB9KSk7dHJ5e2RlbGV0ZSBQbC5jb25zdHJ1Y3Rvcn1jYXRjaChldil7fWdsJiZnbChQbCxLbCl9cGwoe2dsb2JhbDohMCx3cmFwOiEwLGZvcmNlZDppc30se1Byb21pc2U6X2x9KSxHbChfbCxVbCwhMSksd2woVWwpLGNsPXZsKFVsKSxwbCh7dGFyZ2V0OlVsLHN0YXQ6ITAsZm9yY2VkOmlzfSx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXFsKHRoaXMpO3JldHVybiBlLnJlamVjdC5jYWxsKHZvaWQgMCx0KSxlLnByb21pc2V9fSkscGwoe3RhcmdldDpVbCxzdGF0OiEwLGZvcmNlZDppc30se3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIExsKHRoaXMsdCl9fSkscGwoe3RhcmdldDpVbCxzdGF0OiEwLGZvcmNlZDpvc30se2FsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9cWwoZSksbj1yLnJlc29sdmUsaT1yLnJlamVjdCxvPVRsKChmdW5jdGlvbigpe3ZhciByPVhsKGUucmVzb2x2ZSksbz1bXSxhPTAsYz0xO3hsKHQsKGZ1bmN0aW9uKHQpe3ZhciB1PWErKyxsPSExO28ucHVzaCh2b2lkIDApLGMrKyxyLmNhbGwoZSx0KS50aGVuKChmdW5jdGlvbih0KXtsfHwobD0hMCxvW3VdPXQsLS1jfHxuKG8pKX0pLGkpfSkpLC0tY3x8bihvKX0pKTtyZXR1cm4gby5lcnJvciYmaShvLnZhbHVlKSxyLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXFsKGUpLG49ci5yZWplY3QsaT1UbCgoZnVuY3Rpb24oKXt2YXIgaT1YbChlLnJlc29sdmUpO3hsKHQsKGZ1bmN0aW9uKHQpe2kuY2FsbChlLHQpLnRoZW4oci5yZXNvbHZlLG4pfSkpfSkpO3JldHVybiBpLmVycm9yJiZuKGkudmFsdWUpLHIucHJvbWlzZX19KTt2YXIgeXM9c2UsdnM9Vixtcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbixpLG89U3RyaW5nKHZzKGUpKSxhPXlzKHIpLGM9by5sZW5ndGg7cmV0dXJuIGE8MHx8YT49Yz90PyIiOnZvaWQgMDoobj1vLmNoYXJDb2RlQXQoYSkpPDU1Mjk2fHxuPjU2MzE5fHxhKzE9PT1jfHwoaT1vLmNoYXJDb2RlQXQoYSsxKSk8NTYzMjB8fGk+NTczNDM/dD9vLmNoYXJBdChhKTpuOnQ/by5zbGljZShhLGErMik6aS01NjMyMCsobi01NTI5Njw8MTApKzY1NTM2fX0sYnM9e2NvZGVBdDptcyghMSksY2hhckF0Om1zKCEwKX0uY2hhckF0LFpzPVB0LGdzPSRvLEdzPSJTdHJpbmcgSXRlcmF0b3IiLHdzPVpzLnNldCxWcz1acy5nZXR0ZXJGb3IoR3MpO2dzKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7d3ModGhpcyx7dHlwZTpHcyxzdHJpbmc6U3RyaW5nKHQpLGluZGV4OjB9KX0pLChmdW5jdGlvbigpe3ZhciB0LGU9VnModGhpcykscj1lLnN0cmluZyxuPWUuaW5kZXg7cmV0dXJuIG4+PXIubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9YnMocixuKSxlLmluZGV4Kz10Lmxlbmd0aCx7dmFsdWU6dCxkb25lOiExfSl9KSk7dmFyIFhzLFdzPXtleHBvcnRzOnt9fSxrcz1zYSx4cz1mLFJzPWwsU3M9eCxZcz1OLElzPUNjLExzPW90LENzPWVlLE5zPU8uZixUcz1nbyx6cz1qbyxqcz1xcixCcz14dCxKcz1Scy5JbnQ4QXJyYXksSHM9SnMmJkpzLnByb3RvdHlwZSxBcz1Scy5VaW50OENsYW1wZWRBcnJheSxVcz1BcyYmQXMucHJvdG90eXBlLE1zPUpzJiZUcyhKcyksRnM9SHMmJlRzKEhzKSxFcz1PYmplY3QucHJvdG90eXBlLFBzPUVzLmlzUHJvdG90eXBlT2YsX3M9anMoInRvU3RyaW5nVGFnIiksS3M9QnMoIlRZUEVEX0FSUkFZX1RBRyIpLE9zPWtzJiYhIXpzJiYiT3BlcmEiIT09SXMoUnMub3BlcmEpLERzPSExLFFzPXtJbnQ4QXJyYXk6MSxVaW50OEFycmF5OjEsVWludDhDbGFtcGVkQXJyYXk6MSxJbnQxNkFycmF5OjIsVWludDE2QXJyYXk6MixJbnQzMkFycmF5OjQsVWludDMyQXJyYXk6NCxGbG9hdDMyQXJyYXk6NCxGbG9hdDY0QXJyYXk6OH0scXM9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSwkcz1mdW5jdGlvbih0KXtpZighU3ModCkpcmV0dXJuITE7dmFyIGU9SXModCk7cmV0dXJuIFlzKFFzLGUpfHxZcyhxcyxlKX07Zm9yKFhzIGluIFFzKVJzW1hzXXx8KE9zPSExKTtpZigoIU9zfHwiZnVuY3Rpb24iIT10eXBlb2YgTXN8fE1zPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKE1zPWZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxPcykpZm9yKFhzIGluIFFzKVJzW1hzXSYmenMoUnNbWHNdLE1zKTtpZigoIU9zfHwhRnN8fEZzPT09RXMpJiYoRnM9TXMucHJvdG90eXBlLE9zKSlmb3IoWHMgaW4gUXMpUnNbWHNdJiZ6cyhSc1tYc10ucHJvdG90eXBlLEZzKTtpZihPcyYmVHMoVXMpIT09RnMmJnpzKFVzLEZzKSx4cyYmIVlzKEZzLF9zKSlmb3IoWHMgaW4gRHM9ITAsTnMoRnMsX3Mse2dldDpmdW5jdGlvbigpe3JldHVybiBTcyh0aGlzKT90aGlzW0tzXTp2b2lkIDB9fSksUXMpUnNbWHNdJiZMcyhSc1tYc10sS3MsWHMpO3ZhciB0ZD17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpPcyxUWVBFRF9BUlJBWV9UQUc6RHMmJktzLGFUeXBlZEFycmF5OmZ1bmN0aW9uKHQpe2lmKCRzKHQpKXJldHVybiB0O3Rocm93IFR5cGVFcnJvcigiVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Iil9LGFUeXBlZEFycmF5Q29uc3RydWN0b3I6ZnVuY3Rpb24odCl7aWYoenMpe2lmKFBzLmNhbGwoTXMsdCkpcmV0dXJuIHR9ZWxzZSBmb3IodmFyIGUgaW4gUXMpaWYoWXMoUXMsWHMpKXt2YXIgcj1Sc1tlXTtpZihyJiYodD09PXJ8fFBzLmNhbGwocix0KSkpcmV0dXJuIHR9dGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbih0LGUscil7aWYoeHMpe2lmKHIpZm9yKHZhciBuIGluIFFzKXt2YXIgaT1Sc1tuXTtpZihpJiZZcyhpLnByb3RvdHlwZSx0KSl0cnl7ZGVsZXRlIGkucHJvdG90eXBlW3RdfWNhdGNoKGV2KXt9fUZzW3RdJiYhcnx8Q3MoRnMsdCxyP2U6T3MmJkhzW3RdfHxlKX19LGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYoeHMpe2lmKHpzKXtpZihyKWZvcihuIGluIFFzKWlmKChpPVJzW25dKSYmWXMoaSx0KSl0cnl7ZGVsZXRlIGlbdF19Y2F0Y2goZXYpe31pZihNc1t0XSYmIXIpcmV0dXJuO3RyeXtyZXR1cm4gQ3MoTXMsdCxyP2U6T3MmJk1zW3RdfHxlKX1jYXRjaChldil7fX1mb3IobiBpbiBRcykhKGk9UnNbbl0pfHxpW3RdJiYhcnx8Q3MoaSx0LGUpfX0saXNWaWV3OmZ1bmN0aW9uKHQpe2lmKCFTcyh0KSlyZXR1cm4hMTt2YXIgZT1Jcyh0KTtyZXR1cm4iRGF0YVZpZXciPT09ZXx8WXMoUXMsZSl8fFlzKHFzLGUpfSxpc1R5cGVkQXJyYXk6JHMsVHlwZWRBcnJheTpNcyxUeXBlZEFycmF5UHJvdG90eXBlOkZzfSxlZD1sLHJkPWQsbmQ9YXUsaWQ9dGQuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxvZD1lZC5BcnJheUJ1ZmZlcixhZD1lZC5JbnQ4QXJyYXksY2Q9IWlkfHwhcmQoKGZ1bmN0aW9uKCl7YWQoMSl9KSl8fCFyZCgoZnVuY3Rpb24oKXtuZXcgYWQoLTEpfSkpfHwhbmQoKGZ1bmN0aW9uKHQpe25ldyBhZCxuZXcgYWQobnVsbCksbmV3IGFkKDEuNSksbmV3IGFkKHQpfSksITApfHxyZCgoZnVuY3Rpb24oKXtyZXR1cm4gMSE9PW5ldyBhZChuZXcgb2QoMiksMSx2b2lkIDApLmxlbmd0aH0pKSx1ZD1zZSxsZD1mdW5jdGlvbih0KXt2YXIgZT11ZCh0KTtpZihlPDApdGhyb3cgUmFuZ2VFcnJvcigiVGhlIGFyZ3VtZW50IGNhbid0IGJlIGxlc3MgdGhhbiAwIik7cmV0dXJuIGV9LHNkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bGQodCk7aWYociVlKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG9mZnNldCIpO3JldHVybiByfSxkZD1JLGZkPWhlLGhkPUZjLHBkPUhjLHlkPWZuLHZkPXRkLmFUeXBlZEFycmF5Q29uc3RydWN0b3IsbWQ9eCxiZD1qbyxaZD1pcixnZD1sLEdkPWYsd2Q9Y2QsVmQ9dGQsWGQ9YmMsV2Q9aGEsa2Q9bSx4ZD1vdCxSZD1oZSxTZD12YSxZZD1zZCxJZD1TLExkPU4sQ2Q9Q2MsTmQ9eCxUZD1Ccix6ZD1qbyxqZD1jZS5mLEJkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG8sYSxjPWRkKHQpLHU9YXJndW1lbnRzLmxlbmd0aCxsPXU+MT9hcmd1bWVudHNbMV06dm9pZCAwLHM9dm9pZCAwIT09bCxkPWhkKGMpO2lmKG51bGwhPWQmJiFwZChkKSlmb3IoYT0obz1kLmNhbGwoYykpLm5leHQsYz1bXTshKGk9YS5jYWxsKG8pKS5kb25lOyljLnB1c2goaS52YWx1ZSk7Zm9yKHMmJnU+MiYmKGw9eWQobCxhcmd1bWVudHNbMl0sMikpLHI9ZmQoYy5sZW5ndGgpLG49bmV3KHZkKHRoaXMpKShyKSxlPTA7cj5lO2UrKyluW2VdPXM/bChjW2VdLGUpOmNbZV07cmV0dXJuIG59LEpkPVhuLmZvckVhY2gsSGQ9VmMsQWQ9TyxVZD1zLE1kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO3JldHVybiBiZCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS5jb25zdHJ1Y3RvcikmJm4hPT1yJiZtZChpPW4ucHJvdG90eXBlKSYmaSE9PXIucHJvdG90eXBlJiZiZCh0LGkpLHR9LEZkPVB0LmdldCxFZD1QdC5zZXQsUGQ9QWQuZixfZD1VZC5mLEtkPU1hdGgucm91bmQsT2Q9Z2QuUmFuZ2VFcnJvcixEZD1YZC5BcnJheUJ1ZmZlcixRZD1YZC5EYXRhVmlldyxxZD1WZC5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLCRkPVZkLlRZUEVEX0FSUkFZX1RBRyx0Zj1WZC5UeXBlZEFycmF5LGVmPVZkLlR5cGVkQXJyYXlQcm90b3R5cGUscmY9VmQuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixuZj1WZC5pc1R5cGVkQXJyYXksb2Y9IkJZVEVTX1BFUl9FTEVNRU5UIixhZj0iV3JvbmcgbGVuZ3RoIixjZj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaT1uZXcocmYodCkpKG4pO24+cjspaVtyXT1lW3IrK107cmV0dXJuIGl9LHVmPWZ1bmN0aW9uKHQsZSl7UGQodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRmQodGhpcylbZV19fSl9LGxmPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0IGluc3RhbmNlb2YgRGR8fCJBcnJheUJ1ZmZlciI9PShlPUNkKHQpKXx8IlNoYXJlZEFycmF5QnVmZmVyIj09ZX0sc2Y9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmYodCkmJiJzeW1ib2wiIT10eXBlb2YgZSYmZSBpbiB0JiZTdHJpbmcoK2UpPT1TdHJpbmcoZSl9LGRmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKHQsZT1JZChlLCEwKSk/a2QoMix0W2VdKTpfZCh0LGUpfSxmZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIShzZih0LGU9SWQoZSwhMCkpJiZOZChyKSYmTGQociwidmFsdWUiKSl8fExkKHIsImdldCIpfHxMZChyLCJzZXQiKXx8ci5jb25maWd1cmFibGV8fExkKHIsIndyaXRhYmxlIikmJiFyLndyaXRhYmxlfHxMZChyLCJlbnVtZXJhYmxlIikmJiFyLmVudW1lcmFibGU/UGQodCxlLHIpOih0W2VdPXIudmFsdWUsdCl9O0dkPyhxZHx8KFVkLmY9ZGYsQWQuZj1mZix1ZihlZiwiYnVmZmVyIiksdWYoZWYsImJ5dGVPZmZzZXQiKSx1ZihlZiwiYnl0ZUxlbmd0aCIpLHVmKGVmLCJsZW5ndGgiKSksWmQoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohcWR9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZGYsZGVmaW5lUHJvcGVydHk6ZmZ9KSxXcy5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm1hdGNoKC9cZCskLylbMF0vOCxpPXQrKHI/IkNsYW1wZWQiOiIiKSsiQXJyYXkiLG89ImdldCIrdCxhPSJzZXQiK3QsYz1nZFtpXSx1PWMsbD11JiZ1LnByb3RvdHlwZSxzPXt9LGQ9ZnVuY3Rpb24odCxlKXtQZCh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPUZkKHQpO3JldHVybiByLnZpZXdbb10oZSpuK3IuYnl0ZU9mZnNldCwhMCl9KHRoaXMsZSl9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLGkpe3ZhciBvPUZkKHQpO3ImJihpPShpPUtkKGkpKTwwPzA6aT4yNTU/MjU1OjI1NSZpKSxvLnZpZXdbYV0oZSpuK28uYnl0ZU9mZnNldCxpLCEwKX0odGhpcyxlLHQpfSxlbnVtZXJhYmxlOiEwfSl9O3FkP3dkJiYodT1lKChmdW5jdGlvbih0LGUscixvKXtyZXR1cm4gV2QodCx1LGkpLE1kKE5kKGUpP2xmKGUpP3ZvaWQgMCE9PW8/bmV3IGMoZSxZZChyLG4pLG8pOnZvaWQgMCE9PXI/bmV3IGMoZSxZZChyLG4pKTpuZXcgYyhlKTpuZihlKT9jZih1LGUpOkJkLmNhbGwodSxlKTpuZXcgYyhTZChlKSksdCx1KX0pKSx6ZCYmemQodSx0ZiksSmQoamQoYyksKGZ1bmN0aW9uKHQpe3QgaW4gdXx8eGQodSx0LGNbdF0pfSkpLHUucHJvdG90eXBlPWwpOih1PWUoKGZ1bmN0aW9uKHQsZSxyLG8pe1dkKHQsdSxpKTt2YXIgYSxjLGwscz0wLGY9MDtpZihOZChlKSl7aWYoIWxmKGUpKXJldHVybiBuZihlKT9jZih1LGUpOkJkLmNhbGwodSxlKTthPWUsZj1ZZChyLG4pO3ZhciBoPWUuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1vKXtpZihoJW4pdGhyb3cgT2QoYWYpO2lmKChjPWgtZik8MCl0aHJvdyBPZChhZil9ZWxzZSBpZigoYz1SZChvKSpuKStmPmgpdGhyb3cgT2QoYWYpO2w9Yy9ufWVsc2UgbD1TZChlKSxhPW5ldyBEZChjPWwqbik7Zm9yKEVkKHQse2J1ZmZlcjphLGJ5dGVPZmZzZXQ6ZixieXRlTGVuZ3RoOmMsbGVuZ3RoOmwsdmlldzpuZXcgUWQoYSl9KTtzPGw7KWQodCxzKyspfSkpLHpkJiZ6ZCh1LHRmKSxsPXUucHJvdG90eXBlPVRkKGVmKSksbC5jb25zdHJ1Y3RvciE9PXUmJnhkKGwsImNvbnN0cnVjdG9yIix1KSwkZCYmeGQobCwkZCxpKSxzW2ldPXUsWmQoe2dsb2JhbDohMCxmb3JjZWQ6dSE9YyxzaGFtOiFxZH0scyksb2YgaW4gdXx8eGQodSxvZixuKSxvZiBpbiBsfHx4ZChsLG9mLG4pLEhkKGkpfSk6V3MuZXhwb3J0cz1mdW5jdGlvbigpe30sKDAsV3MuZXhwb3J0cykoIlVpbnQ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KSk7dmFyIGhmPUkscGY9bWUseWY9aGUsdmY9TWF0aC5taW4sbWY9W10uY29weVdpdGhpbnx8ZnVuY3Rpb24odCxlKXt2YXIgcj1oZih0aGlzKSxuPXlmKHIubGVuZ3RoKSxpPXBmKHQsbiksbz1wZihlLG4pLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsYz12Zigodm9pZCAwPT09YT9uOnBmKGEsbikpLW8sbi1pKSx1PTE7Zm9yKG88aSYmaTxvK2MmJih1PS0xLG8rPWMtMSxpKz1jLTEpO2MtLSA+MDspbyBpbiByP3JbaV09cltvXTpkZWxldGUgcltpXSxpKz11LG8rPXU7cmV0dXJuIHJ9LGJmPW1mLFpmPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJjb3B5V2l0aGluIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gYmYuY2FsbChaZih0aGlzKSx0LGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSkpO3ZhciBnZj1Ybi5ldmVyeSxHZj10ZC5hVHlwZWRBcnJheTsoMCx0ZC5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZXZlcnkiLChmdW5jdGlvbih0KXtyZXR1cm4gZ2YoR2YodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIHdmPVdhLFZmPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHdmLmFwcGx5KFZmKHRoaXMpLGFyZ3VtZW50cyl9KSk7dmFyIFhmPXRkLmFUeXBlZEFycmF5Q29uc3RydWN0b3IsV2Y9c3Usa2Y9WG4uZmlsdGVyLHhmPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVdmKHQsdC5jb25zdHJ1Y3Rvciksbj0wLGk9ZS5sZW5ndGgsbz1uZXcoWGYocikpKGkpO2k+bjspb1tuXT1lW24rK107cmV0dXJuIG99LFJmPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaWx0ZXIiLChmdW5jdGlvbih0KXt2YXIgZT1rZihSZih0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4geGYodGhpcyxlKX0pKTt2YXIgU2Y9WG4uZmluZCxZZj10ZC5hVHlwZWRBcnJheTsoMCx0ZC5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBTZihZZih0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgSWY9WG4uZmluZEluZGV4LExmPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kSW5kZXgiLChmdW5jdGlvbih0KXtyZXR1cm4gSWYoTGYodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIENmPVhuLmZvckVhY2gsTmY9dGQuYVR5cGVkQXJyYXk7KDAsdGQuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZvckVhY2giLChmdW5jdGlvbih0KXtDZihOZih0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKTt2YXIgVGY9d2UuaW5jbHVkZXMsemY9dGQuYVR5cGVkQXJyYXk7KDAsdGQuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImluY2x1ZGVzIiwoZnVuY3Rpb24odCl7cmV0dXJuIFRmKHpmKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciBqZj13ZS5pbmRleE9mLEJmPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJpbmRleE9mIiwoZnVuY3Rpb24odCl7cmV0dXJuIGpmKEJmKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciBKZj1sLEhmPXRkLEFmPXVhLFVmPXFyKCJpdGVyYXRvciIpLE1mPUpmLlVpbnQ4QXJyYXksRmY9QWYudmFsdWVzLEVmPUFmLmtleXMsUGY9QWYuZW50cmllcyxfZj1IZi5hVHlwZWRBcnJheSxLZj1IZi5leHBvcnRUeXBlZEFycmF5TWV0aG9kLE9mPU1mJiZNZi5wcm90b3R5cGVbVWZdLERmPSEhT2YmJigidmFsdWVzIj09T2YubmFtZXx8bnVsbD09T2YubmFtZSksUWY9ZnVuY3Rpb24oKXtyZXR1cm4gRmYuY2FsbChfZih0aGlzKSl9O0tmKCJlbnRyaWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUGYuY2FsbChfZih0aGlzKSl9KSksS2YoImtleXMiLChmdW5jdGlvbigpe3JldHVybiBFZi5jYWxsKF9mKHRoaXMpKX0pKSxLZigidmFsdWVzIixRZiwhRGYpLEtmKFVmLFFmLCFEZik7dmFyIHFmPXRkLmFUeXBlZEFycmF5LCRmPVtdLmpvaW47KDAsdGQuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImpvaW4iLChmdW5jdGlvbih0KXtyZXR1cm4gJGYuYXBwbHkocWYodGhpcyksYXJndW1lbnRzKX0pKTt2YXIgdGg9ZCxlaD1mdW5jdGlvbih0LGUpe3ZhciByPVtdW3RdO3JldHVybiEhciYmdGgoKGZ1bmN0aW9uKCl7ci5jYWxsKG51bGwsZXx8ZnVuY3Rpb24oKXt0aHJvdyAxfSwxKX0pKX0scmg9ayxuaD1zZSxpaD1oZSxvaD1laCxhaD1NYXRoLm1pbixjaD1bXS5sYXN0SW5kZXhPZix1aD0hIWNoJiYxL1sxXS5sYXN0SW5kZXhPZigxLC0wKTwwLGxoPW9oKCJsYXN0SW5kZXhPZiIpLHNoPXVofHwhbGg/ZnVuY3Rpb24odCl7aWYodWgpcmV0dXJuIGNoLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDt2YXIgZT1yaCh0aGlzKSxyPWloKGUubGVuZ3RoKSxuPXItMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYobj1haChuLG5oKGFyZ3VtZW50c1sxXSkpKSxuPDAmJihuPXIrbik7bj49MDtuLS0paWYobiBpbiBlJiZlW25dPT09dClyZXR1cm4gbnx8MDtyZXR1cm4tMX06Y2gsZGg9c2gsZmg9dGQuYVR5cGVkQXJyYXk7KDAsdGQuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImxhc3RJbmRleE9mIiwoZnVuY3Rpb24odCl7cmV0dXJuIGRoLmFwcGx5KGZoKHRoaXMpLGFyZ3VtZW50cyl9KSk7dmFyIGhoPVhuLm1hcCxwaD1zdSx5aD10ZC5hVHlwZWRBcnJheSx2aD10ZC5hVHlwZWRBcnJheUNvbnN0cnVjdG9yOygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJtYXAiLChmdW5jdGlvbih0KXtyZXR1cm4gaGgoeWgodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3KHZoKHBoKHQsdC5jb25zdHJ1Y3RvcikpKShlKX0pKX0pKTt2YXIgbWg9c24sYmg9SSxaaD13LGdoPWhlLEdoPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXttaChyKTt2YXIgbz1iaChlKSxhPVpoKG8pLGM9Z2goby5sZW5ndGgpLHU9dD9jLTE6MCxsPXQ/LTE6MTtpZihuPDIpZm9yKDs7KXtpZih1IGluIGEpe2k9YVt1XSx1Kz1sO2JyZWFrfWlmKHUrPWwsdD91PDA6Yzw9dSl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO3Q/dT49MDpjPnU7dSs9bCl1IGluIGEmJihpPXIoaSxhW3VdLHUsbykpO3JldHVybiBpfX0sd2g9e2xlZnQ6R2goITEpLHJpZ2h0OkdoKCEwKX0sVmg9d2gubGVmdCxYaD10ZC5hVHlwZWRBcnJheTsoMCx0ZC5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgicmVkdWNlIiwoZnVuY3Rpb24odCl7cmV0dXJuIFZoKFhoKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSk7dmFyIFdoPXdoLnJpZ2h0LGtoPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJyZWR1Y2VSaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBXaChraCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciB4aD10ZC5hVHlwZWRBcnJheSxSaD10ZC5leHBvcnRUeXBlZEFycmF5TWV0aG9kLFNoPU1hdGguZmxvb3I7UmgoInJldmVyc2UiLChmdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMscj14aChlKS5sZW5ndGgsbj1TaChyLzIpLGk9MDtpPG47KXQ9ZVtpXSxlW2krK109ZVstLXJdLGVbcl09dDtyZXR1cm4gZX0pKTt2YXIgWWg9aGUsSWg9c2QsTGg9SSxDaD10ZC5hVHlwZWRBcnJheTsoMCx0ZC5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic2V0IiwoZnVuY3Rpb24odCl7Q2godGhpcyk7dmFyIGU9SWgoYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMSkscj10aGlzLmxlbmd0aCxuPUxoKHQpLGk9WWgobi5sZW5ndGgpLG89MDtpZihpK2U+cil0aHJvdyBSYW5nZUVycm9yKCJXcm9uZyBsZW5ndGgiKTtmb3IoO288aTspdGhpc1tlK29dPW5bbysrXX0pLGQoKGZ1bmN0aW9uKCl7bmV3IEludDhBcnJheSgxKS5zZXQoe30pfSkpKTt2YXIgTmg9c3UsVGg9dGQuYVR5cGVkQXJyYXksemg9dGQuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixqaD1bXS5zbGljZTsoMCx0ZC5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgic2xpY2UiLChmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1qaC5jYWxsKFRoKHRoaXMpLHQsZSksbj1OaCh0aGlzLHRoaXMuY29uc3RydWN0b3IpLGk9MCxvPXIubGVuZ3RoLGE9bmV3KHpoKG4pKShvKTtvPmk7KWFbaV09cltpKytdO3JldHVybiBhfSksZCgoZnVuY3Rpb24oKXtuZXcgSW50OEFycmF5KDEpLnNsaWNlKCl9KSkpO3ZhciBCaD1Ybi5zb21lLEpoPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzb21lIiwoZnVuY3Rpb24odCl7cmV0dXJuIEJoKEpoKHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpO3ZhciBIaD10ZC5hVHlwZWRBcnJheSxBaD1bXS5zb3J0OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzb3J0IiwoZnVuY3Rpb24odCl7cmV0dXJuIEFoLmNhbGwoSGgodGhpcyksdCl9KSk7dmFyIFVoPWhlLE1oPW1lLEZoPXN1LEVoPXRkLmFUeXBlZEFycmF5OygwLHRkLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJzdWJhcnJheSIsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9RWgodGhpcyksbj1yLmxlbmd0aCxpPU1oKHQsbik7cmV0dXJuIG5ldyhGaChyLHIuY29uc3RydWN0b3IpKShyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQraSpyLkJZVEVTX1BFUl9FTEVNRU5ULFVoKCh2b2lkIDA9PT1lP246TWgoZSxuKSktaSkpfSkpO3ZhciBQaD10ZCxfaD1kLEtoPWwuSW50OEFycmF5LE9oPVBoLmFUeXBlZEFycmF5LERoPVBoLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsUWg9W10udG9Mb2NhbGVTdHJpbmcscWg9W10uc2xpY2UsJGg9ISFLaCYmX2goKGZ1bmN0aW9uKCl7UWguY2FsbChuZXcgS2goMSkpfSkpO0RoKCJ0b0xvY2FsZVN0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFoLmFwcGx5KCRoP3FoLmNhbGwoT2godGhpcykpOk9oKHRoaXMpLGFyZ3VtZW50cyl9KSxfaCgoZnVuY3Rpb24oKXtyZXR1cm5bMSwyXS50b0xvY2FsZVN0cmluZygpIT1uZXcgS2goWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KSl8fCFfaCgoZnVuY3Rpb24oKXtLaC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwyXSl9KSkpO3ZhciB0cD10ZC5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGVwPWQscnA9bC5VaW50OEFycmF5LG5wPXJwJiZycC5wcm90b3R5cGV8fHt9LGlwPVtdLnRvU3RyaW5nLG9wPVtdLmpvaW47ZXAoKGZ1bmN0aW9uKCl7aXAuY2FsbCh7fSl9KSkmJihpcD1mdW5jdGlvbigpe3JldHVybiBvcC5jYWxsKHRoaXMpfSk7dmFyIGFwPW5wLnRvU3RyaW5nIT1pcDt0cCgidG9TdHJpbmciLGlwLGFwKTt2YXIgY3A9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9LHVwPWwsbHA9Y3Asc3A9dWEsZHA9b3QsZnA9cXIsaHA9ZnAoIml0ZXJhdG9yIikscHA9ZnAoInRvU3RyaW5nVGFnIikseXA9c3AudmFsdWVzO2Zvcih2YXIgdnAgaW4gbHApe3ZhciBtcD11cFt2cF0sYnA9bXAmJm1wLnByb3RvdHlwZTtpZihicCl7aWYoYnBbaHBdIT09eXApdHJ5e2RwKGJwLGhwLHlwKX1jYXRjaChldil7YnBbaHBdPXlwfWlmKGJwW3BwXXx8ZHAoYnAscHAsdnApLGxwW3ZwXSlmb3IodmFyIFpwIGluIHNwKWlmKGJwW1pwXSE9PXNwW1pwXSl0cnl7ZHAoYnAsWnAsc3BbWnBdKX1jYXRjaChldil7YnBbWnBdPXNwW1pwXX19fXZhciBncD1PYmplY3QuZGVmaW5lUHJvcGVydHksR3A9KHQsZSxyKT0+KCgodCxlLHIpPT57ZSBpbiB0P2dwKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cn0pKHQsInN5bWJvbCIhPXR5cGVvZiBlP2UrIiI6ZSxyKSxyKTtmdW5jdGlvbiB3cCgpe31jbGFzcyBWcHtjb25zdHJ1Y3Rvcih0KXtHcCh0aGlzLCJvbk91dHB1dCIpLEdwKHRoaXMsIm9uRXJyb3IiKSxHcCh0aGlzLCJvbkRlcXVldWUiKSxHcCh0aGlzLCJvbkRlY29kZU91dHB1dCIsKHQ9Pnt2YXIgZTtudWxsPT0oZT10aGlzLm9uT3V0cHV0KXx8ZS5jYWxsKHRoaXMsdCl9KSksR3AodGhpcywib25EZWNvZGVFcnJvciIsKHQ9Pnt2YXIgZTtudWxsPT0oZT10aGlzLm9uRXJyb3IpfHxlLmNhbGwodGhpcyx0KX0pKSx0aGlzLm9uT3V0cHV0PShudWxsPT10P3ZvaWQgMDp0Lm91dHB1dCl8fHdwLHRoaXMub25FcnJvcj0obnVsbD09dD92b2lkIDA6dC5lcnJvcil8fHdwfWdldCBkZWNvZGVRdWV1ZVNpemUoKXt2YXIgdDtyZXR1cm4obnVsbD09KHQ9dGhpcy5pbm5lckRlY29kZXIpP3ZvaWQgMDp0LmRlY29kZVF1ZXVlU2l6ZSl8fDB9Z2V0IHN0YXRlKCl7dmFyIHQ7cmV0dXJuIG51bGw9PSh0PXRoaXMuaW5uZXJEZWNvZGVyKT92b2lkIDA6dC5zdGF0ZX1mbHVzaCgpe3ZhciB0O3JldHVybiBudWxsPT0odD10aGlzLmlubmVyRGVjb2Rlcik/dm9pZCAwOnQuZmx1c2goKX1jbG9zZSgpe3ZhciB0O251bGw9PSh0PXRoaXMuaW5uZXJEZWNvZGVyKXx8dC5jbG9zZSgpfX12YXIgWHA9T2JqZWN0LmRlZmluZVByb3BlcnR5LFdwPSh0LGUscik9PigoKHQsZSxyKT0+e2UgaW4gdD9YcCh0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTp0W2VdPXJ9KSh0LCJzeW1ib2wiIT10eXBlb2YgZT9lKyIiOmUscikscik7Y2xhc3Mga3AgZXh0ZW5kcyBWcHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSxXcCh0aGlzLCJpbm5lckRlY29kZXIiKSx0aGlzLmlubmVyRGVjb2Rlcj1uZXcgVmlkZW9EZWNvZGVyKHtvdXRwdXQ6dGhpcy5vbkRlY29kZU91dHB1dCxlcnJvcjp0aGlzLm9uRGVjb2RlRXJyb3J9KSx0aGlzLmlubmVyRGVjb2Rlci5vbmRlcXVldWU9KCk9Pnt2YXIgdDtudWxsPT0odD10aGlzLm9uRGVxdWV1ZSl8fHQuY2FsbCh0aGlzKX19c3RhdGljIGlzQ29uZmlnU3VwcG9ydGVkKHQpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgVmlkZW9EZWNvZGVyP1Byb21pc2UucmVzb2x2ZSh7c3VwcG9ydDohMSxjb25maWc6dC5jb25maWcscmVhc29uOiJWaWRlb0RlY29kZXIgQVBJIG5vdCBzdXBwb3J0In0pOlZpZGVvRGVjb2Rlci5pc0NvbmZpZ1N1cHBvcnRlZCh0LmNvbmZpZyl9Y29uZmlndXJlKHQpe3ZhciBlO251bGw9PShlPXRoaXMuaW5uZXJEZWNvZGVyKXx8ZS5jb25maWd1cmUodCl9ZGVjb2RlKHQpe3ZhciBlO3QmJih0IGluc3RhbmNlb2YgRW5jb2RlZFZpZGVvQ2h1bmt8fCh0PW5ldyBFbmNvZGVkVmlkZW9DaHVuayh0KSksbnVsbD09KGU9dGhpcy5pbm5lckRlY29kZXIpfHxlLmRlY29kZSh0KSl9fWNvbnN0IHhwPSJkbUZ5SUY5ZlpHVm1VSEp2Y0QxUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa3NYMTlrWldaT2IzSnRZV3hRY205d1BTaGxMSFFzY3lrOVBuUWdhVzRnWlQ5ZlgyUmxabEJ5YjNBb1pTeDBMSHRsYm5WdFpYSmhZbXhsT2lFd0xHTnZibVpwWjNWeVlXSnNaVG9oTUN4M2NtbDBZV0pzWlRvaE1DeDJZV3gxWlRwemZTazZaVnQwWFQxekxGOWZjSFZpYkdsalJtbGxiR1E5S0dVc2RDeHpLVDArS0Y5ZlpHVm1UbTl5YldGc1VISnZjQ2hsTENKemVXMWliMndpSVQxMGVYQmxiMllnZEQ5MEt5SWlPblFzY3lrc2N5azdLR1oxYm1OMGFXOXVLQ2w3SW5WelpTQnpkSEpwWTNRaU8yWjFibU4wYVc5dUlHTm9aV05yVjJGemJWTjFjSEJ2Y25Rb0tYdDBjbmw3YVdZb0ltOWlhbVZqZENJaFBYUjVjR1Z2WmlCWFpXSkJjM05sYldKc2VYeDhJbVoxYm1OMGFXOXVJaUU5ZEhsd1pXOW1JRmRsWWtGemMyVnRZbXg1TG1sdWMzUmhiblJwWVhSbEtYSmxkSFZ5YmlFeE8zSmxkSFZ5YmlCdVpYY2dWMlZpUVhOelpXMWliSGt1VFc5a2RXeGxLRzVsZHlCVmFXNTBPRUZ5Y21GNUtGc3dMRGszTERFeE5Td3hNRGtzTVN3d0xEQXNNRjBwS1dsdWMzUmhibU5sYjJZZ1YyVmlRWE56WlcxaWJIa3VUVzlrZFd4bGZXTmhkR05vS0dVcGUzSmxkSFZ5YmlFeGZYMWpiMjV6ZENCM1lYTnRVM1Z3Y0c5eWRHVmtQV05vWldOclYyRnpiVk4xY0hCdmNuUW9LU3h6YVcxa1UzVndjRzl5ZEdWa1BYZGhjMjFUZFhCd2IzSjBaV1FtSmxkbFlrRnpjMlZ0WW14NUxuWmhiR2xrWVhSbEtHNWxkeUJWYVc1ME9FRnljbUY1S0Zzd0xEazNMREV4TlN3eE1Ea3NNU3d3TERBc01Dd3hMRFVzTVN3NU5pd3dMREVzTVRJekxETXNNaXd4TERBc01UQXNNVEFzTVN3NExEQXNOalVzTUN3eU5UTXNNVFVzTWpVekxEazRMREV4WFNrcE95SmliMjlzWldGdUlqMDlkSGx3Wlc5bUlHTnliM056VDNKcFoybHVTWE52YkdGMFpXUW1KbU55YjNOelQzSnBaMmx1U1hOdmJHRjBaV1E3WTI5dWMzUWdhWE5YWVhOdFUzVndjRzl5ZEdWa1BTZ3BQVDUzWVhOdFUzVndjRzl5ZEdWa0xHbHpVMmx0WkZOMWNIQnZjblJsWkQwb0tUMCtjMmx0WkZOMWNIQnZjblJsWkR0bWRXNWpkR2x2YmlCblpYUkVaV1poZFd4MFJYaHdiM0owUm5KdmJVTnFjeWhsS1h0eVpYUjFjbTRnWlNZbVpTNWZYMlZ6VFc5a2RXeGxKaVpQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvWlN3aVpHVm1ZWFZzZENJcFAyVXVaR1ZtWVhWc2REcGxmWFpoY2lCbGRtVnVkR1Z0YVhSMFpYSXpQWHRsZUhCdmNuUnpPbnQ5ZlRzaFpuVnVZM1JwYjI0b1pTbDdkbUZ5SUhROVQySnFaV04wTG5CeWIzUnZkSGx3WlM1b1lYTlBkMjVRY205d1pYSjBlU3h6UFNKK0lqdG1kVzVqZEdsdmJpQnlLQ2w3ZldaMWJtTjBhVzl1SUc0b1pTeDBMSE1wZTNSb2FYTXVabTQ5WlN4MGFHbHpMbU52Ym5SbGVIUTlkQ3gwYUdsekxtOXVZMlU5YzN4OElURjlablZ1WTNScGIyNGdhU2hsTEhRc2NpeHBMRzhwZTJsbUtDSm1kVzVqZEdsdmJpSWhQWFI1Y0dWdlppQnlLWFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvSWxSb1pTQnNhWE4wWlc1bGNpQnRkWE4wSUdKbElHRWdablZ1WTNScGIyNGlLVHQyWVhJZ1lUMXVaWGNnYmloeUxHbDhmR1VzYnlrc1l6MXpQM01yZERwME8zSmxkSFZ5YmlCbExsOWxkbVZ1ZEhOYlkxMC9aUzVmWlhabGJuUnpXMk5kTG1adVAyVXVYMlYyWlc1MGMxdGpYVDFiWlM1ZlpYWmxiblJ6VzJOZExHRmRPbVV1WDJWMlpXNTBjMXRqWFM1d2RYTm9LR0VwT2lobExsOWxkbVZ1ZEhOYlkxMDlZU3hsTGw5bGRtVnVkSE5EYjNWdWRDc3JLU3hsZldaMWJtTjBhVzl1SUc4b1pTeDBLWHN3UFQwOUxTMWxMbDlsZG1WdWRITkRiM1Z1ZEQ5bExsOWxkbVZ1ZEhNOWJtVjNJSEk2WkdWc1pYUmxJR1V1WDJWMlpXNTBjMXQwWFgxbWRXNWpkR2x2YmlCaEtDbDdkR2hwY3k1ZlpYWmxiblJ6UFc1bGR5QnlMSFJvYVhNdVgyVjJaVzUwYzBOdmRXNTBQVEI5VDJKcVpXTjBMbU55WldGMFpTWW1LSEl1Y0hKdmRHOTBlWEJsUFU5aWFtVmpkQzVqY21WaGRHVW9iblZzYkNrc0tHNWxkeUJ5S1M1ZlgzQnliM1J2WDE5OGZDaHpQU0V4S1Nrc1lTNXdjbTkwYjNSNWNHVXVaWFpsYm5ST1lXMWxjejFtZFc1amRHbHZiaWdwZTNaaGNpQmxMSElzYmoxYlhUdHBaaWd3UFQwOWRHaHBjeTVmWlhabGJuUnpRMjkxYm5RcGNtVjBkWEp1SUc0N1ptOXlLSElnYVc0Z1pUMTBhR2x6TGw5bGRtVnVkSE1wZEM1allXeHNLR1VzY2lrbUptNHVjSFZ6YUNoelAzSXVjMnhwWTJVb01TazZjaWs3Y21WMGRYSnVJRTlpYW1WamRDNW5aWFJQZDI1UWNtOXdaWEowZVZONWJXSnZiSE0vYmk1amIyNWpZWFFvVDJKcVpXTjBMbWRsZEU5M2JsQnliM0JsY25SNVUzbHRZbTlzY3lobEtTazZibjBzWVM1d2NtOTBiM1I1Y0dVdWJHbHpkR1Z1WlhKelBXWjFibU4wYVc5dUtHVXBlM1poY2lCMFBYTS9jeXRsT21Vc2NqMTBhR2x6TGw5bGRtVnVkSE5iZEYwN2FXWW9JWElwY21WMGRYSnVXMTA3YVdZb2NpNW1iaWx5WlhSMWNtNWJjaTVtYmwwN1ptOXlLSFpoY2lCdVBUQXNhVDF5TG14bGJtZDBhQ3h2UFc1bGR5QkJjbkpoZVNocEtUdHVQR2s3YmlzcktXOWJibDA5Y2x0dVhTNW1ianR5WlhSMWNtNGdiMzBzWVM1d2NtOTBiM1I1Y0dVdWJHbHpkR1Z1WlhKRGIzVnVkRDFtZFc1amRHbHZiaWhsS1h0MllYSWdkRDF6UDNNclpUcGxMSEk5ZEdocGN5NWZaWFpsYm5SelczUmRPM0psZEhWeWJpQnlQM0l1Wm00L01UcHlMbXhsYm1kMGFEb3dmU3hoTG5CeWIzUnZkSGx3WlM1bGJXbDBQV1oxYm1OMGFXOXVLR1VzZEN4eUxHNHNhU3h2S1h0MllYSWdZVDF6UDNNclpUcGxPMmxtS0NGMGFHbHpMbDlsZG1WdWRITmJZVjBwY21WMGRYSnVJVEU3ZG1GeUlHTXNaaXhzUFhSb2FYTXVYMlYyWlc1MGMxdGhYU3hrUFdGeVozVnRaVzUwY3k1c1pXNW5kR2c3YVdZb2JDNW1iaWw3YzNkcGRHTm9LR3d1YjI1alpTWW1kR2hwY3k1eVpXMXZkbVZNYVhOMFpXNWxjaWhsTEd3dVptNHNkbTlwWkNBd0xDRXdLU3hrS1h0allYTmxJREU2Y21WMGRYSnVJR3d1Wm00dVkyRnNiQ2hzTG1OdmJuUmxlSFFwTENFd08yTmhjMlVnTWpweVpYUjFjbTRnYkM1bWJpNWpZV3hzS0d3dVkyOXVkR1Y0ZEN4MEtTd2hNRHRqWVhObElETTZjbVYwZFhKdUlHd3VabTR1WTJGc2JDaHNMbU52Ym5SbGVIUXNkQ3h5S1N3aE1EdGpZWE5sSURRNmNtVjBkWEp1SUd3dVptNHVZMkZzYkNoc0xtTnZiblJsZUhRc2RDeHlMRzRwTENFd08yTmhjMlVnTlRweVpYUjFjbTRnYkM1bWJpNWpZV3hzS0d3dVkyOXVkR1Y0ZEN4MExISXNiaXhwS1N3aE1EdGpZWE5sSURZNmNtVjBkWEp1SUd3dVptNHVZMkZzYkNoc0xtTnZiblJsZUhRc2RDeHlMRzRzYVN4dktTd2hNSDFtYjNJb1pqMHhMR005Ym1WM0lFRnljbUY1S0dRdE1TazdaanhrTzJZckt5bGpXMll0TVYwOVlYSm5kVzFsYm5SelcyWmRPMnd1Wm00dVlYQndiSGtvYkM1amIyNTBaWGgwTEdNcGZXVnNjMlY3ZG1GeUlIVXNhRDFzTG14bGJtZDBhRHRtYjNJb1pqMHdPMlk4YUR0bUt5c3BjM2RwZEdOb0tHeGJabDB1YjI1alpTWW1kR2hwY3k1eVpXMXZkbVZNYVhOMFpXNWxjaWhsTEd4YlpsMHVabTRzZG05cFpDQXdMQ0V3S1N4a0tYdGpZWE5sSURFNmJGdG1YUzVtYmk1allXeHNLR3hiWmwwdVkyOXVkR1Y0ZENrN1luSmxZV3M3WTJGelpTQXlPbXhiWmwwdVptNHVZMkZzYkNoc1cyWmRMbU52Ym5SbGVIUXNkQ2s3WW5KbFlXczdZMkZ6WlNBek9teGJabDB1Wm00dVkyRnNiQ2hzVzJaZExtTnZiblJsZUhRc2RDeHlLVHRpY21WaGF6dGpZWE5sSURRNmJGdG1YUzVtYmk1allXeHNLR3hiWmwwdVkyOXVkR1Y0ZEN4MExISXNiaWs3WW5KbFlXczdaR1ZtWVhWc2REcHBaaWdoWXlsbWIzSW9kVDB4TEdNOWJtVjNJRUZ5Y21GNUtHUXRNU2s3ZFR4a08zVXJLeWxqVzNVdE1WMDlZWEpuZFcxbGJuUnpXM1ZkTzJ4YlpsMHVabTR1WVhCd2JIa29iRnRtWFM1amIyNTBaWGgwTEdNcGZYMXlaWFIxY200aE1IMHNZUzV3Y205MGIzUjVjR1V1YjI0OVpuVnVZM1JwYjI0b1pTeDBMSE1wZTNKbGRIVnliaUJwS0hSb2FYTXNaU3gwTEhNc0lURXBmU3hoTG5CeWIzUnZkSGx3WlM1dmJtTmxQV1oxYm1OMGFXOXVLR1VzZEN4ektYdHlaWFIxY200Z2FTaDBhR2x6TEdVc2RDeHpMQ0V3S1gwc1lTNXdjbTkwYjNSNWNHVXVjbVZ0YjNabFRHbHpkR1Z1WlhJOVpuVnVZM1JwYjI0b1pTeDBMSElzYmlsN2RtRnlJR2s5Y3o5eksyVTZaVHRwWmlnaGRHaHBjeTVmWlhabGJuUnpXMmxkS1hKbGRIVnliaUIwYUdsek8ybG1LQ0YwS1hKbGRIVnliaUJ2S0hSb2FYTXNhU2tzZEdocGN6dDJZWElnWVQxMGFHbHpMbDlsZG1WdWRITmJhVjA3YVdZb1lTNW1iaWxoTG1adUlUMDlkSHg4YmlZbUlXRXViMjVqWlh4OGNpWW1ZUzVqYjI1MFpYaDBJVDA5Y254OGJ5aDBhR2x6TEdrcE8yVnNjMlY3Wm05eUtIWmhjaUJqUFRBc1pqMWJYU3hzUFdFdWJHVnVaM1JvTzJNOGJEdGpLeXNwS0dGYlkxMHVabTRoUFQxMGZIeHVKaVloWVZ0alhTNXZibU5sZkh4eUppWmhXMk5kTG1OdmJuUmxlSFFoUFQxeUtTWW1aaTV3ZFhOb0tHRmJZMTBwTzJZdWJHVnVaM1JvUDNSb2FYTXVYMlYyWlc1MGMxdHBYVDB4UFQwOVppNXNaVzVuZEdnL1psc3dYVHBtT204b2RHaHBjeXhwS1gxeVpYUjFjbTRnZEdocGMzMHNZUzV3Y205MGIzUjVjR1V1Y21WdGIzWmxRV3hzVEdsemRHVnVaWEp6UFdaMWJtTjBhVzl1S0dVcGUzWmhjaUIwTzNKbGRIVnliaUJsUHloMFBYTS9jeXRsT21Vc2RHaHBjeTVmWlhabGJuUnpXM1JkSmladktIUm9hWE1zZENrcE9paDBhR2x6TGw5bGRtVnVkSE05Ym1WM0lISXNkR2hwY3k1ZlpYWmxiblJ6UTI5MWJuUTlNQ2tzZEdocGMzMHNZUzV3Y205MGIzUjVjR1V1YjJabVBXRXVjSEp2ZEc5MGVYQmxMbkpsYlc5MlpVeHBjM1JsYm1WeUxHRXVjSEp2ZEc5MGVYQmxMbUZrWkV4cGMzUmxibVZ5UFdFdWNISnZkRzkwZVhCbExtOXVMR0V1Y0hKbFptbDRaV1E5Y3l4aExrVjJaVzUwUlcxcGRIUmxjajFoTEdVdVpYaHdiM0owY3oxaGZTaGxkbVZ1ZEdWdGFYUjBaWEl6S1R0MllYSWdaWFpsYm5SbGJXbDBkR1Z5TTBWNGNHOXlkSE05WlhabGJuUmxiV2wwZEdWeU15NWxlSEJ2Y25SekxFVjJaVzUwUlcxcGRIUmxjajFuWlhSRVpXWmhkV3gwUlhod2IzSjBSbkp2YlVOcWN5aGxkbVZ1ZEdWdGFYUjBaWEl6Ulhod2IzSjBjeWs3WTJ4aGMzTWdSR1ZqYjJScGJtZERiMjVtYVdkN2MzUmhkR2xqSUdkbGRFTnZaR1ZqVkhsd1pTaGxLWHRwWmlobExuTjBZWEowYzFkcGRHZ29JbWgyWXlJcGZIeGxMbk4wWVhKMGMxZHBkR2dvSW1obGRpSXBmSHhsTG5OMFlYSjBjMWRwZEdnb0ltZ3lOalVpS1NseVpYUjFjbTRpYUdWMll5STdhV1lvWlM1emRHRnlkSE5YYVhSb0tDSjJkbU1pS1h4OFpTNXpkR0Z5ZEhOWGFYUm9LQ0pvTWpZMklpa3BjbVYwZFhKdUluWjJZeUk3YVdZb1pTNXpkR0Z5ZEhOWGFYUm9LQ0poZG1NaUtYeDhaUzV6ZEdGeWRITlhhWFJvS0NKb01qWTBJaWtwY21WMGRYSnVJbUYyWXlJN2RHaHliM2NnYm1WM0lFVnljbTl5S0dCVmJuTjFjSEJ2Y25SbFpDQmpiMlJsWXpvZ0pIdGxmV0FwZlhOMFlYUnBZeUJ6YUc5MWJHUlZjMlZRZEdoeVpXRmtLR1VwZTNKbGRIVnliaUoyZG1NaVBUMDlaWDF6ZEdGMGFXTWdaMlYwVjJGemJWVnliQ2hsTEhRcGUyTnZibk4wSUhNOUltaDBkSEJ6T2k4dmMyWXhMV05rYmkxMGIzTXVhSFZ2YzJoaGJuTjBZWFJwWXk1amIyMHZiMkpxTDIxbFpHbGhMV1psSWp0emQybDBZMmdvWlNsN1kyRnpaU0pvWlhaaklqcGpZWE5sSW1oMll6RWlPbkpsZEhWeWJpQnBjMU5wYldSVGRYQndiM0owWldRb0tUOWdKSHR6ZlM5amIyUmxZeTlvYVdkb0wyUmxZMjlrWlhKZk1UWTFOakEwTVRjNU9EWTJOaTUzWVhOdFlEcDBQMkFrZTNOOUwyTnZaR1ZqTDIxaGFXNHZaR1ZqYjJSbGNpNTNZWE50WURwZ0pIdHpmUzlqYjJSbFl5OWlZWE5sTDJSbFkyOWtaWEl1ZDJGemJXQTdZMkZ6WlNKaGRtTWlPbkpsZEhWeWJtQWtlM045TDJSbFkyOWtaWEl2TVM0eUxqSXZhREkyTkM5a1pXTnZaR1Z5TG5kaGMyMWdPMlJsWm1GMWJIUTZkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQlZibk4xY0hCdmNuUmxaQ0JqYjJSbFl6b2dKSHRsZldBcGZYMXpkR0YwYVdNZ1oyVjBWR2h5WldGa1RuVnRLR1VwZTNKbGRIVnliaUJsUDI1aGRtbG5ZWFJ2Y2k1b1lYSmtkMkZ5WlVOdmJtTjFjbkpsYm1ONVBqMDJQelk2Ym1GMmFXZGhkRzl5TG1oaGNtUjNZWEpsUTI5dVkzVnljbVZ1WTNrNk1YMXpkR0YwYVdNZ1oyVjBRblZtWm1WeVUybDZaU2hsS1h0emQybDBZMmdvWlNsN1kyRnpaU0poZG1NaU9tUmxabUYxYkhRNmNtVjBkWEp1SURFd05EZzFOelk3WTJGelpTSm9aWFpqSWpweVpYUjFjbTRnTXpFME5UY3lPRHRqWVhObEluWjJZeUk2Y21WMGRYSnVJRFV5TkRJNE9EQjlmWDFqYkdGemN5QkVaV052WkdsdVoxTjBjbUYwWldkNWUzTjBZWFJwWXlCallXeHNWMkZ6YlZSdlJHVmpiMlJsS0dVc2RDeHpLWHQwSmlaekppWmxMbXhsYm1kMGFEdzlkQzVzWlc1bmRHZ21KaWgwTG5ObGRDaGxLU3h6TGw5aWNtOWhaSGRoZVVSbFkyOWtaVDl6TGw5aWNtOWhaSGRoZVVSbFkyOWtaU2hsTG14bGJtZDBhQ3d3S1RwekxsOWljbTloWkhkaGVWQnNZWGxUZEhKbFlXMG9aUzVzWlc1bmRHZ3NNQ2twZlhOMFlYUnBZeUJ6ZEc5eVpVSjFabVpsY2lobExIUXNjeXh5TEc0c2FTeHZMR0VzWXlsN2FXWW9kQ1ltZEM1clpYbG1jbUZ0WlNZbWJ5Z3BMR011Y0hWemFDaDBLU3h6SmlabExteGxibWQwYUR3OWN5NXNaVzVuZEdndGNpbDdjeTV6WlhRb1pTeHlLU3h1SmlZb2JsdHBYVDFsTG14bGJtZDBhQ2s3WTI5dWMzUWdkRDF5SzJVdWJHVnVaM1JvTEc4OWFTc3hPM0psZEhWeWJpQmhLQ2tzZTNOMGNtVmhiVUoxWm1abGNrOW1abk5sZERwMExHWnlZVzFsVEdWdWMwOW1abk5sZERwdmZYMXlaWFIxY201N2MzUnlaV0Z0UW5WbVptVnlUMlptYzJWME9uSXNabkpoYldWTVpXNXpUMlptYzJWME9tbDlmWE4wWVhScFl5QmlZWFJqYUVSbFkyOWtaU2hsTEhRc2N5eHlMRzRzYVQwaE1TbDdhV1lvSVNobEppWjBKaVp6SmlaeUtTbHlaWFIxY201N2MyaHZkV3hrVW1WelpYUTZJVEY5TzNKbGRIVnliaUJ1UGowNGZIeHBKaVp1UHloMExuTmxkQ2h1WlhjZ1ZXbHVkRGhCY25KaGVTaHlMbUoxWm1abGNpa3NNQ2tzWlM1ZlluSnZZV1IzWVhsQ1lYUmphRVJsWTI5a1pTaHpMRzRwTEh0emFHOTFiR1JTWlhObGREb2hNSDBwT250emFHOTFiR1JTWlhObGREb2hNWDE5YzNSaGRHbGpJR2hoYm1Sc1pVdGxlVVp5WVcxbEtHVXNkQ3h6S1h0amIyNXpkQ0J5UFZzdUxpNTBYVHRwWmlobEppWW9jaTV3ZFhOb0tHVXBMR1V1YTJWNVpuSmhiV1VwS1h0amIyNXpkQ0IwUFZ0bFhUdHlaWFIxY200Z2N5NWZZbkp2WVdSM1lYbEdiSFZ6YUZOMGNtVmhiU2dwTEhSOWNtVjBkWEp1SUhKOWMzUmhkR2xqSUhObGRIVndVM1J5WldGdFFuVm1abVZ5S0dVc2RDeHpLWHRwWmlnaWRuWmpJajA5UFdVcGUyTnZibk4wSUdVOWRDNWZZbkp2WVdSM1lYbERjbVZoZEdWVGRISmxZVzBvY3lrc2NqMXVkV3hzSVQwOVpUOTBMa2hGUVZCVk9DNXpkV0poY25KaGVTaGxMR1VyY3lrNmJuVnNiQ3h1UFhRdVgyMWhiR3h2WXlnek1pazdjbVYwZFhKdWUzTjBjbVZoYlVKMVptWmxjbEIwY2pwbExITjBjbVZoYlVKMVptWmxjanB5TEdKMVptWmxjbE5wZW1WelVIUnlPbTRzWW5WbVptVnlVMmw2WlhNNmJuVnNiQ0U5UFc0L2RDNUlSVUZRVlRndWMzVmlZWEp5WVhrb2JpeHVLek15S1RwdWRXeHNmWDE3WTI5dWMzUWdaVDEwTGw5aWNtOWhaSGRoZVVOeVpXRjBaVk4wY21WaGJTaHpMREFwTzNKbGRIVnlibnR6ZEhKbFlXMUNkV1ptWlhKUWRISTZaU3h6ZEhKbFlXMUNkV1ptWlhJNmJuVnNiQ0U5UFdVL2RDNUlSVUZRVlRndWMzVmlZWEp5WVhrb1pTeGxLM01wT201MWJHeDlmWDE5WTJ4aGMzTWdYMTlYWVhOdFRHOWhaR1Z5ZTNOMFlYUnBZeUJoYzNsdVl5QnNiMkZrVjJGemJVMXZaSFZzWlNobExIUXNjeWw3Y21WMGRYSnVJRzVsZHlCUWNtOXRhWE5sS0NoeUxHNHBQVDU3WTI5dWMzUWdhVDFsTG5KbGNHeGhZMlVvTDF3dUtIZGhjMjE4ZDJGemJWd3Vhbk1wSkM4c0lpNXFjeUlwTzJabGRHTm9LR2twTG5Sb1pXNG9aVDArWlM1MFpYaDBLQ2twTG5Sb1pXNG9hVDArZTNSeWVYdGpiMjV6ZENCdlBYTmxiR1k3WDE5WFlYTnRURzloWkdWeUxuTmxkSFZ3VFc5a2RXeGxSVzUyYVhKdmJtMWxiblFvYnl4cEtTeGZYMWRoYzIxTWIyRmtaWEl1YzJWMGRYQkRZV3hzWW1GamEzTW9ieXh6S1N4ZlgxZGhjMjFNYjJGa1pYSXVhVzVwZEdsaGJHbDZaVmRoYzIwb2J5eGxMSFFzY2l4dUtYMWpZWFJqYUNodktYdHVLRzhwZlgwcExtTmhkR05vS0c0cGZTbDljM1JoZEdsaklITmxkSFZ3VFc5a2RXeGxSVzUyYVhKdmJtMWxiblFvZDI5eWEyVnlVMk52Y0dVc2RHVjRkQ2w3ZDI5eWEyVnlVMk52Y0dVdWJXOWtkV3hsUFh0bGVIQnZjblJ6T250OWZTeDNiM0pyWlhKVFkyOXdaUzVsZUhCdmNuUnpQWGR2Y210bGNsTmpiM0JsTG0xdlpIVnNaUzVsZUhCdmNuUnpMR1YyWVd3b2RHVjRkQ2tzZDI5eWEyVnlVMk52Y0dVdWJUMTNiM0pyWlhKVFkyOXdaUzV0YjJSMWJHVXVaWGh3YjNKMGN5eGtaV3hsZEdVZ2QyOXlhMlZ5VTJOdmNHVXViVzlrZFd4bExHUmxiR1YwWlNCM2IzSnJaWEpUWTI5d1pTNWxlSEJ2Y25SemZYTjBZWFJwWXlCelpYUjFjRU5oYkd4aVlXTnJjeWhsTEhRcGUyVXVjR0Z5WDJKeWIyRmtkMkY1VDI1Q2NtOWhaSGRoZVVsdWFYUmxaRDBvS1QwK2UzUXViMjVKYm1sMGFXRnNhWHBsWkNncGZTeGxMbkJoY2w5aWNtOWhaSGRoZVU5dVVHbGpkSFZ5WlVSbFkyOWtaV1E5S0dVc2N5eHlMRzRzYVNrOVBudDBMbTl1VUdsamRIVnlaVVJsWTI5a1pXUW9aU3h6TEhJc2JpeHBLWDE5YzNSaGRHbGpJR2x1YVhScFlXeHBlbVZYWVhOdEtHVXNkQ3h6TEhJc2JpbDdaUzV0S0h0d2RHaHlaV0ZrVUc5dmJGTnBlbVU2Y3o4eU9uWnZhV1FnTUN4c2IyTmhkR1ZHYVd4bE9tVTlQaTljTG5kaGMyMGtMeTUwWlhOMEtHVXBQM1E2WlN4cGJuTjBZVzUwYVdGMFpWZGhjMjA2S0dVc2NpazlQbnRtWlhSamFDaDBLUzUwYUdWdUtHVTlQbVV1WVhKeVlYbENkV1ptWlhJb0tTa3VkR2hsYmloMFBUNVhaV0pCYzNObGJXSnNlUzVwYm5OMFlXNTBhV0YwWlNoMExHVXBLUzUwYUdWdUtHVTlQbnR6UDNObGRGUnBiV1Z2ZFhRb0tDazlQbklvWlM1cGJuTjBZVzVqWlN4bExtMXZaSFZzWlNrc01UQXdLVHB5S0dVdWFXNXpkR0Z1WTJVc1pTNXRiMlIxYkdVcGZTa3VZMkYwWTJnb2JpbDlmU2t1ZEdobGJpaDBQVDU3WlM1TmIyUjFiR1U5ZEN4ekppWjBMbkIwYUhKbFlXUlFiMjlzVW1WaFpIay9kQzV3ZEdoeVpXRmtVRzl2YkZKbFlXUjVMblJvWlc0b0tDazlQbnR5S0hRcGZTazZjaWgwS1gwcExtTmhkR05vS0c0cGZYMWpiR0Z6Y3lCWFlYTnRSR1ZqYjJSbGNpQmxlSFJsYm1SeklFVjJaVzUwUlcxcGRIUmxjbnRqYjI1emRISjFZM1J2Y2lncGUybG1LSE4xY0dWeUtDa3NYMTl3ZFdKc2FXTkdhV1ZzWkNoMGFHbHpMQ0pqYjI1bWFXY2lMRzUxYkd3cExGOWZjSFZpYkdsalJtbGxiR1FvZEdocGN5d2lhWE5KYm1sMGFXRnNhWHBsWkNJc0lURXBMRjlmY0hWaWJHbGpSbWxsYkdRb2RHaHBjeXdpYVhORVpYTjBjbTk1WldRaUxDRXhLU3hmWDNCMVlteHBZMFpwWld4a0tIUm9hWE1zSW5kaGMyMUpibk4wWVc1alpTSXNiblZzYkNrc1gxOXdkV0pzYVdOR2FXVnNaQ2gwYUdsekxDSnpkSEpsWVcxQ2RXWm1aWElpTEc1MWJHd3BMRjlmY0hWaWJHbGpSbWxsYkdRb2RHaHBjeXdpYzNSeVpXRnRRblZtWm1WeVVIUnlJaXh1ZFd4c0tTeGZYM0IxWW14cFkwWnBaV3hrS0hSb2FYTXNJbUoxWm1abGNsTnBlbVZ6VUhSeUlpeHVkV3hzS1N4ZlgzQjFZbXhwWTBacFpXeGtLSFJvYVhNc0ltSjFabVpsY2xOcGVtVnpJaXh1ZFd4c0tTeGZYM0IxWW14cFkwWnBaV3hrS0hSb2FYTXNJbk4wY21WaGJVSjFabVpsY2s5bVpuTmxkQ0lzTUNrc1gxOXdkV0pzYVdOR2FXVnNaQ2gwYUdsekxDSm1jbUZ0WlV4bGJuTlBabVp6WlhRaUxEQXBMRjlmY0hWaWJHbGpSbWxsYkdRb2RHaHBjeXdpWm5KaGJXVk1aVzV6UW5WbVptVnlJaXh1ZFd4c0tTeGZYM0IxWW14cFkwWnBaV3hrS0hSb2FYTXNJbWx1Wm05c2FYTjBJaXhiWFNrc1gxOXdkV0pzYVdOR2FXVnNaQ2gwYUdsekxDSmpiMlJsWXlJc0ltRjJZeUlwTENGcGMxZGhjMjFUZFhCd2IzSjBaV1FvS1NsMGFISnZkeUJ1WlhjZ1JYSnliM0lvSWxkbFlrRnpjMlZ0WW14NUlHbHpJRzV2ZENCemRYQndiM0owWldRZ2FXNGdkR2hwY3lCbGJuWnBjbTl1YldWdWRDSXBmV055WldGMFpVSnliMkZrZDJGNVEyRnNiR0poWTJ0ektDbDdjbVYwZFhKdWUyOXVTVzVwZEdsaGJHbDZaV1E2S0NrOVBudDBhR2x6TG1selNXNXBkR2xoYkdsNlpXUTlJVEFzZEdocGN5NWxiV2wwS0NKeVpXRmtlU0lwZlN4dmJsQnBZM1IxY21WRVpXTnZaR1ZrT2lobExIUXNjeXh5TEc0cFBUNTdkR2hwY3k1b1lXNWtiR1ZRYVdOMGRYSmxSR1ZqYjJSbFpDaGxMSFFzY3l4eUxHNHBmWDE5YUdGdVpHeGxVR2xqZEhWeVpVUmxZMjlrWldRb1pTeDBMSE1zY2l4dUtYdDJZWElnYVN4dk8yTnZibk4wSUdFOWRHaHBjeTVwYm1admJHbHpkQzV6YUdsbWRDZ3BPMmxtS0dFbUptRXVjSEpsWTJselpWTmxaV3NtSmlGaExtOTFkSEIxZENseVpYUjFjbTQ3YkdWMElHTTlkQ3htUFhRdk1qc2lZWFpqSWowOVBYUm9hWE11WTI5a1pXTW1KaWhqUFhJc1pqMXVLVHRqYjI1emRDQnNQWE03YkdWMElHUTljeTh5T3lGMGFHbHpMbU52Ym1acFozeDhORFEwSVQwOUtHNTFiR3c5UFNocFBYUm9hWE11WTI5dVptbG5MbVJsYzJOeWFYQjBhVzl1S1Q5MmIybGtJREE2YVM1c1pXNW5kR2dwSmlZME1qSWhQVDBvYm5Wc2JEMDlLRzg5ZEdocGN5NWpiMjVtYVdjdVpHVnpZM0pwY0hScGIyNHBQM1p2YVdRZ01EcHZMbXhsYm1kMGFDbDhmQ2hrUFhNcE8yTnZibk4wSUhVOWMyVnNaanRwWmlnaGRTNU5iMlIxYkdWOGZDRjFMazF2WkhWc1pTNUlSVUZRVlRncGNtVjBkWEp1SUhadmFXUWdZMjl1YzI5c1pTNWxjbkp2Y2lnaVRXOWtkV3hsSUc5eUlFaEZRVkJWT0NCdWIzUWdZWFpoYVd4aFlteGxJR2x1SUhkdmNtdGxjbE5qYjNCbElpazdZMjl1YzNRZ2FEMTFMazF2WkhWc1pTNUlSVUZRVlRndWMzVmlZWEp5WVhrb1pTeGxLMk1xYkN0bUttUXFNaWtzYlQxdVpYY2dWV2x1ZERoQmNuSmhlU2hvTG14bGJtZDBhQ2s3YlM1elpYUW9hQ2s3WTI5dWMzUWdjRDF0TG1KMVptWmxjaXg1UFhSb2FYTXVZM0psWVhSbFZtbGtaVzlHY21GdFpVSjFabVpsY2tsdWFYUW9kQ3h6TEdNc1ppeGhLVHQwY25sN2JHVjBJR1U5Ym5Wc2JEdHBaaWdpZFc1a1pXWnBibVZrSWowOWRIbHdaVzltSUZacFpHVnZSbkpoYldVcGRHaHliM2NnYm1WM0lFVnljbTl5S0NKV2FXUmxiMFp5WVcxbElHbHpJRzV2ZENCemRYQndiM0owWldRaUtUdGxQVzVsZHlCV2FXUmxiMFp5WVcxbEtIQXNlU2tzZEdocGN5NWxiV2wwS0NKbWNtRnRaU0lzWlNsOVkyRjBZMmdvZHlsN2RHaHBjeTVsYldsMEtDSm1jbUZ0WlNJc2UySjFabVpsY2pwd0xDNHVMbmw5S1gxOVkzSmxZWFJsVm1sa1pXOUdjbUZ0WlVKMVptWmxja2x1YVhRb1pTeDBMSE1zY2l4dUtYdGpiMjV6ZENCcFBYdG1iM0p0WVhRNklrazBNakFpTEdOdlpHVmtWMmxrZEdnNlpTeGpiMlJsWkVobGFXZG9kRHAwTEhScGJXVnpkR0Z0Y0Rvb2JuVnNiRDA5Ymo5MmIybGtJREE2Ymk1MGFXMWxjM1JoYlhBcGZId3dMR1IxY21GMGFXOXVPbTUxYkd3OVBXNC9kbTlwWkNBd09tNHVaSFZ5WVhScGIyNTlMRzg5VFdGMGFDNXRZWGdvY3l4bEtTeGhQVTFoZEdndWJXRjRLSElzVFdGMGFDNWpaV2xzS0dVdk1pa3BMR005YnlwMExHWTlZU3BOWVhSb0xtTmxhV3dvZEM4eUtUdHlaWFIxY200Z2FTNXNZWGx2ZFhROVczdHZabVp6WlhRNk1DeHpkSEpwWkdVNmIzMHNlMjltWm5ObGREcGpMSE4wY21sa1pUcGhmU3g3YjJabWMyVjBPbU1yWml4emRISnBaR1U2WVgxZExHbDlZWE41Ym1NZ2JHOWhaRmRoYzIxTmIyUjFiR1VvWlN4MEtYdGpiMjV6ZENCelBYUm9hWE11WTNKbFlYUmxRbkp2WVdSM1lYbERZV3hzWW1GamEzTW9LVHR5WlhSMWNtNGdYMTlYWVhOdFRHOWhaR1Z5TG14dllXUlhZWE50VFc5a2RXeGxLR1VzZEN4ektYMWhjM2x1WXlCamIyNW1hV2QxY21Vb1pTbDdhV1lvZEdocGN5NXBjMFJsYzNSeWIzbGxaQ2wwYUhKdmR5QnVaWGNnUlhKeWIzSW9Ja1JsWTI5a1pYSWdhR0Z6SUdKbFpXNGdaR1Z6ZEhKdmVXVmtJaWs3YVdZb0lXbHpWMkZ6YlZOMWNIQnZjblJsWkNncEtYUm9jbTkzSUc1bGR5QkZjbkp2Y2lnaVYyVmlRWE56WlcxaWJIa2dhWE1nYm05MElITjFjSEJ2Y25SbFpDQnBiaUIwYUdseklHVnVkbWx5YjI1dFpXNTBJaWs3ZEdocGN5NWpiMjVtYVdjOVpTeDBhR2x6TG1OdlpHVmpQVVJsWTI5a2FXNW5RMjl1Wm1sbkxtZGxkRU52WkdWalZIbHdaU2hsTG1OdlpHVmpLVHRqYjI1emRDQjBQVVJsWTI5a2FXNW5RMjl1Wm1sbkxuTm9iM1ZzWkZWelpWQjBhSEpsWVdRb2RHaHBjeTVqYjJSbFl5azdkSEo1ZTJOdmJuTjBJSE05UkdWamIyUnBibWREYjI1bWFXY3VaMlYwVjJGemJWVnliQ2gwYUdsekxtTnZaR1ZqTEhRcE8zUm9hWE11ZDJGemJVbHVjM1JoYm1ObFBXRjNZV2wwSUhSb2FYTXViRzloWkZkaGMyMU5iMlIxYkdVb2N5eDBLVHRqYjI1emRDQnlQVVJsWTI5a2FXNW5RMjl1Wm1sbkxtZGxkRlJvY21WaFpFNTFiU2gwS1R0cFppZ2hkR2hwY3k1M1lYTnRTVzV6ZEdGdVkyVXBkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDSlhRVk5OSUcxdlpIVnNaU0J1YjNRZ2FXNXBkR2xoYkdsNlpXUWlLVHNpWVhaaklqMDlQWFJvYVhNdVkyOWtaV00vZEdocGN5NTNZWE50U1c1emRHRnVZMlV1WDJKeWIyRmtkMkY1U1c1cGRDZ3dLVHAwYUdsekxuZGhjMjFKYm5OMFlXNWpaUzVmWW5KdllXUjNZWGxKYm1sMEtEQXNjaWs3WTI5dWMzUWdiajFFWldOdlpHbHVaME52Ym1acFp5NW5aWFJDZFdabVpYSlRhWHBsS0hSb2FYTXVZMjlrWldNcExHazlSR1ZqYjJScGJtZFRkSEpoZEdWbmVTNXpaWFIxY0ZOMGNtVmhiVUoxWm1abGNpaDBhR2x6TG1OdlpHVmpMSFJvYVhNdWQyRnpiVWx1YzNSaGJtTmxMRzRwTzJsbUtIUm9hWE11YzNSeVpXRnRRblZtWm1WeVVIUnlQV2t1YzNSeVpXRnRRblZtWm1WeVVIUnlMSFJvYVhNdWMzUnlaV0Z0UW5WbVptVnlQV2t1YzNSeVpXRnRRblZtWm1WeUxIUm9hWE11WW5WbVptVnlVMmw2WlhOUWRISTlhUzVpZFdabVpYSlRhWHBsYzFCMGNueDhiblZzYkN4MGFHbHpMbUoxWm1abGNsTnBlbVZ6UFdrdVluVm1abVZ5VTJsNlpYTjhmRzUxYkd3c0luWjJZeUk5UFQxMGFHbHpMbU52WkdWakppWW9kR2hwY3k1emRISmxZVzFDZFdabVpYSlBabVp6WlhROU1DeDBhR2x6TG1aeVlXMWxUR1Z1YzA5bVpuTmxkRDB3TEhSb2FYTXVabkpoYldWTVpXNXpRblZtWm1WeVBXNWxkeUJWYVc1ME16SkJjbkpoZVNnNEtTa3NaUzVrWlhOamNtbHdkR2x2YmlZbWRHaHBjeTV6ZEhKbFlXMUNkV1ptWlhJbUpuUm9hWE11ZDJGemJVbHVjM1JoYm1ObEtYdGpiMjV6ZENCMFBXNWxkeUJWYVc1ME9FRnljbUY1S0dVdVpHVnpZM0pwY0hScGIyNHBPM1F1YkdWdVozUm9QRDEwYUdsekxuTjBjbVZoYlVKMVptWmxjaTVzWlc1bmRHZ21KblJvYVhNdVkyRnNiRmRoYzIxVWIwUmxZMjlrWlNoMEtYMTlZMkYwWTJnb2N5bDdkR2h5YjNjZ2RHaHBjeTVsYldsMEtDSmxjbkp2Y2lJc2N5a3NjMzE5WkdWamIyUmxLR1VwZTNaaGNpQjBPMmxtS0NGMGFHbHpMbWx6U1c1cGRHbGhiR2w2WldSOGZIUm9hWE11YVhORVpYTjBjbTk1WldSOGZDRjBhR2x6TG5kaGMyMUpibk4wWVc1alpTbDBhSEp2ZHlCdVpYY2dSWEp5YjNJb0lrUmxZMjlrWlhJZ2JtOTBJR2x1YVhScFlXeHBlbVZrSUc5eUlHUmxjM1J5YjNsbFpDSXBPMk52Ym5OMElITTlaUzVrWVhSaExISTllM1JwYldWemRHRnRjRHBsTG5ScGJXVnpkR0Z0Y0N4a2RYSmhkR2x2YmpwbExtUjFjbUYwYVc5dUxIUjVjR1U2WlM1MGVYQmxMR3RsZVdaeVlXMWxPaUpyWlhraVBUMDlaUzUwZVhCbGZUc29iblZzYkQwOUtIUTlkR2hwY3k1amIyNW1hV2NwUDNadmFXUWdNRHAwTG1OdlpHVmpMbk4wWVhKMGMxZHBkR2dvSW5aMll5SXBLVDkwYUdsekxuTjBiM0psUW5WbVptVnlLSE1zY2lrNktIUm9hWE11YVc1bWIyeHBjM1E5UkdWamIyUnBibWRUZEhKaGRHVm5lUzVvWVc1a2JHVkxaWGxHY21GdFpTaHlMSFJvYVhNdWFXNW1iMnhwYzNRc2RHaHBjeTUzWVhOdFNXNXpkR0Z1WTJVcExIUm9hWE11WTJGc2JGZGhjMjFVYjBSbFkyOWtaU2h6S1NsOWMzUnZjbVZDZFdabVpYSW9aU3gwS1h0cFppaDBhR2x6TG5OMGNtVmhiVUoxWm1abGNpWW1kR2hwY3k1bWNtRnRaVXhsYm5OQ2RXWm1aWElwZTJOdmJuTjBJSE05UkdWamIyUnBibWRUZEhKaGRHVm5lUzV6ZEc5eVpVSjFabVpsY2lobExIUXNkR2hwY3k1emRISmxZVzFDZFdabVpYSXNkR2hwY3k1emRISmxZVzFDZFdabVpYSlBabVp6WlhRc2RHaHBjeTVtY21GdFpVeGxibk5DZFdabVpYSXNkR2hwY3k1bWNtRnRaVXhsYm5OUFptWnpaWFFzS0NrOVBuUm9hWE11Wm14MWMyZ29LU3dvS1QwK2RHaHBjeTVpWVhSamFFUmxZMjlrWlNncExIUm9hWE11YVc1bWIyeHBjM1FwTzNSb2FYTXVjM1J5WldGdFFuVm1abVZ5VDJabWMyVjBQWE11YzNSeVpXRnRRblZtWm1WeVQyWm1jMlYwTEhSb2FYTXVabkpoYldWTVpXNXpUMlptYzJWMFBYTXVabkpoYldWTVpXNXpUMlptYzJWMGZYMWpZV3hzVjJGemJWUnZSR1ZqYjJSbEtHVXBlM1JvYVhNdWMzUnlaV0Z0UW5WbVptVnlKaVowYUdsekxuZGhjMjFKYm5OMFlXNWpaU1ltUkdWamIyUnBibWRUZEhKaGRHVm5lUzVqWVd4c1YyRnpiVlJ2UkdWamIyUmxLR1VzZEdocGN5NXpkSEpsWVcxQ2RXWm1aWElzZEdocGN5NTNZWE50U1c1emRHRnVZMlVwZldKaGRHTm9SR1ZqYjJSbEtHVTlJVEVwZTJsbUtIUm9hWE11ZDJGemJVbHVjM1JoYm1ObEppWjBhR2x6TG1KMVptWmxjbE5wZW1WekppWjBhR2x6TG1KMVptWmxjbE5wZW1WelVIUnlKaVowYUdsekxtWnlZVzFsVEdWdWMwSjFabVpsY2lsN1JHVmpiMlJwYm1kVGRISmhkR1ZuZVM1aVlYUmphRVJsWTI5a1pTaDBhR2x6TG5kaGMyMUpibk4wWVc1alpTeDBhR2x6TG1KMVptWmxjbE5wZW1WekxIUm9hWE11WW5WbVptVnlVMmw2WlhOUWRISXNkR2hwY3k1bWNtRnRaVXhsYm5OQ2RXWm1aWElzZEdocGN5NW1jbUZ0WlV4bGJuTlBabVp6WlhRc1pTa3VjMmh2ZFd4a1VtVnpaWFFtSmloMGFHbHpMbVp5WVcxbFRHVnVjMDltWm5ObGREMHdMSFJvYVhNdWMzUnlaV0Z0UW5WbVptVnlUMlptYzJWMFBUQXBmWDFoYzNsdVl5Qm1iSFZ6YUNncGUzWmhjaUJsTzJsbUtDRjBhR2x6TG1selNXNXBkR2xoYkdsNlpXUjhmSFJvYVhNdWFYTkVaWE4wY205NVpXUjhmQ0YwYUdsekxuZGhjMjFKYm5OMFlXNWpaU2wwYUhKdmR5QnVaWGNnUlhKeWIzSW9Ja1JsWTI5a1pYSWdibTkwSUdsdWFYUnBZV3hwZW1Wa0lHOXlJR1JsYzNSeWIzbGxaQ0lwT3lodWRXeHNQVDBvWlQxMGFHbHpMbU52Ym1acFp5ay9kbTlwWkNBd09tVXVZMjlrWldNdWMzUmhjblJ6VjJsMGFDZ2lkblpqSWlrcEppWjBhR2x6TG1KaGRHTm9SR1ZqYjJSbEtDRXdLU3gwYUdsekxuZGhjMjFKYm5OMFlXNWpaUzVmWW5KdllXUjNZWGxHYkhWemFGTjBjbVZoYlNncExIUm9hWE11WlcxcGRDZ2labXgxYzJoZlkyOXRjR3hsZEdVaUtYMWhjM2x1WXlCamJHOXpaU2dwZTJsbUtDRjBhR2x6TG1selJHVnpkSEp2ZVdWa0ppWjBhR2x6TG5kaGMyMUpibk4wWVc1alpTbDdkSEo1ZTNSb2FYTXVkMkZ6YlVsdWMzUmhibU5sTGw5aWNtOWhaSGRoZVVWNGFYUW9LWDFqWVhSamFDaGxLWHQwYUdsekxtVnRhWFFvSW1WeWNtOXlJaXhsS1gxMGFHbHpMbmRoYzIxSmJuTjBZVzVqWlQxdWRXeHNMSFJvYVhNdWMzUnlaV0Z0UW5WbVptVnlQVzUxYkd3c2RHaHBjeTV6ZEhKbFlXMUNkV1ptWlhKUWRISTliblZzYkN4MGFHbHpMbUoxWm1abGNsTnBlbVZ6UFc1MWJHd3NkR2hwY3k1aWRXWm1aWEpUYVhwbGMxQjBjajF1ZFd4c0xIUm9hWE11Wm5KaGJXVk1aVzV6UW5WbVptVnlQVzUxYkd3c2RHaHBjeTVwYm1admJHbHpkRDFiWFN4MGFHbHpMbWx6U1c1cGRHbGhiR2w2WldROUlURXNkR2hwY3k1cGMwUmxjM1J5YjNsbFpEMGhNQ3gwYUdsekxuSmxiVzkyWlVGc2JFeHBjM1JsYm1WeWN5Z3BmWDE5YkdWMElHUmxZMjlrWlhJOWJuVnNiRHR6Wld4bUxtOXViV1Z6YzJGblpUMWhjM2x1WXlCbFBUNTdZMjl1YzNSN2RIbHdaVHAwTEdOdmJtWnBaenB6TEdOb2RXNXJPbko5UFdVdVpHRjBZVHQwY25sN2FXWW9JV2x6VjJGemJWTjFjSEJ2Y25SbFpDZ3BLWFJvY205M0lHNWxkeUJGY25KdmNpZ2lWMlZpUVhOelpXMWliSGtnYVhNZ2JtOTBJSE4xY0hCdmNuUmxaQ0JwYmlCMGFHbHpJR1Z1ZG1seWIyNXRaVzUwSWlrN2MzZHBkR05vS0hRcGUyTmhjMlVpWTI5dVptbG5kWEpsSWpwa1pXTnZaR1Z5SmlaaGQyRnBkQ0JrWldOdlpHVnlMbU5zYjNObEtDa3NaR1ZqYjJSbGNqMXVaWGNnVjJGemJVUmxZMjlrWlhJc1pHVmpiMlJsY2k1dmJpZ2labkpoYldVaUxHVTlQbnRqYjI1emRDQjBQVnRkT3lKMWJtUmxabWx1WldRaUlUMTBlWEJsYjJZZ1ZtbGtaVzlHY21GdFpTWW1aU0JwYm5OMFlXNWpaVzltSUZacFpHVnZSbkpoYldVL2RDNXdkWE5vS0dVcE9uUXVjSFZ6YUNobExtSjFabVpsY2lrc2MyVnNaaTV3YjNOMFRXVnpjMkZuWlNoN2RIbHdaVG9pWm5KaGJXVWlMR1JoZEdFNlpYMHNkQ2w5S1N4a1pXTnZaR1Z5TG05dUtDSmxjbkp2Y2lJc1pUMCtlM05sYkdZdWNHOXpkRTFsYzNOaFoyVW9lM1I1Y0dVNkltVnljbTl5SWl4a1lYUmhPbVY5S1gwcExHRjNZV2wwSUdSbFkyOWtaWEl1WTI5dVptbG5kWEpsS0hNcExITmxiR1l1Y0c5emRFMWxjM05oWjJVb2UzUjVjR1U2SW5KbFlXUjVJbjBwTzJKeVpXRnJPMk5oYzJVaVpHVmpiMlJsSWpwa1pXTnZaR1Z5Smlaa1pXTnZaR1Z5TG1SbFkyOWtaU2h5S1R0aWNtVmhhenRqWVhObEltWnNkWE5vSWpwa1pXTnZaR1Z5SmlZb1lYZGhhWFFnWkdWamIyUmxjaTVtYkhWemFDZ3BMSE5sYkdZdWNHOXpkRTFsYzNOaFoyVW9lM1I1Y0dVNkltWnNkWE5vWDJOdmJYQnNaWFJsSW4wcEtUdGljbVZoYXp0allYTmxJbU5zYjNObElqcGtaV052WkdWeUppWW9ZWGRoYVhRZ1pHVmpiMlJsY2k1amJHOXpaU2dwTEdSbFkyOWtaWEk5Ym5Wc2JDbDlmV05oZEdOb0tHNHBlM05sYkdZdWNHOXpkRTFsYzNOaFoyVW9lM1I1Y0dVNkltVnljbTl5SWl4a1lYUmhPbTRnYVc1emRHRnVZMlZ2WmlCRmNuSnZjajl1TG0xbGMzTmhaMlU2VTNSeWFXNW5LRzRwZlNsOWZYMHBLQ2s3Q2c9PSIsUnA9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5CbG9iJiZuZXcgQmxvYihbYXRvYih4cCldLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCJ9KTtmdW5jdGlvbiBTcCgpe2xldCB0O3RyeXtpZih0PVJwJiYod2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkuY3JlYXRlT2JqZWN0VVJMKFJwKSwhdCl0aHJvdyIiO3JldHVybiBuZXcgV29ya2VyKHQpfWNhdGNoKGUpe3JldHVybiBuZXcgV29ya2VyKCJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQ7YmFzZTY0LCIreHApfWZpbmFsbHl7ISgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50LyIpPjApJiZ0JiYod2luZG93LlVSTHx8d2luZG93LndlYmtpdGxSTCkucmV2b2tlT2JqZWN0VVJMKHQpfX12YXIgWXA9T2JqZWN0LmRlZmluZVByb3BlcnR5LElwPSh0LGUscik9PigoKHQsZSxyKT0+e2UgaW4gdD9ZcCh0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTp0W2VdPXJ9KSh0LCJzeW1ib2wiIT10eXBlb2YgZT9lKyIiOmUscikscik7Y2xhc3MgTHB7Y29uc3RydWN0b3IodCl7SXAodGhpcywiX3dvcmtlciIsbnVsbCksSXAodGhpcywiX291dHB1dENhbGxiYWNrIiksSXAodGhpcywiX2Vycm9yQ2FsbGJhY2siKSxJcCh0aGlzLCJfc3RhdGUiLCJ1bmNvbmZpZ3VyZWQiKSxJcCh0aGlzLCJfZGVjb2RlUXVldWUiLFtdKSxJcCh0aGlzLCJfaXNEZWNvZGluZyIsITEpLElwKHRoaXMsIm9uZGVxdWV1ZSIpLHRoaXMuX291dHB1dENhbGxiYWNrPW51bGw9PXQ/dm9pZCAwOnQub3V0cHV0LHRoaXMuX2Vycm9yQ2FsbGJhY2s9bnVsbD09dD92b2lkIDA6dC5lcnJvcix0aGlzLl9pbml0V29ya2VyKCl9c3RhdGljIGlzQ29uZmlnU3VwcG9ydGVkKHQpe2NvbnN0IGU9InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLmNvbnN0cnVjdG9yJiYiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUiPT09c2VsZi5jb25zdHJ1Y3Rvci5uYW1lO2xldCByPSEhdCxuPSIiO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgV29ya2VyPyhyPSExLG49YFdvcmtlciBzcGF3bmVkIGluICR7ZT8id29ya2VyIjoiY3VycmVudCBlbnZpcm9ubWVudCJ9IG5vdCBzdXBwb3J0YCk6InVuZGVmaW5lZCI9PXR5cGVvZiBXZWJBc3NlbWJseSYmKHI9ITEsbj0iV2ViQXNzZW1ibHkgbm90IHN1cHBvcnQiKSxuZXcgUHJvbWlzZSgodD0+e3Qoe3N1cHBvcnRlZDpyLHJlYXNvbjpufSl9KSl9Z2V0IGRlY29kZVF1ZXVlU2l6ZSgpe3JldHVybiB0aGlzLl9kZWNvZGVRdWV1ZS5sZW5ndGh9X2luaXRXb3JrZXIoKXt0aGlzLl93b3JrZXI9bmV3IFNwLHRoaXMuX3dvcmtlci5vbm1lc3NhZ2U9dD0+e2NvbnN0e3R5cGU6ZSxkYXRhOnJ9PXQuZGF0YTtzd2l0Y2goZSl7Y2FzZSJmcmFtZSI6dGhpcy5fb3V0cHV0Q2FsbGJhY2smJnRoaXMuX291dHB1dENhbGxiYWNrKHIpO2JyZWFrO2Nhc2UiZXJyb3IiOnRoaXMuX2Vycm9yQ2FsbGJhY2smJnRoaXMuX2Vycm9yQ2FsbGJhY2sobmV3IEVycm9yKHIpKTticmVhaztjYXNlInJlYWR5Ijp0aGlzLl9zdGF0ZT0iY29uZmlndXJlZCIsdGhpcy5fcHJvY2Vzc1F1ZXVlKCl9fSx0aGlzLl93b3JrZXIub25lcnJvcj10PT57dGhpcy5fZXJyb3JDYWxsYmFjayYmdGhpcy5fZXJyb3JDYWxsYmFjayhuZXcgRXJyb3IodC5tZXNzYWdlKSl9fWNvbmZpZ3VyZSh0KXt0JiYodGhpcy5fc3RhdGU9InVuY29uZmlndXJlZCIsdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2Uoe3R5cGU6ImNvbmZpZ3VyZSIsY29uZmlnOnR9KSl9ZGVjb2RlKHQpe3QmJiJjbG9zZWQiIT09dGhpcy5fc3RhdGUmJih0aGlzLl9kZWNvZGVRdWV1ZS5wdXNoKHQpLHRoaXMuX3Byb2Nlc3NRdWV1ZSgpKX1fcHJvY2Vzc1F1ZXVlKCl7aWYoIXRoaXMuX2lzRGVjb2RpbmcmJiJjb25maWd1cmVkIj09PXRoaXMuX3N0YXRlJiYwIT09dGhpcy5fZGVjb2RlUXVldWUubGVuZ3RoKWZvcih0aGlzLl9pc0RlY29kaW5nPSEwO3RoaXMuX3dvcmtlciYmdGhpcy5fZGVjb2RlUXVldWUubGVuZ3RoPjA7KXtjb25zdCB0PXRoaXMuX2RlY29kZVF1ZXVlLnNoaWZ0KCk7aWYoIXQpYnJlYWs7e2NvbnN0IGU9dC5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/W3QuZGF0YV06W107dGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKHt0eXBlOiJkZWNvZGUiLGNodW5rOnR9LGUpLHRoaXMuX2lzRGVjb2Rpbmc9ITEsdGhpcy5vbmRlcXVldWUmJnRoaXMub25kZXF1ZXVlKCl9fX1hc3luYyBmbHVzaCgpe2lmKHRoaXMuX3dvcmtlciYmImNvbmZpZ3VyZWQiPT09dGhpcy5fc3RhdGUpcmV0dXJuIG5ldyBQcm9taXNlKCh0PT57dmFyIGUscjtjb25zdCBuPWU9Pnt2YXIgcjsiZmx1c2hfY29tcGxldGUiPT09ZS5kYXRhLnR5cGUmJihudWxsPT0ocj10aGlzLl93b3JrZXIpfHxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG4pLHQoKSl9O251bGw9PShlPXRoaXMuX3dvcmtlcil8fGUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbiksbnVsbD09KHI9dGhpcy5fd29ya2VyKXx8ci5wb3N0TWVzc2FnZSh7dHlwZToiZmx1c2gifSl9KSl9Y2xvc2UoKXt0aGlzLl93b3JrZXImJih0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2Uoe3R5cGU6ImNsb3NlIn0pLHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKSx0aGlzLl93b3JrZXI9bnVsbCksdGhpcy5fc3RhdGU9ImNsb3NlZCIsdGhpcy5fZGVjb2RlUXVldWU9W10sdGhpcy5faXNEZWNvZGluZz0hMX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9fXZhciBDcD1PYmplY3QuZGVmaW5lUHJvcGVydHksTnA9KHQsZSxyKT0+KCgodCxlLHIpPT57ZSBpbiB0P0NwKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cn0pKHQsInN5bWJvbCIhPXR5cGVvZiBlP2UrIiI6ZSxyKSxyKTtjbGFzcyBUcCBleHRlbmRzIFZwe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLE5wKHRoaXMsImlubmVyRGVjb2RlciIpLHRoaXMuaW5uZXJEZWNvZGVyPW5ldyBMcCh7b3V0cHV0OnRoaXMub25EZWNvZGVPdXRwdXQsZXJyb3I6dGhpcy5vbkRlY29kZUVycm9yfSksdGhpcy5pbm5lckRlY29kZXIub25kZXF1ZXVlPSgpPT57fX1zdGF0aWMgaXNDb25maWdTdXBwb3J0ZWQodCl7cmV0dXJuIExwLmlzQ29uZmlnU3VwcG9ydGVkKHQpfWNvbmZpZ3VyZSh0KXt2YXIgZTtudWxsPT0oZT10aGlzLmlubmVyRGVjb2Rlcil8fGUuY29uZmlndXJlKHQpfWRlY29kZSh0KXt2YXIgZTt0JiYobnVsbD09KGU9dGhpcy5pbm5lckRlY29kZXIpfHxlLmRlY29kZSh0KSl9Zmx1c2goKXt2YXIgdDtyZXR1cm4gbnVsbD09KHQ9dGhpcy5pbm5lckRlY29kZXIpP3ZvaWQgMDp0LmZsdXNoKCl9Y2xvc2UoKXt2YXIgdDtudWxsPT0odD10aGlzLmlubmVyRGVjb2Rlcil8fHQuY2xvc2UoKX19dmFyIHpwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqcD0odCxlLHIpPT4oKCh0LGUscik9PntlIGluIHQ/enAodCxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSk6dFtlXT1yfSkodCwic3ltYm9sIiE9dHlwZW9mIGU/ZSsiIjplLHIpLHIpO2NsYXNzIEJwe2NvbnN0cnVjdG9yKHQpe2pwKHRoaXMsImNvbmZpZyIpLGpwKHRoaXMsImNvZGVjQ29tbW9uTmFtZSIpLGpwKHRoaXMsInByZWZlckhhcmR3YXJlIiksdGhpcy5jb25maWc9dCwvXmF2Yy9naS50ZXN0KHQuY29kZWMpP3RoaXMuY29kZWNDb21tb25OYW1lPSJBVkMiOi9eKGhldil8KGh2YykvZ2kudGVzdCh0LmNvZGVjKT90aGlzLmNvZGVjQ29tbW9uTmFtZT0iSEVWQyI6L152dmMvZ2kudGVzdCh0LmNvZGVjKT90aGlzLmNvZGVjQ29tbW9uTmFtZT0iVlZDIjp0aGlzLmNvZGVjQ29tbW9uTmFtZT0iVU5LTk9XTiIsdGhpcy5wcmVmZXJIYXJkd2FyZT0icHJlZmVyLWhhcmR3YXJlIj09PXQuaGFyZHdhcmVBY2NlbGVyYXRpb259fXZhciBKcD1PYmplY3QuZGVmaW5lUHJvcGVydHksSHA9KHQsZSxyKT0+KCgodCxlLHIpPT57ZSBpbiB0P0pwKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6cn0pOnRbZV09cn0pKHQsInN5bWJvbCIhPXR5cGVvZiBlP2UrIiI6ZSxyKSxyKTtjbGFzcyBBcHtjb25zdHJ1Y3Rvcih0PXt9KXtIcCh0aGlzLCJjb25maWciLHt9KSxPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLHQpfXN0YXRpYyBpc0NvbmZpZ1N1cHBvcnRlZCh0LGU9ITApe2NvbnN0IHI9bmV3IEJwKHQpO3JldHVybiBlP2twLmlzQ29uZmlnU3VwcG9ydGVkKHIpOlRwLmlzQ29uZmlnU3VwcG9ydGVkKHIpfWFzeW5jIHNlbGVjdERlY29kZXIodCl7bGV0IGU9bnVsbDtyZXR1cm4gdD8oL14oYXZjKXwoaGV2KXwoaHZjKXwodnZjKXwoYnZjKS9naS50ZXN0KHQuY29kZWMpJiYoZT1hd2FpdCB0aGlzLnNlbGVjdFZpZGVvRGVjb2RlckludGVybmFsKHQpKSwvXihtcDRhKXwobXAzKXwodm9yYmlzKXwob3B1cyl8KHZwOCl8KHRoZW9yYSkvZ2kudGVzdCh0LmNvZGVjKSYmKGU9YXdhaXQgdGhpcy5zZWxlY3RBdWRpb0RlY29kZXJJbnRlcm5hbCh0KSksZSk6ZX1zZWxlY3REZWNvZGVyRGlyZWN0bHkodCl7bGV0IGU9bnVsbDtyZXR1cm4gdD8oL14oYXZjKXwoaGV2KXwoaHZjKXwodnZjKXwoYnZjKS9naS50ZXN0KHQuY29kZWMpJiYoZT10aGlzLnNlbGVjdFZpZGVvRGVjb2RlckludGVybmFsRGlyZWN0bHkodCkpLC9eKG1wNGEpfChtcDMpfCh2b3JiaXMpfChvcHVzKXwodnA4KXwodGhlb3JhKS9naS50ZXN0KHQuY29kZWMpJiYoZT10aGlzLnNlbGVjdEF1ZGlvRGVjb2RlckludGVybmFsRGlyZWN0bHkodCkpLGUpOmV9c2VsZWN0VmlkZW9EZWNvZGVySW50ZXJuYWwodCl7Y29uc3QgZT1uZXcgVXAscj1uZXcgQnAodCk7cmV0dXJuIGUuY3JlYXRlRGVjb2Rlcih7cHJlZmVyZW5jZTp0aGlzLmNvbmZpZy5wcmVmZXJlbmNlLHRyYWl0OnJ9KX1zZWxlY3RWaWRlb0RlY29kZXJJbnRlcm5hbERpcmVjdGx5KHQpe2NvbnN0IGU9bmV3IFVwLHI9bmV3IEJwKHQpO3JldHVybiBlLmNyZWF0ZURlY29kZXJEaXJlY3RseSh7cHJlZmVyZW5jZTp0aGlzLmNvbmZpZy5wcmVmZXJlbmNlLHRyYWl0OnJ9KX1zZWxlY3RBdWRpb0RlY29kZXJJbnRlcm5hbCh0KXtyZXR1cm4gbnVsbH1zZWxlY3RBdWRpb0RlY29kZXJJbnRlcm5hbERpcmVjdGx5KHQpe3JldHVybiBudWxsfX1jbGFzcyBVcHthc3luYyBjcmVhdGVEZWNvZGVyKHtwcmVmZXJlbmNlOnQsdHJhaXQ6ZX0pe2lmKCJzb2Z0d2FyZSIhPT10KXtpZigoYXdhaXQga3AuaXNDb25maWdTdXBwb3J0ZWQoZSkpLnN1cHBvcnRlZClyZXR1cm4gbmV3IGtwfWlmKCJoYXJkd2FyZSIhPT10JiYid2ViY29kZWMiIT09dCl7Y29uc3QgdD1hd2FpdCBUcC5pc0NvbmZpZ1N1cHBvcnRlZChlKTtpZihudWxsPT10P3ZvaWQgMDp0LnN1cHBvcnRlZClyZXR1cm4gbmV3IFRwfXJldHVybiBudWxsfWNyZWF0ZURlY29kZXJEaXJlY3RseSh7cHJlZmVyZW5jZTp0LHRyYWl0OmV9KXtyZXR1cm4iaGFyZHdhcmUiPT09dHx8IndlYmNvZGVjIj09PXQ/bmV3IGtwOiJzb2Z0d2FyZSI9PT10P25ldyBUcDpudWxsfX1mdW5jdGlvbiBNcCh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIEZwKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxfcChuLmtleSksbil9fWZ1bmN0aW9uIEVwKHQsZSxyKXtyZXR1cm4gZSYmRnAodC5wcm90b3R5cGUsZSksciYmRnAodCxyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIFBwKHQsZSxyKXtyZXR1cm4oZT1fcChlKSlpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH1mdW5jdGlvbiBfcCh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQpcmV0dXJuIHQ7dmFyIHI9dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBuKXJldHVybiBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlP2U6U3RyaW5nKGUpfXZhciBLcD0iaGV2YyIsT3A9InZ2Y0MiLERwPSJnNzExMGEiLFFwPSJnNzExMG0iLHFwPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LCRwPXFwJiZuYXZpZ2F0b3IudXNlckFnZW50LnRvTG9jYWxlTG93ZXJDYXNlKCksdHk9cXAmJiRwLmluY2x1ZGVzKCJmaXJlZm94IiksZXk9cXAmJiRwLmluY2x1ZGVzKCJhbmRyb2lkIikscnk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7TXAodGhpcyx0KX1yZXR1cm4gRXAodCxudWxsLFt7a2V5OiJnZXRSYXRlSW5kZXhCeVJhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0LkZSRVEuaW5kZXhPZihlKX19LHtrZXk6InBhcnNlQURUUyIsdmFsdWU6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5sZW5ndGgsaT0wO2krMjxuJiYoMjU1IT09ZVtpXXx8MjQwIT0oMjQ2JmVbaSsxXSkpOylpKys7aWYoIShpPj1uKSl7dmFyIG89aSxhPVtdLGM9KDYwJmVbaSsyXSk+Pj4yLHU9dC5GUkVRW2NdO2lmKCF1KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzYW1wbGluZyBpbmRleDogIi5jb25jYXQoYykpO2Zvcih2YXIgbCxzLGQ9MSsoKDE5MiZlW2krMl0pPj4+NiksZj0oMSZlW2krMl0pPDwyfCgxOTImZVtpKzNdKT4+PjYsaD10Ll9nZXRDb25maWcoYyxmLGQpLHA9aC5jb25maWcseT1oLmNvZGVjLHY9MCxtPXQuZ2V0RnJhbWVEdXJhdGlvbih1KTtpKzc8bjspaWYoMjU1PT09ZVtpXSYmMjQwPT0oMjQ2JmVbaSsxXSkpe2lmKG4taTwocz0oMyZlW2krM10pPDwxMXxlW2krNF08PDN8KDIyNCZlW2krNV0pPj41KSlicmVhaztsPTIqKDEmfmVbaSsxXSksYS5wdXNoKHtwdHM6cit2Km0sZGF0YTplLnN1YmFycmF5KGkrNytsLGkrcyl9KSx2KyssaSs9c31lbHNlIGkrKztyZXR1cm57c2tpcDpvLHJlbWFpbmluZzppPj1uP3ZvaWQgMDplLnN1YmFycmF5KGkpLGZyYW1lczphLHNhbXBsaW5nRnJlcXVlbmN5SW5kZXg6YyxzYW1wbGVSYXRlOnUsb2JqZWN0VHlwZTpkLGNoYW5uZWxDb3VudDpmLGNvZGVjOnksY29uZmlnOnAsb3JpZ2luQ29kZWM6Im1wNGEuNDAuIi5jb25jYXQoZCl9fX19LHtrZXk6InBhcnNlQXVkaW9TcGVjaWZpY0NvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGgpe3ZhciByPWVbMF0+Pj4zLG49KDcmZVswXSk8PDF8ZVsxXT4+PjcsaT0oMTIwJmVbMV0pPj4+MyxvPXQuRlJFUVtuXTtpZihvKXt2YXIgYT10Ll9nZXRDb25maWcobixpLHIpO3JldHVybntzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4Om4sc2FtcGxlUmF0ZTpvLG9iamVjdFR5cGU6cixjaGFubmVsQ291bnQ6aSxjb25maWc6YS5jb25maWcsY29kZWM6YS5jb2RlYyxvcmlnaW5Db2RlYzoibXA0YS40MC4iLmNvbmNhdChyKX19fX19LHtrZXk6ImdldEZyYW1lRHVyYXRpb24iLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiAxMDI0Kihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06OWU0KS90fX0se2tleToiX2dldENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbz1bXTtyZXR1cm4gdHk/dD49Nj8obj01LGk9dC0zKToobj0yLGk9dCk6ZXk/KG49MixpPXQpOihuPTI9PT1yfHw1PT09cj9yOjUsaT10LHQ+PTY/aT10LTM6MT09PWUmJihuPTIsaT10KSksb1swXT1uPDwzLG9bMF18PSgxNCZ0KT4+MSxvWzFdPSgxJnQpPDw3LG9bMV18PWU8PDMsNT09PW4mJihvWzFdfD0oMTQmaSk+PjEsb1syXT0oMSZpKTw8NyxvWzJdfD04LG9bM109MCkse2NvbmZpZzpvLGNvZGVjOiJtcDRhLjQwLiIuY29uY2F0KG4pfX19LHtrZXk6ImdldFNpbGVudEZyYW1lIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKCJtcDRhLjQwLjIiPT09dCl7aWYoMT09PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzNSwxMjhdKTtpZigyPT09ZSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzMzLDAsNzMsMTQ0LDIsMjUsMCwzNSwxMjhdKTtpZigzPT09ZSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMjAwLDAsMTI4LDMyLDEzMiwxLDM4LDY0LDgsMTAwLDAsMTQyXSk7aWYoND09PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEyOCw0NCwxMjgsOCwyLDU2XSk7aWYoNT09PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDU2XSk7aWYoNj09PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDEzMCw0OCw0LDE1MywwLDMzLDE0NCwyLDAsMTc4LDAsMzIsOCwyMjRdKX1lbHNle2lmKDE9PT1lKXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDc4LDIzMCwxMjgsMTg2LDgsMCwwLDAsMjgsNiwyNDEsMTkzLDEwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDk0XSk7aWYoMj09PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KFsxLDY0LDM0LDEyOCwxNjMsOTQsMjMwLDEyOCwxODYsOCwwLDAsMCwwLDE0OSwwLDYsMjQxLDE2MSwxMCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5NF0pO2lmKDM9PT1lKXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDk0LDIzMCwxMjgsMTg2LDgsMCwwLDAsMCwxNDksMCw2LDI0MSwxNjEsMTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTRdKX19fV0pLHR9KCk7UHAocnksIkZSRVEiLFs5NmUzLDg4MjAwLDY0ZTMsNDhlMyw0NDEwMCwzMmUzLDI0ZTMsMjIwNTAsMTZlMywxMmUzLDExMDI1LDhlMyw3MzUwXSk7dmFyIG55PU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIGl5KHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybih0W2VdPDw4KSsodFtlKzFdfHwwKX1mdW5jdGlvbiBveSh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4odFtlXTw8MjQ+Pj4wKSsodFtlKzFdPDwxNikrKHRbZSsyXTw8OCkrKHRbZSszXXx8MCl9ZnVuY3Rpb24gYXkodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuIG5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKS5nZXRJbnQzMihlKX1mdW5jdGlvbiBjeSh0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4gb3kodCxlKSpueStveSh0LGUrNCl9ZnVuY3Rpb24gdXkodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAscj1uZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCk7cmV0dXJuIHIuZ2V0VWludDMyKGUpPDwzMnxyLmdldFVpbnQzMihlKzQpfXZhciBseT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7aWYoTXAodGhpcyx0KSxQcCh0aGlzLCJfYnl0ZXNBdmFpbGFibGUiLHZvaWQgMCksUHAodGhpcywiX2JpdHNBdmFpbGFibGUiLDApLFBwKHRoaXMsIl93b3JkIiwwKSwhZSl0aHJvdyBuZXcgRXJyb3IoIkV4cEdvbG9tYiBkYXRhIHBhcmFtcyBpcyByZXF1aXJlZCIpO3RoaXMuX2RhdGE9ZSx0aGlzLl9ieXRlc0F2YWlsYWJsZT1lLmJ5dGVMZW5ndGgsdGhpcy5fYnl0ZXNBdmFpbGFibGUmJnRoaXMuX2xvYWRXb3JkKCl9cmV0dXJuIEVwKHQsW3trZXk6Il9sb2FkV29yZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhLmJ5dGVMZW5ndGgtdGhpcy5fYnl0ZXNBdmFpbGFibGUsZT1NYXRoLm1pbig0LHRoaXMuX2J5dGVzQXZhaWxhYmxlKTtpZigwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGJ5dGVzIGF2YWlsYWJsZSIpO3ZhciByPW5ldyBVaW50OEFycmF5KDQpO3Iuc2V0KHRoaXMuX2RhdGEuc3ViYXJyYXkodCx0K2UpKSx0aGlzLl93b3JkPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcikuZ2V0VWludDMyKDApLHRoaXMuX2JpdHNBdmFpbGFibGU9OCplLHRoaXMuX2J5dGVzQXZhaWxhYmxlLT1lfX0se2tleToiYml0c1BvcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gOCp0aGlzLl9ieXRlc0F2YWlsYWJsZS10aGlzLl9iaXRzQXZhaWxhYmxlfX0se2tleToiYml0c0xlZnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIDgqdGhpcy5fZGF0YS5sZW5ndGgtdGhpcy5iaXRzUG9zKCl9fSx7a2V5OiJieXRlQWxpZ25lZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuYml0c1BvcygpfHx0aGlzLmJpdHNQb3MoKSU4PT0wfX0se2tleToic2tpcEJpdHMiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2JpdHNBdmFpbGFibGU+dCl0aGlzLl93b3JkPDw9dCx0aGlzLl9iaXRzQXZhaWxhYmxlLT10O2Vsc2V7dC09dGhpcy5fYml0c0F2YWlsYWJsZTt2YXIgZT1NYXRoLmZsb29yKHQvOCk7dC09OCplLHRoaXMuX2J5dGVzQXZhaWxhYmxlLT1lLHRoaXMuX2xvYWRXb3JkKCksdGhpcy5fd29yZDw8PXQsdGhpcy5fYml0c0F2YWlsYWJsZS09dH19fSx7a2V5OiJyZWFkQml0cyIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodD4zMil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWFkIG1vcmUgdGhhbiAzMiBiaXRzIik7dmFyIGU9TWF0aC5taW4odGhpcy5fYml0c0F2YWlsYWJsZSx0KSxyPXRoaXMuX3dvcmQ+Pj4zMi1lO3JldHVybiB0aGlzLl9iaXRzQXZhaWxhYmxlLT1lLHRoaXMuX2JpdHNBdmFpbGFibGU+MD90aGlzLl93b3JkPDw9ZTp0aGlzLl9ieXRlc0F2YWlsYWJsZT4wJiZ0aGlzLl9sb2FkV29yZCgpLChlPXQtZSk+MCYmdGhpcy5fYml0c0F2YWlsYWJsZT9yPDxlfHRoaXMucmVhZEJpdHMoZSk6cn19LHtrZXk6InNraXBMWiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtmb3IodD0wO3Q8dGhpcy5fYml0c0F2YWlsYWJsZTsrK3QpaWYodGhpcy5fd29yZCYyMTQ3NDgzNjQ4Pj4+dClyZXR1cm4gdGhpcy5fd29yZDw8PXQsdGhpcy5fYml0c0F2YWlsYWJsZS09dCx0O3JldHVybiB0aGlzLl9sb2FkV29yZCgpLHQrdGhpcy5za2lwTFooKX19LHtrZXk6InNraXBVRUciLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5za2lwQml0cygxK3RoaXMuc2tpcExaKCkpfX0se2tleToicmVhZFVFRyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNraXBMWigpO3JldHVybiB0aGlzLnJlYWRCaXRzKHQrMSktMX19LHtrZXk6InJlYWRFRyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRVRUcoKTtyZXR1cm4gMSZ0PzErdD4+PjE6LTEqKHQ+Pj4xKX19LHtrZXk6InJlYWRCb29sIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5yZWFkQml0cygxKX19LHtrZXk6InJlYWRVQnl0ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkQml0cyg4KX19LHtrZXk6InNraXBTY2FsaW5nTGlzdCIsdmFsdWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTgscj04LG49MDtuPHQ7bisrKTAhPT1yJiYocj0oZSt0aGlzLnJlYWRFRygpKzI1NiklMjU2KSxlPTA9PT1yP2U6cn19XSksdH0oKSxzeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7TXAodGhpcyx0KSx0aGlzLl9idWZmZXI9ZSx0aGlzLl9vZmZzZXQ9MCx0aGlzLl9oZWxkQml0cz0wLHRoaXMuX251bUhlbGRCaXRzPTB9cmV0dXJuIEVwKHQsW3trZXk6InJlYWRVaW50OCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmZmVyW3RoaXMuX29mZnNldCsrXX19LHtrZXk6InJlYWRVaW50MTYiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlclt0aGlzLl9vZmZzZXQrK108PDh8dGhpcy5fYnVmZmVyW3RoaXMuX29mZnNldCsrXX19LHtrZXk6InJlYWRVaW50MzIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1ZmZlclt0aGlzLl9vZmZzZXQrK108PDI0fHRoaXMuX2J1ZmZlclt0aGlzLl9vZmZzZXQrK108PDE2fHRoaXMuX2J1ZmZlclt0aGlzLl9vZmZzZXQrK108PDh8dGhpcy5fYnVmZmVyW3RoaXMuX29mZnNldCsrXX19LHtrZXk6InJlYWRVaW50OEFycmF5Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9idWZmZXIuc2xpY2UodGhpcy5fb2Zmc2V0LHRoaXMuX29mZnNldCt0KTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz10LGV9fSx7a2V5OiJzdHJlYW1SZWFkMUJ5dGVzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2hlbGRCaXRzPXRoaXMucmVhZFVpbnQ4KCksdGhpcy5fbnVtSGVsZEJpdHM9OH19LHtrZXk6InN0cmVhbVJlYWQyQnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faGVsZEJpdHM9dGhpcy5yZWFkVWludDE2KCksdGhpcy5fbnVtSGVsZEJpdHM9MTZ9fSx7a2V5OiJleHRyYWN0Qml0cyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faGVsZEJpdHM+PnRoaXMuX251bUhlbGRCaXRzLXQmKDE8PHQpLTE7cmV0dXJuIHRoaXMuX251bUhlbGRCaXRzLT10LGV9fV0pLHR9KCksZHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7TXAodGhpcyx0KX1yZXR1cm4gRXAodCxudWxsLFt7a2V5OiJwYXJzZVZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgcj1uZXcgc3koZSksbj1yLnJlYWRVaW50OCgpO3Iuc3RyZWFtUmVhZDFCeXRlcygpLHIuZXh0cmFjdEJpdHMoNSk7dmFyIGksbyxhLGMsdSxsLHMsZCxmPXIuZXh0cmFjdEJpdHMoMikrMSxoPXIuZXh0cmFjdEJpdHMoMSkscD17fTtoJiYoci5zdHJlYW1SZWFkMkJ5dGVzKCksYz1yLmV4dHJhY3RCaXRzKDIpLHU9ci5leHRyYWN0Qml0cygzKSxvPXIuZXh0cmFjdEJpdHMoMyksYT1yLmV4dHJhY3RCaXRzKDIpLHIuZXh0cmFjdEJpdHMoNikscD10LnBhcnNlVlZDUFRMUmVjb3JkKHIsbyksaT1yLnJlYWRVaW50MTYoKSxsPXIucmVhZFVpbnQxNigpLHM9ci5yZWFkVWludDE2KCksZD1yLnJlYWRVaW50MTYoKSk7Zm9yKHZhciB5PXIucmVhZFVpbnQ4KCksdj1bXSxtPVtdLGI9W10sWj1udWxsLGc9MDtnPHk7ZysrKXtyLnN0cmVhbVJlYWQxQnl0ZXMoKSxyLmV4dHJhY3RCaXRzKDEpLHIuZXh0cmFjdEJpdHMoMik7dmFyIEc9ci5leHRyYWN0Qml0cyg1KSx3PTE7MTMhPT1HJiYxMiE9PUcmJih3PXIucmVhZFVpbnQxNigpKTtmb3IodmFyIFY9MDtWPHc7VisrKXt2YXIgWD1yLnJlYWRVaW50MTYoKTtzd2l0Y2goRyl7Y2FzZSAxNDp2LnB1c2goci5yZWFkVWludDhBcnJheShYKSk7YnJlYWs7Y2FzZSAxNTp2YXIgVz1yLnJlYWRVaW50OEFycmF5KFgpO1p8fChaPXQucGFyc2VTUFModC5yZW1vdmVFUEIoVykpKSxtLnB1c2goVyk7YnJlYWs7Y2FzZSAxNjpiLnB1c2goci5yZWFkVWludDhBcnJheShYKSl9fX1yZXR1cm57ZGF0YTplLGNvbmZpZ3VyYXRpb25WZXJzaW9uOm4sY29kZWM6ImJ2YzIuMS42Lkw5My5CMCIsbmFsVW5pdFNpemU6ZixwdGxQcmVzZW50RmxhZzpoLG9sc0lkeDppLG51bVN1YmxheWVyczpvLGNvbnN0YW50RnJhbWVSYXRlOmEsY2hyb21hRm9ybWF0SWRjOmMsYml0RGVwdGhMdW1hTWludXM4OnUscHRsUmVjb3JkOnAsd2lkdGg6bCxoZWlnaHQ6cyxzYW1wbGVSYXRlOmQsbnVtT2ZBcnJheXM6eSx2cHM6dixzcHM6bSxwcHM6YixzcHNQYXJzZWQ6Wn19fSx7a2V5OiJwYXJzZVZWQ1BUTFJlY29yZCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0LnN0cmVhbVJlYWQyQnl0ZXMoKSx0LmV4dHJhY3RCaXRzKDIpO3ZhciByPXQuZXh0cmFjdEJpdHMoNiksbj10LmV4dHJhY3RCaXRzKDcpLGk9dC5leHRyYWN0Qml0cygxKSxvPXQucmVhZFVpbnQ4KCk7dC5zdHJlYW1SZWFkMUJ5dGVzKCk7dmFyIGE9dC5leHRyYWN0Qml0cygxKSxjPXQuZXh0cmFjdEJpdHMoMSksdT1uZXcgVWludDhBcnJheShyKTtpZihyKXtmb3IodmFyIGw9MDtsPHItMTtsKyspe3ZhciBzPXQuZXh0cmFjdEJpdHMoNik7dC5zdHJlYW1SZWFkMUJ5dGVzKCk7dmFyIGQ9dC5leHRyYWN0Qml0cygyKTt1W2xdPXM8PDJ8ZH11W3ItMV09dC5leHRyYWN0Qml0cyg2KX1lbHNlIHQuZXh0cmFjdEJpdHMoNik7dmFyIGY9W107aWYoZT4xKXt0LnN0cmVhbVJlYWQxQnl0ZXMoKTtmb3IodmFyIGg9MCxwPWUtMjtwPj0wOy0tcCl7aHw9dC5leHRyYWN0Qml0cygxKTw8cH1mb3IodmFyIHk9ZTt5PD04JiZlPjE7Kyt5KXQuZXh0cmFjdEJpdHMoMSk7Zm9yKHZhciB2PWUtMjt2Pj0wOy0tdiloJjE8PHYmJihmW3ZdPXQucmVhZFVpbnQ4KCkpfXZhciBtPXQucmVhZFVpbnQ4KCksYj1bXTtpZihtKWZvcih2YXIgWj0wO1o8bTtaKyspYi5wdXNoKHQucmVhZFVpbnQzMigpKTtyZXR1cm57Z2VuZXJhbFByb2ZpbGVJZGM6bixnZW5lcmFsVGllckZsYWc6aSxnZW5lcmFsTGV2ZWxJZGM6byxwdGxGcmFtZU9ubHlDb25zdHJhaW50RmxhZzphLHB0bE11bHRpbGF5ZXJFbmFibGVkRmxhZzpjLGdlbmVyYWxDb25zdHJhaW50SW5mbzp1LHN1YkxheWVyTGV2ZWxJZGM6ZixnZW5lcmFsU3ViUHJvZmlsZUlkYzpiLHB0bE51bVN1YlByb2ZpbGVzOm0sbnVtQnl0ZXNDb25zdHJhaW50SW5mbzpyfX19LHtrZXk6ImdldEF2Y2NOYWxzIix2YWx1ZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9W107dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7dmFyIHI9dC5kYXRhdmlldy5nZXRJbnQzMih0LmRhdGF2aWV3LnBvc2l0aW9uKTtpZighKHQubGVuZ3RoLXQucG9zaXRpb24+PXIpKWJyZWFrO3ZhciBuPXQuYnVmZmVyLnNsaWNlKHQucG9zaXRpb24sdC5wb3NpdGlvbis0KTt0LnNraXAoNCk7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIuc2xpY2UodC5wb3NpdGlvbix0LnBvc2l0aW9uK3IpKTt0LnNraXAociksZS5wdXNoKHtoZWFkZXI6bixib2R5Oml9KX1yZXR1cm4gZX19LHtrZXk6ImFuYWx5c2VOYWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPSgyNDgmdC5ib2R5WzFdKT4+Mztzd2l0Y2godC50eXBlPWUsZSl7Y2FzZSAyMzpjYXNlIDI0OmJyZWFrO2Nhc2UgNzpjYXNlIDg6dC5rZXk9ITA7YnJlYWs7Y2FzZSAxNDp0LnZwcz0hMDticmVhaztjYXNlIDE1OnQuc3BzPSEwO2JyZWFrO2Nhc2UgMTY6dC5wcHM9ITA7YnJlYWs7Y2FzZSAxNzp0LmFwcz0hMH19fSx7a2V5OiJyZW1vdmVFUEIiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmJ5dGVMZW5ndGgscj1bXSxuPTE7bjxlLTI7KTA9PT10W25dJiYwPT09dFtuKzFdJiYzPT09dFtuKzJdPyhyLnB1c2gobisyKSxuKz0yKTpuKys7aWYoIXIubGVuZ3RoKXJldHVybiB0O3ZhciBpPWUtci5sZW5ndGgsbz1uZXcgVWludDhBcnJheShpKSxhPTA7Zm9yKG49MDtuPGk7YSsrLG4rKylhPT09clswXSYmKGErKyxyLnNoaWZ0KCkpLG9bbl09dFthXTtyZXR1cm4gb319LHtrZXk6InBhcnNlVnBzIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6InBhcnNlU1BTIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgcj1uZXcgbHkoZSk7ci5yZWFkVUJ5dGUoKSxyLnJlYWRVQnl0ZSgpLHIuc2tpcEJpdHMoNCk7dmFyIG49ci5yZWFkQml0cyg0KSxpPXIucmVhZEJpdHMoMyksbz1yLnJlYWRCaXRzKDIpLGE9NDIwO288PTMmJihhPVswLDQyMCw0MjIsNDQ0XVtvXSksci5yZWFkQml0cygyKSxyLnJlYWRCaXRzKDEpO3ZhciBjPXQuX3BhcnNlUHJvZmlsZVRpZXJMZXZlbChyLDEsaSk7cmV0dXJuIHIucmVhZEJpdHMoMSksci5yZWFkQml0cygxKSYmci5yZWFkQml0cygxKSx7d2lkdGg6ci5yZWFkVUVHKCksaGVpZ2h0OnIucmVhZFVFRygpLHNwc01heFN1YkxheWVyTWludXMxOmksc3BzVmlkZW9QYXJhbWV0ZXJTZXRJZDpuLGNocm9tYUZvcm1hdElkYzpvLGNocm9tYUZvcm1hdDphLHB0bEluZm86Y319fSx7a2V5OiJfcGFyc2VQcm9maWxlVGllckxldmVsIix2YWx1ZTpmdW5jdGlvbihlLHIsbil7dmFyIGksbz1lLnJlYWRCaXRzKDcpLGE9ZS5yZWFkQml0cygxKSxjPWUucmVhZEJpdHMoOCksdT1lLnJlYWRCaXRzKDEpLGw9ZS5yZWFkQml0cygxKTtyJiYoaT10Ll9wYXJzZUdlbmVyYWxDb25zdHJhaW50c0luZm8oZSkpO2Zvcih2YXIgcz1uLTEsZD1bXSxmPVtdLGg9W10scD1zO3A+PTA7LS1wKWRbcF09ZS5yZWFkQml0cygxKTtmb3IoOyFlLmJ5dGVBbGlnbmVkKCk7KWUucmVhZEJpdHMoMSk7Zm9yKHZhciB5PXM7eT49MDstLXkpZFt5XSYmKGZbeV09ZS5yZWFkVUJ5dGUoKSk7aWYocilmb3IodmFyIHY9ZS5yZWFkVUJ5dGUoKSxtPTA7bTx2O20rKyloW21dPWUucmVhZEJpdHMoMzIpO3JldHVybntnZW5lcmFsUHJvZmlsZUlkYzpvLGdlbmVyYWxUaWVyRmxhZzphLGdlbmVyYWxMZXZlbElkYzpjLHB0bEZyYW1lT25seUNvbnN0cmFpbnRGbGFnOnUscHRsTXVsdGlsYXllckVuYWJsZWRGbGFnOmwscHRsU3VibGF5ZXJMZXZlbFByZXNlbnRGbGFnczpkLHB0bFN1YmxheWVyTGV2ZWxJZGNzOmYscHRsU3ViUHJvZmlsZUlkY3M6aCxnY2lJbmZvOml9fX0se2tleToiX3BhcnNlR2VuZXJhbENvbnN0cmFpbnRzSW5mbyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC5yZWFkQml0cygxKTtpZihlKXt0LnNraXBCaXRzKDcxKTt2YXIgcj10LnJlYWRCaXRzKDgpO3ImJnQuc2tpcEJpdHMocil9dmFyIG49OC10LmJpdHNQb3MoKSU4O3JldHVybiB0LnNraXBCaXRzKG4pLHtnY2lQcmVzZW50RmxhZzplfX19XSksdH0oKSxmeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtNcCh0aGlzLHQpfXJldHVybiBFcCh0LG51bGwsW3trZXk6ImZpbmRCb3giLHZhbHVlOmZ1bmN0aW9uKGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAsaT1bXTtpZighZSlyZXR1cm4gaTtmb3IodmFyIG89MCxhPSIiLGM9MDtlLmxlbmd0aD43Oyl7aWYobz1veShlKSxhPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KDQsOCkpLGM9OCwxPT09bz8obz1jeShlLDgpLGMrPTgpOm98fChvPWUubGVuZ3RoKSwhclswXXx8YT09PXJbMF0pe3ZhciB1PWUuc3ViYXJyYXkoMCxvKTtpZighKHIubGVuZ3RoPDIpKXJldHVybiB0LmZpbmRCb3godS5zdWJhcnJheShjKSxyLnNsaWNlKDEpLG4rYyk7aS5wdXNoKHtzdGFydDpuLHNpemU6byxoZWFkZXJTaXplOmMsdHlwZTphLGRhdGE6dX0pfW4rPW8sZT1lLnN1YmFycmF5KG8pfXJldHVybiBpfX0se2tleToidGZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7dC50cmFja0lkPW95KGUpO3ZhciByPTQsbj0xJnQuZmxhZ3MsaT0yJnQuZmxhZ3Msbz04JnQuZmxhZ3MsYT0xNiZ0LmZsYWdzLGM9MzImdC5mbGFncztuJiYocis9NCx0LmJhc2VEYXRhT2Zmc2V0PW95KGUscikscis9NCksaSYmKHQuc2FtcGxlRGVzY3JpcHRpb25JbmRleD1veShlLHIpLHIrPTQpLG8mJih0LmRlZmF1bHRTYW1wbGVEdXJhdGlvbj1veShlLHIpLHIrPTQpLGEmJih0LmRlZmF1bHRTYW1wbGVTaXplPW95KGUscikscis9NCksYyYmKHQuZGVmYXVsdFNhbXBsZUZsYWdzPW95KGUscikpfSkpfX0se2tleToic2lkeCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9MDt0LnJlZmVyZW5jZV9JRD1veShlLHIpLHIrPTQsdC50aW1lc2NhbGU9b3koZSxyKSxyKz00LDA9PT10LnZlcnNpb24/KHQuZWFybGllc3RfcHJlc2VudGF0aW9uX3RpbWU9b3koZSxyKSxyKz00LHQuZmlyc3Rfb2Zmc2V0PW95KGUscikscis9NCk6KHQuZWFybGllc3RfcHJlc2VudGF0aW9uX3RpbWU9Y3koZSxyKSxyKz04LHQuZmlyc3Rfb2Zmc2V0PWN5KGUscikscis9OCkscis9Mix0LnJlZmVyZW5jZXM9W107dmFyIG49aXkoZSxyKTtyKz0yO2Zvcih2YXIgaT0wO2k8bjtpKyspe3ZhciBvPXt9O3QucmVmZXJlbmNlcy5wdXNoKG8pO3ZhciBhPW95KGUscik7cis9NCxvLnJlZmVyZW5jZV90eXBlPWE+PjMxJjEsby5yZWZlcmVuY2VkX3NpemU9MjE0NzQ4MzY0NyZhLG8uc3Vic2VnbWVudF9kdXJhdGlvbj1veShlLHIpLGE9b3koZSxyKz00KSxyKz00LG8uc3RhcnRzX3dpdGhfU0FQPWE+PjMxJjEsby5TQVBfdHlwZT1hPj4yOCY3LG8uU0FQX2RlbHRhX3RpbWU9MjY4NDM1NDU1JmF9fSkpfX0se2tleToibW9vdiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ5KGUsITEsKGZ1bmN0aW9uKGUscixuKXtlLm12aGQ9dC5tdmhkKHQuZmluZEJveChyLFsibXZoZCJdLG4pWzBdKSxlLnRyYWs9dC5maW5kQm94KHIsWyJ0cmFrIl0sbikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC50cmFrKGUpfSkpLGUucHNzaD10LnBzc2godC5maW5kQm94KHIsWyJwc3NoIl0sbilbMF0pfSkpfX0se2tleToibXZoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9MDsxPT09dC52ZXJzaW9uPyh0LnRpbWVzY2FsZT1veShlLDE2KSx0LmR1cmF0aW9uPWN5KGUsMjApLHIrPTI4KToodC50aW1lc2NhbGU9b3koZSw4KSx0LmR1cmF0aW9uPW95KGUsMTIpLHIrPTE2KSx0Lm5leHRUcmFja0lkPW95KGUscis3Nil9KSl9fSx7a2V5OiJ0cmFrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdnkoZSwhMSwoZnVuY3Rpb24oZSxyLG4pe2UudGtoZD10LnRraGQodC5maW5kQm94KHIsWyJ0a2hkIl0sbilbMF0pLGUubWRpYT10Lm1kaWEodC5maW5kQm94KHIsWyJtZGlhIl0sbilbMF0pLGUuZWR0cz10LmVkdHModC5maW5kQm94KHIsWyJlZHRzIl0sbilbMF0pfSkpfX0se2tleToidGtoZCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9MDsxPT09dC52ZXJzaW9uPyh0LnRyYWNrSWQ9b3koZSwxNiksdC5kdXJhdGlvbj1jeShlLDI0KSxyKz0zMik6KHQudHJhY2tJZD1veShlLDgpLHQuZHVyYXRpb249b3koZSwxNikscis9MjApLHQud2lkdGg9b3koZSxyKzUyKSx0LmhlaWdodD1veShlLHIrNTYpfSkpfX0se2tleToibWRpYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ5KGUsITEsKGZ1bmN0aW9uKGUscixuKXtlLm1kaGQ9dC5tZGhkKHQuZmluZEJveChyLFsibWRoZCJdLG4pWzBdKSxlLmhkbHI9dC5oZGxyKHQuZmluZEJveChyLFsiaGRsciJdLG4pWzBdKSxlLm1pbmY9dC5taW5mKHQuZmluZEJveChyLFsibWluZiJdLG4pWzBdKX0pKX19LHtrZXk6ImVkdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2eShlLCExLChmdW5jdGlvbihlLHIsbil7ZS5lbHN0PXQuZWxzdCh0LmZpbmRCb3gocixbImVsc3QiXSxuKVswXSl9KSl9fSx7a2V5OiJlbHN0Iix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMCwoZnVuY3Rpb24odCxlLHIpe3QuZW50cmllcz1bXSx0LmVudHJpZXNEYXRhPWU7dmFyIG49MCxpPW95KGUsbik7bis9NDtmb3IodmFyIG89MDtvPGk7bysrKXt2YXIgYT17fTt0LmVudHJpZXMucHVzaChhKSwxPT09dC52ZXJzaW9uPyhhLnNlZ21lbnRfZHVyYXRpb249Y3koZSxuKSxuKz04LGEubWVkaWFfdGltZT11eShlLG4pLG4rPTgpOihhLnNlZ21lbnRfZHVyYXRpb249b3koZSxuKSxuKz00LGEubWVkaWFfdGltZT1heShlLG4pLG4rPTQpLGEubWVkaWFfcmF0ZV9pbnRlZ2VyPWl5KGUsbiksbis9MixhLm1lZGlhX3JhdGVfZnJhY3Rpb249aXkoZSxyKSxuKz0yfX0pKX19LHtrZXk6Im1kaGQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2eSh0LCEwLChmdW5jdGlvbih0LGUpe3ZhciByPTA7MT09PXQudmVyc2lvbj8odC50aW1lc2NhbGU9b3koZSwxNiksdC5kdXJhdGlvbj1jeShlLDIwKSxyKz0yOCk6KHQudGltZXNjYWxlPW95KGUsOCksdC5kdXJhdGlvbj1veShlLDEyKSxyKz0xNik7dmFyIG49aXkoZSxyKTt0Lmxhbmd1YWdlPVN0cmluZy5mcm9tQ2hhckNvZGUoOTYrKG4+PjEwJjMxKSw5Nisobj4+NSYzMSksOTYrKDMxJm4pKX0pKX19LHtrZXk6ImhkbHIiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2eSh0LCEwLChmdW5jdGlvbih0LGUpezA9PT10LnZlcnNpb24mJih0LmhhbmRsZXJUeXBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KDQsOCkpKX0pKX19LHtrZXk6Im1pbmYiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2eShlLCExLChmdW5jdGlvbihlLHIsbil7ZS52bWhkPXQudm1oZCh0LmZpbmRCb3gocixbInZtaGQiXSxuKVswXSksZS5zbWhkPXQuc21oZCh0LmZpbmRCb3gocixbInNtaGQiXSxuKVswXSksZS5zdGJsPXQuc3RibCh0LmZpbmRCb3gocixbInN0YmwiXSxuKVswXSl9KSl9fSx7a2V5OiJ2bWhkIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMCwoZnVuY3Rpb24odCxlKXt0LmdyYXBoaWNzbW9kZT1peShlKSx0Lm9wY29sb3I9W2l5KGUsMiksaXkoZSw0KSxpeShlLDYpXX0pKX19LHtrZXk6InNtaGQiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2eSh0LCEwLChmdW5jdGlvbih0LGUpe3QuYmFsYW5jZT1peShlKX0pKX19LHtrZXk6InN0YmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2eShlLCExLChmdW5jdGlvbihlLHIsbil7dmFyIGksbyxhO2Uuc3RzZD10LnN0c2QodC5maW5kQm94KHIsWyJzdHNkIl0sbilbMF0pLGUuc3R0cz10LnN0dHModC5maW5kQm94KHIsWyJzdHRzIl0sbilbMF0pLGUuY3R0cz10LmN0dHModC5maW5kQm94KHIsWyJjdHRzIl0sbilbMF0pLGUuc3RzYz10LnN0c2ModC5maW5kQm94KHIsWyJzdHNjIl0sbilbMF0pLGUuc3Rzej10LnN0c3oodC5maW5kQm94KHIsWyJzdHN6Il0sbilbMF0pLGUuc3Rjbz10LnN0Y28odC5maW5kQm94KHIsWyJzdGNvIl0sbilbMF0pLGUuc3Rjb3x8KGUuY282ND10LmNvNjQodC5maW5kQm94KHIsWyJjbzY0Il0sbilbMF0pLGUuc3Rjbz1lLmNvNjQpO3ZhciBjPW51bGw9PT0oaT1lLnN0c2QuZW50cmllc1swXSl8fHZvaWQgMD09PWl8fG51bGw9PT0obz1pLnNpbmYpfHx2b2lkIDA9PT1vfHxudWxsPT09KGE9by5zY2hpKXx8dm9pZCAwPT09YT92b2lkIDA6YS50ZW5jLmRlZmF1bHRfSVZfc2l6ZTtlLnN0c3M9dC5zdHNzKHQuZmluZEJveChyLFsic3RzcyJdLG4pWzBdKSxlLnNlbmM9dC5zZW5jKHQuZmluZEJveChyLFsic2VuYyJdLG4pWzBdLGMpfSkpfX0se2tleToic2VuYyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjg7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQscil7dmFyIG49MCxpPW95KHIsbik7bis9NCx0LnNhbXBsZXM9W107Zm9yKHZhciBvPTA7bzxpO28rKyl7Zm9yKHZhciBhPXtJbml0aWFsaXphdGlvblZlY3RvcjpbXX0sYz0wO2M8ZTtjKyspYS5Jbml0aWFsaXphdGlvblZlY3RvcltjXT1yW24rY107aWYobis9ZSwyJnQuZmxhZ3Mpe2Euc3Vic2FtcGxlcz1bXTt2YXIgdT1peShyLG4pO24rPTI7Zm9yKHZhciBsPTA7bDx1O2wrKyl7dmFyIHM9e307cy5CeXRlc09mQ2xlYXJEYXRhPWl5KHIsbiksbis9MixzLkJ5dGVzT2ZQcm90ZWN0ZWREYXRhPW95KHIsbiksbis9NCxhLnN1YnNhbXBsZXMucHVzaChzKX19dC5zYW1wbGVzLnB1c2goYSl9fSkpfX0se2tleToicHNzaCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0wLG89MDtvPDE2O28rKyluLnB1c2gobXkoZVtpK29dKSk7aWYoaSs9MTYsdC52ZXJzaW9uPjApe3ZhciBhPW95KGUsaSk7aSs9NDtmb3IodmFyIGM9MDtjPCgiIithKS5sZW5ndGg7YysrKWZvcih2YXIgdT0wO3U8MTY7dSsrKXt2YXIgbD1lW2ldO2krPTEsci5wdXNoKG15KGwpKX19dmFyIHM9b3koZSxpKTt0LmRhdGFfc2l6ZT1zLGkrPTQsdC5raWQ9cix0LnN5c3RlbV9pZD1uLHQuYnVmZmVyPWV9KSl9fSx7a2V5OiJidmMyIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdnkoZSwhMSwoZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXB5KGUsciksbz1yLnN1YmFycmF5KGkpO24rPWksZS52dmNDPXQuYnYyQyh0LmZpbmRCb3gobyxbImJ2MkMiXSxuKVswXSksZS5wYXNwPXQucGFzcCh0LmZpbmRCb3gobyxbInBhc3AiXSxuKVswXSl9KSl9fSx7a2V5OiJidjJDIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMSwoZnVuY3Rpb24odCxlLHIpe3ZhciBuPWR5LnBhcnNlVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQoZSk7Zm9yKHZhciBpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJih0W2ldPW5baV0pfSkpfX0se2tleToic3RzZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ5KGUsITAsKGZ1bmN0aW9uKGUscixuKXtlLmVudHJ5Q291bnQ9b3kociksZS5lbnRyaWVzPXQuZmluZEJveChyLnN1YmFycmF5KDQpLFtdLG4rNCkubWFwKChmdW5jdGlvbihlKXtzd2l0Y2goZS50eXBlKXtjYXNlImF2YzEiOmNhc2UiYXZjMiI6Y2FzZSJhdmMzIjpjYXNlImF2YzQiOnJldHVybiB0LmF2YzEoZSk7Y2FzZSJodmMxIjpjYXNlImhldjEiOnJldHVybiB0Lmh2YzEoZSk7Y2FzZSJidmMyIjpyZXR1cm4gdC5idmMyKGUpO2Nhc2UibXA0YSI6cmV0dXJuIHQubXA0YShlKTtjYXNlImFsYXciOmNhc2UidWxhdyI6cmV0dXJuIHQuYWxhdyhlKTtjYXNlImVuY2EiOnJldHVybiB2eShlLCExLChmdW5jdGlvbihlLHIsbil7ZS5jaGFubmVsQ291bnQ9aXkociwxNiksZS5zYW1wbGVzaXplPWl5KHIsMTgpLGUuc2FtcGxlUmF0ZT1veShyLDI0KS82NTUzNixyPXIuc3ViYXJyYXkoMjgpLGUuc2luZj10LnNpbmYodC5maW5kQm94KHIsWyJzaW5mIl0sbilbMF0pLGUuZXNkcz10LmVzZHModC5maW5kQm94KHIsWyJlc2RzIl0sbilbMF0pfSkpO2Nhc2UiZW5jdiI6cmV0dXJuIHZ5KGUsITEsKGZ1bmN0aW9uKGUscixuKXtlLndpZHRoPWl5KHIsMjQpLGUuaGVpZ2h0PWl5KHIsMjYpLGUuaG9yaXpyZXNvbHV0aW9uPW95KHIsMjgpLGUudmVydHJlc29sdXRpb249b3kociwzMikscj1yLnN1YmFycmF5KDc4KSxlLnNpbmY9dC5zaW5mKHQuZmluZEJveChyLFsic2luZiJdLG4pWzBdKSxlLmF2Y0M9dC5hdmNDKHQuZmluZEJveChyLFsiYXZjQyJdLG4pWzBdKSxlLmh2Y0M9dC5odmNDKHQuZmluZEJveChyLFsiaHZjQyJdLG4pWzBdKSxlLnBhc3A9dC5wYXNwKHQuZmluZEJveChyLFsicGFzcCJdLG4pWzBdKX0pKX19KSkuZmlsdGVyKEJvb2xlYW4pfSkpfX0se2tleToidGVuYyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITEsKGZ1bmN0aW9uKHQsZSl7dmFyIHI9Njt0LmRlZmF1bHRfSXNFbmNyeXB0ZWQ9ZVtyXSxyKz0xLHQuZGVmYXVsdF9JVl9zaXplPWVbcl0scis9MSx0LmRlZmF1bHRfS0lEPVtdO2Zvcih2YXIgbj0wO248MTY7bisrKXQuZGVmYXVsdF9LSUQucHVzaChteShlW3JdKSkscis9MX0pKX19LHtrZXk6InNjaGkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2eShlLCExLChmdW5jdGlvbihlLHIsbil7ZS50ZW5jPXQudGVuYyh0LmZpbmRCb3gocixbInRlbmMiXSxuKVswXSl9KSl9fSx7a2V5OiJzaW5mIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdnkoZSwhMSwoZnVuY3Rpb24oZSxyLG4pe2Uuc2NoaT10LnNjaGkodC5maW5kQm94KHIsWyJzY2hpIl0sbilbMF0pLGUuZnJtYT10LmZybWEodC5maW5kQm94KHIsWyJmcm1hIl0sbilbMF0pfSkpfX0se2tleToiZnJtYSIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITEsKGZ1bmN0aW9uKHQsZSl7dC5kYXRhX2Zvcm1hdD0iIjtmb3IodmFyIHI9MDtyPDQ7cisrKXQuZGF0YV9mb3JtYXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSl9KSl9fSx7a2V5OiJhdmMxIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdnkoZSwhMSwoZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXB5KGUsciksbz1yLnN1YmFycmF5KGkpO24rPWksZS5hdmNDPXQuYXZjQyh0LmZpbmRCb3gobyxbImF2Y0MiXSxuKVswXSksZS5wYXNwPXQucGFzcCh0LmZpbmRCb3gobyxbInBhc3AiXSxuKVswXSl9KSl9fSx7a2V5OiJhdmNDIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMSwoZnVuY3Rpb24odCxlKXt0LmNvbmZpZ3VyYXRpb25WZXJzaW9uPWVbMF0sdC5BVkNQcm9maWxlSW5kaWNhdGlvbj1lWzFdLHQucHJvZmlsZUNvbXBhdGliaWxpdHk9ZVsyXSx0LkFWQ0xldmVsSW5kaWNhdGlvbj1lWzNdLHQuY29kZWM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ImF2YzEuIixuPTA7bjwzO24rKykoZT10W25dLnRvU3RyaW5nKDE2KSkubGVuZ3RoPDImJihlPSIwIi5jb25jYXQoZSkpLHIrPWU7cmV0dXJuIHJ9KFtlWzFdLGVbMl0sZVszXV0pLHQubGVuZ3RoU2l6ZU1pbnVzT25lPTMmZVs0XSx0LnNwc0xlbmd0aD0zMSZlWzVdLHQuc3BzPVtdO2Zvcih2YXIgcj02LG49MDtuPHQuc3BzTGVuZ3RoO24rKyl7dmFyIGk9aXkoZSxyKTtyKz0yLHQuc3BzLnB1c2goZS5zdWJhcnJheShyLHIraSkpLHIrPWl9dC5wcHNMZW5ndGg9ZVtyXSxyKz0xLHQucHBzPVtdO2Zvcih2YXIgbz0wO288dC5wcHNMZW5ndGg7bysrKXt2YXIgYT1peShlLHIpO3IrPTIsdC5wcHMucHVzaChlLnN1YmFycmF5KHIscis9YSkpLHIrPWF9fSkpfX0se2tleToiaHZjMSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ5KGUsITEsKGZ1bmN0aW9uKGUscixuKXt2YXIgaT1weShlLHIpLG89ci5zdWJhcnJheShpKTtuKz1pLGUuaHZjQz10Lmh2Y0ModC5maW5kQm94KG8sWyJodmNDIl0sbilbMF0pLGUucGFzcD10LnBhc3AodC5maW5kQm94KG8sWyJwYXNwIl0sbilbMF0pfSkpfX0se2tleToiaHZjQyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITEsKGZ1bmN0aW9uKGUscil7ZS5kYXRhPXQuZGF0YSxlLmNvZGVjPSJoZXYxLjEuNi5MOTMuQjAiLGUuY29uZmlndXJhdGlvblZlcnNpb249clswXTt2YXIgbj1yWzFdO2UuZ2VuZXJhbFByb2ZpbGVTcGFjZT1uPj42LGUuZ2VuZXJhbFRpZXJGbGFnPSgzMiZuKT4+NSxlLmdlbmVyYWxQcm9maWxlSWRjPTMxJm4sZS5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHk9b3kociwyKSxlLmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3M9ci5zdWJhcnJheSg2LDEyKSxlLmdlbmVyYWxMZXZlbElkYz1yWzEyXSxlLmF2Z0ZyYW1lUmF0ZT1peShyLDE5KSxlLm51bU9mQXJyYXlzPXJbMjJdLGUudnBzPVtdLGUuc3BzPVtdLGUucHBzPVtdO2Zvcih2YXIgaT0yMyxvPTAsYT0wLGM9MCx1PTA7dTxlLm51bU9mQXJyYXlzO3UrKyl7bz02MyZyW2ldLGE9aXkocixpKzEpLGkrPTM7Zm9yKHZhciBsLHM9W10sZD0wO2Q8YTtkKyspYz1peShyLGkpLGkrPTIscy5wdXNoKHIuc3ViYXJyYXkoaSxpK2MpKSxpKz1jO2lmKDMyPT09bykobD1lLnZwcykucHVzaC5hcHBseShsLHMpO2Vsc2UgaWYoMzM9PT1vKXt2YXIgZjsoZj1lLnNwcykucHVzaC5hcHBseShmLHMpfWVsc2UgaWYoMzQ9PT1vKXt2YXIgaDsoaD1lLnBwcykucHVzaC5hcHBseShoLHMpfX19KSl9fSx7a2V5OiJwYXNwIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMSwoZnVuY3Rpb24odCxlKXt0LmhTcGFjaW5nPW95KGUpLHQudlNwYWNpbmc9b3koZSw0KX0pKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2eShlLCExLChmdW5jdGlvbihlLHIsbil7dmFyIGk9eXkoZSxyKTtlLmVzZHM9dC5lc2RzKHQuZmluZEJveChyLnN1YmFycmF5KGkpLFsiZXNkcyJdLG4raSlbMF0pfSkpfX0se2tleToiZXNkcyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7dC5jb2RlYz0ibXA0YS4iO2Zvcih2YXIgcj0wLG49MCxpPTAsbz0wO2UubGVuZ3RoOyl7Zm9yKG89ZVtyPTBdLG49ZVtyKzFdLHIrPTI7MTI4Jm47KWk9KDEyNyZuKTw8NyxuPWVbcl0scis9MTtpZihpKz0xMjcmbiwzPT09byllPWUuc3ViYXJyYXkociszKTtlbHNle2lmKDQhPT1vKXtpZig1PT09byl7dmFyIGE9dC5jb25maWc9ZS5zdWJhcnJheShyLHIraSksYz0oMjQ4JmFbMF0pPj4zO3JldHVybiAzMT09PWMmJmEubGVuZ3RoPj0yJiYoYz0zMisoKDcmYVswXSk8PDMpKygoMjI0JmFbMV0pPj41KSksdC5vYmplY3RUeXBlPWMsdC5jb2RlYys9Yy50b1N0cmluZygxNiksdm9pZCgiLiI9PT10LmNvZGVjW3QuY29kZWMubGVuZ3RoLTFdJiYodC5jb2RlYz10LmNvZGVjLnN1YnN0cmluZygwLHQuY29kZWMubGVuZ3RoLTEpKSl9cmV0dXJuIHZvaWQoIi4iPT09dC5jb2RlY1t0LmNvZGVjLmxlbmd0aC0xXSYmKHQuY29kZWM9dC5jb2RlYy5zdWJzdHJpbmcoMCx0LmNvZGVjLmxlbmd0aC0xKSkpfXQuY29kZWMrPShlW3JdLnRvU3RyaW5nKDE2KSsiLiIpLnBhZFN0YXJ0KDMsIjAiKSxlPWUuc3ViYXJyYXkocisxMyl9fX0pKX19LHtrZXk6ImFsYXciLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2eSh0LCExLChmdW5jdGlvbih0LGUpe3l5KHQsZSl9KSl9fSx7a2V5OiJzdHRzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMCwoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9b3koZSksbj1bXSxpPTQsbz0wO288cjtvKyspbi5wdXNoKHtjb3VudDpveShlLGkpLGRlbHRhOm95KGUsaSs0KX0pLGkrPTg7dC5lbnRyeUNvdW50PXIsdC5lbnRyaWVzPW59KSl9fSx7a2V5OiJjdHRzIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMCwoZnVuY3Rpb24odCxlKXt2YXIgcj1veShlKSxuPVtdLGk9NDtpZigxPT09dC52ZXJzaW9uKWZvcih2YXIgbz0wO288cjtvKyspbi5wdXNoKHtjb3VudDpveShlLGkpLG9mZnNldDpveShlLGkrNCl9KSxpKz04O2Vsc2UgZm9yKHZhciBhPTA7YTxyO2ErKyluLnB1c2goe2NvdW50Om95KGUsaSksb2Zmc2V0Oi0oMSt+b3koZSxpKzQpKX0pLGkrPTg7dC5lbnRyeUNvdW50PXIsdC5lbnRyaWVzPW59KSl9fSx7a2V5OiJzdHNjIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMCwoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9b3koZSksbj1uZXcgQXJyYXkociksaT00LG89MDtvPHI7bysrKW5bb109e2ZpcnN0Q2h1bms6b3koZSxpKSxzYW1wbGVzUGVyQ2h1bms6b3koZSxpKzQpLHNhbXBsZURlc2NyaXB0aW9uSW5kZXg6b3koZSxpKzgpfSxpKz0xMjt0LmVudHJ5Q291bnQ9cix0LmVudHJpZXM9bn0pKX19LHtrZXk6InN0c3oiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2eSh0LCEwLChmdW5jdGlvbih0LGUpe3ZhciByPW95KGUpLG49b3koZSw0KSxpPW5ldyBBcnJheShuKTtpZighcilmb3IodmFyIG89OCxhPTA7YTxuO2ErKylpW2FdPW95KGUsbyksbys9NDt0LnNhbXBsZVNpemU9cix0LnNhbXBsZUNvdW50PW4sdC5lbnRyeVNpemVzPWl9KSl9fSx7a2V5OiJzdGNvIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMCwoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9b3koZSksbj1uZXcgQXJyYXkociksaT00LG89MDtvPHI7bysrKW5bb109b3koZSxpKSxpKz00O3QuZW50cnlDb3VudD1yLHQuZW50cmllcz1ufSkpfX0se2tleToiY282NCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW95KGUpLG49bmV3IEFycmF5KHIpLGk9NCxvPTA7bzxyO28rKyluW29dPWN5KGUsaSksaSs9ODt0LmVudHJ5Q291bnQ9cix0LmVudHJpZXM9bn0pKX19LHtrZXk6InN0c3MiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2eSh0LCEwLChmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1veShlKSxuPW5ldyBBcnJheShyKSxpPTQsbz0wO288cjtvKyspbltvXT1veShlLGkpLGkrPTQ7dC5lbnRyeUNvdW50PXIsdC5lbnRyaWVzPW59KSl9fSx7a2V5OiJtb29mIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdnkoZSwhMSwoZnVuY3Rpb24oZSxyLG4pe2UubWZoZD10Lm1maGQodC5maW5kQm94KHIsWyJtZmhkIl0sbilbMF0pLGUudHJhZj10LmZpbmRCb3gocixbInRyYWYiXSxuKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyYWYoZSl9KSl9KSl9fSx7a2V5OiJtZmhkIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdnkodCwhMCwoZnVuY3Rpb24odCxlKXt0LnNlcXVlbmNlTnVtYmVyPW95KGUpfSkpfX0se2tleToidHJhZiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ5KGUsITEsKGZ1bmN0aW9uKGUscixuKXtlLnRmaGQ9dC50ZmhkKHQuZmluZEJveChyLFsidGZoZCJdLG4pWzBdKSxlLnRmZHQ9dC50ZmR0KHQuZmluZEJveChyLFsidGZkdCJdLG4pWzBdKSxlLnRydW49dC50cnVuKHQuZmluZEJveChyLFsidHJ1biJdLG4pWzBdKX0pKX19LHtrZXk6InRydW4iLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2eSh0LCEwLChmdW5jdGlvbih0LGUpe3ZhciByPXQudmVyc2lvbixuPXQuZmxhZ3MsaT1lLmxlbmd0aCxvPXQuc2FtcGxlQ291bnQ9b3koZSksYT00O2lmKGk+YSYmMSZuJiYodC5kYXRhT2Zmc2V0PS0oMSt+b3koZSxhKSksYSs9NCksaT5hJiY0Jm4mJih0LmZpcnN0U2FtcGxlRmxhZ3M9b3koZSxhKSxhKz00KSxpPmEpe3ZhciBjO3Quc2FtcGxlcz1uZXcgQXJyYXkobyk7Zm9yKHZhciB1PTA7dTxvO3UrKyljPXt9LDI1NiZuJiYoYy5kdXJhdGlvbj1veShlLGEpLGErPTQpLDUxMiZuJiYoYy5zaXplPW95KGUsYSksYSs9NCksMTAyNCZuJiYoYy5mbGFncz1veShlLGEpLGErPTQpLDIwNDgmbiYmKGMuY3RzPXI/LSgxK35veShlLGErNCkpOm95KGUsYSksYSs9NCksdC5zYW1wbGVzW3VdPWN9fSkpfX0se2tleToidGZkdCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHQsITAsKGZ1bmN0aW9uKHQsZSl7MT09PXQudmVyc2lvbj90LmJhc2VNZWRpYURlY29kZVRpbWU9Y3koZSk6dC5iYXNlTWVkaWFEZWNvZGVUaW1lPW95KGUpfSkpfX0se2tleToicHJvYmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEhdC5maW5kQm94KGUsWyJmdHlwIl0pfX0se2tleToicGFyc2VTYW1wbGVGbGFncyIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJue2lzTGVhZGluZzooMTImdFswXSk+Pj4yLGRlcGVuZHNPbjozJnRbMF0saXNEZXBlbmRlZE9uOigxOTImdFsxXSk+Pj42LGhhc1JlZHVuZGFuY3k6KDQ4JnRbMV0pPj4+NCxwYWRkaW5nVmFsdWU6KDE0JnRbMV0pPj4+MSxpc05vblN5bmNTYW1wbGU6MSZ0WzFdLGRlZ3JhZGF0aW9uUHJpb3JpdHk6dFsyXTw8OHx0WzNdfX19LHtrZXk6Im1vb3ZUb1RyYWNrIix2YWx1ZTpmdW5jdGlvbih0LGUscil7dmFyIG4saSxvPXQudHJhaztpZihvJiZvLmxlbmd0aCl7dmFyIGE9by5maW5kKChmdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiJ2aWRlIj09PShudWxsPT09KGU9dC5tZGlhKXx8dm9pZCAwPT09ZXx8bnVsbD09PShyPWUuaGRscil8fHZvaWQgMD09PXI/dm9pZCAwOnIuaGFuZGxlclR5cGUpfSkpLGM9by5maW5kKChmdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiJzb3VuIj09PShudWxsPT09KGU9dC5tZGlhKXx8dm9pZCAwPT09ZXx8bnVsbD09PShyPWUuaGRscil8fHZvaWQgMD09PXI/dm9pZCAwOnIuaGFuZGxlclR5cGUpfSkpO2lmKGEmJmUpe3ZhciB1LGwscyxkLGYsaCxwLHksdj1lLG09bnVsbD09PSh1PWEudGtoZCl8fHZvaWQgMD09PXU/dm9pZCAwOnUudHJhY2tJZDtudWxsIT1tJiYodi5pZD1hLnRraGQudHJhY2tJZCksdi50a2hkRHVyYXRpb249YS50a2hkLmR1cmF0aW9uLHYubXZoZER1cnRpb249dC5tdmhkLmR1cmF0aW9uLHYubXZoZFRpbWVjYWxlPXQubXZoZC50aW1lc2NhbGUsdi50aW1lc2NhbGU9di5mb3JtYXRUaW1lc2NhbGU9YS5tZGlhLm1kaGQudGltZXNjYWxlLHYuZHVyYXRpb249YS5tZGlhLm1kaGQuZHVyYXRpb258fHYubXZoZER1cnRpb24vdi5tdmhkVGltZWNhbGUqdi50aW1lc2NhbGUsbnVsbCE9PShsPWEuZWR0cykmJnZvaWQgMCE9PWwmJmwuZWxzdCYmKHYuZWRpdExpc3Q9YS5lZHRzLmVsc3Qsdi5lZGl0TGlzdEFwcGxpZWQ9YS5lZGl0TGlzdEFwcGxpZWQpO3ZhciBiLFosZyxHLHcsVixYLFcsaz1hLm1kaWEubWluZi5zdGJsLnN0c2QuZW50cmllc1swXTtpZih2LndpZHRoPWsud2lkdGgsdi5oZWlnaHQ9ay5oZWlnaHQsay5wYXNwJiYodi5zYXJSYXRpbz1bay5wYXNwLmhTcGFjaW5nLGsucGFzcC52U3BhY2luZ10pLGsuaHZjQyl2LmNvZGVjVHlwZT1LcCx2LmNvZGVjPWsuaHZjQy5jb2RlYyx2LnZwcz1rLmh2Y0MudnBzLHYuc3BzPWsuaHZjQy5zcHMsdi5wcHM9ay5odmNDLnBwcyx2Lmh2Y0M9ay5odmNDLmRhdGE7ZWxzZSBpZihrLmF2Y0Mpdi5jb2RlYz1rLmF2Y0MuY29kZWMsdi5zcHM9ay5hdmNDLnNwcyx2LnBwcz1rLmF2Y0MucHBzO2Vsc2V7aWYoIWsudnZjQyl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdmlkZW8gc3RzZCBlbnRyeSIpO3YuY29kZWNUeXBlPU9wLHYuY29kZWM9ay52dmNDLmNvZGVjLHYuc3BzPWsudnZjQy5zcHMsdi5wcHM9ay52dmNDLnBwcyx2LnZwcz1rLnZ2Y0MudnBzLHYudnZjQz1rLnZ2Y0MuZGF0YX1pZih2LnByZXNlbnQ9ITAsdi5leHQ9e30sdi5leHQuc3Rzcz1udWxsPT09KHM9YS5tZGlhKXx8dm9pZCAwPT09c3x8bnVsbD09PShkPXMubWluZil8fHZvaWQgMD09PWR8fG51bGw9PT0oZj1kLnN0YmwpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnN0c3Msdi5leHQuY3R0cz1udWxsPT09KGg9YS5tZGlhKXx8dm9pZCAwPT09aHx8bnVsbD09PShwPWgubWluZil8fHZvaWQgMD09PXB8fG51bGw9PT0oeT1wLnN0YmwpfHx2b2lkIDA9PT15P3ZvaWQgMDp5LmN0dHMsayYmImVuY3YiPT09ay50eXBlKXYuaXNWaWRlb0VuY3J5cHRpb249ITAsay5kZWZhdWx0X0tJRD1udWxsPT09KGI9ay5zaW5mKXx8dm9pZCAwPT09Ynx8bnVsbD09PShaPWIuc2NoaSl8fHZvaWQgMD09PVo/dm9pZCAwOloudGVuYy5kZWZhdWx0X0tJRCxrLmRlZmF1bHRfSXNFbmNyeXB0ZWQ9bnVsbD09PShnPWsuc2luZil8fHZvaWQgMD09PWd8fG51bGw9PT0oRz1nLnNjaGkpfHx2b2lkIDA9PT1HP3ZvaWQgMDpHLnRlbmMuZGVmYXVsdF9Jc0VuY3J5cHRlZCxrLmRlZmF1bHRfSVZfc2l6ZT1udWxsPT09KHc9ay5zaW5mKXx8dm9pZCAwPT09d3x8bnVsbD09PShWPXcuc2NoaSl8fHZvaWQgMD09PVY/dm9pZCAwOlYudGVuYy5kZWZhdWx0X0lWX3NpemUsdi52aWRlb1NlbmM9YS5tZGlhLm1pbmYuc3RibC5zZW5jJiZhLm1kaWEubWluZi5zdGJsLnNlbmMuc2FtcGxlcyxrLmRhdGFfZm9ybWF0PW51bGw9PT0oWD1rLnNpbmYpfHx2b2lkIDA9PT1YfHxudWxsPT09KFc9WC5mcm1hKXx8dm9pZCAwPT09Vz92b2lkIDA6Vy5kYXRhX2Zvcm1hdCx2LnVzZUVNRT10LnVzZUVNRSx2LmtpZFZhbHVlPXQua2lkVmFsdWUsdi5wc3NoPXQucHNzaCx2LmVuY3Y9a31pZihjJiZyKXt2YXIgeCxSLFMsWSxJLEwsQyxOLFQseixqPXIsQj1udWxsPT09KHg9Yy50a2hkKXx8dm9pZCAwPT09eD92b2lkIDA6eC50cmFja0lkO251bGwhPUImJihqLmlkPWMudGtoZC50cmFja0lkKSxqLnRraGREdXJhdGlvbj1jLnRraGQuZHVyYXRpb24sai5tdmhkRHVydGlvbj10Lm12aGQuZHVyYXRpb24sai5tdmhkVGltZWNhbGU9dC5tdmhkLnRpbWVzY2FsZSxqLnRpbWVzY2FsZT1qLmZvcm1hdFRpbWVzY2FsZT1jLm1kaWEubWRoZC50aW1lc2NhbGUsai5kdXJhdGlvbj1jLm1kaWEubWRoZC5kdXJhdGlvbnx8ai5tdmhkRHVydGlvbi9qLm12aGRUaW1lY2FsZSpqLnRpbWVzY2FsZSxudWxsIT09KFI9Yy5lZHRzKSYmdm9pZCAwIT09UiYmUi5lbHN0JiYoai5lZGl0TGlzdD1jLmVkdHMuZWxzdCxqLmVkaXRMaXN0QXBwbGllZD1jLmVkaXRMaXN0QXBwbGllZCk7dmFyIEosSCxBLFUsTSxGLEUsUCxfPWMubWRpYS5taW5mLnN0Ymwuc3RzZC5lbnRyaWVzWzBdO3N3aXRjaChqLnNhbXBsZVNpemU9Xy5zYW1wbGVTaXplLGouc2FtcGxlUmF0ZT1fLnNhbXBsZVJhdGUsai5jaGFubmVsQ291bnQ9Xy5jaGFubmVsQ291bnQsai5wcmVzZW50PSEwLF8udHlwZSl7Y2FzZSJhbGF3IjpqLmNvZGVjVHlwZT1qLmNvZGVjPURwLGouc2FtcGxlUmF0ZT04ZTM7YnJlYWs7Y2FzZSJ1bGF3IjpqLmNvZGVjVHlwZT1qLmNvZGVjPVFwLGouc2FtcGxlUmF0ZT04ZTM7YnJlYWs7ZGVmYXVsdDpqLnNhbXBsZUR1cmF0aW9uPXJ5LmdldEZyYW1lRHVyYXRpb24oai5zYW1wbGVSYXRlLGoudGltZXNjYWxlKSxqLnNhbXBsZVJhdGVJbmRleD1yeS5nZXRSYXRlSW5kZXhCeVJhdGUoai5zYW1wbGVSYXRlKSxqLm9iamVjdFR5cGU9KG51bGw9PT0obj1fLmVzZHMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLm9iamVjdFR5cGUpfHwyLF8uZXNkcyYmKGouY29uZmlnPUFycmF5LmZyb20oXy5lc2RzLmNvbmZpZykpLGouY29kZWM9KG51bGw9PT0oaT1fLmVzZHMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmNvZGVjKXx8Im1wNGEuNDAuMiJ9aWYoai5zYW1wbGVEdXJhdGlvbj1yeS5nZXRGcmFtZUR1cmF0aW9uKGouc2FtcGxlUmF0ZSxqLnRpbWVzY2FsZSksai5vYmplY3RUeXBlPShudWxsPT09KFM9Xy5lc2RzKXx8dm9pZCAwPT09Uz92b2lkIDA6Uy5vYmplY3RUeXBlKXx8MixfLmVzZHMmJihfLmVzZHMuY29uZmlnP2ouY29uZmlnPUFycmF5LmZyb20oXy5lc2RzLmNvbmZpZyk6Y29uc29sZS53YXJuKCJlc2RzIGNvbmZpZyBpcyBudWxsIikpLGouY29kZWM9KG51bGw9PT0oWT1fLmVzZHMpfHx2b2lkIDA9PT1ZP3ZvaWQgMDpZLmNvZGVjKXx8Im1wNGEuNDAuMiIsai5zYW1wbGVSYXRlSW5kZXg9cnkuZ2V0UmF0ZUluZGV4QnlSYXRlKGouc2FtcGxlUmF0ZSksai5leHQ9e30sai5leHQuc3Rzcz1udWxsPT09KEk9Yy5tZGlhKXx8dm9pZCAwPT09SXx8bnVsbD09PShMPUkubWluZil8fHZvaWQgMD09PUx8fG51bGw9PT0oQz1MLnN0YmwpfHx2b2lkIDA9PT1DP3ZvaWQgMDpDLnN0c3Msai5leHQuY3R0cz1udWxsPT09KE49Yy5tZGlhKXx8dm9pZCAwPT09Tnx8bnVsbD09PShUPU4ubWluZil8fHZvaWQgMD09PVR8fG51bGw9PT0oej1ULnN0YmwpfHx2b2lkIDA9PT16P3ZvaWQgMDp6LmN0dHMsai5wcmVzZW50PSEwLF8mJiJlbmNhIj09PV8udHlwZSlqLmlzQXVkaW9FbmNyeXB0aW9uPSEwLF8uZGF0YV9mb3JtYXQ9bnVsbD09PShKPV8uc2luZil8fHZvaWQgMD09PUp8fG51bGw9PT0oSD1KLmZybWEpfHx2b2lkIDA9PT1IP3ZvaWQgMDpILmRhdGFfZm9ybWF0LF8uZGVmYXVsdF9LSUQ9bnVsbD09PShBPV8uc2luZil8fHZvaWQgMD09PUF8fG51bGw9PT0oVT1BLnNjaGkpfHx2b2lkIDA9PT1VP3ZvaWQgMDpVLnRlbmMuZGVmYXVsdF9LSUQsXy5kZWZhdWx0X0lzRW5jcnlwdGVkPW51bGw9PT0oTT1fLnNpbmYpfHx2b2lkIDA9PT1NfHxudWxsPT09KEY9TS5zY2hpKXx8dm9pZCAwPT09Rj92b2lkIDA6Ri50ZW5jLmRlZmF1bHRfSXNFbmNyeXB0ZWQsXy5kZWZhdWx0X0lWX3NpemU9bnVsbD09PShFPV8uc2luZil8fHZvaWQgMD09PUV8fG51bGw9PT0oUD1FLnNjaGkpfHx2b2lkIDA9PT1QP3ZvaWQgMDpQLnRlbmMuZGVmYXVsdF9JVl9zaXplLGouYXVkaW9TZW5jPWMubWRpYS5taW5mLnN0Ymwuc2VuYyYmYy5tZGlhLm1pbmYuc3RibC5zZW5jLnNhbXBsZXMsai51c2VFTUU9dC51c2VFTUUsai5raWRWYWx1ZT10LmtpZFZhbHVlLGouZW5jYT1ffWlmKHImJihyLmlzVmlkZW9FbmNyeXB0aW9uPSEhZSYmZS5pc1ZpZGVvRW5jcnlwdGlvbiksZSYmKGUuaXNBdWRpb0VuY3J5cHRpb249ISFyJiZyLmlzQXVkaW9FbmNyeXB0aW9uKSxudWxsIT1lJiZlLmVuY3Z8fG51bGwhPXImJnIuZW5jYSl7dmFyIEssTyxEPW51bGw9PWV8fG51bGw9PT0oSz1lLmVuY3YpfHx2b2lkIDA9PT1LP3ZvaWQgMDpLLmRlZmF1bHRfS0lELFE9bnVsbD09cnx8bnVsbD09PShPPXIuZW5jYSl8fHZvaWQgMD09PU8/dm9pZCAwOk8uZGVmYXVsdF9LSUQscT1EfHxRPyhEfHxRKS5qb2luKCIiKTpudWxsO2UmJihlLmtpZD1xKSxyJiYoci5raWQ9cSl9cmV0dXJuIGUmJihlLmZsYWdzPTM4NDEpLHImJihyLmZsYWdzPTE3OTMpLHt2aWRlb1RyYWNrOmUsYXVkaW9UcmFjazpyfX19fSx7a2V5OiJldmFsdWF0ZURlZmF1bHREdXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9bnVsbD09ZXx8bnVsbD09PShuPWUuc2FtcGxlcyl8fHZvaWQgMD09PW4/dm9pZCAwOm4ubGVuZ3RoO3JldHVybiBpPzEwMjQqaS9lLnRpbWVzY2FsZSp0LnRpbWVzY2FsZS9yOjEwMjR9fSx7a2V5OiJtb29mVG9TYW1wbGVzIix2YWx1ZTpmdW5jdGlvbihlLHIsbil7dmFyIGk9e307cmV0dXJuIGUubWZoZCYmKHImJihyLnNlcXVlbmNlTnVtYmVyPWUubWZoZC5zZXF1ZW5jZU51bWJlciksbiYmKG4uc2VxdWVuY2VOdW1iZXI9ZS5tZmhkLnNlcXVlbmNlTnVtYmVyKSksZS50cmFmLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBvPWUudGZoZCxhPWUudGZkdCxjPWUudHJ1bjtpZihvJiZjKXthJiYociYmci5pZD09PW8udHJhY2tJZCYmKHIuYmFzZU1lZGlhRGVjb2RlVGltZT1hLmJhc2VNZWRpYURlY29kZVRpbWUpLG4mJm4uaWQ9PT1vLnRyYWNrSWQmJihuLmJhc2VNZWRpYURlY29kZVRpbWU9YS5iYXNlTWVkaWFEZWNvZGVUaW1lKSk7dmFyIHU9by5kZWZhdWx0U2FtcGxlU2l6ZXx8MCxsPW8uZGVmYXVsdFNhbXBsZUR1cmF0aW9ufHx0LmV2YWx1YXRlRGVmYXVsdER1cmF0aW9uKHIsbixjLnNhbXBsZXMubGVuZ3RofHxjLnNhbXBsZUNvdW50KSxzPWMuZGF0YU9mZnNldHx8MCxkPTAsZj0tMTtpZighYy5zYW1wbGVzLmxlbmd0aCYmYy5zYW1wbGVDb3VudCl7aVtvLnRyYWNrSWRdPW5ldyBBcnJheShjLnNhbXBsZUNvdW50KTtmb3IodmFyIGg9MDtoPGMuc2FtcGxlQ291bnQ7aCsrKWlbby50cmFja0lkXVtoXT17b2Zmc2V0OnMsZHRzOmQsZHVyYXRpb246bCxzaXplOnV9LGQrPWwscys9dX1lbHNlIGlbby50cmFja0lkXT1jLnNhbXBsZXMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybih0PXtvZmZzZXQ6cyxkdHM6ZCxwdHM6ZCsodC5jdHN8fDApLGR1cmF0aW9uOnQuZHVyYXRpb258fGwsc2l6ZTp0LnNpemV8fHUsZ29wSWQ6ZixrZXlmcmFtZTowPT09ZXx8bnVsbCE9PXQuZmxhZ3MmJnZvaWQgMCE9PXQuZmxhZ3MmJig2NTUzNiZ0LmZsYWdzKT4+PjAhPTY1NTM2fSkua2V5ZnJhbWUmJihmKyssdC5nb3BJZD1mKSxkKz10LmR1cmF0aW9uLHMrPXQuc2l6ZSx0fSkpfX0pKSxpfX0se2tleToibW9vdlRvU2FtcGxlcyIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFrO2lmKGUmJmUubGVuZ3RoKXt2YXIgcj1lLmZpbmQoKGZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuInZpZGUiPT09KG51bGw9PT0oZT10Lm1kaWEpfHx2b2lkIDA9PT1lfHxudWxsPT09KHI9ZS5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSksbj1lLmZpbmQoKGZ1bmN0aW9uKHQpe3ZhciBlLHI7cmV0dXJuInNvdW4iPT09KG51bGw9PT0oZT10Lm1kaWEpfHx2b2lkIDA9PT1lfHxudWxsPT09KHI9ZS5oZGxyKXx8dm9pZCAwPT09cj92b2lkIDA6ci5oYW5kbGVyVHlwZSl9KSk7aWYocnx8bil7dmFyIGksbztpZihyKXt2YXIgYSxjLHU9bnVsbD09PShhPXIubWRpYSl8fHZvaWQgMD09PWF8fG51bGw9PT0oYz1hLm1pbmYpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnN0Ymw7aWYoIXUpcmV0dXJuO3ZhciBsPXUuc3R0cyxzPXUuc3RzYyxkPXUuc3RzeixmPXUuc3RjbyxoPXUuc3RzcyxwPXUuY3R0cztpZighKGwmJnMmJmQmJmYmJmgpKXJldHVybjtpPWh5KGwscyxkLGYscCxoKX1pZihuKXt2YXIgeSx2LG0sYj1udWxsPT09KHk9bi5tZGlhKXx8dm9pZCAwPT09eXx8bnVsbD09PSh2PXkubWluZil8fHZvaWQgMD09PXY/dm9pZCAwOnYuc3RibDtpZighYilyZXR1cm47dmFyIFo9bnVsbD09PShtPW4ubWRpYS5tZGhkKXx8dm9pZCAwPT09bT92b2lkIDA6bS50aW1lc2NhbGUsZz1iLnN0dHMsRz1iLnN0c2Msdz1iLnN0c3osVj1iLnN0Y287aWYoIShaJiZnJiZHJiZ3JiZWKSlyZXR1cm47bz1oeShnLEcsdyxWKX1yZXR1cm57dmlkZW9TYW1wbGVzOmksYXVkaW9TYW1wbGVzOm99fX19fV0pLHR9KCk7ZnVuY3Rpb24gaHkodCxlLHIsbixpLG8pe3ZhciBhLGMsdSxsPVtdLHM9bnVsbD09aT92b2lkIDA6aS5lbnRyaWVzLGQ9ZS5lbnRyaWVzLGY9bi5lbnRyaWVzLGg9ci5lbnRyeVNpemVzLHA9bnVsbD09bz92b2lkIDA6by5lbnRyaWVzO3AmJihhPXt9LHAuZm9yRWFjaCgoZnVuY3Rpb24odCl7YVt0LTFdPSEwfSkpKSxzJiYoYz1bXSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNvdW50LHI9dC5vZmZzZXQsbj0wO248ZTtuKyspYy5wdXNoKHIpfSkpKTt2YXIgeT0tMSx2PTAsbT0wLGI9MCxaPTAsZz0wLEc9ZFswXS5zYW1wbGVzUGVyQ2h1bmssdz1kWzFdP2RbMV0uZmlyc3RDaHVuay0xOjEvMDtyZXR1cm4gdC5lbnRyaWVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNvdW50LG49dC5kZWx0YSxpPTA7aTxlO2krKyl1PXtkdHM6dixkdXJhdGlvbjpuLHNpemU6aFttXXx8ci5zYW1wbGVTaXplLG9mZnNldDpmW2JdK2csaW5kZXg6bX0scCYmKHUua2V5ZnJhbWU9YVttXSx1LmtleWZyYW1lJiZ5KyssdS5nb3BJZD15KSxjJiZtPGMubGVuZ3RoJiYodS5wdHM9dS5kdHMrY1ttXSksbC5wdXNoKHUpLHYrPW4sKyttPEc/Zys9dS5zaXplOihiKyssZz0wLGI+PXcmJihaKyssdz1kW1orMV0/ZFtaKzFdLmZpcnN0Q2h1bmstMToxLzApLEcrPWRbWl0uc2FtcGxlc1BlckNodW5rKX0pKSxsfWZ1bmN0aW9uIHB5KHQsZSl7cmV0dXJuIHQuZGF0YVJlZmVyZW5jZUluZGV4PWl5KGUsNiksdC53aWR0aD1peShlLDI0KSx0LmhlaWdodD1peShlLDI2KSx0Lmhvcml6cmVzb2x1dGlvbj1veShlLDI4KSx0LnZlcnRyZXNvbHV0aW9uPW95KGUsMzIpLHQuZnJhbWVDb3VudD1peShlLDQwKSx0LmRlcHRoPWl5KGUsNzQpLDc4fWZ1bmN0aW9uIHl5KHQsZSl7cmV0dXJuIHQuZGF0YVJlZmVyZW5jZUluZGV4PWl5KGUsNiksdC5jaGFubmVsQ291bnQ9aXkoZSwxNiksdC5zYW1wbGVTaXplPWl5KGUsMTgpLHQuc2FtcGxlUmF0ZT1veShlLDI0KS82NTUzNiwyOH1mdW5jdGlvbiB2eSh0LGUscil7aWYodCl7aWYodC5zaXplIT09dC5kYXRhLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImJveCAiLmNvbmNhdCh0LnR5cGUsIiBzaXplICE9PSBkYXRhLmxlbmd0aCIpKTt2YXIgbj17c3RhcnQ6dC5zdGFydCxzaXplOnQuc2l6ZSxoZWFkZXJTaXplOnQuaGVhZGVyU2l6ZSx0eXBlOnQudHlwZX07cmV0dXJuIGUmJihuLnZlcnNpb249dC5kYXRhW3QuaGVhZGVyU2l6ZV0sbi5mbGFncz1mdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4odFtlXTw8MTYpKyh0W2UrMV08PDgpKyh0W2UrMl18fDApfSh0LmRhdGEsdC5oZWFkZXJTaXplKzEpLG4uaGVhZGVyU2l6ZSs9NCkscihuLHQuZGF0YS5zdWJhcnJheShuLmhlYWRlclNpemUpLG4uc3RhcnQrbi5oZWFkZXJTaXplKSxufX12YXIgbXk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVN0cmluZyhyKSxpPTB8ZSxvPU1hdGguY2VpbChpL24ubGVuZ3RoKSxhPVtdLGM9U3RyaW5nKHQpO28tLTspYS5wdXNoKG4pO3JldHVybiBhLmpvaW4oIiIpLnN1YnN0cmluZygwLGktYy5sZW5ndGgpK2N9KE51bWJlcihlKS50b1N0cmluZygxNiksMiwwKSl9KSksdFswXX0sYnk9UyxaeT1PLGd5PW0sR3k9aXIsd3k9ZCxWeT1tcixYeT14LFd5PUksa3k9aGUseHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWJ5KGUpO24gaW4gdD9aeS5mKHQsbixneSgwLHIpKTp0W25dPXJ9LFJ5PXZuLFN5PVFpLFl5PWRyLEl5PXFyKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxMeT05MDA3MTk5MjU0NzQwOTkxLEN5PSJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiLE55PVl5Pj01MXx8IXd5KChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W0l5XT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxUeT1TeSgiY29uY2F0Iiksenk9ZnVuY3Rpb24odCl7aWYoIVh5KHQpKXJldHVybiExO3ZhciBlPXRbSXldO3JldHVybiB2b2lkIDAhPT1lPyEhZTpWeSh0KX07R3koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohTnl8fCFUeX0se2NvbmNhdDpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxvLGE9V3kodGhpcyksYz1SeShhLDApLHU9MDtmb3IoZT0tMSxuPWFyZ3VtZW50cy5sZW5ndGg7ZTxuO2UrKylpZih6eShvPS0xPT09ZT9hOmFyZ3VtZW50c1tlXSkpe2lmKHUrKGk9a3koby5sZW5ndGgpKT5MeSl0aHJvdyBUeXBlRXJyb3IoQ3kpO2ZvcihyPTA7cjxpO3IrKyx1KyspciBpbiBvJiZ4eShjLHUsb1tyXSl9ZWxzZXtpZih1Pj1MeSl0aHJvdyBUeXBlRXJyb3IoQ3kpO3h5KGMsdSsrLG8pfXJldHVybiBjLmxlbmd0aD11LGN9fSk7dmFyIGp5LEJ5PVhuLmZvckVhY2gsSnk9ZWgoImZvckVhY2giKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiBCeSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxIeT1sLEF5PWNwLFV5PUp5LE15PW90O2Zvcih2YXIgRnkgaW4gQXkpe3ZhciBFeT1IeVtGeV0sUHk9RXkmJkV5LnByb3RvdHlwZTtpZihQeSYmUHkuZm9yRWFjaCE9PVV5KXRyeXtNeShQeSwiZm9yRWFjaCIsVXkpfWNhdGNoKGV2KXtQeS5mb3JFYWNoPVV5fX1mdW5jdGlvbiBfeSh0KXt2YXIgZSxyLG4saT1bXTtyZXR1cm4gbnVsbD09PShlPXQudnBzKXx8dm9pZCAwPT09ZXx8ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpLnB1c2goMCwwLDAsMSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaS5wdXNoKHRbZV0pfSkpLG51bGw9PT0ocj10LnNwcyl8fHZvaWQgMD09PXJ8fHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7aS5wdXNoKDAsMCwwLDEpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWkucHVzaCh0W2VdKX0pKSxudWxsPT09KG49dC5wcHMpfHx2b2lkIDA9PT1ufHxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2kucHVzaCgwLDAsMCwxKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpLnB1c2godFtlXSl9KSksbmV3IFVpbnQ4QXJyYXkoaSl9ZnVuY3Rpb24gS3kodCl7cmV0dXJuIE95LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPeSgpe3JldHVybihPeT1yKGkoKS5tYXJrKChmdW5jdGlvbiB0KGUpe3ZhciByLG47cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gank9InVuZGVmaW5lZCIhPXR5cGVvZiBBYm9ydENvbnRyb2xsZXI/bmV3IEFib3J0Q29udHJvbGxlcjp2b2lkIDAsdC5uZXh0PTMsZmV0Y2goZSx7c2lnbmFsOm51bGw9PT0ocj1qeSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuc2lnbmFsfSk7Y2FzZSAzOmlmKG49dC5zZW50LGp5PXZvaWQgMCxuLm9rKXt0Lm5leHQ9NzticmVha310aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBmZXRjaCBtcDQgZmlsZSIpO2Nhc2UgNzpyZXR1cm4gdC5uZXh0PTksbi5hcnJheUJ1ZmZlcigpO2Nhc2UgOTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50KTtjYXNlIDEwOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRHkodCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dHJ5e3ZhciBpLGE9bmV3IFVpbnQ4QXJyYXkodCksYz1meS5maW5kQm94KGEsWyJtb292Il0pWzBdO2lmKCFjKXRocm93IG5ldyBFcnJvcigibW9vdiBib3ggbm90IGZvdW5kIik7dmFyIHU9ZnkubW9vdihjKSxsPShmeS5tb292VG9TYW1wbGVzKHUpfHx7fSkudmlkZW9TYW1wbGVzO2lmKCFsfHwhbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJObyB2aWRlbyBzYW1wbGVzIGZvdW5kIik7dmFyIHM9dSxkPShzLnRyYWtzfHxzLnRyYWt8fFtdKS5maWx0ZXIoQm9vbGVhbikuZmluZCgoZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuInZpZGUiPT09KG51bGw9PT0oZT10Lm1kaWEpfHx2b2lkIDA9PT1lfHxudWxsPT09KGU9ZS5oZGxyKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5oYW5kbGVyVHlwZSl9KSk7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJObyB2aWRlbyB0cmFjayBmb3VuZCIpO3ZhciBmLGgscD1kLm1kaWEubWluZi5zdGJsLnN0c2QuZW50cmllc1swXSx5PXAudHlwZSx2PXAud2lkdGgsbT1wLmhlaWdodCxiPWwubWFwKChmdW5jdGlvbihyKXt2YXIgbj1uZXcgVWludDhBcnJheSh0LHIub2Zmc2V0LHIuc2l6ZSk7aWYoInNvZnR3YXJlIj09PWUuZGVjb2RlTW9kZSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoOyl7dmFyIG89bltpXTw8MjR8bltpKzFdPDwxNnxuW2krMl08PDh8bltpKzNdO25baV09MCxuW2krMV09MCxuW2krMl09MCxuW2krM109MSxpKz00K299cmV0dXJue3R5cGU6ci5rZXlmcmFtZT8ia2V5IjoiZGVsdGEiLHRpbWVzdGFtcDoibnVtYmVyIj09dHlwZW9mIHIucHRzP3IucHRzOnIuZHRzLGRhdGE6bixkdXJhdGlvbjpyLmR1cmF0aW9ufX0pKTtpZigiYXZjMSI9PT15KWY9cC5hdmNDLmNvZGVjLGg9InNvZnR3YXJlIj09PWUuZGVjb2RlTW9kZT9feShwLmF2Y0MpOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPVtdLGE9W107cmV0dXJuIHQuc3BzLmZvckVhY2goKGZ1bmN0aW9uKHQpe249dC5ieXRlTGVuZ3RoLGkucHVzaChuPj4+OCYyNTUpLGkucHVzaCgyNTUmbiksaS5wdXNoLmFwcGx5KGksbyh0KSl9KSksdC5wcHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7bj10LmJ5dGVMZW5ndGgsYS5wdXNoKG4+Pj44JjI1NSksYS5wdXNoKDI1NSZuKSxhLnB1c2guYXBwbHkoYSxvKHQpKX0pKSxuZXcgVWludDhBcnJheSgoZT0ocj1bMSxpWzNdLGlbNF0saVs1XSwyNTUsMjI0fHQuc3BzLmxlbmd0aF0pLmNvbmNhdC5hcHBseShyLGkpLmNvbmNhdChbdC5wcHMubGVuZ3RoXSkpLmNvbmNhdC5hcHBseShlLGEpKX0ocC5hdmNDKTtlbHNlIGlmKCJodmMxIj09PXl8fCJoZXYxIj09PXkpZj1wLmh2Y0MuY29kZWMsaD0ic29mdHdhcmUiPT09ZS5kZWNvZGVNb2RlP195KHAuaHZjQyk6ZnVuY3Rpb24odCl7aWYodCYmdC52cHMpe3ZhciBlLHI9dC52cHMsbj10LnNwcyxpPXQucHBzLGE9dC5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHksYz10LmdlbmVyYWxDb25zdHJhaW50SW5kaWNhdG9yRmxhZ3MsdT0oci5sZW5ndGgmJjEpKyhuLmxlbmd0aCYmMSkrKGkubGVuZ3RoJiYxKTtlPVsxLHQuZ2VuZXJhbFByb2ZpbGVTcGFjZTw8Nnx0LmdlbmVyYWxUaWVyRmxhZzw8NXx0LmdlbmVyYWxQcm9maWxlSWRjLGE+Pj4yNCxhPj4+MTYsYT4+PjgsYSxjWzBdLGNbMV0sY1syXSxjWzNdLGNbNF0sY1s1XSx0LmdlbmVyYWxMZXZlbElkYywyNDAsMCwyNTIsMjUyfHQuY2hyb21hRm9ybWF0SWRjLDI0OHx0LmJpdERlcHRoTHVtYU1pbnVzOCwyNDh8dC5iaXREZXB0aENocm9tYU1pbnVzOCwwLDAsdC5udW1UZW1wb3JhbExheWVyczw8M3x0LnRlbXBvcmFsSWROZXN0ZWQ8PDJ8Myx1XTt2YXIgbD1mdW5jdGlvbih0KXt2YXIgcjtlLnB1c2godC5sZW5ndGg+PjgsdC5sZW5ndGgpLChyPWUpLnB1c2guYXBwbHkocixvKHQpKX07cmV0dXJuIHIubGVuZ3RoJiYoZS5wdXNoKDE2MCwwLHIubGVuZ3RoKSxyLmZvckVhY2gobCkpLG4ubGVuZ3RoJiYoZS5wdXNoKDE2MSwwLG4ubGVuZ3RoKSxuLmZvckVhY2gobCkpLGkubGVuZ3RoJiYoZS5wdXNoKDE2MiwwLGkubGVuZ3RoKSxpLmZvckVhY2gobCkpLG5ldyBVaW50OEFycmF5KGUpfX0ocC5odmNDKTtlbHNle2lmKCJidmMyIiE9PXkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjb2RlYzogIi5jb25jYXQoeSkpO2Y9cC5idmMyLmNvZGVjfXIoe3NhbXBsZXM6YixkZWNvZGVyQ29uZmlnOntjb2RlYzpmLGNvZGVkV2lkdGg6dixjb2RlZEhlaWdodDptLGRlc2NyaXB0aW9uOm51bGw9PT0oaT1oKXx8dm9pZCAwPT09aT92b2lkIDA6aS5idWZmZXIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9fSl9Y2F0Y2goWil7bihaKX19KSl9ZnVuY3Rpb24gUXkodCxlLHIpe3JldHVybiBxeS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcXkoKXtyZXR1cm4gcXk9cihpKCkubWFyaygoZnVuY3Rpb24gdChlLG8sYSl7dmFyIGMsdSxsLHMsZCxmLGgscCx5LHY7cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihmPWZ1bmN0aW9uKCl7cmV0dXJuKGY9cihpKCkubWFyaygoZnVuY3Rpb24gdCgpe3JldHVybiBpKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoImNvbmZpZ3VyZWQiIT09cy5zdGF0ZXx8MCE9PXMuZGVjb2RlUXVldWVTaXplKXt0Lm5leHQ9MzticmVha31yZXR1cm4gdC5uZXh0PTMscy5mbHVzaCgpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkPWZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvLmxlbmd0aCl7dC5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDQ6cmV0dXJuIGM9bmV3IEFwKHtwcmVmZXJlbmNlOmEuZGVjb2RlTW9kZX0pLHU9InNvZnR3YXJlIiE9PWEuZGVjb2RlTW9kZSx0Lm5leHQ9OCxBcC5pc0NvbmZpZ1N1cHBvcnRlZCh7Y29kZWM6ZS5jb2RlYyxjb2RlZFdpZHRoOmUuY29kZWRXaWR0aCxjb2RlZEhlaWdodDplLmNvZGVkSGVpZ2h0LGRlc2NyaXB0aW9uOmUuZGVzY3JpcHRpb259LHUpO2Nhc2UgODppZihudWxsIT0obD10LnNlbnQpJiZsLnN1cHBvcnRlZCl7dC5uZXh0PTExO2JyZWFrfXRocm93IG5ldyBFcnJvcihsLnJlYXNvbnx8IlZpZGVvIGNvZGVjICIuY29uY2F0KGUuY29kZWMsIiBub3Qgc3VwcG9ydGVkIikpO2Nhc2UgMTE6aWYocz1jLnNlbGVjdERlY29kZXJEaXJlY3RseShlKSl7dC5uZXh0PTE0O2JyZWFrfXRocm93IG5ldyBFcnJvcigiTm8gc3VpdGFibGUgZGVjb2RlciBmb3VuZCIpO2Nhc2UgMTQ6cy5jb25maWd1cmUoZSksaD1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxlKXt2YXIgcj0wLG49by5sZW5ndGg7cy5vbk91dHB1dD1mdW5jdGlvbihlKXsiY2xvc2UiaW4gZSYmZS5jbG9zZSgpLCsrcj09PW4mJnQoKSxyPm4tNSYmInNvZnR3YXJlIj09PWEuZGVjb2RlTW9kZSYmZCgpfSxzLm9uRXJyb3I9ZnVuY3Rpb24odCl7ZSh0KX0scy5vbkRlcXVldWU9ZnVuY3Rpb24oKXtkKCl9fSkpLHQucHJldj0xNixwPW4obyk7dHJ5e2ZvcihwLnMoKTshKHk9cC5uKCkpLmRvbmU7KXY9eS52YWx1ZSxzLmRlY29kZSh2KX1jYXRjaChtKXtwLmUobSl9ZmluYWxseXtwLmYoKX1yZXR1cm4gdC5uZXh0PTIxLGg7Y2FzZSAyMTpyZXR1cm4gdC5uZXh0PTIzLGQoKTtjYXNlIDIzOnJldHVybiB0LnByZXY9MjMsImNsb3NlZCIhPT1zLnN0YXRlJiZzLmNsb3NlKCksdC5maW5pc2goMjMpO2Nhc2UgMjY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LG51bGwsW1sxNiwsMjMsMjZdXSl9KSkpLHF5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiAkeSh0LGUpe3JldHVybiB0di5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdHYoKXtyZXR1cm4odHY9cihpKCkubWFyaygoZnVuY3Rpb24gdChlLG4pe3ZhciBvLGEsYztyZXR1cm4gaSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiBhPW5ldyBQcm9taXNlKChmdW5jdGlvbih0LGUpe289c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlKG5ldyBFcnJvcigiVGltZW91dCIpKX0pLG4udGltZW91dHx8MWU0KX0pKSxjPXIoaSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgcixhLGMsdSxsLHMsZCxmLGgscCx5LHYsbSxiO3JldHVybiBpKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHI9cGVyZm9ybWFuY2Uubm93KCksdC5uZXh0PTMsS3koZSk7Y2FzZSAzOnJldHVybiBhPXQuc2VudCxjPXBlcmZvcm1hbmNlLm5vdygpLHU9cGVyZm9ybWFuY2Uubm93KCksdC5uZXh0PTgsRHkoYSxuKTtjYXNlIDg6cmV0dXJuIGw9dC5zZW50LHM9bC5zYW1wbGVzLGQ9bC5kZWNvZGVyQ29uZmlnLGY9cGVyZm9ybWFuY2Uubm93KCksaD1wZXJmb3JtYW5jZS5ub3coKSx0Lm5leHQ9MTUsUXkoZCxzLG4pO2Nhc2UgMTU6cmV0dXJuIHA9cGVyZm9ybWFuY2Uubm93KCkseT1jLXIsdj1mLXUsbT1wLWgsYj1wLXIsY2xlYXJUaW1lb3V0KG8pLHQuYWJydXB0KCJyZXR1cm4iLHt1cmw6ZSxkZWNvZGVyQ29uZmlnOmQsbmV0Q29zdDp5LGRlbXV4Q29zdDp2LGRlY29kZUNvc3Q6bSx0b3RhbENvc3Q6Yn0pO2Nhc2UgMjI6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkoKSx0LmFicnVwdCgicmV0dXJuIixQcm9taXNlLnJhY2UoW2MsYV0pKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1zZWxmLm9ubWVzc2FnZT1mdW5jdGlvbigpe3ZhciB0PXIoaSgpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHIsbixvLGE7cmV0dXJuIGkoKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihyPWUuZGF0YSxuPXIudHlwZSxvPXIuZGF0YSwiY21kIiE9PW58fCJwZXJmUmVwb3J0IiE9PW8udHlwZSl7dC5uZXh0PTEzO2JyZWFrfXJldHVybiB0LnByZXY9Mix0Lm5leHQ9NSwkeShvLnVybCxvKTtjYXNlIDU6YT10LnNlbnQsdC5uZXh0PTEyO2JyZWFrO2Nhc2UgODpyZXR1cm4gdC5wcmV2PTgsdC50MD10LmNhdGNoKDIpLHBvc3RNZXNzYWdlKHtzdGF0dXM6ITEsZGF0YTp7dXJsOm8udXJsLGVyck1zZzp0LnQwLm1lc3NhZ2UsZXJyU3RhY2s6dC50MC5zdGFja319KSx0LmFicnVwdCgicmV0dXJuIik7Y2FzZSAxMjpwb3N0TWVzc2FnZSh7c3RhdHVzOiEwLGRhdGE6YX0pO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LG51bGwsW1syLDhdXSl9KSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSgpOwo=",b="undefined"!=typeof window&&window.Blob&&new Blob([atob(m)],{type:"text/javascript;charset=utf-8"});function c(){var l;try{if(!(l=b&&(window.URL||window.webkitURL).createObjectURL(b)))throw"";return new Worker(l)}catch(l){return new Worker("data:application/javascript;base64,"+m)}finally{!("undefined"!=typeof window&&navigator.userAgent.indexOf("Trident/")>0)&&l&&(window.URL||window.webkitlRL).revokeObjectURL(l)}}},6055:function(l,d,Z){function m(l,d){(null==d||d>l.length)&&(d=l.length);for(var Z=0,m=Array(d);Z=l.length?{done:!0}:{done:!1,value:l[m++]}},e:function(l){throw l},f:b}}throw TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var c,i=!0,t=!1;return{s:function(){Z=Z.call(l)},n:function(){var l=Z.next();return i=l.done,l},e:function(l){t=!0,c=l},f:function(){try{i||null==Z.return||Z.return()}finally{if(t)throw c}}}}function e(l,d,Z){return(d=R(d))in l?Object.defineProperty(l,d,{value:Z,enumerable:!0,configurable:!0,writable:!0}):l[d]=Z,l}function a(l){return(a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(l){return l.__proto__||Object.getPrototypeOf(l)})(l)}function V(l,d){if("function"!=typeof d&&null!==d)throw TypeError("Super expression must either be null or a function");l.prototype=Object.create(d&&d.prototype,{constructor:{value:l,writable:!0,configurable:!0}}),Object.defineProperty(l,"prototype",{writable:!1}),d&&G(l,d)}function X(){try{var l=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(l){}return(X=function(){return!!l})()}function s(l,d){var Z=Object.keys(l);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(l);d&&(m=m.filter(function(d){return Object.getOwnPropertyDescriptor(l,d).enumerable})),Z.push.apply(Z,m)}return Z}function h(l){for(var d=1;d=0;--c){var i=this.tryEntries[c],t=i.completion;if("root"===i.tryLoc)return b("end");if(i.tryLoc<=this.prev){var W=m.call(i,"catchLoc"),n=m.call(i,"finallyLoc");if(W&&n){if(this.prev=0;--Z){var b=this.tryEntries[Z];if(b.tryLoc<=this.prev&&m.call(b,"finallyLoc")&&this.prev=0;--d){var Z=this.tryEntries[d];if(Z.finallyLoc===l)return this.complete(Z.completion,Z.afterLoc),H(Z),s}},catch:function(l){for(var d=this.tryEntries.length-1;d>=0;--d){var Z=this.tryEntries[d];if(Z.tryLoc===l){var m=Z.completion;if("throw"===m.type){var b=m.arg;H(Z)}return b}}throw Error("illegal catch attempt")},delegateYield:function(d,Z,m){return this.delegate={iterator:J(d),resultName:Z,nextLoc:m},"next"===this.method&&(this.arg=l),s}},d}function G(l,d){return(G=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(l,d){return l.__proto__=d,l})(l,d)}function Y(l,d){return function(l){if(Array.isArray(l))return l}(l)||function(l,d){var Z=null==l?null:"undefined"!=typeof Symbol&&l[Symbol.iterator]||l["@@iterator"];if(null!=Z){var m,b,c,i,t=[],W=!0,n=!1;try{if(c=(Z=Z.call(l)).next,0===d){if(Object(Z)!==Z)return;W=!1}else for(;!(W=(m=c.call(Z)).done)&&(t.push(m.value),t.length!==d);W=!0);}catch(l){n=!0,b=l}finally{try{if(!W&&null!=Z.return&&(i=Z.return(),Object(i)!==i))return}finally{if(n)throw b}}return t}}(l,d)||x(l,d)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(l){return function(l){if(Array.isArray(l))return m(l)}(l)||function(l){if("undefined"!=typeof Symbol&&null!=l[Symbol.iterator]||null!=l["@@iterator"])return Array.from(l)}(l)||x(l)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(l){var d=function(l,d){if("object"!=typeof l||!l)return l;var Z=l[Symbol.toPrimitive];if(void 0!==Z){var m=Z.call(l,d||"default");if("object"!=typeof m)return m;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===d?String:Number)(l)}(l,"string");return"symbol"==typeof d?d:d+""}function S(l){return(S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(l){return typeof l}:function(l){return l&&"function"==typeof Symbol&&l.constructor===Symbol&&l!==Symbol.prototype?"symbol":typeof l})(l)}function x(l,d){if(l){if("string"==typeof l)return m(l,d);var Z=({}).toString.call(l).slice(8,-1);return"Object"===Z&&l.constructor&&(Z=l.constructor.name),"Map"===Z||"Set"===Z?Array.from(l):"Arguments"===Z||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Z)?m(l,d):void 0}}},830571:function(l,d,Z){Z.d(d,{w:function(){return t}});var m,b=Z(137263);Z(941533),Z(451236),Z(9498),Z(503e3),Z(248385),Z(663030);var c=Z(734123),i=Z.n(c),t=function(l){function d(){var l;return(0,b.PA)(this,d),l=(0,b.$w)(this,d,arguments),l._ploys=[],l._curInstContext=null,l}return(0,b.XW)(d,l),(0,b.qH)(d,[{key:"_findIndexFromPloys",value:function(l){for(var d=-1,Z=this._ploys,m=0;m-1)&&!0}},{key:"registerStrategy",value:function(l){var d=this;if(!!l)!Array.isArray(l)&&(l=[l]),l.forEach(function(l){var Z=l.Strategy,m=l.config;if(!!m)try{var b=new Z(m,d);d._checkStrategy(b)&&(b.start(),d._ploys.push(b))}catch(l){}})}},{key:"unregisterStrategy",value:function(l){if(l){l.stop();var d=this._findIndexFromPloys(l);d>-1&&this._ploys.splice(d,1)}else this._ploys.forEach(function(l){l.stop()}),this._ploys.splice(0,this._ploys.length)}},{key:"findStrategy",value:function(l){return this._ploys.find(function(d){return d.constructor.STRATEGY_NAME===l})}},{key:"updateStrategyConfig",value:function(l,d){var Z=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!!l&&!!d)this._ploys.forEach(function(m){m instanceof l&&m.updateConfig(d,Z)})}},{key:"setActive",value:function(l,Z,m){var c=(0,b.Vx)(d,"setActive",this,3)([l,Z]);return Z&&m&&this.setVideoListContext(m),this.emit("UPDATE_INST_ORDER"),c}},{key:"setNext",value:function(l){var Z=(0,b.Vx)(d,"setNext",this,3)([l]);return this.emit("UPDATE_INST_ORDER"),Z}},{key:"getVideoListContext",value:function(){return this._curInstContext}},{key:"setVideoListContext",value:function(l){if(!l)return;var d,Z=(null===(d=l.allVideos)||void 0===d?void 0:d.slice(0))||[],m=[],b=[],c=Z.findIndex(function(l){return l.isActive});if(-1!==c){for(var i=Z[c],t=0;tc&&b.push(l.allVideos[t]);this._curInstContext={current:i,prevVideos:m,nextVideos:b,allVideos:Z},this.emit("VIDEO_LIST_CONTEXT_CHANGED")}}}],[{key:"getInstance",value:function(){return m||(m=new d),m}}])}(c.InstManager||Object.prototype.constructor);i().instManager=t.getInstance()},58172:function(l,d,Z){var m;function b(){if(!document.querySelector("#hackAudioPP")){var l=document.createElement("div");l.innerHTML="",document.body.appendChild(l);var d=l.children.item(0);d.controls=!1,d.preload="auto",d.innerHTML="'),d.muted=!0,d.loop=!0,d.play().catch(function(){})}}function c(){var l=m||(m=document.querySelector("#hackAudioPP"));if(!l){b();return}(!1!==l.paused||!1!==l.muted)&&(l.muted=!1,l.play().catch(function(l){}))}function i(){var l=m||(m=document.querySelector("#hackAudioPP"));l&&l.pause()}Z.d(d,{BR:function(){return i},ds:function(){return b},fC:function(){return c}})},906918:function(l,d,Z){Z.d(d,{Z:function(){return i}});var m=Z(315355),b=Z(919209);Z(117232),Z(9498),Z(346984),Z(705574),Z(663030),Z(503e3),Z(124300),Z(248385),Z(832674),Z(905442),Z(446336),Z(808483),Z(840938),Z(118438),Z(325598),Z(92999),Z(611067),Z(273723),Z(724016),Z(803903),Z(214604),Z(901250),Z(755006),Z(437048),Z(488336),Z(825666),Z(177162),Z(286633),Z(943281),Z(810658),Z(82726),Z(224727),Z(941533);var c=Z(597931),i=function(){function l(d){(0,m.Z)(this,l),this.TAG="VideoTimeRange",this._parent=d,this._baseDts=0,this._lastDuration=0,this._duration=0,this._bitrate=0,this._totalSize=0,this._buffers=[],this._currentFrameQueue=[],this._frameIndexInQueue=0,this._delayEstimateList=[],this._keyframeQueue=[]}return(0,b.Z)(l,[{key:"isLive",get:function(){return this._parent.isLive}},{key:"baseDts",get:function(){return this._baseDts}},{key:"duration",get:function(){return this._duration},set:function(l){this._duration=l}},{key:"buffered",get:function(){var l=this;if(this.isLive)return{length:this._duration?1:0,start:function(){return 0},end:function(){return l._duration}};var d=this._mergeBufferRanges();return{length:d.length,start:function(l){var Z=d[l];return Z?Z.start:0},end:function(l){var Z=d[l];return Z?Z.end:1/0}}}},{key:"bufferStart",get:function(){var l;return(null===(l=this._buffers[0])||void 0===l?void 0:l.start)||0}},{key:"frameLength",get:function(){return this._currentFrameQueue.length}},{key:"keyFrameLength",get:function(){return this._keyframeQueue.length}},{key:"totalSize",get:function(){return this._totalSize}},{key:"bitrate",get:function(){return this._bitrate},set:function(l){this._bitrate=l}},{key:"lastDuration",get:function(){return this._lastDuration}},{key:"frames",get:function(){return this._currentFrameQueue}},{key:"getCurrentTime",value:function(l){return this._lastDuration+(l-this._baseDts)/1e3}},{key:"resetDts",value:function(l){this._baseDts=l}},{key:"_mergeBufferRanges",value:function(){var l=this._buffers.slice().sort(function(l,d){return l.start>d.start?1:-1}),d=l.length,Z=[];if(!d)return Z;for(var m={start:l[0].start,end:l[0].end},b=1;bMath.abs(m.end-c.start)?m.end=c.end:c.end>m.end&&(Z.push(m),m={start:c.start,end:c.end})}return Z.push(m),Z}},{key:"_caclBaseDts",value:function(l){if(-1===this._baseDts)l&&(this._baseDts=l.dts,c.kg.log(this.TAG,"set baseDts: ",this._baseDts,"frame len:",this._currentFrameQueue.length))}},{key:"_updateDuration",value:function(l){for(var d=l.length,Z=l[d-1],m=0;m=l.start&&b<=l.end}).length&&(this._buffers.push({start:m,end:b,duartion:b-m,frames:l.slice()}),this._buffers.sort(function(l,d){return l.start>d.start?1:-1}),this._afterAppendVodBuffer())}}},{key:"_afterAppendVodBuffer",value:function(){var l;if(this._buffers.filter(function(l){var d;return!(null!==(d=l.frames[0])&&void 0!==d&&d.keyframe)}).length){for(var d=this._buffers,Z=this._buffers.length,m=[],b=this._buffers[0],c=1;cd.position?1:-1}),this.isLive&&this._keyframeQueue.length>40&&this._keyframeQueue.splice(0,20)}},{key:"toAnnexBNalu",value:function(l){l.forEach(function(l){var d=l.units;if(d){var Z=new Uint8Array(d.reduce(function(l,d){return l+4+d.byteLength},0)),m=0;d.forEach(function(l){Z.set([0,0,0,1],m),m+=4,Z.set(l,m),m+=l.byteLength}),d=null,l.units=null,l.data=Z}})}},{key:"append",value:function(l,d,Z){if(Z&&this.toAnnexBNalu(l),this._caclBaseDts(l[0]),d&&this._updateDuration(l),this._estimateBitRate(l),this._recordKeyframes(l),this.isLive){this._currentFrameQueue=this._currentFrameQueue.concat(l);return}this._beforeAppendVodBuffer(l)}},{key:"updateSegmentEnd",value:function(l){var d=this._buffers[this._buffers.length-1];if(!!d)!(.5>Math.abs(d.end-l))&&(d.end=l,d.duartion=l-d.start,c.kg.log(this.TAG,"video data lack, reset end:",l))}},{key:"getFrame",value:function(){var l,d=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(this.isLive)return this._currentFrameQueue.shift();if(!(l=this._currentFrameQueue[this._frameIndexInQueue])){if(!(l=this._currentFrameQueue[--this._frameIndexInQueue])||!this.switchBuffer((l.dts-this._baseDts)/1e3,this._frameIndexInQueue++,d))return;return this.getFrame(++d)}return this._frameIndexInQueue++,l}},{key:"getFramesForPreciseSeek",value:function(l){return this._currentFrameQueue.filter(function(d){return d.dts<=l})}},{key:"updateFrameIndexForPreciseSeek",value:function(l){this._frameIndexInQueue=l}},{key:"switchBuffer",value:function(l){var d=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,Z=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(!(Z>=20)){l=l||this.bufferStart;var m=this._buffers.filter(function(d){return d.start=l+.1})[0];if(!m){var b=this._buffers.find(function(d){return d.start>=l});return b&&b.start-l<1?(this._currentFrameQueue=b.frames.slice(0),this._frameIndexInQueue=0,b):void 0}if(m.frames[0].dts/1e3>=l)return this._currentFrameQueue=m.frames.slice(0),this._frameIndexInQueue=0,c.kg.log(this.TAG,"switch video buffer, time:".concat(l," , buffer:[").concat(m.start," , ").concat(m.end,"], index=0")),m;if(m.frames.length>d)return this._currentFrameQueue=m.frames.slice(0),c.kg.log(this.TAG,"switch video buffer, in the same gop and more frame got, time:".concat(l," , buffer:[").concat(m.start," , ").concat(m.end,"], index=").concat(d)),m;c.kg.log(this.TAG,"switch video buffer, in the same gop and no more frame got, time:".concat(l," , buffer:[").concat(m.start," , ").concat(m.end,"], index=").concat(d))}}},{key:"getSeekStartPosition",value:function(l){var d,Z=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(this._keyframeQueue.forEach(function(Z){Z.position<=l&&(d=Z)}),!!d){if(c.kg.warn(this.TAG,"getSeekStartPosition: ".concat(l,", position:").concat(d.position)),l-d.position=l)return c.kg.warn(this.TAG,"getSeekStartPositionBehind: ".concat(l,", position:").concat(b.position)),b}return this.getSeekStartPosition(l,d)}},{key:"nextFrame",value:function(){return this._currentFrameQueue[0]}},{key:"deletePassed",value:function(l){this._currentFrameQueue=this._currentFrameQueue.filter(function(d){return d.dts>=l})}},{key:"getDtsOfTime",value:function(l){var d=l-this._lastDuration;return this._baseDts+1e3*d}},{key:"clean",value:function(){this._currentFrameQueue=[]}},{key:"destroy",value:function(){this._currentFrameQueue=[],this._buffers=[]}}]),l}()}}]);